Releases: foldright/cffu
v1.0.0-Alpha25 🦝 ⚛️
Note
🦝 Cffu
has arrived at v1.0 Alpha
series~ 🎉
- Development tries to keep the compatibility for main API.
- The incompatible changes are marked with
⚠️ .
Welcome to try out cffu
. 💕
💗 Happy with cffu
! 🦝 and be a "shifu"~ 😆
☘️ Features
- [
cffu-kotlin
] add new kotlin extension methods 🍩CompletableFutureExtensions.kt
M*
extension methodsallSuccess*
extension methodsdefaultExecutor
extension methods
CffuExtensions.kt
M*
extension methodsallSuccess*
extension methods
🛠 Refactor/Improvements
⚠️ rename methods: use termfail fast
instead offast fail
⚛️ (by @linzee1)⚠️ renameTuple-Multi-Actions(tupleM*)
methods 🌟- make their naming more consistant with
all*Of
methods
- make their naming more consistant with
- fix(
CFU
): convert executor forasync
operations byscreenExecutor()
, consistent withCF
🧵 - refactor(
CFU
):allResultsFastFailOf
/allResultsOf
both call internal methodallResultsOf0
, simpler and more consistent 🌟 - refactor: update generic parameters of methods 🧬
join/resultNow
methods ofCFU
- add covariance to express the only use as input
join/resultNow/orTimeout*
methods ofCompletableFutureExtensions.kt
- make
orTimeout*
generic parameters consistent withCFU
- make
- refactor(
CFU
): extract internal array util methods into fileInternalCommonUtils
🔧 - refactor(
CFU
): use static initializer instead of one-shot internal method - refactor(
CffuExtensionsTest.kt
): extract internal helper methodsresolveFac
, and add test cases 🔧
🧪 Tests
- test(
CFU
): improve test cases for write methods ofCFU
🧪 - test(
CFU
): addCheckMinStageRuntimeTypeTests
🧪- split
MinStageTestUtils.kt
fromTestUtils.kt
- split
📚 Documentation
- add
MultiplyActionsDemo
👨🏫 - revise/improve javadoc of
peek*
methods 📚 - keep api docs of
timeout*
kotlin extension methods consistent withCFU
📚 - revise README 📚
🚜 Build/Chore
- add
update_md_toc.sh
toCI
- upgraded non-LTS JDK to 23 from 22 🤖
- upgrade dependencies/plugins 🛠️
🔌 API Doc
cffu Java API doc
: https://foldright.io/api-docs/cffu/1.0.0-Alpha25/cffu Kotlin API doc
: https://foldright.io/api-docs/cffu-kotlin/1.0.0-Alpha25/
🍪 Maven dependencies
cffu
core lib, including cffu
enhancement for Java CompletableFuture
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu</artifactId>
<version>1.0.0-Alpha25</version>
</dependency>
cffu
Kotlin
support lib:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-kotlin</artifactId>
<version>1.0.0-Alpha25</version>
</dependency>
cffu bom
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-bom</artifactId>
<version>1.0.0-Alpha25</version>
<type>pom</type>
<scope>import</scope>
</dependency>
cffu executor wrapper SPI implementation
for 📌 TransmittableThreadLocal(TTL)
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-ttl-executor-wrapper</artifactId>
<version>1.0.0-Alpha25</version>
<scope>runtime</scope>
</dependency>
v1.0.0-Alpha24 🦝 👓
Note
🦝 Cffu
has arrived at v1.0 Alpha
series~ 🎉
- Development tries to keep the compatibility for main API.
- The incompatible changes are marked with
⚠️ .
Welcome to try out cffu
. 💕
💗 Happy with cffu
! 🦝 and be a "shifu"~ 😆
🛠 Refactor/Improvements
- use
conditional expression
instead ofif statement
when more readable and concise 👓 - improve instance method
defaultExecutor
- rename argument to
cfThis
⚠️ change exception toUnsupportedOperationException
fromIllegalArgumentException
- add null check for argument
- revise its javadoc
- rename argument to
🧪 Tests
apply*
methods should useFunction
argument- simplify test codes by
kotlin delegation
📚 Documentation
- revise javadoc of
tuple*
/allSuccess*
/mostSuccess*
methods: 📚- simplify
tuple*
methods, just refer to their non-tuple methods - add "indistinguishable" note for
allSuccess*
/mostSuccess*
methods
- simplify
🔌 API Doc
cffu Java API doc
: https://foldright.io/api-docs/cffu/1.0.0-Alpha24/cffu Kotlin API doc
: https://foldright.io/api-docs/cffu-kotlin/1.0.0-Alpha24/
🍪 Maven dependencies
cffu
core lib, including cffu
enhancement for Java CompletableFuture
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu</artifactId>
<version>1.0.0-Alpha24</version>
</dependency>
cffu
Kotlin
support lib:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-kotlin</artifactId>
<version>1.0.0-Alpha24</version>
</dependency>
cffu bom
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-bom</artifactId>
<version>1.0.0-Alpha24</version>
<type>pom</type>
<scope>import</scope>
</dependency>
cffu executor wrapper SPI implementation
for 📌 TransmittableThreadLocal(TTL)
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-ttl-executor-wrapper</artifactId>
<version>1.0.0-Alpha24</version>
<scope>runtime</scope>
</dependency>
v1.0.0-Alpha23 🦝 🧵
Note
🦝 Cffu
has arrived at v1.0 Alpha
series~ 🎉
- Development will try to keep the compatibility for main API. 🐾
- The incompatible changes are marked with
⚠️ .
Welcome to try out cffu
. 💕
💗 Happy with cffu
! 🦝 and be a "shifu"~ 😆
☘️ Features
- add missing instance method
CFU#defaultExecutor
🧵 (by @linzee1)⚠️ and remove the wrong non-instance methodCFU#defaultExecutor
- improve instance method
CFU#defaultExecutor
, support runtime typeCffu
🐞 BugFix
CFU
instance methods of typeCompletableFuture
/CompletionStage
usesdefaultExecutor
instance method instead of wrong non-instance method🧵 (by @linzee1)
🛠 Refactor/Improvements
- perf: check min stage by class instead of class name, more efficient 🚀
📚 Documentation
- improve javadoc of methods
orTimeout
andcompleteOnTimeout
⏰📚 (by @linzee1) - add
IncompleteCfMemoryLeakDemo
👨🏫 - improve
CfDelayDysfunctionDemo
, warmup pools 👨🏫
🚜 Build/Chore
- upgrade dependencies/plugins 🛠️
🔌 API Doc
cffu Java API doc
: https://foldright.io/api-docs/cffu/1.0.0-Alpha23/cffu Kotlin API doc
: https://foldright.io/api-docs/cffu-kotlin/1.0.0-Alpha23/
🍪 Maven dependencies
cffu
core lib, including cffu
enhancement for Java CompletableFuture
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu</artifactId>
<version>1.0.0-Alpha23</version>
</dependency>
cffu
Kotlin
support lib:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-kotlin</artifactId>
<version>1.0.0-Alpha23</version>
</dependency>
cffu bom
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-bom</artifactId>
<version>1.0.0-Alpha23</version>
<type>pom</type>
<scope>import</scope>
</dependency>
cffu executor wrapper SPI implementation
for 📌 TransmittableThreadLocal(TTL)
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-ttl-executor-wrapper</artifactId>
<version>1.0.0-Alpha23</version>
<scope>runtime</scope>
</dependency>
v1.0.0-Alpha22 🦝 🤖
Note
🦝 Cffu
has arrived at v1.0 Alpha
series~ 🎉
- Development will try to keep the compatibility for main API. 🐾
- The incompatible changes are marked with
⚠️ .
Welcome to try out cffu
. 💕
💗 Happy with cffu
! 🦝 and be a "shifu"~ 😆
🛠 Refactor/Improvements
- perf: do NOT reuse
incomplete
CF instance in methodCompletableFutureUtils#fill0
, less instance dependencies more GC friendly 🤖 (by @linzee1) - improve QA annotations for methods
allOf
🍬 - rename internal methods to conform to conventions:
allSuccessTupleOf0
->f_allSuccessTupleOf0
mostSuccessTupleOf0
->f_mostSuccessTupleOf0
f_toNonMinCf0
->toNonMinCf0
f_toNonMinCfArray0
->toNonMinCfArray0
- add poison object of type
CffuFactory
, and use it inCffuExtensions.kt
☠️
📚 Documentation
- add
CfDelayDysfunctionDemo.java
👨🏫
🧪 Tests
- adjust wait time for more stable testing 🐘
- update thread count/pool size, more stable
🚜 Build/Chore
- upgrade dependencies/plugins 🛠️
- use
overview
property ofmaven javadoc plugin
instead of configuration
🔌 API Doc
cffu Java API doc
: https://foldright.io/api-docs/cffu/1.0.0-Alpha22/cffu Kotlin API doc
: https://foldright.io/api-docs/cffu-kotlin/1.0.0-Alpha22/
🍪 Maven dependencies
cffu
core lib, including cffu
enhancement for Java CompletableFuture
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu</artifactId>
<version>1.0.0-Alpha22</version>
</dependency>
cffu
Kotlin
support lib:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-kotlin</artifactId>
<version>1.0.0-Alpha22</version>
</dependency>
cffu bom
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-bom</artifactId>
<version>1.0.0-Alpha22</version>
<type>pom</type>
<scope>import</scope>
</dependency>
cffu executor wrapper SPI implementation
for 📌 TransmittableThreadLocal(TTL)
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-ttl-executor-wrapper</artifactId>
<version>1.0.0-Alpha22</version>
<scope>runtime</scope>
</dependency>
v1.0.0-Alpha21 🦝 ⛄️
Note
🦝 Cffu
has arrived at v1.0 Alpha
series~ 🎉
- Development will try to keep the compatibility for main API. 🐾
- The incompatible changes are marked with
⚠️ .
Welcome to try out cffu
. 💕
💗 Happy with cffu
! 🦝 and be a "shifu"~ 😆
🛠 Refactor/Improvements
- add
final
modifier for classes ⛄️ - rename internal methods 🔠
Cffu.reset0
->resetCf
CFU.wrap*
->wrap*0
CFU.fill
->fill0
CFU.toNonMinCf
->f_toNonMinCfArray
CFU.allTupleOf0
->f_allTupleOf0
CFU.tupleOf0
->f_tupleOf0
CFU.toCfArray
->_toCfArray
CFU._asyncPool0
->_asyncPool
📚 Documentation
- add Implementation Note about the name conventions of
CFU
internal methods- methods with
f_
prefix means not type-safe, e.g.- return type
CompletableFuture
that may be a minimal-stage - force cast to
CompletableFuture<T>
from anyCompletableFuture<?>
- return generic type T but constrained type TupleX
- return type
- methods with
0
suffix means no parameter validation, e.g.- no null check
- methods with
🚜 Build/Chore
- add CI job on
macOS
💻 - upgrade dependencies/plugins 🛠️
🔌 API Doc
cffu Java API doc
: https://foldright.io/api-docs/cffu/1.0.0-Alpha21/cffu Kotlin API doc
: https://foldright.io/api-docs/cffu-kotlin/1.0.0-Alpha21/
🍪 Maven dependencies
cffu
core lib, including cffu
enhancement for Java CompletableFuture
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu</artifactId>
<version>1.0.0-Alpha21</version>
</dependency>
cffu
Kotlin
support lib:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-kotlin</artifactId>
<version>1.0.0-Alpha21</version>
</dependency>
cffu bom
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-bom</artifactId>
<version>1.0.0-Alpha21</version>
<type>pom</type>
<scope>import</scope>
</dependency>
cffu executor wrapper SPI implementation
for 📌 TransmittableThreadLocal(TTL)
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-ttl-executor-wrapper</artifactId>
<version>1.0.0-Alpha21</version>
<scope>runtime</scope>
</dependency>
v1.0.0-Alpha20 🦝 💣
Note
🦝 Cffu
has arrived at v1.0 Alpha
series~ 🎉
- Development will try to keep the compatibility for main API. 🐾
- The incompatible changes are marked with
⚠️ .
Welcome to try out cffu
. 💕
💗 Happy with cffu
! 🦝 and be a "shifu"~ 😆
🛠 Refactor/Improvements
- backport the JDK bugfix
JDK-8303742
forJava 9~20
⏰🐞- more info about the JDK bug "
CompletableFuture.orTimeout
leaks if the future completes exceptionally": - the JDK bug issue: https://bugs.openjdk.org/browse/JDK-8303742
- PR review: openjdk/jdk#13059
- JDK bugfix commit: openjdk/jdk@ded6a81
- more info about the JDK bug "
- perf: simplify
hopExecutorIfAtCfDelayerThread
, submit completion action to executor directly 🧵 - refactor(
CompletableFutureUtils
): simplify java version check logic by extracting internal methodmethodExists
- add naive black hole to prevent code elimination of Java version check logic
- refactor(
ExceptionReporter
): rename method toreportUncaughtException
and adjust argument meaning 💣
📚 Documentation
- docs: improve javadoc of
exceptionally*
methods, recommendcatching*
methods for best practice 💣📚
🚜 Build/Chore
- CI tests the compatibility with the low version dependencies
Guava(29)
/slf4j(1.7)
🤖📦 - upgrade dependencies/plugins 🛠️
- upgrade maven wrapper to
3.9.9
🪶
🔌 API Doc
cffu Java API doc
: https://foldright.io/api-docs/cffu/1.0.0-Alpha20/cffu Kotlin API doc
: https://foldright.io/api-docs/cffu-kotlin/1.0.0-Alpha20/
🍪 Maven dependencies
cffu
core lib, including cffu
enhancement for Java CompletableFuture
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu</artifactId>
<version>1.0.0-Alpha20</version>
</dependency>
cffu
Kotlin
support lib:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-kotlin</artifactId>
<version>1.0.0-Alpha20</version>
</dependency>
cffu bom
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-bom</artifactId>
<version>1.0.0-Alpha20</version>
<type>pom</type>
<scope>import</scope>
</dependency>
cffu executor wrapper SPI implementation
for 📌 TransmittableThreadLocal(TTL)
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-ttl-executor-wrapper</artifactId>
<version>1.0.0-Alpha20</version>
<scope>runtime</scope>
</dependency>
v1.0.0-Alpha19 🦝 ⏰
Note
🦝 Cffu
has arrived at v1.0 Alpha
series~ 🎉
- Development will try to keep the compatibility for main API. 🐾
- The incompatible changes are marked with
⚠️ .
Welcome to try out cffu
. 💕
💗 Happy with cffu
! 🦝 and be a "shifu"~ 😆
🛠 Refactor/Improvements
CompletableFutureUtils
merges the JDK bugfix "CompletableFuture.orTimeout
leaks if the future completes exceptionally" forJava 8
⏰🐞 (by @linzee1)- more info about the JDK bug:
- the JDK bug issue: https://bugs.openjdk.org/browse/JDK-8303742
- PR review: openjdk/jdk#13059
- JDK bugfix commit: openjdk/jdk@ded6a81
- perf(
CompletableFutureUtils
): remove unnecessary copy for SINGLE cf input, because there is a subsequentthenApply
operation which returns a new cf - refactor(
ListenableFutureUtils
): simplifycancel
ofCompletableFutureAdapter
, just return cancel result ofCompletableFutureAdapter
🧪 Tests
- add test case of thread interruption check to
ListenableFutureUtils#toCompletableFuture
🧵 (by @linzee1) - rename var with short name in test codes, short code line is more readable in tedious test codes
🚜 Build/Chore
- upgrade dependencies/plugins 🛠️
- upgrade
Kotlin
toK2
🍩 💕
- upgrade
🔌 API Doc
cffu Java API doc
: https://foldright.io/api-docs/cffu/1.0.0-Alpha19/cffu Kotlin API doc
: https://foldright.io/api-docs/cffu-kotlin/1.0.0-Alpha19/
🍪 Maven dependencies
cffu
core lib, including cffu
enhancement for Java CompletableFuture
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu</artifactId>
<version>1.0.0-Alpha19</version>
</dependency>
cffu
Kotlin
support lib:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-kotlin</artifactId>
<version>1.0.0-Alpha19</version>
</dependency>
cffu bom
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-bom</artifactId>
<version>1.0.0-Alpha19</version>
<type>pom</type>
<scope>import</scope>
</dependency>
cffu executor wrapper SPI implementation
for 📌 TransmittableThreadLocal(TTL)
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-ttl-executor-wrapper</artifactId>
<version>1.0.0-Alpha19</version>
<scope>runtime</scope>
</dependency>
v1.0.0-Alpha18 🦝 📚
Note
🦝 Cffu
has arrived at v1.0 Alpha
series~ 🎉
- Development will try to keep the compatibility for main API. 🐾
- The incompatible changes are marked with
⚠️ .
Welcome to try out cffu
. 💕
💗 Happy with cffu
! 🦝 and be a "shifu"~ 😆
🛠 Refactor/Improvements
- reorder methods of
CffuFactoryBuilder
- revise README and javadoc
🧪 Tests
- test: rewrite
TupleTest
toJava
, increase test coverage - clean test codes 🧹💕
📚 Documentation
- add
README_EN.md
(WIP) 📚 🌟 (by @linzee1) - revise README
🚜 Build/Chore
- update
extra-enforcer-rules
maven plugin config, and improve profile config - upgrade dependencies/plugins 🛠️
🔌 API Doc
cffu Java API doc
: https://foldright.io/api-docs/cffu/1.0.0-Alpha18/cffu Kotlin API doc
: https://foldright.io/api-docs/cffu-kotlin/1.0.0-Alpha18/
🍪 Maven dependencies
cffu
core lib, including cffu
enhancement for Java CompletableFuture
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu</artifactId>
<version>1.0.0-Alpha18</version>
</dependency>
cffu
Kotlin
support lib:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-kotlin</artifactId>
<version>1.0.0-Alpha18</version>
</dependency>
cffu bom
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-bom</artifactId>
<version>1.0.0-Alpha18</version>
<type>pom</type>
<scope>import</scope>
</dependency>
cffu executor wrapper SPI implementation
for 📌 TransmittableThreadLocal(TTL)
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-ttl-executor-wrapper</artifactId>
<version>1.0.0-Alpha18</version>
<scope>runtime</scope>
</dependency>
v1.0.0-Alpha17 🦝 🏛️
Note
🦝 Cffu
has arrived at v1.0 Alpha
series~ 🎉
- Development will try to keep the compatibility for main API. 🐾
- The incompatible changes are marked with
⚠️ .
Welcome to try out cffu
. 💕
💗 Happy with cffu
! 🦝 and be a "shifu"~ 😆
🛠 Refactor/Improvements
- delegate
resetDefaultExecutor()
toCffuFactoryBuilder
, and avoid re-wrapping 👷 - add missing
requireNonNull(exceptionType)
ofcatching*
methods 🫴
🧪 Tests
- add
ArchUnit
to enforce "Accessing CffuFactory constructor is only allowed by class CffuFactoryBuilder" 🏛️
📚 Documentation
- revise README
🔌 API Doc
cffu Java API doc
: https://foldright.io/api-docs/cffu/1.0.0-Alpha17/cffu Kotlin API doc
: https://foldright.io/api-docs/cffu-kotlin/1.0.0-Alpha17/
🍪 Maven dependencies
cffu
core lib, including cffu
enhancement for Java CompletableFuture
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu</artifactId>
<version>1.0.0-Alpha17</version>
</dependency>
cffu
Kotlin
support lib:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-kotlin</artifactId>
<version>1.0.0-Alpha17</version>
</dependency>
cffu bom
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-bom</artifactId>
<version>1.0.0-Alpha17</version>
<type>pom</type>
<scope>import</scope>
</dependency>
cffu executor wrapper SPI implementation
for 📌 TransmittableThreadLocal(TTL)
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-ttl-executor-wrapper</artifactId>
<version>1.0.0-Alpha17</version>
<scope>runtime</scope>
</dependency>
v1.0.0-Alpha16 🦝 🚦
Note
🦝 Cffu
has arrived at v1.0 Alpha
series~ 🎉
- Development will try to keep the compatibility for main API. 🐾
- The incompatible changes are marked with
⚠️ .
Welcome to try out cffu
. 💕
💗 Happy with cffu
! 🦝 and be a "shifu"~ 😆
Welcome new cffu
team member @linzee1 👏 💕
☘️ Features
⚠️ add interruption parameter and revise javadoc to methodListenableFutureUtils#toCompletableFuture
🚦(by @linzee1)- and fix
ListenableFutureUtils#toCompletableFuture
cancellation propagation
- and fix
- add
resetDefaultExecutor
method toCffuFactory
/Cffu
🏭
🛠 Refactor/Improvements
⚠️ remove convenient util methodscffuArrayUnwrap
for uncommon/dangerousCffu#cffuUnwrap
method 🧹- reorder
Cffu.cffuUnwrap
and revise its javadoc - add QA annotations(
@Contract/@Nuallable
) to methodCompletableFutureUtils.unwrapCfException
- uniform local var name
🚜 Build/Chore
- upgrade dependencies/plugins 🛠️
🔌 API Doc
cffu Java API doc
: https://foldright.io/api-docs/cffu/1.0.0-Alpha16/cffu Kotlin API doc
: https://foldright.io/api-docs/cffu-kotlin/1.0.0-Alpha16/
🍪 Maven dependencies
cffu
core lib, including cffu
enhancement for Java CompletableFuture
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu</artifactId>
<version>1.0.0-Alpha16</version>
</dependency>
cffu
Kotlin
support lib:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-kotlin</artifactId>
<version>1.0.0-Alpha16</version>
</dependency>
cffu bom
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-bom</artifactId>
<version>1.0.0-Alpha16</version>
<type>pom</type>
<scope>import</scope>
</dependency>
cffu executor wrapper SPI implementation
for 📌 TransmittableThreadLocal(TTL)
:
<dependency>
<groupId>io.foldright</groupId>
<artifactId>cffu-ttl-executor-wrapper</artifactId>
<version>1.0.0-Alpha16</version>
<scope>runtime</scope>
</dependency>