- Generics on
MultiSelectModel
have changed fromT
toT : Any
to play nicely with Kotlin's new stricter generic nullability bounds. (#8)
- Add
merge
function toMultiSelectModel.Trumped
RxExecutor
now includes adispatcher: CoroutineDispatcher
field
- BREAKING
RxBox
,RxGetter
, andIObservable
are now based on kotlinFlow
rather thanRxJava
.
- BREAKING
Chit.Settable
no longer implementsio.reactivex.disposables.Disposable
. - BREAKING Removed
RxGetter.fromVolatile
,Breaker
, andRateProbe
. - BREAKING Removed
RxavaCompat
.
- BREAKING Removed OSGi metadata.
- Added some missing default methods in
Rx
- Added some missing default methods in
RxSubscriber
- Added support for kotlinx
Flow
andDeferred
. (#6)
Chit.isDisposed()
now returns true before calling therunWhenDisposed
callbacks.
- RxExecutor is now more consistent about failure - if the
onSuccess
throws an exception, it will always be passed to theonFailure
handler as aCompletionException
.
DisposableEar
's final name isChit
.- Added
Rx.sync(RxBox<T> a, RxBox<T> b)
. - Added
MultiSelectModel
for a UI-independent multi-selection model.
- Got rid of the
RxListener.IsLogging
marker interface. - Made
RxListener.isLogging()
public, and addedRxListener.onErrorDontLog(Throwable)
.- Combined, these methods make it possible for an external framework to detect and hijack logging for a specific listener.
- Used by the Agent framework in DiffPlug 2+
- Added
CasBox.getAndSet()
. DispoableEar.Settable
now allowsdispose()
to be called multiple times, to comply with theDisposable
contract.- An
RxJavaCompat
layer for turningSingle
andMaybe
intoCompletionStage
.
- Added
DisposableEar
andGuardedExecutor
. - Fixed a bug in
ForwardingBox.modify()
. RxExecutor
now exposes the underlyingExecutor
,Scheduler
, andRxTracingPolicy
.
- Bumped RxJava to 2.0, and incorporated
RxTracingPolicy
intoRxJavaPlugins
. - Fixed a bug in
ForwardingBox.modify()
. RxExecutor
now exposes the underlyingExecutor
,Scheduler
, andRxTracingPolicy
.
Immutables
has moved tocom.diffplug.durian:durian-collect
.- Removed collections-specific classes.
RxOptional
->RxBox<Optional>
RxSet
->RxBox<ImmutableSet>
- This makes it possible to mix-and-match RxBox implementations and collection implementations.
Box
andRxBox
had poorly defined behavior around race conditions. It is now implemented by the following well-defined classes:RxBox.of(initialValue)
makes no atomicity guarantees.CasBox
supports compare-and-swap atomic modifications.LockBox
supports mutex-based atomic modifications.RxLockBox
supports mutex-based atomic modification with RxJava-based notifications.
- Broke the overly crowded
Rx
class into serveral pieces:Rx
is now only a collection of utility methods.RxListener
is now the listener interface forObserver<T> & FutureCallback<T>
.Rx.RxExecutor
is nowRxExecutor
, andRx.HasRxExecutor
isRxExecutor.Has
.RxGetter
no longer enforcesdistinctUntilChanged
.
- Adopted Durian and its new
ConverterNonNull
. - Added
OrderedLock
, which takes multiple locks in a guaranteed lock-free way. - Added
Breaker
, for temporarily breaking a connection between observable values.
- Ditched Guava for DurianGuava.
- Added support for
CompletionStage
(and thereforeCompletableFuture
), with the same behavior asListenableFuture
.
- Changed OSGi metadata Bundle-SymbolicName to
com.diffplug.durian.rx
. - OSGi metadata is now auto-generated using bnd.
- Gah! MANIFEST.MF still had -SNAPSHOT version. Fixed now. Would be really nice if we could get MANIFEST.MF generation working.
- First stable release.