diff options
author | Vsevolod Tolstopyatov <qwwdfsad@gmail.com> | 2018-05-03 20:07:54 +0300 |
---|---|---|
committer | Roman Elizarov <elizarov@gmail.com> | 2018-05-14 01:53:02 -0700 |
commit | 74bcc923bbd748a0b3b582d3c7b7c64780ba22d1 (patch) | |
tree | b9917083628c3aa91b7eb3419d62dffd48478b8c | |
parent | a518edc42fe2f8125305a2806ecb3ed43df35d01 (diff) | |
download | kotlinx.coroutines-74bcc923bbd748a0b3b582d3c7b7c64780ba22d1.tar.gz |
Introduce binary-compatibility-validator module
Update Kotlin to 1.2.41 (KT-23809)
Copy and slightly change binary-compatibility validator from Kotlin repository
78 files changed, 3282 insertions, 2 deletions
diff --git a/binary-compatibility-validator/README.md b/binary-compatibility-validator/README.md new file mode 100644 index 00000000..d644b11a --- /dev/null +++ b/binary-compatibility-validator/README.md @@ -0,0 +1,6 @@ +# Public API binary compatibility validator + +This module allows to dump and compare public binary API to ensure binary compatibility with a previous version. +This tool is slightly adapted copy of [original Kotlin compatibility validator](https://github.com/JetBrains/kotlin/tree/master/libraries/tools/binary-compatibility-validator) by @ilya-g. + +Refer to the original readme for additional documentation.
\ No newline at end of file diff --git a/binary-compatibility-validator/build.gradle b/binary-compatibility-validator/build.gradle new file mode 100644 index 00000000..b8306c6a --- /dev/null +++ b/binary-compatibility-validator/build.gradle @@ -0,0 +1,52 @@ +configurations { + testArtifacts +} + +dependencies { + compile 'org.ow2.asm:asm-debug-all:5.0.4' + compile 'com.google.code.gson:gson:2.6.2' + + testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" + testArtifacts project(':kotlinx-coroutines-core') + testArtifacts project(':kotlinx-coroutines-io') + + + testArtifacts project(':kotlinx-coroutines-reactive') + testArtifacts project(':kotlinx-coroutines-reactor') + testArtifacts project(':kotlinx-coroutines-rx1') + testArtifacts project(':kotlinx-coroutines-rx2') + + testArtifacts project(':kotlinx-coroutines-guava') + testArtifacts project(':kotlinx-coroutines-jdk8') + testArtifacts project(':kotlinx-coroutines-nio') + testArtifacts project(':kotlinx-coroutines-quasar') + + testArtifacts project(':kotlinx-coroutines-android') + testArtifacts project(':kotlinx-coroutines-javafx') + testArtifacts project(':kotlinx-coroutines-swing') +} + +def testCasesDeclarationsDump = "${buildDir}/visibilities.json".toString() + +compileTestKotlin { + kotlinOptions { + freeCompilerArgs = ["-Xdump-declarations-to=$testCasesDeclarationsDump"] + } +} + +sourceSets { + test { + java { + srcDir "src/test/kotlin" + } + } +} + +test { + dependsOn cleanCompileTestKotlin + dependsOn configurations.testArtifacts + + systemProperty 'testCasesClassesDirs', sourceSets.test.output.classesDirs.asPath + systemProperty 'testCasesDeclarations', testCasesDeclarationsDump + jvmArgs '-ea' +} diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-android.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-android.txt new file mode 100644 index 00000000..0cf89671 --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-android.txt @@ -0,0 +1,23 @@ +public final class kotlinx/coroutines/experimental/android/AndroidExceptionPreHandler : kotlin/coroutines/experimental/AbstractCoroutineContextElement, kotlinx/coroutines/experimental/CoroutineExceptionHandler { + public fun <init> ()V + public fun handleException (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Throwable;)V +} + +public final class kotlinx/coroutines/experimental/android/HandlerContext : kotlinx/coroutines/experimental/CoroutineDispatcher, kotlinx/coroutines/experimental/Delay { + public fun <init> (Landroid/os/Handler;Ljava/lang/String;)V + public synthetic fun <init> (Landroid/os/Handler;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun awaitFrame (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public fun delay (JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public fun dispatch (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Runnable;)V + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public fun invokeOnTimeout (JLjava/util/concurrent/TimeUnit;Ljava/lang/Runnable;)Lkotlinx/coroutines/experimental/DisposableHandle; + public fun scheduleResumeAfterDelay (JLjava/util/concurrent/TimeUnit;Lkotlinx/coroutines/experimental/CancellableContinuation;)V + public fun toString ()Ljava/lang/String; +} + +public final class kotlinx/coroutines/experimental/android/HandlerContextKt { + public static final fun asCoroutineDispatcher (Landroid/os/Handler;)Lkotlinx/coroutines/experimental/android/HandlerContext; + public static final fun getUI ()Lkotlinx/coroutines/experimental/android/HandlerContext; +} + diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-core.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-core.txt new file mode 100644 index 00000000..24bf8084 --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-core.txt @@ -0,0 +1,952 @@ +public abstract class kotlinx/coroutines/experimental/AbstractCoroutine : kotlin/coroutines/experimental/Continuation, kotlinx/coroutines/experimental/CoroutineScope, kotlinx/coroutines/experimental/Job { + public fun <init> (Lkotlin/coroutines/experimental/CoroutineContext;Z)V + public synthetic fun <init> (Lkotlin/coroutines/experimental/CoroutineContext;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun cancel (Ljava/lang/Throwable;)Z + public final fun getContext ()Lkotlin/coroutines/experimental/CoroutineContext; + public final fun getCoroutineContext ()Lkotlin/coroutines/experimental/CoroutineContext; + public fun invokeOnCompletion (ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/experimental/DisposableHandle; + protected fun onCancellation (Ljava/lang/Throwable;)V + protected fun onCompleted (Ljava/lang/Object;)V + protected fun onCompletedExceptionally (Ljava/lang/Throwable;)V + protected fun onStart ()V + public final fun resume (Ljava/lang/Object;)V + public final fun resumeWithException (Ljava/lang/Throwable;)V + public final fun start (Lkotlinx/coroutines/experimental/CoroutineStart;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V + public final fun start (Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function1;)V +} + +public final class kotlinx/coroutines/experimental/AwaitKt { + public static final fun awaitAll (Ljava/util/Collection;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitAll ([Lkotlinx/coroutines/experimental/Deferred;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun joinAll (Ljava/util/Collection;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun joinAll ([Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/BuildersKt { + public static final synthetic fun launch (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/Job; + public static final fun launch (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/Job; + public static final synthetic fun launch (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/Job; + public static final fun launch (Lkotlin/coroutines/experimental/CoroutineContext;ZLkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/Job; + public static synthetic fun launch$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/Job; + public static synthetic fun launch$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/Job; + public static synthetic fun launch$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/Job; + public static final synthetic fun run (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun run (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun run$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun runBlocking (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; + public static synthetic fun runBlocking$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun withContext (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun withContext$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + +public abstract interface class kotlinx/coroutines/experimental/CancellableContinuation : kotlin/coroutines/experimental/Continuation { + public abstract fun cancel (Ljava/lang/Throwable;)Z + public abstract fun completeResume (Ljava/lang/Object;)V + public abstract fun initCancellability ()V + public abstract fun invokeOnCancellation (Lkotlin/jvm/functions/Function1;)V + public abstract synthetic fun invokeOnCompletion (Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/experimental/DisposableHandle; + public abstract fun isActive ()Z + public abstract fun isCancelled ()Z + public abstract fun isCompleted ()Z + public abstract fun resumeUndispatched (Lkotlinx/coroutines/experimental/CoroutineDispatcher;Ljava/lang/Object;)V + public abstract fun resumeUndispatchedWithException (Lkotlinx/coroutines/experimental/CoroutineDispatcher;Ljava/lang/Throwable;)V + public abstract fun tryResume (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + public abstract fun tryResumeWithException (Ljava/lang/Throwable;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/CancellableContinuation$DefaultImpls { + public static synthetic fun cancel$default (Lkotlinx/coroutines/experimental/CancellableContinuation;Ljava/lang/Throwable;ILjava/lang/Object;)Z + public static synthetic fun tryResume$default (Lkotlinx/coroutines/experimental/CancellableContinuation;Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/CancellableContinuationImpl : java/lang/Runnable, kotlinx/coroutines/experimental/CancellableContinuation { + public fun <init> (Lkotlin/coroutines/experimental/Continuation;I)V + public fun completeResume (Ljava/lang/Object;)V + public fun getContext ()Lkotlin/coroutines/experimental/CoroutineContext; + public fun getSuccessfulResult (Ljava/lang/Object;)Ljava/lang/Object; + public fun initCancellability ()V + public synthetic fun invokeOnCompletion (Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/experimental/DisposableHandle; + public fun resumeUndispatched (Lkotlinx/coroutines/experimental/CoroutineDispatcher;Ljava/lang/Object;)V + public fun resumeUndispatchedWithException (Lkotlinx/coroutines/experimental/CoroutineDispatcher;Ljava/lang/Throwable;)V + public fun tryResume (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + public fun tryResumeWithException (Ljava/lang/Throwable;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/CancellableContinuationKt { + public static final fun disposeOnCancellation (Lkotlinx/coroutines/experimental/CancellableContinuation;Lkotlinx/coroutines/experimental/DisposableHandle;)V + public static final synthetic fun disposeOnCompletion (Lkotlinx/coroutines/experimental/CancellableContinuation;Lkotlinx/coroutines/experimental/DisposableHandle;)Lkotlinx/coroutines/experimental/DisposableHandle; + public static final synthetic fun removeOnCancel (Lkotlinx/coroutines/experimental/CancellableContinuation;Lkotlinx/coroutines/experimental/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/experimental/DisposableHandle; + public static final fun removeOnCancellation (Lkotlinx/coroutines/experimental/CancellableContinuation;Lkotlinx/coroutines/experimental/internal/LockFreeLinkedListNode;)V +} + +public final class kotlinx/coroutines/experimental/CancelledContinuation : kotlinx/coroutines/experimental/CompletedExceptionally { + public fun <init> (Lkotlin/coroutines/experimental/Continuation;Ljava/lang/Throwable;)V +} + +public abstract class kotlinx/coroutines/experimental/CloseableCoroutineDispatcher : kotlinx/coroutines/experimental/CoroutineDispatcher, java/io/Closeable { + public fun <init> ()V +} + +public final class kotlinx/coroutines/experimental/CommonPool : kotlinx/coroutines/experimental/CoroutineDispatcher { + public static final field INSTANCE Lkotlinx/coroutines/experimental/CommonPool; + public fun dispatch (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Runnable;)V + public fun toString ()Ljava/lang/String; +} + +public abstract interface class kotlinx/coroutines/experimental/CompletableDeferred : kotlinx/coroutines/experimental/Deferred { + public abstract fun complete (Ljava/lang/Object;)Z + public abstract fun completeExceptionally (Ljava/lang/Throwable;)Z +} + +public final class kotlinx/coroutines/experimental/CompletableDeferred$DefaultImpls { + public static fun fold (Lkotlinx/coroutines/experimental/CompletableDeferred;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; + public static fun get (Lkotlinx/coroutines/experimental/CompletableDeferred;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext$Element; + public static fun getCompletionException (Lkotlinx/coroutines/experimental/CompletableDeferred;)Ljava/lang/Throwable; + public static fun isComputing (Lkotlinx/coroutines/experimental/CompletableDeferred;)Z + public static fun minusKey (Lkotlinx/coroutines/experimental/CompletableDeferred;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/CompletableDeferred;Lkotlin/coroutines/experimental/CoroutineContext;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/CompletableDeferred;Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/Job; +} + +public final class kotlinx/coroutines/experimental/CompletableDeferredKt { + public static final synthetic fun CompletableDeferred ()Lkotlinx/coroutines/experimental/CompletableDeferred; + public static final fun CompletableDeferred (Ljava/lang/Object;)Lkotlinx/coroutines/experimental/CompletableDeferred; + public static final fun CompletableDeferred (Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/CompletableDeferred; + public static synthetic fun CompletableDeferred$default (Lkotlinx/coroutines/experimental/Job;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/CompletableDeferred; +} + +public class kotlinx/coroutines/experimental/CompletedExceptionally { + public final field cause Ljava/lang/Throwable; + public fun <init> (Ljava/lang/Throwable;)V + public fun toString ()Ljava/lang/String; +} + +public final class kotlinx/coroutines/experimental/CompletionHandlerException : java/lang/RuntimeException { + public fun <init> (Ljava/lang/String;Ljava/lang/Throwable;)V +} + +public final class kotlinx/coroutines/experimental/CoroutineContextKt { + public static final field DEBUG_PROPERTY_NAME Ljava/lang/String; + public static final field DEBUG_PROPERTY_VALUE_AUTO Ljava/lang/String; + public static final field DEBUG_PROPERTY_VALUE_OFF Ljava/lang/String; + public static final field DEBUG_PROPERTY_VALUE_ON Ljava/lang/String; + public static final fun getDefaultDispatcher ()Lkotlinx/coroutines/experimental/CoroutineDispatcher; + public static final fun newCoroutineContext (Lkotlin/coroutines/experimental/CoroutineContext;)Lkotlin/coroutines/experimental/CoroutineContext; + public static final fun newCoroutineContext (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;)Lkotlin/coroutines/experimental/CoroutineContext; + public static synthetic fun newCoroutineContext$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;ILjava/lang/Object;)Lkotlin/coroutines/experimental/CoroutineContext; + public static final fun restoreThreadContext (Ljava/lang/String;)V + public static final fun updateThreadContext (Lkotlin/coroutines/experimental/CoroutineContext;)Ljava/lang/String; +} + +public abstract class kotlinx/coroutines/experimental/CoroutineDispatcher : kotlin/coroutines/experimental/AbstractCoroutineContextElement, kotlin/coroutines/experimental/ContinuationInterceptor { + public fun <init> ()V + public abstract fun dispatch (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Runnable;)V + public fun interceptContinuation (Lkotlin/coroutines/experimental/Continuation;)Lkotlin/coroutines/experimental/Continuation; + public fun isDispatchNeeded (Lkotlin/coroutines/experimental/CoroutineContext;)Z + public final fun plus (Lkotlinx/coroutines/experimental/CoroutineDispatcher;)Lkotlinx/coroutines/experimental/CoroutineDispatcher; + public fun toString ()Ljava/lang/String; +} + +public abstract interface class kotlinx/coroutines/experimental/CoroutineExceptionHandler : kotlin/coroutines/experimental/CoroutineContext$Element { + public static final field Key Lkotlinx/coroutines/experimental/CoroutineExceptionHandler$Key; + public abstract fun handleException (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Throwable;)V +} + +public final class kotlinx/coroutines/experimental/CoroutineExceptionHandler$DefaultImpls { + public static fun fold (Lkotlinx/coroutines/experimental/CoroutineExceptionHandler;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; + public static fun get (Lkotlinx/coroutines/experimental/CoroutineExceptionHandler;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext$Element; + public static fun minusKey (Lkotlinx/coroutines/experimental/CoroutineExceptionHandler;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/CoroutineExceptionHandler;Lkotlin/coroutines/experimental/CoroutineContext;)Lkotlin/coroutines/experimental/CoroutineContext; +} + +public final class kotlinx/coroutines/experimental/CoroutineExceptionHandler$Key : kotlin/coroutines/experimental/CoroutineContext$Key { +} + +public final class kotlinx/coroutines/experimental/CoroutineExceptionHandlerKt { + public static final fun CoroutineExceptionHandler (Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/CoroutineExceptionHandler; + public static final fun handleCoroutineException (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Throwable;)V +} + +public final class kotlinx/coroutines/experimental/CoroutineName : kotlin/coroutines/experimental/AbstractCoroutineContextElement { + public static final field Key Lkotlinx/coroutines/experimental/CoroutineName$Key; + public fun <init> (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Lkotlinx/coroutines/experimental/CoroutineName; + public static synthetic fun copy$default (Lkotlinx/coroutines/experimental/CoroutineName;Ljava/lang/String;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/CoroutineName; + public fun equals (Ljava/lang/Object;)Z + public final fun getName ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class kotlinx/coroutines/experimental/CoroutineName$Key : kotlin/coroutines/experimental/CoroutineContext$Key { +} + +public abstract interface class kotlinx/coroutines/experimental/CoroutineScope { + public abstract fun getCoroutineContext ()Lkotlin/coroutines/experimental/CoroutineContext; + public abstract fun isActive ()Z +} + +public final class kotlinx/coroutines/experimental/CoroutineStart : java/lang/Enum { + public static final field ATOMIC Lkotlinx/coroutines/experimental/CoroutineStart; + public static final field DEFAULT Lkotlinx/coroutines/experimental/CoroutineStart; + public static final field LAZY Lkotlinx/coroutines/experimental/CoroutineStart; + public static final field UNDISPATCHED Lkotlinx/coroutines/experimental/CoroutineStart; + public final fun invoke (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)V + public final fun invoke (Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)V + public final fun isLazy ()Z + public static fun valueOf (Ljava/lang/String;)Lkotlinx/coroutines/experimental/CoroutineStart; + public static fun values ()[Lkotlinx/coroutines/experimental/CoroutineStart; +} + +public abstract interface class kotlinx/coroutines/experimental/Deferred : kotlinx/coroutines/experimental/Job { + public abstract fun await (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun getCompleted ()Ljava/lang/Object; + public abstract fun getCompletionExceptionOrNull ()Ljava/lang/Throwable; + public abstract fun getOnAwait ()Lkotlinx/coroutines/experimental/selects/SelectClause1; + public abstract fun isCompletedExceptionally ()Z + public abstract fun isComputing ()Z +} + +public final class kotlinx/coroutines/experimental/Deferred$DefaultImpls { + public static fun fold (Lkotlinx/coroutines/experimental/Deferred;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; + public static fun get (Lkotlinx/coroutines/experimental/Deferred;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext$Element; + public static fun getCompletionException (Lkotlinx/coroutines/experimental/Deferred;)Ljava/lang/Throwable; + public static fun isComputing (Lkotlinx/coroutines/experimental/Deferred;)Z + public static fun minusKey (Lkotlinx/coroutines/experimental/Deferred;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/Deferred;Lkotlin/coroutines/experimental/CoroutineContext;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/Deferred;Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/Job; +} + +public final class kotlinx/coroutines/experimental/DeferredKt { + public static final synthetic fun async (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/Deferred; + public static final fun async (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/Deferred; + public static final synthetic fun async (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/Deferred; + public static final fun async (Lkotlin/coroutines/experimental/CoroutineContext;ZLkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/Deferred; + public static synthetic fun async$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/Deferred; + public static synthetic fun async$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/Deferred; + public static synthetic fun async$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/Deferred; + public static final fun defer (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/Deferred; +} + +public abstract interface class kotlinx/coroutines/experimental/Delay { + public abstract fun delay (JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun invokeOnTimeout (JLjava/util/concurrent/TimeUnit;Ljava/lang/Runnable;)Lkotlinx/coroutines/experimental/DisposableHandle; + public abstract fun scheduleResumeAfterDelay (JLjava/util/concurrent/TimeUnit;Lkotlinx/coroutines/experimental/CancellableContinuation;)V +} + +public final class kotlinx/coroutines/experimental/Delay$DefaultImpls { + public static fun delay (Lkotlinx/coroutines/experimental/Delay;JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun delay$default (Lkotlinx/coroutines/experimental/Delay;JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static fun invokeOnTimeout (Lkotlinx/coroutines/experimental/Delay;JLjava/util/concurrent/TimeUnit;Ljava/lang/Runnable;)Lkotlinx/coroutines/experimental/DisposableHandle; +} + +public final class kotlinx/coroutines/experimental/DelayKt { + public static final fun delay (ILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun delay (JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun delay$default (JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/DispatchedKt { + public static final fun dispatch (Lkotlinx/coroutines/experimental/DispatchedTask;I)V + public static synthetic fun dispatch$default (Lkotlinx/coroutines/experimental/DispatchedTask;IILjava/lang/Object;)V +} + +public abstract interface class kotlinx/coroutines/experimental/DispatchedTask : java/lang/Runnable { + public abstract fun getDelegate ()Lkotlin/coroutines/experimental/Continuation; + public abstract fun getExceptionalResult (Ljava/lang/Object;)Ljava/lang/Throwable; + public abstract fun getResumeMode ()I + public abstract fun getSuccessfulResult (Ljava/lang/Object;)Ljava/lang/Object; + public abstract fun run ()V + public abstract fun takeState ()Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/DispatchedTask$DefaultImpls { + public static fun getExceptionalResult (Lkotlinx/coroutines/experimental/DispatchedTask;Ljava/lang/Object;)Ljava/lang/Throwable; + public static fun getResumeMode (Lkotlinx/coroutines/experimental/DispatchedTask;)I + public static fun getSuccessfulResult (Lkotlinx/coroutines/experimental/DispatchedTask;Ljava/lang/Object;)Ljava/lang/Object; + public static fun run (Lkotlinx/coroutines/experimental/DispatchedTask;)V +} + +public final class kotlinx/coroutines/experimental/DisposableFutureHandle : kotlinx/coroutines/experimental/DisposableHandle { + public fun <init> (Ljava/util/concurrent/Future;)V + public fun dispose ()V + public fun toString ()Ljava/lang/String; +} + +public abstract interface class kotlinx/coroutines/experimental/DisposableHandle { + public abstract fun dispose ()V +} + +public abstract interface class kotlinx/coroutines/experimental/EventLoop { + public static final field Factory Lkotlinx/coroutines/experimental/EventLoop$Factory; + public abstract fun processNextEvent ()J +} + +public final class kotlinx/coroutines/experimental/EventLoop$Factory { + public final synthetic fun invoke (Ljava/lang/Thread;Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/CoroutineDispatcher; + public static synthetic fun invoke$default (Lkotlinx/coroutines/experimental/EventLoop$Factory;Ljava/lang/Thread;Lkotlinx/coroutines/experimental/Job;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/CoroutineDispatcher; +} + +public final class kotlinx/coroutines/experimental/EventLoopKt { + public static final fun EventLoop (Ljava/lang/Thread;Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/CoroutineDispatcher; + public static synthetic fun EventLoop$default (Ljava/lang/Thread;Lkotlinx/coroutines/experimental/Job;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/CoroutineDispatcher; +} + +public abstract class kotlinx/coroutines/experimental/ExecutorCoroutineDispatcherBase : kotlinx/coroutines/experimental/CloseableCoroutineDispatcher, kotlinx/coroutines/experimental/Delay { + public fun <init> ()V + public fun close ()V + public fun delay (JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public fun dispatch (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Runnable;)V + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public fun invokeOnTimeout (JLjava/util/concurrent/TimeUnit;Ljava/lang/Runnable;)Lkotlinx/coroutines/experimental/DisposableHandle; + public fun scheduleResumeAfterDelay (JLjava/util/concurrent/TimeUnit;Lkotlinx/coroutines/experimental/CancellableContinuation;)V + public fun toString ()Ljava/lang/String; +} + +public final class kotlinx/coroutines/experimental/ExecutorsKt { + public static final fun asCoroutineDispatcher (Ljava/util/concurrent/Executor;)Lkotlinx/coroutines/experimental/CoroutineDispatcher; + public static final fun asCoroutineDispatcher (Ljava/util/concurrent/ExecutorService;)Lkotlinx/coroutines/experimental/CloseableCoroutineDispatcher; + public static final fun toCoroutineDispatcher (Ljava/util/concurrent/Executor;)Lkotlinx/coroutines/experimental/CoroutineDispatcher; +} + +public abstract interface class kotlinx/coroutines/experimental/Job : kotlin/coroutines/experimental/CoroutineContext$Element { + public static final field Key Lkotlinx/coroutines/experimental/Job$Key; + public abstract fun attachChild (Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/DisposableHandle; + public abstract fun cancel (Ljava/lang/Throwable;)Z + public abstract synthetic fun cancelChildren (Ljava/lang/Throwable;)V + public abstract fun getCancellationException ()Ljava/util/concurrent/CancellationException; + public abstract fun getChildren ()Lkotlin/sequences/Sequence; + public abstract fun getCompletionException ()Ljava/lang/Throwable; + public abstract fun getOnJoin ()Lkotlinx/coroutines/experimental/selects/SelectClause0; + public abstract fun invokeOnCompletion (Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/experimental/DisposableHandle; + public abstract synthetic fun invokeOnCompletion (Lkotlin/jvm/functions/Function1;Z)Lkotlinx/coroutines/experimental/DisposableHandle; + public abstract fun invokeOnCompletion (ZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/experimental/DisposableHandle; + public abstract fun invokeOnCompletion (ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/experimental/DisposableHandle; + public abstract fun isActive ()Z + public abstract fun isCancelled ()Z + public abstract fun isCompleted ()Z + public abstract fun join (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun plus (Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/Job; + public abstract fun start ()Z +} + +public final class kotlinx/coroutines/experimental/Job$DefaultImpls { + public static synthetic fun cancel$default (Lkotlinx/coroutines/experimental/Job;Ljava/lang/Throwable;ILjava/lang/Object;)Z + public static synthetic fun cancelChildren$default (Lkotlinx/coroutines/experimental/Job;Ljava/lang/Throwable;ILjava/lang/Object;)V + public static fun fold (Lkotlinx/coroutines/experimental/Job;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; + public static fun get (Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext$Element; + public static fun getCompletionException (Lkotlinx/coroutines/experimental/Job;)Ljava/lang/Throwable; + public static synthetic fun invokeOnCompletion$default (Lkotlinx/coroutines/experimental/Job;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/DisposableHandle; + public static synthetic fun invokeOnCompletion$default (Lkotlinx/coroutines/experimental/Job;ZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/DisposableHandle; + public static fun minusKey (Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/CoroutineContext;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/Job;Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/Job; +} + +public final class kotlinx/coroutines/experimental/Job$Key : kotlin/coroutines/experimental/CoroutineContext$Key { + public final synthetic fun invoke (Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/Job; + public static synthetic fun invoke$default (Lkotlinx/coroutines/experimental/Job$Key;Lkotlinx/coroutines/experimental/Job;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/Job; +} + +public final class kotlinx/coroutines/experimental/JobCancellationException : java/util/concurrent/CancellationException { + public fun <init> (Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/experimental/Job;)V + public fun equals (Ljava/lang/Object;)Z + public fun fillInStackTrace ()Ljava/lang/Throwable; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class kotlinx/coroutines/experimental/JobKt { + public static final fun Job (Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/Job; + public static synthetic fun Job$default (Lkotlinx/coroutines/experimental/Job;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/Job; + public static final fun cancel (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Throwable;)Z + public static synthetic fun cancel$default (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Throwable;ILjava/lang/Object;)Z + public static final fun cancelAndJoin (Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun cancelChildren (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Throwable;)V + public static final fun cancelChildren (Lkotlinx/coroutines/experimental/Job;Ljava/lang/Throwable;)V + public static synthetic fun cancelChildren$default (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Throwable;ILjava/lang/Object;)V + public static synthetic fun cancelChildren$default (Lkotlinx/coroutines/experimental/Job;Ljava/lang/Throwable;ILjava/lang/Object;)V + public static final fun cancelFutureOnCancellation (Lkotlinx/coroutines/experimental/CancellableContinuation;Ljava/util/concurrent/Future;)V + public static final synthetic fun cancelFutureOnCompletion (Lkotlinx/coroutines/experimental/CancellableContinuation;Ljava/util/concurrent/Future;)Lkotlinx/coroutines/experimental/DisposableHandle; + public static final fun cancelFutureOnCompletion (Lkotlinx/coroutines/experimental/Job;Ljava/util/concurrent/Future;)Lkotlinx/coroutines/experimental/DisposableHandle; + public static final fun disposeOnCompletion (Lkotlinx/coroutines/experimental/Job;Lkotlinx/coroutines/experimental/DisposableHandle;)Lkotlinx/coroutines/experimental/DisposableHandle; + public static final fun isActive (Lkotlin/coroutines/experimental/CoroutineContext;)Z + public static final fun join (Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun joinChildren (Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun unregisterOnCompletion (Lkotlinx/coroutines/experimental/Job;Lkotlinx/coroutines/experimental/DisposableHandle;)Lkotlinx/coroutines/experimental/DisposableHandle; +} + +public final class kotlinx/coroutines/experimental/LazyDeferredKt { + public static final fun lazyDefer (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/Deferred; +} + +public final class kotlinx/coroutines/experimental/NonCancellable : kotlin/coroutines/experimental/AbstractCoroutineContextElement, kotlinx/coroutines/experimental/Job { + public static final field INSTANCE Lkotlinx/coroutines/experimental/NonCancellable; + public fun attachChild (Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/DisposableHandle; + public fun cancel (Ljava/lang/Throwable;)Z + public synthetic fun cancelChildren (Ljava/lang/Throwable;)V + public fun getCancellationException ()Ljava/util/concurrent/CancellationException; + public fun getChildren ()Lkotlin/sequences/Sequence; + public fun getCompletionException ()Ljava/lang/Throwable; + public fun getOnJoin ()Lkotlinx/coroutines/experimental/selects/SelectClause0; + public fun invokeOnCompletion (Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/experimental/DisposableHandle; + public synthetic fun invokeOnCompletion (Lkotlin/jvm/functions/Function1;Z)Lkotlinx/coroutines/experimental/DisposableHandle; + public fun invokeOnCompletion (ZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/experimental/DisposableHandle; + public fun invokeOnCompletion (ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/experimental/DisposableHandle; + public fun isActive ()Z + public fun isCancelled ()Z + public fun isCompleted ()Z + public fun join (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public fun plus (Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/Job; + public fun start ()Z +} + +public final class kotlinx/coroutines/experimental/NonDisposableHandle : kotlinx/coroutines/experimental/DisposableHandle { + public static final field INSTANCE Lkotlinx/coroutines/experimental/NonDisposableHandle; + public fun dispose ()V + public fun toString ()Ljava/lang/String; +} + +public final class kotlinx/coroutines/experimental/RunnableKt { + public static final fun Runnable (Lkotlin/jvm/functions/Function0;)Ljava/lang/Runnable; +} + +public final class kotlinx/coroutines/experimental/ScheduledKt { + public static final fun withTimeout (ILkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final synthetic fun withTimeout (JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun withTimeout (JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun withTimeout$default (JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static synthetic fun withTimeout$default (JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun withTimeoutOrNull (ILkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final synthetic fun withTimeoutOrNull (JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun withTimeoutOrNull (JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun withTimeoutOrNull$default (JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static synthetic fun withTimeoutOrNull$default (JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/ThreadPoolDispatcher : kotlinx/coroutines/experimental/ExecutorCoroutineDispatcherBase, java/io/Closeable { + public fun close ()V + public fun toString ()Ljava/lang/String; +} + +public final class kotlinx/coroutines/experimental/ThreadPoolDispatcherKt { + public static final fun newFixedThreadPoolContext (ILjava/lang/String;)Lkotlinx/coroutines/experimental/ThreadPoolDispatcher; + public static final fun newFixedThreadPoolContext (ILjava/lang/String;Lkotlinx/coroutines/experimental/Job;)Lkotlin/coroutines/experimental/CoroutineContext; + public static synthetic fun newFixedThreadPoolContext$default (ILjava/lang/String;Lkotlinx/coroutines/experimental/Job;ILjava/lang/Object;)Lkotlin/coroutines/experimental/CoroutineContext; + public static final fun newSingleThreadContext (Ljava/lang/String;)Lkotlinx/coroutines/experimental/ThreadPoolDispatcher; + public static final fun newSingleThreadContext (Ljava/lang/String;Lkotlinx/coroutines/experimental/Job;)Lkotlin/coroutines/experimental/CoroutineContext; + public static synthetic fun newSingleThreadContext$default (Ljava/lang/String;Lkotlinx/coroutines/experimental/Job;ILjava/lang/Object;)Lkotlin/coroutines/experimental/CoroutineContext; +} + +public final class kotlinx/coroutines/experimental/TimeoutCancellationException : java/util/concurrent/CancellationException { + public fun <init> (Ljava/lang/String;)V +} + +public final class kotlinx/coroutines/experimental/Unconfined : kotlinx/coroutines/experimental/CoroutineDispatcher { + public static final field INSTANCE Lkotlinx/coroutines/experimental/Unconfined; + public fun dispatch (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Runnable;)V + public fun isDispatchNeeded (Lkotlin/coroutines/experimental/CoroutineContext;)Z + public fun toString ()Ljava/lang/String; +} + +public final class kotlinx/coroutines/experimental/YieldKt { + public static final fun yield (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public abstract class kotlinx/coroutines/experimental/channels/AbstractChannel : kotlinx/coroutines/experimental/channels/AbstractSendChannel, kotlinx/coroutines/experimental/channels/Channel { + public fun <init> ()V + public fun cancel (Ljava/lang/Throwable;)Z + protected fun cleanupSendQueueOnCancel ()V + protected final fun describeTryPoll ()Lkotlinx/coroutines/experimental/channels/AbstractChannel$TryPollDesc; + protected final fun getHasReceiveOrClosed ()Z + public final fun getOnReceive ()Lkotlinx/coroutines/experimental/selects/SelectClause1; + public final fun getOnReceiveOrNull ()Lkotlinx/coroutines/experimental/selects/SelectClause1; + protected abstract fun isBufferAlwaysEmpty ()Z + protected abstract fun isBufferEmpty ()Z + public final fun isClosedForReceive ()Z + public final fun isEmpty ()Z + public final fun iterator ()Lkotlinx/coroutines/experimental/channels/ChannelIterator; + protected fun onReceiveDequeued ()V + protected fun onReceiveEnqueued ()V + public final fun poll ()Ljava/lang/Object; + protected fun pollInternal ()Ljava/lang/Object; + protected fun pollSelectInternal (Lkotlinx/coroutines/experimental/selects/SelectInstance;)Ljava/lang/Object; + public final fun receive (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public final fun receiveOrNull (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + protected fun takeFirstReceiveOrPeekClosed ()Lkotlinx/coroutines/experimental/channels/ReceiveOrClosed; +} + +protected final class kotlinx/coroutines/experimental/channels/AbstractChannel$TryPollDesc : kotlinx/coroutines/experimental/internal/LockFreeLinkedListNode$RemoveFirstDesc { + public field pollResult Ljava/lang/Object; + public field resumeToken Ljava/lang/Object; + public fun <init> (Lkotlinx/coroutines/experimental/internal/LockFreeLinkedListHead;)V + public synthetic fun validatePrepared (Ljava/lang/Object;)Z +} + +public abstract class kotlinx/coroutines/experimental/channels/AbstractSendChannel : kotlinx/coroutines/experimental/channels/SendChannel { + public fun <init> ()V + protected fun afterClose (Ljava/lang/Throwable;)V + public fun close (Ljava/lang/Throwable;)Z + protected final fun conflatePreviousSendBuffered (Lkotlinx/coroutines/experimental/internal/LockFreeLinkedListNode;)V + protected final fun describeSendBuffered (Ljava/lang/Object;)Lkotlinx/coroutines/experimental/internal/LockFreeLinkedListNode$AddLastDesc; + protected final fun describeSendConflated (Ljava/lang/Object;)Lkotlinx/coroutines/experimental/internal/LockFreeLinkedListNode$AddLastDesc; + protected final fun describeTryOffer (Ljava/lang/Object;)Lkotlinx/coroutines/experimental/channels/AbstractSendChannel$TryOfferDesc; + protected fun getBufferDebugString ()Ljava/lang/String; + protected final fun getClosedForReceive ()Lkotlinx/coroutines/experimental/channels/Closed; + protected final fun getClosedForSend ()Lkotlinx/coroutines/experimental/channels/Closed; + public final fun getOnSend ()Lkotlinx/coroutines/experimental/selects/SelectClause2; + protected final fun getQueue ()Lkotlinx/coroutines/experimental/internal/LockFreeLinkedListHead; + protected abstract fun isBufferAlwaysFull ()Z + protected abstract fun isBufferFull ()Z + public final fun isClosedForSend ()Z + public final fun isFull ()Z + public final fun offer (Ljava/lang/Object;)Z + protected fun offerInternal (Ljava/lang/Object;)Ljava/lang/Object; + protected fun offerSelectInternal (Ljava/lang/Object;Lkotlinx/coroutines/experimental/selects/SelectInstance;)Ljava/lang/Object; + protected fun onClosed (Lkotlinx/coroutines/experimental/channels/Closed;)V + public final fun send (Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + protected final fun sendBuffered (Ljava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveOrClosed; + protected final fun sendConflated (Ljava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveOrClosed; + protected fun takeFirstReceiveOrPeekClosed ()Lkotlinx/coroutines/experimental/channels/ReceiveOrClosed; + protected final fun takeFirstSendOrPeekClosed ()Lkotlinx/coroutines/experimental/channels/Send; + public fun toString ()Ljava/lang/String; +} + +protected final class kotlinx/coroutines/experimental/channels/AbstractSendChannel$TryOfferDesc : kotlinx/coroutines/experimental/internal/LockFreeLinkedListNode$RemoveFirstDesc { + public final field element Ljava/lang/Object; + public field resumeToken Ljava/lang/Object; + public fun <init> (Ljava/lang/Object;Lkotlinx/coroutines/experimental/internal/LockFreeLinkedListHead;)V + public synthetic fun validatePrepared (Ljava/lang/Object;)Z +} + +public abstract interface class kotlinx/coroutines/experimental/channels/ActorJob : kotlinx/coroutines/experimental/channels/SendChannel { + public abstract fun getChannel ()Lkotlinx/coroutines/experimental/channels/SendChannel; +} + +public final class kotlinx/coroutines/experimental/channels/ActorKt { + public static final synthetic fun actor (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ActorJob; + public static final fun actor (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/SendChannel; + public static final synthetic fun actor (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/SendChannel; + public static synthetic fun actor$default (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ActorJob; + public static synthetic fun actor$default (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/SendChannel; + public static synthetic fun actor$default (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/SendChannel; +} + +public abstract interface class kotlinx/coroutines/experimental/channels/ActorScope : kotlinx/coroutines/experimental/CoroutineScope, kotlinx/coroutines/experimental/channels/ReceiveChannel { + public abstract fun getChannel ()Lkotlinx/coroutines/experimental/channels/Channel; +} + +public final class kotlinx/coroutines/experimental/channels/ArrayBroadcastChannel : kotlinx/coroutines/experimental/channels/AbstractSendChannel, kotlinx/coroutines/experimental/channels/BroadcastChannel { + public fun <init> (I)V + public fun close (Ljava/lang/Throwable;)Z + public final fun getCapacity ()I + public fun open ()Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public fun openSubscription ()Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; +} + +public class kotlinx/coroutines/experimental/channels/ArrayChannel : kotlinx/coroutines/experimental/channels/AbstractChannel { + public fun <init> (I)V + protected fun cleanupSendQueueOnCancel ()V + protected fun getBufferDebugString ()Ljava/lang/String; + public final fun getCapacity ()I + protected final fun isBufferAlwaysEmpty ()Z + protected final fun isBufferAlwaysFull ()Z + protected final fun isBufferEmpty ()Z + protected final fun isBufferFull ()Z + protected fun offerInternal (Ljava/lang/Object;)Ljava/lang/Object; + protected fun offerSelectInternal (Ljava/lang/Object;Lkotlinx/coroutines/experimental/selects/SelectInstance;)Ljava/lang/Object; + protected fun pollInternal ()Ljava/lang/Object; + protected fun pollSelectInternal (Lkotlinx/coroutines/experimental/selects/SelectInstance;)Ljava/lang/Object; +} + +public abstract interface class kotlinx/coroutines/experimental/channels/BroadcastChannel : kotlinx/coroutines/experimental/channels/SendChannel { + public static final field Factory Lkotlinx/coroutines/experimental/channels/BroadcastChannel$Factory; + public abstract fun open ()Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public abstract fun openSubscription ()Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; +} + +public final class kotlinx/coroutines/experimental/channels/BroadcastChannel$DefaultImpls { + public static fun open (Lkotlinx/coroutines/experimental/channels/BroadcastChannel;)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; +} + +public final class kotlinx/coroutines/experimental/channels/BroadcastChannel$Factory { + public final synthetic fun invoke (I)Lkotlinx/coroutines/experimental/channels/BroadcastChannel; +} + +public final class kotlinx/coroutines/experimental/channels/BroadcastChannelKt { + public static final fun BroadcastChannel (I)Lkotlinx/coroutines/experimental/channels/BroadcastChannel; +} + +public abstract interface class kotlinx/coroutines/experimental/channels/Channel : kotlinx/coroutines/experimental/channels/ReceiveChannel, kotlinx/coroutines/experimental/channels/SendChannel { + public static final field CONFLATED I + public static final field Factory Lkotlinx/coroutines/experimental/channels/Channel$Factory; + public static final field UNLIMITED I +} + +public final class kotlinx/coroutines/experimental/channels/Channel$Factory { + public static final field CONFLATED I + public static final field UNLIMITED I + public final synthetic fun invoke (I)Lkotlinx/coroutines/experimental/channels/Channel; + public static synthetic fun invoke$default (Lkotlinx/coroutines/experimental/channels/Channel$Factory;IILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/Channel; +} + +public abstract interface class kotlinx/coroutines/experimental/channels/ChannelIterator { + public abstract fun hasNext (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun next (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/channels/ChannelKt { + public static final fun Channel ()Lkotlinx/coroutines/experimental/channels/Channel; + public static final fun Channel (I)Lkotlinx/coroutines/experimental/channels/Channel; +} + +public final class kotlinx/coroutines/experimental/channels/ChannelsJvmKt { + public static final fun sendBlocking (Lkotlinx/coroutines/experimental/channels/SendChannel;Ljava/lang/Object;)V +} + +public final class kotlinx/coroutines/experimental/channels/ChannelsKt { + public static final fun any (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun asReceiveChannel (Ljava/lang/Iterable;Lkotlin/coroutines/experimental/CoroutineContext;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun asReceiveChannel (Lkotlin/sequences/Sequence;Lkotlin/coroutines/experimental/CoroutineContext;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun asReceiveChannel$default (Ljava/lang/Iterable;Lkotlin/coroutines/experimental/CoroutineContext;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun asReceiveChannel$default (Lkotlin/sequences/Sequence;Lkotlin/coroutines/experimental/CoroutineContext;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun consume (Lkotlinx/coroutines/experimental/channels/BroadcastChannel;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun consume (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final synthetic fun consumeEach (Lkotlinx/coroutines/experimental/channels/BroadcastChannel;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final synthetic fun consumeEach (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun consumes (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;)Lkotlin/jvm/functions/Function1; + public static final fun consumesAll ([Lkotlinx/coroutines/experimental/channels/ReceiveChannel;)Lkotlin/jvm/functions/Function1; + public static final fun count (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun distinct (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun distinctBy (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun distinctBy$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun drop (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;ILkotlin/coroutines/experimental/CoroutineContext;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun drop$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;ILkotlin/coroutines/experimental/CoroutineContext;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun dropWhile (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun dropWhile$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun elementAt (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;ILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun elementAtOrNull (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;ILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun filter (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun filter$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun filterIndexed (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun filterIndexed$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun filterNot (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final synthetic fun filterNot (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun filterNot$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun filterNotNull (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun filterNotNullTo (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Ljava/util/Collection;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun filterNotNullTo (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlinx/coroutines/experimental/channels/SendChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun first (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun firstOrNull (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun flatMap (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun flatMap$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun indexOf (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun last (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun lastIndexOf (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun lastOrNull (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun map (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun map$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun mapIndexed (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun mapIndexed$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun mapIndexedNotNull (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun mapIndexedNotNull$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun mapNotNull (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun mapNotNull$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun maxWith (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Ljava/util/Comparator;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun minWith (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Ljava/util/Comparator;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun none (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun requireNoNulls (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun single (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun singleOrNull (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun take (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;ILkotlin/coroutines/experimental/CoroutineContext;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun take$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;ILkotlin/coroutines/experimental/CoroutineContext;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun takeWhile (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun takeWhile$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun toChannel (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlinx/coroutines/experimental/channels/SendChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun toCollection (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Ljava/util/Collection;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun toList (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun toMap (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Ljava/util/Map;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun toMap (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun toMutableList (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun toMutableSet (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun toSet (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun withIndex (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun withIndex$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun zip (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlinx/coroutines/experimental/channels/ReceiveChannel;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun zip (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun zip$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; +} + +public final class kotlinx/coroutines/experimental/channels/Closed : kotlinx/coroutines/experimental/internal/LockFreeLinkedListNode, kotlinx/coroutines/experimental/channels/ReceiveOrClosed, kotlinx/coroutines/experimental/channels/Send { + public final field closeCause Ljava/lang/Throwable; + public fun <init> (Ljava/lang/Throwable;)V + public fun completeResumeReceive (Ljava/lang/Object;)V + public fun completeResumeSend (Ljava/lang/Object;)V + public synthetic fun getOfferResult ()Ljava/lang/Object; + public fun getOfferResult ()Lkotlinx/coroutines/experimental/channels/Closed; + public synthetic fun getPollResult ()Ljava/lang/Object; + public fun getPollResult ()Lkotlinx/coroutines/experimental/channels/Closed; + public final fun getReceiveException ()Ljava/lang/Throwable; + public final fun getSendException ()Ljava/lang/Throwable; + public fun resumeSendClosed (Lkotlinx/coroutines/experimental/channels/Closed;)Ljava/lang/Void; + public synthetic fun resumeSendClosed (Lkotlinx/coroutines/experimental/channels/Closed;)V + public fun toString ()Ljava/lang/String; + public fun tryResumeReceive (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + public fun tryResumeSend (Ljava/lang/Object;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/channels/ClosedReceiveChannelException : java/util/NoSuchElementException { + public fun <init> (Ljava/lang/String;)V +} + +public final class kotlinx/coroutines/experimental/channels/ClosedSendChannelException : java/util/concurrent/CancellationException { + public fun <init> (Ljava/lang/String;)V +} + +public final class kotlinx/coroutines/experimental/channels/ConflatedBroadcastChannel : kotlinx/coroutines/experimental/channels/BroadcastChannel { + public static final field CLOSED Lkotlinx/coroutines/experimental/channels/ConflatedBroadcastChannel$Closed; + public static final field Companion Lkotlinx/coroutines/experimental/channels/ConflatedBroadcastChannel$Companion; + public static final field INITIAL_STATE Lkotlinx/coroutines/experimental/channels/ConflatedBroadcastChannel$State; + public static final field UNDEFINED Lkotlinx/coroutines/experimental/internal/Symbol; + public fun <init> ()V + public fun <init> (Ljava/lang/Object;)V + public fun close (Ljava/lang/Throwable;)Z + public fun getOnSend ()Lkotlinx/coroutines/experimental/selects/SelectClause2; + public final fun getValue ()Ljava/lang/Object; + public final fun getValueOrNull ()Ljava/lang/Object; + public fun isClosedForSend ()Z + public fun isFull ()Z + public fun offer (Ljava/lang/Object;)Z + public fun open ()Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public fun openSubscription ()Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public fun send (Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public class kotlinx/coroutines/experimental/channels/ConflatedChannel : kotlinx/coroutines/experimental/channels/AbstractChannel { + public fun <init> ()V + protected final fun isBufferAlwaysEmpty ()Z + protected final fun isBufferAlwaysFull ()Z + protected final fun isBufferEmpty ()Z + protected final fun isBufferFull ()Z + protected fun offerInternal (Ljava/lang/Object;)Ljava/lang/Object; + protected fun offerSelectInternal (Ljava/lang/Object;Lkotlinx/coroutines/experimental/selects/SelectInstance;)Ljava/lang/Object; + protected fun onClosed (Lkotlinx/coroutines/experimental/channels/Closed;)V +} + +public class kotlinx/coroutines/experimental/channels/LinkedListChannel : kotlinx/coroutines/experimental/channels/AbstractChannel { + public fun <init> ()V + protected final fun isBufferAlwaysEmpty ()Z + protected final fun isBufferAlwaysFull ()Z + protected final fun isBufferEmpty ()Z + protected final fun isBufferFull ()Z + protected fun offerInternal (Ljava/lang/Object;)Ljava/lang/Object; + protected fun offerSelectInternal (Ljava/lang/Object;Lkotlinx/coroutines/experimental/selects/SelectInstance;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/channels/ProduceKt { + public static final fun buildChannel (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ProducerJob; + public static synthetic fun buildChannel$default (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ProducerJob; + public static final synthetic fun produce (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ProducerJob; + public static final fun produce (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final synthetic fun produce (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun produce$default (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ProducerJob; + public static synthetic fun produce$default (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun produce$default (Lkotlin/coroutines/experimental/CoroutineContext;ILkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; +} + +public abstract interface class kotlinx/coroutines/experimental/channels/ProducerJob : kotlinx/coroutines/experimental/Job, kotlinx/coroutines/experimental/channels/ReceiveChannel { + public abstract fun getChannel ()Lkotlinx/coroutines/experimental/channels/ReceiveChannel; +} + +public final class kotlinx/coroutines/experimental/channels/ProducerJob$DefaultImpls { + public static fun fold (Lkotlinx/coroutines/experimental/channels/ProducerJob;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; + public static fun get (Lkotlinx/coroutines/experimental/channels/ProducerJob;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext$Element; + public static fun getCompletionException (Lkotlinx/coroutines/experimental/channels/ProducerJob;)Ljava/lang/Throwable; + public static fun minusKey (Lkotlinx/coroutines/experimental/channels/ProducerJob;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/channels/ProducerJob;Lkotlin/coroutines/experimental/CoroutineContext;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/channels/ProducerJob;Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/Job; +} + +public abstract interface class kotlinx/coroutines/experimental/channels/ProducerScope : kotlinx/coroutines/experimental/CoroutineScope, kotlinx/coroutines/experimental/channels/SendChannel { + public abstract fun getChannel ()Lkotlinx/coroutines/experimental/channels/SendChannel; +} + +public abstract interface class kotlinx/coroutines/experimental/channels/ReceiveChannel { + public abstract fun cancel (Ljava/lang/Throwable;)Z + public abstract fun getOnReceive ()Lkotlinx/coroutines/experimental/selects/SelectClause1; + public abstract fun getOnReceiveOrNull ()Lkotlinx/coroutines/experimental/selects/SelectClause1; + public abstract fun isClosedForReceive ()Z + public abstract fun isEmpty ()Z + public abstract fun iterator ()Lkotlinx/coroutines/experimental/channels/ChannelIterator; + public abstract fun poll ()Ljava/lang/Object; + public abstract fun receive (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun receiveOrNull (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/channels/ReceiveChannel$DefaultImpls { + public static synthetic fun cancel$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Ljava/lang/Throwable;ILjava/lang/Object;)Z +} + +public abstract interface class kotlinx/coroutines/experimental/channels/ReceiveOrClosed { + public abstract fun completeResumeReceive (Ljava/lang/Object;)V + public abstract fun getOfferResult ()Ljava/lang/Object; + public abstract fun tryResumeReceive (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +} + +public class kotlinx/coroutines/experimental/channels/RendezvousChannel : kotlinx/coroutines/experimental/channels/AbstractChannel { + public fun <init> ()V + protected final fun isBufferAlwaysEmpty ()Z + protected final fun isBufferAlwaysFull ()Z + protected final fun isBufferEmpty ()Z + protected final fun isBufferFull ()Z +} + +public abstract interface class kotlinx/coroutines/experimental/channels/Send { + public abstract fun completeResumeSend (Ljava/lang/Object;)V + public abstract fun getPollResult ()Ljava/lang/Object; + public abstract fun resumeSendClosed (Lkotlinx/coroutines/experimental/channels/Closed;)V + public abstract fun tryResumeSend (Ljava/lang/Object;)Ljava/lang/Object; +} + +public abstract interface class kotlinx/coroutines/experimental/channels/SendChannel { + public abstract fun close (Ljava/lang/Throwable;)Z + public abstract fun getOnSend ()Lkotlinx/coroutines/experimental/selects/SelectClause2; + public abstract fun isClosedForSend ()Z + public abstract fun isFull ()Z + public abstract fun offer (Ljava/lang/Object;)Z + public abstract fun send (Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/channels/SendChannel$DefaultImpls { + public static synthetic fun close$default (Lkotlinx/coroutines/experimental/channels/SendChannel;Ljava/lang/Throwable;ILjava/lang/Object;)Z +} + +public final class kotlinx/coroutines/experimental/channels/SendElement : kotlinx/coroutines/experimental/internal/LockFreeLinkedListNode, kotlinx/coroutines/experimental/channels/Send { + public final field cont Lkotlinx/coroutines/experimental/CancellableContinuation; + public fun <init> (Ljava/lang/Object;Lkotlinx/coroutines/experimental/CancellableContinuation;)V + public fun completeResumeSend (Ljava/lang/Object;)V + public fun getPollResult ()Ljava/lang/Object; + public fun resumeSendClosed (Lkotlinx/coroutines/experimental/channels/Closed;)V + public fun toString ()Ljava/lang/String; + public fun tryResumeSend (Ljava/lang/Object;)Ljava/lang/Object; +} + +public abstract interface class kotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel : java/io/Closeable, kotlinx/coroutines/experimental/channels/ReceiveChannel { + public abstract fun close ()V +} + +public final class kotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel$DefaultImpls { + public static fun close (Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel;)V +} + +public final class kotlinx/coroutines/experimental/intrinsics/CancellableKt { + public static final fun startCoroutineCancellable (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)V + public static final fun startCoroutineCancellable (Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)V +} + +public final class kotlinx/coroutines/experimental/intrinsics/UndispatchedKt { + public static final fun startCoroutineUndispatched (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)V + public static final fun startCoroutineUndispatched (Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)V + public static final fun startUndispatchedOrReturn (Lkotlinx/coroutines/experimental/AbstractCoroutine;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; + public static final fun startUndispatchedOrReturn (Lkotlinx/coroutines/experimental/AbstractCoroutine;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +} + +public abstract interface class kotlinx/coroutines/experimental/selects/SelectBuilder { + public abstract fun invoke (Lkotlinx/coroutines/experimental/selects/SelectClause0;Lkotlin/jvm/functions/Function1;)V + public abstract fun invoke (Lkotlinx/coroutines/experimental/selects/SelectClause1;Lkotlin/jvm/functions/Function2;)V + public abstract fun invoke (Lkotlinx/coroutines/experimental/selects/SelectClause2;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V + public abstract fun invoke (Lkotlinx/coroutines/experimental/selects/SelectClause2;Lkotlin/jvm/functions/Function2;)V + public abstract fun onTimeout (JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function1;)V +} + +public final class kotlinx/coroutines/experimental/selects/SelectBuilder$DefaultImpls { + public static fun invoke (Lkotlinx/coroutines/experimental/selects/SelectBuilder;Lkotlinx/coroutines/experimental/selects/SelectClause2;Lkotlin/jvm/functions/Function2;)V + public static synthetic fun onTimeout$default (Lkotlinx/coroutines/experimental/selects/SelectBuilder;JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +} + +public final class kotlinx/coroutines/experimental/selects/SelectBuilderImpl : kotlinx/coroutines/experimental/internal/LockFreeLinkedListHead, kotlin/coroutines/experimental/Continuation, kotlinx/coroutines/experimental/selects/SelectBuilder, kotlinx/coroutines/experimental/selects/SelectInstance { + public fun <init> (Lkotlin/coroutines/experimental/Continuation;)V + public fun disposeOnSelect (Lkotlinx/coroutines/experimental/DisposableHandle;)V + public fun getCompletion ()Lkotlin/coroutines/experimental/Continuation; + public fun getContext ()Lkotlin/coroutines/experimental/CoroutineContext; + public final fun getResult ()Ljava/lang/Object; + public final fun handleBuilderException (Ljava/lang/Throwable;)V + public fun invoke (Lkotlinx/coroutines/experimental/selects/SelectClause0;Lkotlin/jvm/functions/Function1;)V + public fun invoke (Lkotlinx/coroutines/experimental/selects/SelectClause1;Lkotlin/jvm/functions/Function2;)V + public fun invoke (Lkotlinx/coroutines/experimental/selects/SelectClause2;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V + public fun invoke (Lkotlinx/coroutines/experimental/selects/SelectClause2;Lkotlin/jvm/functions/Function2;)V + public fun isSelected ()Z + public fun onTimeout (JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function1;)V + public fun performAtomicIfNotSelected (Lkotlinx/coroutines/experimental/internal/AtomicDesc;)Ljava/lang/Object; + public fun performAtomicTrySelect (Lkotlinx/coroutines/experimental/internal/AtomicDesc;)Ljava/lang/Object; + public fun resume (Ljava/lang/Object;)V + public fun resumeSelectCancellableWithException (Ljava/lang/Throwable;)V + public fun resumeWithException (Ljava/lang/Throwable;)V + public fun trySelect (Ljava/lang/Object;)Z +} + +public abstract interface class kotlinx/coroutines/experimental/selects/SelectClause0 { + public abstract fun registerSelectClause0 (Lkotlinx/coroutines/experimental/selects/SelectInstance;Lkotlin/jvm/functions/Function1;)V +} + +public abstract interface class kotlinx/coroutines/experimental/selects/SelectClause1 { + public abstract fun registerSelectClause1 (Lkotlinx/coroutines/experimental/selects/SelectInstance;Lkotlin/jvm/functions/Function2;)V +} + +public abstract interface class kotlinx/coroutines/experimental/selects/SelectClause2 { + public abstract fun registerSelectClause2 (Lkotlinx/coroutines/experimental/selects/SelectInstance;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V +} + +public abstract interface class kotlinx/coroutines/experimental/selects/SelectInstance { + public abstract fun disposeOnSelect (Lkotlinx/coroutines/experimental/DisposableHandle;)V + public abstract fun getCompletion ()Lkotlin/coroutines/experimental/Continuation; + public abstract fun isSelected ()Z + public abstract fun performAtomicIfNotSelected (Lkotlinx/coroutines/experimental/internal/AtomicDesc;)Ljava/lang/Object; + public abstract fun performAtomicTrySelect (Lkotlinx/coroutines/experimental/internal/AtomicDesc;)Ljava/lang/Object; + public abstract fun resumeSelectCancellableWithException (Ljava/lang/Throwable;)V + public abstract fun trySelect (Ljava/lang/Object;)Z +} + +public final class kotlinx/coroutines/experimental/selects/UnbiasedSelectBuilderImpl : kotlinx/coroutines/experimental/selects/SelectBuilder { + public fun <init> (Lkotlin/coroutines/experimental/Continuation;)V + public final fun getClauses ()Ljava/util/ArrayList; + public final fun getInstance ()Lkotlinx/coroutines/experimental/selects/SelectBuilderImpl; + public final fun handleBuilderException (Ljava/lang/Throwable;)V + public final fun initSelectResult ()Ljava/lang/Object; + public fun invoke (Lkotlinx/coroutines/experimental/selects/SelectClause0;Lkotlin/jvm/functions/Function1;)V + public fun invoke (Lkotlinx/coroutines/experimental/selects/SelectClause1;Lkotlin/jvm/functions/Function2;)V + public fun invoke (Lkotlinx/coroutines/experimental/selects/SelectClause2;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V + public fun invoke (Lkotlinx/coroutines/experimental/selects/SelectClause2;Lkotlin/jvm/functions/Function2;)V + public fun onTimeout (JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function1;)V +} + +public final class kotlinx/coroutines/experimental/selects/WhileSelectKt { + public static final fun whileSelect (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public abstract interface class kotlinx/coroutines/experimental/sync/Mutex { + public abstract fun getOnLock ()Lkotlinx/coroutines/experimental/selects/SelectClause2; + public abstract fun holdsLock (Ljava/lang/Object;)Z + public abstract fun isLocked ()Z + public abstract fun lock (Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun tryLock (Ljava/lang/Object;)Z + public abstract fun unlock (Ljava/lang/Object;)V +} + +public final class kotlinx/coroutines/experimental/sync/Mutex$DefaultImpls { + public static synthetic fun lock$default (Lkotlinx/coroutines/experimental/sync/Mutex;Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static synthetic fun tryLock$default (Lkotlinx/coroutines/experimental/sync/Mutex;Ljava/lang/Object;ILjava/lang/Object;)Z + public static synthetic fun unlock$default (Lkotlinx/coroutines/experimental/sync/Mutex;Ljava/lang/Object;ILjava/lang/Object;)V +} + +public final class kotlinx/coroutines/experimental/sync/MutexKt { + public static final fun Mutex (Z)Lkotlinx/coroutines/experimental/sync/Mutex; + public static synthetic fun Mutex$default (ZILjava/lang/Object;)Lkotlinx/coroutines/experimental/sync/Mutex; + public static final synthetic fun withLock (Lkotlinx/coroutines/experimental/sync/Mutex;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final synthetic fun withLock (Lkotlinx/coroutines/experimental/sync/Mutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun withLock$default (Lkotlinx/coroutines/experimental/sync/Mutex;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun withMutex (Lkotlinx/coroutines/experimental/sync/Mutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-guava.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-guava.txt new file mode 100644 index 00000000..02056dee --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-guava.txt @@ -0,0 +1,11 @@ +public final class kotlinx/coroutines/experimental/guava/ListenableFutureKt { + public static final fun asListenableFuture (Lkotlinx/coroutines/experimental/Deferred;)Lcom/google/common/util/concurrent/ListenableFuture; + public static final fun await (Lcom/google/common/util/concurrent/ListenableFuture;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final synthetic fun future (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lcom/google/common/util/concurrent/ListenableFuture; + public static final fun future (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lcom/google/common/util/concurrent/ListenableFuture; + public static final synthetic fun future (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lcom/google/common/util/concurrent/ListenableFuture; + public static synthetic fun future$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lcom/google/common/util/concurrent/ListenableFuture; + public static synthetic fun future$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lcom/google/common/util/concurrent/ListenableFuture; + public static synthetic fun future$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lcom/google/common/util/concurrent/ListenableFuture; +} + diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-io.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-io.txt new file mode 100644 index 00000000..95c0cec5 --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-io.txt @@ -0,0 +1,259 @@ +public abstract interface class kotlinx/coroutines/experimental/io/ByteChannel : kotlinx/coroutines/experimental/io/ByteReadChannel, kotlinx/coroutines/experimental/io/ByteWriteChannel { +} + +public final class kotlinx/coroutines/experimental/io/ByteChannel$DefaultImpls { + public static fun readAvailable (Lkotlinx/coroutines/experimental/io/ByteChannel;[BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static fun readFully (Lkotlinx/coroutines/experimental/io/ByteChannel;[BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static fun writeAvailable (Lkotlinx/coroutines/experimental/io/ByteChannel;[BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static fun writeFully (Lkotlinx/coroutines/experimental/io/ByteChannel;[BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/io/ByteChannelKt { + public static final fun ByteChannel (Z)Lkotlinx/coroutines/experimental/io/ByteChannel; + public static synthetic fun ByteChannel$default (ZILjava/lang/Object;)Lkotlinx/coroutines/experimental/io/ByteChannel; + public static final fun ByteReadChannel (Ljava/nio/ByteBuffer;)Lkotlinx/coroutines/experimental/io/ByteReadChannel; + public static final fun ByteReadChannel ([B)Lkotlinx/coroutines/experimental/io/ByteReadChannel; + public static final fun getEmptyByteReadChannel ()Lkotlinx/coroutines/experimental/io/ByteReadChannel; +} + +public abstract interface class kotlinx/coroutines/experimental/io/ByteReadChannel { + public abstract fun cancel (Ljava/lang/Throwable;)Z + public abstract fun consumeEachBufferRange (Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun discard (JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun getAvailableForRead ()I + public abstract fun getReadByteOrder ()Lkotlinx/io/core/ByteOrder; + public abstract fun getTotalBytesRead ()J + public abstract fun isClosedForRead ()Z + public abstract fun isClosedForWrite ()Z + public abstract fun lookAhead (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public abstract fun lookAheadSuspend (Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun read (ILkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readAvailable (Ljava/nio/ByteBuffer;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readAvailable (Lkotlinx/io/core/BufferView;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readAvailable ([BIILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readAvailable ([BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readBoolean (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readByte (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readDouble (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readFloat (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readFully (Ljava/nio/ByteBuffer;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readFully ([BIILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readFully ([BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readInt (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readLong (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readPacket (IILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readShort (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun readUTF8LineTo (Ljava/lang/Appendable;ILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun setReadByteOrder (Lkotlinx/io/core/ByteOrder;)V +} + +public final class kotlinx/coroutines/experimental/io/ByteReadChannel$DefaultImpls { + public static synthetic fun cancel$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Ljava/lang/Throwable;ILjava/lang/Object;)Z + public static synthetic fun discard$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;JLkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static synthetic fun read$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;ILkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static fun readAvailable (Lkotlinx/coroutines/experimental/io/ByteReadChannel;[BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static fun readFully (Lkotlinx/coroutines/experimental/io/ByteReadChannel;[BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun readPacket$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;IILkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static synthetic fun readUTF8LineTo$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Ljava/lang/Appendable;ILkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/io/ByteReadChannelKt { + public static final fun copyAndClose (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Lkotlinx/coroutines/experimental/io/ByteWriteChannel;JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun copyAndClose$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Lkotlinx/coroutines/experimental/io/ByteWriteChannel;JLkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun copyTo (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Lkotlinx/coroutines/experimental/io/ByteWriteChannel;JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun copyTo$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Lkotlinx/coroutines/experimental/io/ByteWriteChannel;JLkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun joinTo (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Lkotlinx/coroutines/experimental/io/ByteWriteChannel;ZZLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun joinTo$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Lkotlinx/coroutines/experimental/io/ByteWriteChannel;ZZLkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun readRemaining (Lkotlinx/coroutines/experimental/io/ByteReadChannel;ILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun readRemaining$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;ILkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + +public abstract interface class kotlinx/coroutines/experimental/io/ByteWriteChannel { + public abstract fun close (Ljava/lang/Throwable;)Z + public abstract fun flush ()V + public abstract fun getAutoFlush ()Z + public abstract fun getAvailableForWrite ()I + public abstract fun getClosedCause ()Ljava/lang/Throwable; + public abstract fun getTotalBytesWritten ()J + public abstract fun getWriteByteOrder ()Lkotlinx/io/core/ByteOrder; + public abstract fun isClosedForWrite ()Z + public abstract fun setWriteByteOrder (Lkotlinx/io/core/ByteOrder;)V + public abstract fun write (ILkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeAvailable (Ljava/nio/ByteBuffer;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeAvailable (Lkotlinx/io/core/BufferView;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeAvailable ([BIILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeAvailable ([BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeByte (BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeDouble (DLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeFloat (FLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeFully (Ljava/nio/ByteBuffer;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeFully (Lkotlinx/io/core/BufferView;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeFully ([BIILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeFully ([BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeInt (ILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeLong (JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writePacket (Lkotlinx/io/core/ByteReadPacket;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeShort (SLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeSuspendSession (Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public abstract fun writeWhile (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/io/ByteWriteChannel$DefaultImpls { + public static synthetic fun close$default (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;Ljava/lang/Throwable;ILjava/lang/Object;)Z + public static synthetic fun write$default (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;ILkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static fun writeAvailable (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;[BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static fun writeFully (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;[BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/io/ByteWriteChannelKt { + public static final fun writeBoolean (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;ZLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun writeByte (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;ILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun writeChar (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;CLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun writeInt (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun writePacketSuspend (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun writeShort (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;ILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun writeStringUtf8 (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;Ljava/lang/CharSequence;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun writeStringUtf8 (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;Ljava/lang/String;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun writeStringUtf8 (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;Ljava/nio/CharBuffer;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/io/ClosedWriteChannelException : java/util/concurrent/CancellationException { + public fun <init> (Ljava/lang/String;)V +} + +public final class kotlinx/coroutines/experimental/io/DelimitedKt { + public static final fun readUntilDelimiter (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun skipDelimiter (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Ljava/nio/ByteBuffer;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public abstract interface class kotlinx/coroutines/experimental/io/LookAheadSession { + public abstract fun consumed (I)V + public abstract fun request (II)Ljava/nio/ByteBuffer; +} + +public final class kotlinx/coroutines/experimental/io/LookAheadSessionKt { + public static final fun consumeEachRemaining (Lkotlinx/coroutines/experimental/io/LookAheadSession;Lkotlin/jvm/functions/Function1;)V +} + +public abstract interface class kotlinx/coroutines/experimental/io/LookAheadSuspendSession : kotlinx/coroutines/experimental/io/LookAheadSession { + public abstract fun awaitAtLeast (ILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/io/MigrationUtilsKt { + public static final fun write (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;[BIILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun write (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;[BLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun writeBytes (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;Ljava/lang/String;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun writeChars (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;Ljava/lang/String;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun writeUTF (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;Ljava/lang/String;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public abstract interface class kotlinx/coroutines/experimental/io/ReaderJob : kotlinx/coroutines/experimental/Job { + public abstract fun getChannel ()Lkotlinx/coroutines/experimental/io/ByteWriteChannel; +} + +public final class kotlinx/coroutines/experimental/io/ReaderJob$DefaultImpls { + public static fun fold (Lkotlinx/coroutines/experimental/io/ReaderJob;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; + public static fun get (Lkotlinx/coroutines/experimental/io/ReaderJob;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext$Element; + public static fun getCompletionException (Lkotlinx/coroutines/experimental/io/ReaderJob;)Ljava/lang/Throwable; + public static fun minusKey (Lkotlinx/coroutines/experimental/io/ReaderJob;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/io/ReaderJob;Lkotlin/coroutines/experimental/CoroutineContext;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/io/ReaderJob;Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/Job; +} + +public final class kotlinx/coroutines/experimental/io/ReaderJobKt { + public static final fun reader (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/io/ByteChannel;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/io/ReaderJob; + public static final fun reader (Lkotlin/coroutines/experimental/CoroutineContext;ZLkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/io/ReaderJob; + public static synthetic fun reader$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/io/ByteChannel;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/io/ReaderJob; + public static synthetic fun reader$default (Lkotlin/coroutines/experimental/CoroutineContext;ZLkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/io/ReaderJob; +} + +public abstract interface class kotlinx/coroutines/experimental/io/ReaderScope : kotlinx/coroutines/experimental/CoroutineScope { + public abstract fun getChannel ()Lkotlinx/coroutines/experimental/io/ByteReadChannel; +} + +public final class kotlinx/coroutines/experimental/io/StringsKt { + public static final fun readASCIILine (Lkotlinx/coroutines/experimental/io/ByteReadChannel;IILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun readASCIILine$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;IILkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun readLine (Lkotlinx/coroutines/experimental/io/ByteReadChannel;IILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun readLine$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;IILkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun readUTF8Line (Lkotlinx/coroutines/experimental/io/ByteReadChannel;IILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun readUTF8Line$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;IILkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + +public abstract interface class kotlinx/coroutines/experimental/io/WriterJob : kotlinx/coroutines/experimental/Job { + public abstract fun getChannel ()Lkotlinx/coroutines/experimental/io/ByteReadChannel; +} + +public final class kotlinx/coroutines/experimental/io/WriterJob$DefaultImpls { + public static fun fold (Lkotlinx/coroutines/experimental/io/WriterJob;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; + public static fun get (Lkotlinx/coroutines/experimental/io/WriterJob;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext$Element; + public static fun getCompletionException (Lkotlinx/coroutines/experimental/io/WriterJob;)Ljava/lang/Throwable; + public static fun minusKey (Lkotlinx/coroutines/experimental/io/WriterJob;Lkotlin/coroutines/experimental/CoroutineContext$Key;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/io/WriterJob;Lkotlin/coroutines/experimental/CoroutineContext;)Lkotlin/coroutines/experimental/CoroutineContext; + public static fun plus (Lkotlinx/coroutines/experimental/io/WriterJob;Lkotlinx/coroutines/experimental/Job;)Lkotlinx/coroutines/experimental/Job; +} + +public final class kotlinx/coroutines/experimental/io/WriterJobKt { + public static final fun writer (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/io/ByteChannel;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/io/WriterJob; + public static final fun writer (Lkotlin/coroutines/experimental/CoroutineContext;ZLkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/experimental/io/WriterJob; + public static synthetic fun writer$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/io/ByteChannel;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/io/WriterJob; + public static synthetic fun writer$default (Lkotlin/coroutines/experimental/CoroutineContext;ZLkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/io/WriterJob; +} + +public abstract interface class kotlinx/coroutines/experimental/io/WriterScope : kotlinx/coroutines/experimental/CoroutineScope { + public abstract fun getChannel ()Lkotlinx/coroutines/experimental/io/ByteWriteChannel; +} + +public abstract interface class kotlinx/coroutines/experimental/io/WriterSession { + public abstract fun request (I)Ljava/nio/ByteBuffer; + public abstract fun written (I)V +} + +public abstract interface class kotlinx/coroutines/experimental/io/WriterSuspendSession : kotlinx/coroutines/experimental/io/WriterSession { + public abstract fun tryAwait (ILkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/io/internal/InlineRendezvousSwapKt { + public static final fun main ([Ljava/lang/String;)V +} + +public final class kotlinx/coroutines/experimental/io/jvm/javaio/BlockingKt { + public static final fun toInputStream (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Lkotlinx/coroutines/experimental/Job;)Ljava/io/InputStream; + public static synthetic fun toInputStream$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Lkotlinx/coroutines/experimental/Job;ILjava/lang/Object;)Ljava/io/InputStream; + public static final fun toOutputStream (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;Lkotlinx/coroutines/experimental/Job;)Ljava/io/OutputStream; + public static synthetic fun toOutputStream$default (Lkotlinx/coroutines/experimental/io/ByteWriteChannel;Lkotlinx/coroutines/experimental/Job;ILjava/lang/Object;)Ljava/io/OutputStream; +} + +public final class kotlinx/coroutines/experimental/io/jvm/javaio/ReadingKt { + public static final fun copyTo (Ljava/io/InputStream;Lkotlinx/coroutines/experimental/io/ByteWriteChannel;JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun copyTo$default (Ljava/io/InputStream;Lkotlinx/coroutines/experimental/io/ByteWriteChannel;JLkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/io/jvm/javaio/WritingKt { + public static final fun copyTo (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Ljava/io/OutputStream;JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun copyTo$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Ljava/io/OutputStream;JLkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/io/jvm/nio/ReadingKt { + public static final fun copyTo (Ljava/nio/channels/Pipe;Lkotlinx/coroutines/experimental/io/ByteWriteChannel;JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun copyTo (Ljava/nio/channels/ReadableByteChannel;Lkotlinx/coroutines/experimental/io/ByteWriteChannel;JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun copyTo$default (Ljava/nio/channels/Pipe;Lkotlinx/coroutines/experimental/io/ByteWriteChannel;JLkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static synthetic fun copyTo$default (Ljava/nio/channels/ReadableByteChannel;Lkotlinx/coroutines/experimental/io/ByteWriteChannel;JLkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/io/jvm/nio/WritingKt { + public static final fun copyTo (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Ljava/nio/channels/Pipe;JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun copyTo (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Ljava/nio/channels/WritableByteChannel;JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun copyTo$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Ljava/nio/channels/Pipe;JLkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static synthetic fun copyTo$default (Lkotlinx/coroutines/experimental/io/ByteReadChannel;Ljava/nio/channels/WritableByteChannel;JLkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/io/packet/ByteReadPacketEmptyKt { + public static final fun getByteReadPacketEmpty ()Lkotlinx/io/core/ByteReadPacket; +} + +public final class kotlinx/coroutines/experimental/io/packet/PacketsKt { + public static final fun WritePacket (I)Lkotlinx/io/core/BytePacketBuilder; + public static synthetic fun WritePacket$default (IILjava/lang/Object;)Lkotlinx/io/core/BytePacketBuilder; +} + diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-javafx.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-javafx.txt new file mode 100644 index 00000000..aa1216f2 --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-javafx.txt @@ -0,0 +1,10 @@ +public final class kotlinx/coroutines/experimental/javafx/JavaFx : kotlinx/coroutines/experimental/CoroutineDispatcher, kotlinx/coroutines/experimental/Delay { + public static final field INSTANCE Lkotlinx/coroutines/experimental/javafx/JavaFx; + public final fun awaitPulse (Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public fun delay (JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public fun dispatch (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Runnable;)V + public fun invokeOnTimeout (JLjava/util/concurrent/TimeUnit;Ljava/lang/Runnable;)Lkotlinx/coroutines/experimental/DisposableHandle; + public fun scheduleResumeAfterDelay (JLjava/util/concurrent/TimeUnit;Lkotlinx/coroutines/experimental/CancellableContinuation;)V + public fun toString ()Ljava/lang/String; +} + diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-jdk8.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-jdk8.txt new file mode 100644 index 00000000..c2c5c4b8 --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-jdk8.txt @@ -0,0 +1,32 @@ +public final class kotlinx/coroutines/experimental/channels8/ChannelsKt { + public static final fun asReceiveChannel (Ljava/util/stream/Stream;Lkotlin/coroutines/experimental/CoroutineContext;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static synthetic fun asReceiveChannel$default (Ljava/util/stream/Stream;Lkotlin/coroutines/experimental/CoroutineContext;ILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/ReceiveChannel; + public static final fun asStream (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;)Ljava/util/stream/Stream; + public static final fun collect (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Ljava/util/stream/Collector;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/future/FutureKt { + public static final fun asCompletableFuture (Lkotlinx/coroutines/experimental/Deferred;)Ljava/util/concurrent/CompletableFuture; + public static final fun asDeferred (Ljava/util/concurrent/CompletionStage;)Lkotlinx/coroutines/experimental/Deferred; + public static final synthetic fun await (Ljava/util/concurrent/CompletableFuture;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun await (Ljava/util/concurrent/CompletionStage;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final synthetic fun future (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function1;)Ljava/util/concurrent/CompletableFuture; + public static final synthetic fun future (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function2;)Ljava/util/concurrent/CompletableFuture; + public static final fun future (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Ljava/util/concurrent/CompletableFuture; + public static final synthetic fun future (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Ljava/util/concurrent/CompletableFuture; + public static synthetic fun future$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/util/concurrent/CompletableFuture; + public static synthetic fun future$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Ljava/util/concurrent/CompletableFuture; + public static synthetic fun future$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Ljava/util/concurrent/CompletableFuture; + public static synthetic fun future$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/CoroutineStart;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Ljava/util/concurrent/CompletableFuture; + public static final fun toCompletableFuture (Lkotlinx/coroutines/experimental/Deferred;)Ljava/util/concurrent/CompletableFuture; +} + +public final class kotlinx/coroutines/experimental/time/TimeKt { + public static final fun delay (Ljava/time/Duration;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun onTimeout (Lkotlinx/coroutines/experimental/selects/SelectBuilder;Ljava/time/Duration;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final synthetic fun withTimeout (Ljava/time/Duration;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun withTimeout (Ljava/time/Duration;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final synthetic fun withTimeoutOrNull (Ljava/time/Duration;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun withTimeoutOrNull (Ljava/time/Duration;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-nio.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-nio.txt new file mode 100644 index 00000000..1db71459 --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-nio.txt @@ -0,0 +1,13 @@ +public final class kotlinx/coroutines/experimental/nio/NioKt { + public static final fun aAccept (Ljava/nio/channels/AsynchronousServerSocketChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun aConnect (Ljava/nio/channels/AsynchronousSocketChannel;Ljava/net/SocketAddress;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun aLock (Ljava/nio/channels/AsynchronousFileChannel;JJZLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun aLock (Ljava/nio/channels/AsynchronousFileChannel;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun aRead (Ljava/nio/channels/AsynchronousFileChannel;Ljava/nio/ByteBuffer;JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun aRead (Ljava/nio/channels/AsynchronousSocketChannel;Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun aRead$default (Ljava/nio/channels/AsynchronousSocketChannel;Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun aWrite (Ljava/nio/channels/AsynchronousFileChannel;Ljava/nio/ByteBuffer;JLkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun aWrite (Ljava/nio/channels/AsynchronousSocketChannel;Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static synthetic fun aWrite$default (Ljava/nio/channels/AsynchronousSocketChannel;Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +} + diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-quasar.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-quasar.txt new file mode 100644 index 00000000..b5fe0e39 --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-quasar.txt @@ -0,0 +1,10 @@ +public final class kotlinx/coroutines/experimental/quasar/KotlinSuspendableClassifier : co/paralleluniverse/fibers/instrument/SuspendableClassifier { + public fun <init> ()V + public fun isSuspendable (Lco/paralleluniverse/fibers/instrument/MethodDatabase;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Lco/paralleluniverse/fibers/instrument/MethodDatabase$SuspendableType; +} + +public final class kotlinx/coroutines/experimental/quasar/QuasarKt { + public static final fun runFiberBlocking (Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun runSuspendable (Lco/paralleluniverse/strands/SuspendableCallable;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-reactive.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-reactive.txt new file mode 100644 index 00000000..fc61a0aa --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-reactive.txt @@ -0,0 +1,32 @@ +public final class kotlinx/coroutines/experimental/reactive/AwaitKt { + public static final fun awaitFirst (Lorg/reactivestreams/Publisher;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitFirstOrDefault (Lorg/reactivestreams/Publisher;Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitFirstOrElse (Lorg/reactivestreams/Publisher;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitFirstOrNull (Lorg/reactivestreams/Publisher;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitLast (Lorg/reactivestreams/Publisher;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitSingle (Lorg/reactivestreams/Publisher;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/reactive/ChannelKt { + public static final synthetic fun consumeEach (Lorg/reactivestreams/Publisher;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun iterator (Lorg/reactivestreams/Publisher;)Lkotlinx/coroutines/experimental/channels/ChannelIterator; + public static final fun open (Lorg/reactivestreams/Publisher;)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public static final fun openSubscription (Lorg/reactivestreams/Publisher;)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public static final fun openSubscription (Lorg/reactivestreams/Publisher;I)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public static synthetic fun openSubscription$default (Lorg/reactivestreams/Publisher;IILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; +} + +public final class kotlinx/coroutines/experimental/reactive/ConvertKt { + public static final fun asPublisher (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;)Lorg/reactivestreams/Publisher; + public static synthetic fun asPublisher$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;ILjava/lang/Object;)Lorg/reactivestreams/Publisher; + public static final fun toPublisher (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;)Lorg/reactivestreams/Publisher; +} + +public final class kotlinx/coroutines/experimental/reactive/PublishKt { + public static final synthetic fun publish (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lorg/reactivestreams/Publisher; + public static final fun publish (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lorg/reactivestreams/Publisher; + public static final synthetic fun publish (Lkotlin/jvm/functions/Function2;)Lorg/reactivestreams/Publisher; + public static synthetic fun publish$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lorg/reactivestreams/Publisher; + public static synthetic fun publish$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lorg/reactivestreams/Publisher; +} + diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-reactor.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-reactor.txt new file mode 100644 index 00000000..06b26a2f --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-reactor.txt @@ -0,0 +1,38 @@ +public final class kotlinx/coroutines/experimental/reactor/ConvertKt { + public static final fun asFlux (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;)Lreactor/core/publisher/Flux; + public static synthetic fun asFlux$default (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;ILjava/lang/Object;)Lreactor/core/publisher/Flux; + public static final fun asMono (Lkotlinx/coroutines/experimental/Deferred;Lkotlin/coroutines/experimental/CoroutineContext;)Lreactor/core/publisher/Mono; + public static final fun asMono (Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/CoroutineContext;)Lreactor/core/publisher/Mono; + public static synthetic fun asMono$default (Lkotlinx/coroutines/experimental/Deferred;Lkotlin/coroutines/experimental/CoroutineContext;ILjava/lang/Object;)Lreactor/core/publisher/Mono; + public static synthetic fun asMono$default (Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/CoroutineContext;ILjava/lang/Object;)Lreactor/core/publisher/Mono; +} + +public final class kotlinx/coroutines/experimental/reactor/FluxKt { + public static final fun flux (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lreactor/core/publisher/Flux; + public static final fun flux (Lkotlin/jvm/functions/Function2;)Lreactor/core/publisher/Flux; + public static synthetic fun flux$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lreactor/core/publisher/Flux; +} + +public final class kotlinx/coroutines/experimental/reactor/MonoKt { + public static final synthetic fun mono (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lreactor/core/publisher/Mono; + public static final fun mono (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lreactor/core/publisher/Mono; + public static final synthetic fun mono (Lkotlin/jvm/functions/Function2;)Lreactor/core/publisher/Mono; + public static synthetic fun mono$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lreactor/core/publisher/Mono; + public static synthetic fun mono$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lreactor/core/publisher/Mono; +} + +public class kotlinx/coroutines/experimental/reactor/SchedulerCoroutineDispatcher : kotlinx/coroutines/experimental/CoroutineDispatcher, kotlinx/coroutines/experimental/Delay { + public fun <init> (Lreactor/core/scheduler/Scheduler;)V + public fun delay (JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public fun dispatch (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Runnable;)V + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public fun invokeOnTimeout (JLjava/util/concurrent/TimeUnit;Ljava/lang/Runnable;)Lkotlinx/coroutines/experimental/DisposableHandle; + public fun scheduleResumeAfterDelay (JLjava/util/concurrent/TimeUnit;Lkotlinx/coroutines/experimental/CancellableContinuation;)V + public fun toString ()Ljava/lang/String; +} + +public final class kotlinx/coroutines/experimental/reactor/SchedulerKt { + public static final fun asCoroutineDispatcher (Lreactor/core/scheduler/Scheduler;)Lkotlinx/coroutines/experimental/reactor/SchedulerCoroutineDispatcher; +} + diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-rx1.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-rx1.txt new file mode 100644 index 00000000..67076fa5 --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-rx1.txt @@ -0,0 +1,68 @@ +public final class kotlinx/coroutines/experimental/rx1/RxAwaitKt { + public static final fun await (Lrx/Single;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitCompleted (Lrx/Completable;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitFirst (Lrx/Observable;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitFirstOrDefault (Lrx/Observable;Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitFirstOrElse (Lrx/Observable;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitFirstOrNull (Lrx/Observable;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitLast (Lrx/Observable;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitSingle (Lrx/Observable;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/rx1/RxChannelKt { + public static final synthetic fun consumeEach (Lrx/Observable;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun iterator (Lrx/Observable;)Lkotlinx/coroutines/experimental/channels/ChannelIterator; + public static final fun open (Lrx/Observable;)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public static final fun openSubscription (Lrx/Observable;)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public static final fun openSubscription (Lrx/Observable;I)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public static synthetic fun openSubscription$default (Lrx/Observable;IILjava/lang/Object;)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; +} + +public final class kotlinx/coroutines/experimental/rx1/RxCompletableKt { + public static final synthetic fun rxCompletable (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lrx/Completable; + public static final fun rxCompletable (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lrx/Completable; + public static final synthetic fun rxCompletable (Lkotlin/jvm/functions/Function2;)Lrx/Completable; + public static synthetic fun rxCompletable$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lrx/Completable; + public static synthetic fun rxCompletable$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lrx/Completable; +} + +public final class kotlinx/coroutines/experimental/rx1/RxConvertKt { + public static final fun asCompletable (Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/CoroutineContext;)Lrx/Completable; + public static final fun asObservable (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;)Lrx/Observable; + public static final fun asSingle (Lkotlinx/coroutines/experimental/Deferred;Lkotlin/coroutines/experimental/CoroutineContext;)Lrx/Single; + public static final fun toCompletable (Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/CoroutineContext;)Lrx/Completable; + public static final fun toObservable (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;)Lrx/Observable; + public static final fun toSingle (Lkotlinx/coroutines/experimental/Deferred;Lkotlin/coroutines/experimental/CoroutineContext;)Lrx/Single; +} + +public final class kotlinx/coroutines/experimental/rx1/RxObservableKt { + public static final synthetic fun rxObservable (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lrx/Observable; + public static final fun rxObservable (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lrx/Observable; + public static final synthetic fun rxObservable (Lkotlin/jvm/functions/Function2;)Lrx/Observable; + public static synthetic fun rxObservable$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lrx/Observable; + public static synthetic fun rxObservable$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lrx/Observable; +} + +public final class kotlinx/coroutines/experimental/rx1/RxSchedulerKt { + public static final fun asCoroutineDispatcher (Lrx/Scheduler;)Lkotlinx/coroutines/experimental/rx1/SchedulerCoroutineDispatcher; +} + +public final class kotlinx/coroutines/experimental/rx1/RxSingleKt { + public static final synthetic fun rxSingle (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lrx/Single; + public static final fun rxSingle (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lrx/Single; + public static final synthetic fun rxSingle (Lkotlin/jvm/functions/Function2;)Lrx/Single; + public static synthetic fun rxSingle$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lrx/Single; + public static synthetic fun rxSingle$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lrx/Single; +} + +public final class kotlinx/coroutines/experimental/rx1/SchedulerCoroutineDispatcher : kotlinx/coroutines/experimental/CoroutineDispatcher, kotlinx/coroutines/experimental/Delay { + public fun <init> (Lrx/Scheduler;)V + public fun delay (JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public fun dispatch (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Runnable;)V + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public fun invokeOnTimeout (JLjava/util/concurrent/TimeUnit;Ljava/lang/Runnable;)Lkotlinx/coroutines/experimental/DisposableHandle; + public fun scheduleResumeAfterDelay (JLjava/util/concurrent/TimeUnit;Lkotlinx/coroutines/experimental/CancellableContinuation;)V + public fun toString ()Ljava/lang/String; +} + diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-rx2.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-rx2.txt new file mode 100644 index 00000000..433b74c0 --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-rx2.txt @@ -0,0 +1,85 @@ +public final class kotlinx/coroutines/experimental/rx2/RxAwaitKt { + public static final fun await (Lio/reactivex/CompletableSource;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun await (Lio/reactivex/MaybeSource;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun await (Lio/reactivex/SingleSource;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitFirst (Lio/reactivex/ObservableSource;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitFirstOrDefault (Lio/reactivex/ObservableSource;Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitFirstOrElse (Lio/reactivex/ObservableSource;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitFirstOrNull (Lio/reactivex/ObservableSource;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitLast (Lio/reactivex/ObservableSource;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitOrDefault (Lio/reactivex/MaybeSource;Ljava/lang/Object;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun awaitSingle (Lio/reactivex/ObservableSource;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; +} + +public final class kotlinx/coroutines/experimental/rx2/RxChannelKt { + public static final synthetic fun consumeEach (Lio/reactivex/ObservableSource;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public static final fun iterator (Lio/reactivex/ObservableSource;)Lkotlinx/coroutines/experimental/channels/ChannelIterator; + public static final fun open (Lio/reactivex/MaybeSource;)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public static final fun open (Lio/reactivex/ObservableSource;)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public static final fun openSubscription (Lio/reactivex/MaybeSource;)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; + public static final fun openSubscription (Lio/reactivex/ObservableSource;)Lkotlinx/coroutines/experimental/channels/SubscriptionReceiveChannel; +} + +public final class kotlinx/coroutines/experimental/rx2/RxCompletableKt { + public static final synthetic fun rxCompletable (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lio/reactivex/Completable; + public static final fun rxCompletable (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lio/reactivex/Completable; + public static final synthetic fun rxCompletable (Lkotlin/jvm/functions/Function2;)Lio/reactivex/Completable; + public static synthetic fun rxCompletable$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lio/reactivex/Completable; + public static synthetic fun rxCompletable$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lio/reactivex/Completable; +} + +public final class kotlinx/coroutines/experimental/rx2/RxConvertKt { + public static final fun asCompletable (Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/CoroutineContext;)Lio/reactivex/Completable; + public static final fun asMaybe (Lkotlinx/coroutines/experimental/Deferred;Lkotlin/coroutines/experimental/CoroutineContext;)Lio/reactivex/Maybe; + public static final fun asObservable (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;)Lio/reactivex/Observable; + public static final fun asSingle (Lkotlinx/coroutines/experimental/Deferred;Lkotlin/coroutines/experimental/CoroutineContext;)Lio/reactivex/Single; + public static final fun toCompletable (Lkotlinx/coroutines/experimental/Job;Lkotlin/coroutines/experimental/CoroutineContext;)Lio/reactivex/Completable; + public static final fun toObservable (Lkotlinx/coroutines/experimental/channels/ReceiveChannel;Lkotlin/coroutines/experimental/CoroutineContext;)Lio/reactivex/Observable; + public static final fun toSingle (Lkotlinx/coroutines/experimental/Deferred;Lkotlin/coroutines/experimental/CoroutineContext;)Lio/reactivex/Single; +} + +public final class kotlinx/coroutines/experimental/rx2/RxFlowableKt { + public static final fun rxFlowable (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lio/reactivex/Flowable; + public static final fun rxFlowable (Lkotlin/jvm/functions/Function2;)Lio/reactivex/Flowable; + public static synthetic fun rxFlowable$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lio/reactivex/Flowable; +} + +public final class kotlinx/coroutines/experimental/rx2/RxMaybeKt { + public static final synthetic fun rxMaybe (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lio/reactivex/Maybe; + public static final fun rxMaybe (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lio/reactivex/Maybe; + public static final synthetic fun rxMaybe (Lkotlin/jvm/functions/Function2;)Lio/reactivex/Maybe; + public static synthetic fun rxMaybe$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lio/reactivex/Maybe; + public static synthetic fun rxMaybe$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lio/reactivex/Maybe; +} + +public final class kotlinx/coroutines/experimental/rx2/RxObservableKt { + public static final synthetic fun rxObservable (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lio/reactivex/Observable; + public static final fun rxObservable (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lio/reactivex/Observable; + public static final synthetic fun rxObservable (Lkotlin/jvm/functions/Function2;)Lio/reactivex/Observable; + public static synthetic fun rxObservable$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lio/reactivex/Observable; + public static synthetic fun rxObservable$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lio/reactivex/Observable; +} + +public final class kotlinx/coroutines/experimental/rx2/RxSchedulerKt { + public static final fun asCoroutineDispatcher (Lio/reactivex/Scheduler;)Lkotlinx/coroutines/experimental/rx2/SchedulerCoroutineDispatcher; +} + +public final class kotlinx/coroutines/experimental/rx2/RxSingleKt { + public static final synthetic fun rxSingle (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;)Lio/reactivex/Single; + public static final fun rxSingle (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;)Lio/reactivex/Single; + public static final synthetic fun rxSingle (Lkotlin/jvm/functions/Function2;)Lio/reactivex/Single; + public static synthetic fun rxSingle$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lio/reactivex/Single; + public static synthetic fun rxSingle$default (Lkotlin/coroutines/experimental/CoroutineContext;Lkotlinx/coroutines/experimental/Job;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lio/reactivex/Single; +} + +public final class kotlinx/coroutines/experimental/rx2/SchedulerCoroutineDispatcher : kotlinx/coroutines/experimental/CoroutineDispatcher, kotlinx/coroutines/experimental/Delay { + public fun <init> (Lio/reactivex/Scheduler;)V + public fun delay (JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public fun dispatch (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Runnable;)V + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public fun invokeOnTimeout (JLjava/util/concurrent/TimeUnit;Ljava/lang/Runnable;)Lkotlinx/coroutines/experimental/DisposableHandle; + public fun scheduleResumeAfterDelay (JLjava/util/concurrent/TimeUnit;Lkotlinx/coroutines/experimental/CancellableContinuation;)V + public fun toString ()Ljava/lang/String; +} + diff --git a/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-swing.txt b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-swing.txt new file mode 100644 index 00000000..f41c663b --- /dev/null +++ b/binary-compatibility-validator/reference-public-api/kotlinx-coroutines-swing.txt @@ -0,0 +1,9 @@ +public final class kotlinx/coroutines/experimental/swing/Swing : kotlinx/coroutines/experimental/CoroutineDispatcher, kotlinx/coroutines/experimental/Delay { + public static final field INSTANCE Lkotlinx/coroutines/experimental/swing/Swing; + public fun delay (JLjava/util/concurrent/TimeUnit;Lkotlin/coroutines/experimental/Continuation;)Ljava/lang/Object; + public fun dispatch (Lkotlin/coroutines/experimental/CoroutineContext;Ljava/lang/Runnable;)V + public fun invokeOnTimeout (JLjava/util/concurrent/TimeUnit;Ljava/lang/Runnable;)Lkotlinx/coroutines/experimental/DisposableHandle; + public fun scheduleResumeAfterDelay (JLjava/util/concurrent/TimeUnit;Lkotlinx/coroutines/experimental/CancellableContinuation;)V + public fun toString ()Ljava/lang/String; +} + diff --git a/binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/PublicApiDump.kt b/binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/PublicApiDump.kt new file mode 100644 index 00000000..01f1494d --- /dev/null +++ b/binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/PublicApiDump.kt @@ -0,0 +1,126 @@ +package kotlinx.coroutines.experimental.tools + +import org.objectweb.asm.* +import org.objectweb.asm.tree.* +import java.io.* +import java.util.jar.* + +fun main(args: Array<String>) { + val src = args.firstOrNull() ?: "kotlinx-coroutines-core" + println(src) + println("------------------\n") + val jarFile = "core/$src/build/libs/$src-0.22.5-SNAPSHOT.jar" + val visibilities = readKotlinVisibilities(File("""core/$src/build/visibilities.json""")) + getBinaryAPI(JarFile(jarFile), visibilities).filterOutNonPublic().dump() +} + + +fun JarFile.classEntries() = entries().asSequence().filter { + !it.isDirectory && it.name.endsWith(".class") && !it.name.startsWith("META-INF/") +} + +fun getBinaryAPI(jar: JarFile, visibilityMap: Map<String, ClassVisibility>): List<ClassBinarySignature> = + getBinaryAPI(jar.classEntries().map { entry -> jar.getInputStream(entry) }, visibilityMap) + +fun getBinaryAPI( + classStreams: Sequence<InputStream>, + visibilityMap: Map<String, ClassVisibility> +): List<ClassBinarySignature> = + classStreams.map { + it.use { stream -> + val classNode = ClassNode() + ClassReader(stream).accept(classNode, ClassReader.SKIP_CODE) + classNode + } + }.map { + with(it) { + val classVisibility = visibilityMap[name] + val classAccess = AccessFlags(effectiveAccess and Opcodes.ACC_STATIC.inv()) + val supertypes = listOf(superName) - "java/lang/Object" + interfaces.sorted() + + val memberSignatures = ( + fields.map { + with(it) { + FieldBinarySignature( + name, + desc, + isPublishedApi(), + AccessFlags(access) + ) + } + } + + methods.map { + with(it) { + MethodBinarySignature( + name, + desc, + isPublishedApi(), + AccessFlags(access) + ) + } + } + ).filter { + it.isEffectivelyPublic(classAccess, classVisibility) + } + + ClassBinarySignature( + name, + superName, + outerClassName, + supertypes, + memberSignatures, + classAccess, + isEffectivelyPublic(classVisibility), + isFileOrMultipartFacade() || isDefaultImpls() + ) + } + }.asIterable().sortedBy { it.name } + + +fun List<ClassBinarySignature>.filterOutNonPublic(nonPublicPackages: List<String> = emptyList()): List<ClassBinarySignature> { + val nonPublicPaths = nonPublicPackages.map { it.replace('.', '/') + '/' } + val classByName = associateBy { it.name } + + fun ClassBinarySignature.isInNonPublicPackage() = + nonPublicPaths.any { name.startsWith(it) } + + fun ClassBinarySignature.isPublicAndAccessible(): Boolean = + isEffectivelyPublic && + (outerName == null || classByName[outerName]?.let { outerClass -> + !(this.access.isProtected && outerClass.access.isFinal) + && outerClass.isPublicAndAccessible() + } ?: true) + + fun supertypes(superName: String) = generateSequence({ classByName[superName] }, { classByName[it.superName] }) + + fun ClassBinarySignature.flattenNonPublicBases(): ClassBinarySignature { + + val nonPublicSupertypes = supertypes(superName).takeWhile { !it.isPublicAndAccessible() }.toList() + if (nonPublicSupertypes.isEmpty()) + return this + + val inheritedStaticSignatures = + nonPublicSupertypes.flatMap { it.memberSignatures.filter { it.access.isStatic } } + + // not covered the case when there is public superclass after chain of private superclasses + return this.copy( + memberSignatures = memberSignatures + inheritedStaticSignatures, + supertypes = supertypes - superName + ) + } + + return filter { !it.isInNonPublicPackage() && it.isPublicAndAccessible() } + .map { it.flattenNonPublicBases() } + .filterNot { it.isNotUsedWhenEmpty && it.memberSignatures.isEmpty() } +} + +fun List<ClassBinarySignature>.dump() = dump(to = System.out) + +fun <T : Appendable> List<ClassBinarySignature>.dump(to: T): T = to.apply { + this@dump.forEach { + append(it.signature).appendln(" {") + it.memberSignatures.sortedWith(MEMBER_SORT_ORDER).forEach { append("\t").appendln(it.signature) } + appendln("}\n") + } +} + diff --git a/binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/asmUtils.kt b/binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/asmUtils.kt new file mode 100644 index 00000000..a83cb824 --- /dev/null +++ b/binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/asmUtils.kt @@ -0,0 +1,169 @@ +package kotlinx.coroutines.experimental.tools + +import org.objectweb.asm.* +import org.objectweb.asm.tree.* + +val ACCESS_NAMES = mapOf( + Opcodes.ACC_PUBLIC to "public", + Opcodes.ACC_PROTECTED to "protected", + Opcodes.ACC_PRIVATE to "private", + Opcodes.ACC_STATIC to "static", + Opcodes.ACC_FINAL to "final", + Opcodes.ACC_ABSTRACT to "abstract", + Opcodes.ACC_SYNTHETIC to "synthetic", + Opcodes.ACC_INTERFACE to "interface", + Opcodes.ACC_ANNOTATION to "annotation") + +data class ClassBinarySignature( + val name: String, + val superName: String, + val outerName: String?, + val supertypes: List<String>, + val memberSignatures: List<MemberBinarySignature>, + val access: AccessFlags, + val isEffectivelyPublic: Boolean, + val isNotUsedWhenEmpty: Boolean) { + + val signature: String + get() = "${access.getModifierString()} class $name" + if (supertypes.isEmpty()) "" else " : ${supertypes.joinToString()}" + +} + + +interface MemberBinarySignature { + val name: String + val desc: String + val access: AccessFlags + val isPublishedApi: Boolean + + fun isEffectivelyPublic(classAccess: AccessFlags, classVisibility: ClassVisibility?) + = access.isPublic && !(access.isProtected && classAccess.isFinal) + && (findMemberVisibility(classVisibility)?.isPublic(isPublishedApi) ?: true) + + fun findMemberVisibility(classVisibility: ClassVisibility?) + = classVisibility?.members?.get(MemberSignature(name, desc)) + + val signature: String +} + +data class MethodBinarySignature( + override val name: String, + override val desc: String, + override val isPublishedApi: Boolean, + override val access: AccessFlags) : MemberBinarySignature { + override val signature: String + get() = "${access.getModifierString()} fun $name $desc" + + override fun isEffectivelyPublic(classAccess: AccessFlags, classVisibility: ClassVisibility?) + = super.isEffectivelyPublic(classAccess, classVisibility) + && !isAccessOrAnnotationsMethod() + + private fun isAccessOrAnnotationsMethod() = access.isSynthetic && (name.startsWith("access\$") || name.endsWith("\$annotations")) +} + +data class FieldBinarySignature( + override val name: String, + override val desc: String, + override val isPublishedApi: Boolean, + override val access: AccessFlags) : MemberBinarySignature { + override val signature: String + get() = "${access.getModifierString()} field $name $desc" + + override fun findMemberVisibility(classVisibility: ClassVisibility?): MemberVisibility? { + val fieldVisibility = super.findMemberVisibility(classVisibility) ?: return null + + // good case for 'satisfying': fieldVisibility.satisfying { it.isLateInit() }?.let { classVisibility?.findSetterForProperty(it) } + if (fieldVisibility.isLateInit()) { + classVisibility?.findSetterForProperty(fieldVisibility)?.let { return it } + } + return fieldVisibility + } +} + +val MemberBinarySignature.kind: Int get() = when (this) { + is FieldBinarySignature -> 1 + is MethodBinarySignature -> 2 + else -> error("Unsupported $this") +} + +val MEMBER_SORT_ORDER = compareBy<MemberBinarySignature>( + { it.kind }, + { it.name }, + { it.desc } +) + + +data class AccessFlags(val access: Int) { + val isPublic: Boolean get() = isPublic(access) + val isProtected: Boolean get() = isProtected(access) + val isStatic: Boolean get() = isStatic(access) + val isFinal: Boolean get() = isFinal(access) + val isSynthetic: Boolean get() = isSynthetic(access) + + fun getModifiers(): List<String> = ACCESS_NAMES.entries.mapNotNull { if (access and it.key != 0) it.value else null } + fun getModifierString(): String = getModifiers().joinToString(" ") +} + +fun isPublic(access: Int) = access and Opcodes.ACC_PUBLIC != 0 || access and Opcodes.ACC_PROTECTED != 0 +fun isProtected(access: Int) = access and Opcodes.ACC_PROTECTED != 0 +fun isStatic(access: Int) = access and Opcodes.ACC_STATIC != 0 +fun isFinal(access: Int) = access and Opcodes.ACC_FINAL != 0 +fun isSynthetic(access: Int) = access and Opcodes.ACC_SYNTHETIC != 0 + + +fun ClassNode.isEffectivelyPublic(classVisibility: ClassVisibility?) = + isPublic(access) + && !isLocal() + && !isWhenMappings() + && (classVisibility?.isPublic(isPublishedApi()) ?: true) + + +val ClassNode.innerClassNode: InnerClassNode? get() = innerClasses.singleOrNull { it.name == name } +fun ClassNode.isLocal() = innerClassNode?.run { innerName == null && outerName == null} ?: false +fun ClassNode.isInner() = innerClassNode != null +fun ClassNode.isWhenMappings() = isSynthetic(access) && name.endsWith("\$WhenMappings") + +val ClassNode.effectiveAccess: Int get() = innerClassNode?.access ?: access +val ClassNode.outerClassName: String? get() = innerClassNode?.outerName + + +const val publishedApiAnnotationName = "kotlin/PublishedApi" +fun ClassNode.isPublishedApi() = findAnnotation(publishedApiAnnotationName, includeInvisible = true) != null +fun MethodNode.isPublishedApi() = findAnnotation(publishedApiAnnotationName, includeInvisible = true) != null +fun FieldNode.isPublishedApi() = findAnnotation(publishedApiAnnotationName, includeInvisible = true) != null + + +private object KotlinClassKind { + const val FILE = 2 + const val SYNTHETIC_CLASS = 3 + const val MULTIPART_FACADE = 4 + + val FILE_OR_MULTIPART_FACADE_KINDS = listOf(FILE, MULTIPART_FACADE) +} + +fun ClassNode.isFileOrMultipartFacade() = kotlinClassKind.let { it != null && it in KotlinClassKind.FILE_OR_MULTIPART_FACADE_KINDS } +fun ClassNode.isDefaultImpls() = isInner() && name.endsWith("\$DefaultImpls") && kotlinClassKind == KotlinClassKind.SYNTHETIC_CLASS + + +val ClassNode.kotlinClassKind: Int? + get() = findAnnotation("kotlin/Metadata", false)?.get("k") as Int? + +fun ClassNode.findAnnotation(annotationName: String, includeInvisible: Boolean = false) = findAnnotation(annotationName, visibleAnnotations, invisibleAnnotations, includeInvisible) +fun MethodNode.findAnnotation(annotationName: String, includeInvisible: Boolean = false) = findAnnotation(annotationName, visibleAnnotations, invisibleAnnotations, includeInvisible) +fun FieldNode.findAnnotation(annotationName: String, includeInvisible: Boolean = false) = findAnnotation(annotationName, visibleAnnotations, invisibleAnnotations, includeInvisible) + +operator fun AnnotationNode.get(key: String): Any? = values.annotationValue(key) + +private fun List<Any>.annotationValue(key: String): Any? { + for (index in (0 .. size / 2 - 1)) { + if (this[index*2] == key) + return this[index*2 + 1] + } + return null +} + +private fun findAnnotation(annotationName: String, visibleAnnotations: List<AnnotationNode>?, invisibleAnnotations: List<AnnotationNode>?, includeInvisible: Boolean): AnnotationNode? = + visibleAnnotations?.firstOrNull { it.refersToName(annotationName) } ?: + if (includeInvisible) invisibleAnnotations?.firstOrNull { it.refersToName(annotationName) } else null + +fun AnnotationNode.refersToName(name: String) = desc.startsWith('L') && desc.endsWith(';') && desc.regionMatches(1, name, 0, name.length)
\ No newline at end of file diff --git a/binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/kotlinVisibilities.kt b/binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/kotlinVisibilities.kt new file mode 100644 index 00000000..2a162c12 --- /dev/null +++ b/binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/kotlinVisibilities.kt @@ -0,0 +1,53 @@ +package kotlinx.coroutines.experimental.tools + +import com.google.gson.internal.* +import com.google.gson.stream.* +import java.io.* + +data class ClassVisibility(val name: String, val visibility: String?, val members: Map<MemberSignature, MemberVisibility>) +data class MemberVisibility(val member: MemberSignature, val declaration: String?, val visibility: String?) +data class MemberSignature(val name: String, val desc: String) + +private fun isPublic(visibility: String?, isPublishedApi: Boolean) = visibility == null || visibility == "public" || visibility == "protected" || (isPublishedApi && visibility == "internal") +fun ClassVisibility.isPublic(isPublishedApi: Boolean) = isPublic(visibility, isPublishedApi) +fun MemberVisibility.isPublic(isPublishedApi: Boolean) = isPublic(visibility, isPublishedApi) + +fun MemberVisibility.isLateInit() = declaration != null && "lateinit var " in declaration + +private val varValPrefix = Regex("va[lr]\\s+") +fun ClassVisibility.findSetterForProperty(property: MemberVisibility): MemberVisibility? { + // ad-hoc solution: + val declaration = property.declaration ?: return null + val match = varValPrefix.find(declaration) ?: return null + val name = declaration.substring(match.range.endInclusive + 1).substringBefore(':') + val setterName = "<set-$name>" + return members.values.find { it.declaration?.contains(setterName) ?: false } +} + +fun readKotlinVisibilities(declarationFile: File): Map<String, ClassVisibility> { + val result = mutableListOf<ClassVisibility>() + declarationFile.bufferedReader().use { reader -> + val jsonReader = JsonReader(reader) + jsonReader.beginArray() + while (jsonReader.hasNext()) { + val classObject = Streams.parse(jsonReader).asJsonObject + result += with (classObject) { + val name = getAsJsonPrimitive("class").asString + val visibility = getAsJsonPrimitive("visibility")?.asString + val members = getAsJsonArray("members").map { it -> + with(it.asJsonObject) { + val name = getAsJsonPrimitive("name").asString + val desc = getAsJsonPrimitive("desc").asString + val declaration = getAsJsonPrimitive("declaration")?.asString + val visibility = getAsJsonPrimitive("visibility")?.asString + MemberVisibility(MemberSignature(name, desc), declaration, visibility) + } + } + ClassVisibility(name, visibility, members.associateByTo(hashMapOf()) { it.member }) + } + } + jsonReader.endArray() + } + + return result.associateByTo(hashMapOf()) { it.name } +} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/companions/companions.kt b/binary-compatibility-validator/src/test/kotlin/cases/companions/companions.kt new file mode 100644 index 00000000..8ca3a82a --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/companions/companions.kt @@ -0,0 +1,102 @@ +package cases.companions + + +object PublicClasses { + class PublicCompanion { + companion object + } + + class ProtectedCompanion { + protected companion object + } + + abstract class AbstractProtectedCompanion { + protected companion object + } + + class InternalCompanion { + internal companion object + } + + class PrivateCompanion { + private companion object + } +} + +object PublicInterfaces { + interface PublicCompanion { + companion object + } + + interface PrivateCompanion { + private companion object + } +} + + + +object InternalClasses { + internal class PublicCompanion { + companion object + } + + internal class ProtectedCompanion { + protected companion object + } + + internal abstract class AbstractProtectedCompanion { + protected companion object + } + + internal class InternalCompanion { + internal companion object + } + + internal class PrivateCompanion { + private companion object + } +} + +object InternalInterfaces { + internal interface PublicCompanion { + companion object + } + + internal interface PrivateCompanion { + private companion object + } +} + + +object PrivateClasses { + private class PublicCompanion { + companion object + } + + private class ProtectedCompanion { + protected companion object + } + + private abstract class AbstractProtectedCompanion { + protected companion object + } + + private class InternalCompanion { + internal companion object + } + + private class PrivateCompanion { + private companion object + } +} + +object PrivateInterfaces { + private interface PublicCompanion { + companion object + } + + private interface PrivateCompanion { + private companion object + } +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/companions/companions.txt b/binary-compatibility-validator/src/test/kotlin/cases/companions/companions.txt new file mode 100644 index 00000000..691907ba --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/companions/companions.txt @@ -0,0 +1,66 @@ +public final class cases/companions/InternalClasses { + public static final field INSTANCE Lcases/companions/InternalClasses; +} + +public final class cases/companions/InternalInterfaces { + public static final field INSTANCE Lcases/companions/InternalInterfaces; +} + +public final class cases/companions/PrivateClasses { + public static final field INSTANCE Lcases/companions/PrivateClasses; +} + +public final class cases/companions/PrivateInterfaces { + public static final field INSTANCE Lcases/companions/PrivateInterfaces; +} + +public final class cases/companions/PublicClasses { + public static final field INSTANCE Lcases/companions/PublicClasses; +} + +public abstract class cases/companions/PublicClasses$AbstractProtectedCompanion { + public static final field Companion Lcases/companions/PublicClasses$AbstractProtectedCompanion$Companion; + public fun <init> ()V +} + +protected final class cases/companions/PublicClasses$AbstractProtectedCompanion$Companion { +} + +public final class cases/companions/PublicClasses$InternalCompanion { + public static final field Companion Lcases/companions/PublicClasses$InternalCompanion$Companion; + public fun <init> ()V +} + +public final class cases/companions/PublicClasses$PrivateCompanion { + public static final field Companion Lcases/companions/PublicClasses$PrivateCompanion$Companion; + public fun <init> ()V +} + +public final class cases/companions/PublicClasses$ProtectedCompanion { + public static final field Companion Lcases/companions/PublicClasses$ProtectedCompanion$Companion; + public fun <init> ()V +} + +public final class cases/companions/PublicClasses$PublicCompanion { + public static final field Companion Lcases/companions/PublicClasses$PublicCompanion$Companion; + public fun <init> ()V +} + +public final class cases/companions/PublicClasses$PublicCompanion$Companion { +} + +public final class cases/companions/PublicInterfaces { + public static final field INSTANCE Lcases/companions/PublicInterfaces; +} + +public abstract interface class cases/companions/PublicInterfaces$PrivateCompanion { + public static final field Companion Lcases/companions/PublicInterfaces$PrivateCompanion$Companion; +} + +public abstract interface class cases/companions/PublicInterfaces$PublicCompanion { + public static final field Companion Lcases/companions/PublicInterfaces$PublicCompanion$Companion; +} + +public final class cases/companions/PublicInterfaces$PublicCompanion$Companion { +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/inline/inline.txt b/binary-compatibility-validator/src/test/kotlin/cases/inline/inline.txt new file mode 100644 index 00000000..4961dbcf --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/inline/inline.txt @@ -0,0 +1,9 @@ +public final class cases/inline/InlineExposedKt { + public static final fun exposedForInline ()V +} + +public final class cases/inline/InternalClassExposed { + public fun <init> ()V + public final fun funExposed ()V +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/inline/inlineExposed.kt b/binary-compatibility-validator/src/test/kotlin/cases/inline/inlineExposed.kt new file mode 100644 index 00000000..5aee74a8 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/inline/inlineExposed.kt @@ -0,0 +1,24 @@ +package cases.inline + +@PublishedApi +internal fun exposedForInline() {} + +@PublishedApi +internal class InternalClassExposed + @PublishedApi + internal constructor() { + + @PublishedApi + internal fun funExposed() {} + + // TODO: Cover unsupported cases: requires correctly reflecting annotations from properties + /* + @PublishedApi + internal var propertyExposed: String? = null + + @JvmField + @PublishedApi + internal var fieldExposed: String? = null + */ + +} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/inline/inlineOnly.kt b/binary-compatibility-validator/src/test/kotlin/cases/inline/inlineOnly.kt new file mode 100644 index 00000000..c4717049 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/inline/inlineOnly.kt @@ -0,0 +1,5 @@ +package cases.inline + +@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") +@kotlin.internal.InlineOnly +public inline fun inlineOnly(f: () -> Unit) = f()
\ No newline at end of file diff --git a/binary-compatibility-validator/src/test/kotlin/cases/interfaces/interfaceWithEmptyImpls.kt b/binary-compatibility-validator/src/test/kotlin/cases/interfaces/interfaceWithEmptyImpls.kt new file mode 100644 index 00000000..c27d0954 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/interfaces/interfaceWithEmptyImpls.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cases.interfaces + +public interface EmptyImpls { + @SinceKotlin("1.1") + val property: String +} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/interfaces/interfaceWithImpls.kt b/binary-compatibility-validator/src/test/kotlin/cases/interfaces/interfaceWithImpls.kt new file mode 100644 index 00000000..3df99c1e --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/interfaces/interfaceWithImpls.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cases.interfaces + +public interface BaseWithImpl { + fun foo() = 42 +} + +public interface DerivedWithImpl : BaseWithImpl { + override fun foo(): Int { + return super.foo() + 1 + } +} + +public interface DerivedWithoutImpl : BaseWithImpl + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/interfaces/interfaces.txt b/binary-compatibility-validator/src/test/kotlin/cases/interfaces/interfaces.txt new file mode 100644 index 00000000..4f37b42f --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/interfaces/interfaces.txt @@ -0,0 +1,27 @@ +public abstract interface class cases/interfaces/BaseWithImpl { + public abstract fun foo ()I +} + +public final class cases/interfaces/BaseWithImpl$DefaultImpls { + public static fun foo (Lcases/interfaces/BaseWithImpl;)I +} + +public abstract interface class cases/interfaces/DerivedWithImpl : cases/interfaces/BaseWithImpl { + public abstract fun foo ()I +} + +public final class cases/interfaces/DerivedWithImpl$DefaultImpls { + public static fun foo (Lcases/interfaces/DerivedWithImpl;)I +} + +public abstract interface class cases/interfaces/DerivedWithoutImpl : cases/interfaces/BaseWithImpl { +} + +public final class cases/interfaces/DerivedWithoutImpl$DefaultImpls { + public static fun foo (Lcases/interfaces/DerivedWithoutImpl;)I +} + +public abstract interface class cases/interfaces/EmptyImpls { + public abstract fun getProperty ()Ljava/lang/String; +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/internal/internal.txt b/binary-compatibility-validator/src/test/kotlin/cases/internal/internal.txt new file mode 100644 index 00000000..2ebfa3af --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/internal/internal.txt @@ -0,0 +1,3 @@ +public final class cases/internal/PublicClass { +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/internal/internalClass.kt b/binary-compatibility-validator/src/test/kotlin/cases/internal/internalClass.kt new file mode 100644 index 00000000..521c627e --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/internal/internalClass.kt @@ -0,0 +1,7 @@ +package cases.internal + +internal class InternalClass { + public val property = 1 + + public fun function() = property +}
\ No newline at end of file diff --git a/binary-compatibility-validator/src/test/kotlin/cases/internal/internalMultifile1.kt b/binary-compatibility-validator/src/test/kotlin/cases/internal/internalMultifile1.kt new file mode 100644 index 00000000..1f75d5b1 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/internal/internalMultifile1.kt @@ -0,0 +1,5 @@ +@file:JvmName("MultifileKt") +@file:JvmMultifileClass +package cases.internal + +internal fun internalFun1() = internalVal diff --git a/binary-compatibility-validator/src/test/kotlin/cases/internal/internalMultifile2.kt b/binary-compatibility-validator/src/test/kotlin/cases/internal/internalMultifile2.kt new file mode 100644 index 00000000..d49bf816 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/internal/internalMultifile2.kt @@ -0,0 +1,5 @@ +@file:JvmName("MultifileKt") +@file:JvmMultifileClass +package cases.internal + +internal val internalVal = "Internal" diff --git a/binary-compatibility-validator/src/test/kotlin/cases/internal/internalPart.kt b/binary-compatibility-validator/src/test/kotlin/cases/internal/internalPart.kt new file mode 100644 index 00000000..2703eac4 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/internal/internalPart.kt @@ -0,0 +1,7 @@ +package cases.internal + +internal fun internalFun() { + +} + +// TODO: var, val, const
\ No newline at end of file diff --git a/binary-compatibility-validator/src/test/kotlin/cases/internal/publicClassInternalMember.kt b/binary-compatibility-validator/src/test/kotlin/cases/internal/publicClassInternalMember.kt new file mode 100644 index 00000000..e0b37206 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/internal/publicClassInternalMember.kt @@ -0,0 +1,9 @@ +package cases.internal + +public class PublicClass internal constructor() { + + internal val property = 1 + + internal fun function() = property + +} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/java/Facade.java b/binary-compatibility-validator/src/test/kotlin/cases/java/Facade.java new file mode 100644 index 00000000..d7757d51 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/java/Facade.java @@ -0,0 +1,12 @@ +package cases.java; + +class Part1 { + public static void publicMethod(int param) { } + + public static class Part2 extends Part1 { + public static void publicMethod(String param) { } + } +} + + +public class Facade extends Part1.Part2 { } diff --git a/binary-compatibility-validator/src/test/kotlin/cases/java/java.txt b/binary-compatibility-validator/src/test/kotlin/cases/java/java.txt new file mode 100644 index 00000000..75bfd317 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/java/java.txt @@ -0,0 +1,6 @@ +public class cases/java/Facade { + public fun <init> ()V + public static fun publicMethod (I)V + public static fun publicMethod (Ljava/lang/String;)V +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/localClasses/fromStdlib.kt b/binary-compatibility-validator/src/test/kotlin/cases/localClasses/fromStdlib.kt new file mode 100644 index 00000000..bfbb36cd --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/localClasses/fromStdlib.kt @@ -0,0 +1,3 @@ +package cases.localClasses + +private val COMPARER = compareBy<String> { it.length }
\ No newline at end of file diff --git a/binary-compatibility-validator/src/test/kotlin/cases/localClasses/lambdas.kt b/binary-compatibility-validator/src/test/kotlin/cases/localClasses/lambdas.kt new file mode 100644 index 00000000..6ecfc3ac --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/localClasses/lambdas.kt @@ -0,0 +1,20 @@ +package cases.localClasses + + +class L { + internal fun a(lambda: () -> Unit) = lambda() + + @Suppress("NOTHING_TO_INLINE") + internal inline fun inlineLambda() { + a { + println("OK") + } + } +} + +fun box() { + L().inlineLambda() +} + + +// TODO: inline lambda from stdlib
\ No newline at end of file diff --git a/binary-compatibility-validator/src/test/kotlin/cases/localClasses/localClasses.kt b/binary-compatibility-validator/src/test/kotlin/cases/localClasses/localClasses.kt new file mode 100644 index 00000000..b7dc323e --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/localClasses/localClasses.kt @@ -0,0 +1,23 @@ +package cases.localClasses + +class A { + fun a() : String { + class B() { + fun s() : String = "OK" + + inner class C {} + + } + return B().s() + } +} + + +class B { + fun a(p: String) : String { + class B() { + fun s() : String = p + } + return B().s() + } +} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/localClasses/localClasses.txt b/binary-compatibility-validator/src/test/kotlin/cases/localClasses/localClasses.txt new file mode 100644 index 00000000..da0d668c --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/localClasses/localClasses.txt @@ -0,0 +1,18 @@ +public final class cases/localClasses/A { + public fun <init> ()V + public final fun a ()Ljava/lang/String; +} + +public final class cases/localClasses/B { + public fun <init> ()V + public final fun a (Ljava/lang/String;)Ljava/lang/String; +} + +public final class cases/localClasses/L { + public fun <init> ()V +} + +public final class cases/localClasses/LambdasKt { + public static final fun box ()V +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/internalClass.kt b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/internalClass.kt new file mode 100644 index 00000000..5d580c29 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/internalClass.kt @@ -0,0 +1,24 @@ +package cases.nestedClasses + +internal class InternalClass { + public object ObjPublic + internal object ObjInternal + protected object ObjProtected + private object ObjPrivate + + public class NestedPublic + internal class NestedInternal + protected class NestedProtected + private class NestedPrivate + + public interface NestedPublicInterface + internal interface NestedInternalInterface + protected interface NestedProtectedInterface + private interface NestedPrivateInterface + + public inner class InnerPublic + internal inner class InnerInternal + protected inner class InnerProtected + private inner class InnerPrivate +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/internalInterface.kt b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/internalInterface.kt new file mode 100644 index 00000000..673aeadd --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/internalInterface.kt @@ -0,0 +1,14 @@ +package cases.nestedClasses + +internal interface InternalInterface { + public object ObjPublic + private object ObjPrivate + + public class NestedPublic + private class NestedPrivate + + public interface NestedPublicInterface + private interface NestedPrivateInterface + +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/internalObject.kt b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/internalObject.kt new file mode 100644 index 00000000..cbb4c6ed --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/internalObject.kt @@ -0,0 +1,17 @@ +package cases.nestedClasses + +internal object InternalObject { + + public object ObjPublic + internal object ObjInternal + private object ObjPrivate + + public class NestedPublic + internal class NestedInternal + private class NestedPrivate + + public interface NestedPublicInterface + internal interface NestedInternalInterface + private interface NestedPrivateInterface +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/nestedClasses.txt b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/nestedClasses.txt new file mode 100644 index 00000000..4ba38c78 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/nestedClasses.txt @@ -0,0 +1,86 @@ +public abstract class cases/nestedClasses/PublicAbstractClass { + public fun <init> ()V +} + +protected final class cases/nestedClasses/PublicAbstractClass$InnerProtected { + public fun <init> (Lcases/nestedClasses/PublicAbstractClass;)V +} + +protected final class cases/nestedClasses/PublicAbstractClass$NestedProtected { + public fun <init> ()V +} + +protected abstract interface class cases/nestedClasses/PublicAbstractClass$NestedProtectedInterface { +} + +protected final class cases/nestedClasses/PublicAbstractClass$ObjProtected { + public static final field INSTANCE Lcases/nestedClasses/PublicAbstractClass$ObjProtected; +} + +public final class cases/nestedClasses/PublicClass { + public fun <init> ()V +} + +public final class cases/nestedClasses/PublicClass$InnerPublic { + public fun <init> (Lcases/nestedClasses/PublicClass;)V +} + +public final class cases/nestedClasses/PublicClass$NestedPublic { + public fun <init> ()V +} + +public abstract interface class cases/nestedClasses/PublicClass$NestedPublicInterface { +} + +public final class cases/nestedClasses/PublicClass$ObjPublic { + public static final field INSTANCE Lcases/nestedClasses/PublicClass$ObjPublic; +} + +public abstract interface class cases/nestedClasses/PublicInterface { +} + +public final class cases/nestedClasses/PublicInterface$NestedPublic { + public fun <init> ()V +} + +public abstract interface class cases/nestedClasses/PublicInterface$NestedPublicInterface { +} + +public final class cases/nestedClasses/PublicInterface$ObjPublic { + public static final field INSTANCE Lcases/nestedClasses/PublicInterface$ObjPublic; +} + +public final class cases/nestedClasses/PublicObject { + public static final field INSTANCE Lcases/nestedClasses/PublicObject; +} + +public final class cases/nestedClasses/PublicObject$NestedPublic { + public fun <init> ()V +} + +public abstract interface class cases/nestedClasses/PublicObject$NestedPublicInterface { +} + +public final class cases/nestedClasses/PublicObject$ObjPublic { + public static final field INSTANCE Lcases/nestedClasses/PublicObject$ObjPublic; +} + +public class cases/nestedClasses/PublicOpenClass { + public fun <init> ()V +} + +protected final class cases/nestedClasses/PublicOpenClass$InnerProtected { + public fun <init> (Lcases/nestedClasses/PublicOpenClass;)V +} + +protected final class cases/nestedClasses/PublicOpenClass$NestedProtected { + public fun <init> ()V +} + +protected abstract interface class cases/nestedClasses/PublicOpenClass$NestedProtectedInterface { +} + +protected final class cases/nestedClasses/PublicOpenClass$ObjProtected { + public static final field INSTANCE Lcases/nestedClasses/PublicOpenClass$ObjProtected; +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/privateClass.kt b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/privateClass.kt new file mode 100644 index 00000000..554f67aa --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/privateClass.kt @@ -0,0 +1,24 @@ +package cases.nestedClasses + +private class PrivateClass { + public object ObjPublic + internal object ObjInternal + protected object ObjProtected + private object ObjPrivate + + public class NestedPublic + internal class NestedInternal + protected class NestedProtected + private class NestedPrivate + + public interface NestedPublicInterface + internal interface NestedInternalInterface + protected interface NestedProtectedInterface + private interface NestedPrivateInterface + + public inner class InnerPublic + internal inner class InnerInternal + protected inner class InnerProtected + private inner class InnerPrivate +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/privateInterface.kt b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/privateInterface.kt new file mode 100644 index 00000000..3e6b8b1c --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/privateInterface.kt @@ -0,0 +1,14 @@ +package cases.nestedClasses + +private interface PrivateInterface { + public object ObjPublic + private object ObjPrivate + + public class NestedPublic + private class NestedPrivate + + public interface NestedPublicInterface + private interface NestedPrivateInterface + +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/privateObject.kt b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/privateObject.kt new file mode 100644 index 00000000..29bcd077 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/privateObject.kt @@ -0,0 +1,17 @@ +package cases.nestedClasses + +private object PrivateObject { + + public object ObjPublic + internal object ObjInternal + private object ObjPrivate + + public class NestedPublic + internal class NestedInternal + private class NestedPrivate + + public interface NestedPublicInterface + internal interface NestedInternalInterface + private interface NestedPrivateInterface +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicAbstractClass.kt b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicAbstractClass.kt new file mode 100644 index 00000000..f8921c1f --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicAbstractClass.kt @@ -0,0 +1,12 @@ +package cases.nestedClasses + +public abstract class PublicAbstractClass { + protected object ObjProtected + + protected class NestedProtected + + protected interface NestedProtectedInterface + + protected inner class InnerProtected +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicClass.kt b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicClass.kt new file mode 100644 index 00000000..ca020a52 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicClass.kt @@ -0,0 +1,24 @@ +package cases.nestedClasses + +public class PublicClass { + public object ObjPublic + internal object ObjInternal + protected object ObjProtected + private object ObjPrivate + + public class NestedPublic + internal class NestedInternal + protected class NestedProtected + private class NestedPrivate + + public interface NestedPublicInterface + internal interface NestedInternalInterface + protected interface NestedProtectedInterface + private interface NestedPrivateInterface + + public inner class InnerPublic + internal inner class InnerInternal + protected inner class InnerProtected + private inner class InnerPrivate +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicInterface.kt b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicInterface.kt new file mode 100644 index 00000000..4235cf49 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicInterface.kt @@ -0,0 +1,14 @@ +package cases.nestedClasses + +public interface PublicInterface { + public object ObjPublic + private object ObjPrivate + + public class NestedPublic + private class NestedPrivate + + public interface NestedPublicInterface + private interface NestedPrivateInterface + +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicObject.kt b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicObject.kt new file mode 100644 index 00000000..efd026e6 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicObject.kt @@ -0,0 +1,17 @@ +package cases.nestedClasses + +public object PublicObject { + + public object ObjPublic + internal object ObjInternal + private object ObjPrivate + + public class NestedPublic + internal class NestedInternal + private class NestedPrivate + + public interface NestedPublicInterface + internal interface NestedInternalInterface + private interface NestedPrivateInterface +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicOpenClass.kt b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicOpenClass.kt new file mode 100644 index 00000000..f33af805 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicOpenClass.kt @@ -0,0 +1,12 @@ +package cases.nestedClasses + +public open class PublicOpenClass { + protected object ObjProtected + + protected class NestedProtected + + protected interface NestedProtectedInterface + + protected inner class InnerProtected +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/private/private.txt b/binary-compatibility-validator/src/test/kotlin/cases/private/private.txt new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/private/private.txt diff --git a/binary-compatibility-validator/src/test/kotlin/cases/private/privateClassMembers.kt b/binary-compatibility-validator/src/test/kotlin/cases/private/privateClassMembers.kt new file mode 100644 index 00000000..345d2cab --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/private/privateClassMembers.kt @@ -0,0 +1,7 @@ +package cases.private + +private open class PrivateClass public constructor() { + internal val internalVal = 1 + + protected fun protectedFun() = internalVal +} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/private/privateMultifile1.kt b/binary-compatibility-validator/src/test/kotlin/cases/private/privateMultifile1.kt new file mode 100644 index 00000000..09c748c1 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/private/privateMultifile1.kt @@ -0,0 +1,8 @@ +@file:JvmName("MultifileKt") +@file:JvmMultifileClass +package cases.private + +private val privateVal: Any? = 1 +private var privateVar: Any? = 1 + + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/private/privateMultifile2.kt b/binary-compatibility-validator/src/test/kotlin/cases/private/privateMultifile2.kt new file mode 100644 index 00000000..393ed183 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/private/privateMultifile2.kt @@ -0,0 +1,19 @@ +@file:JvmName("MultifileKt") +@file:JvmMultifileClass +package cases.private + + +// const +private const val privateConst: Int = 4 + +// fun +@Suppress("UNUSED_PARAMETER") +private fun privateFun(x: Any) {} + + +private class PrivateClassInMultifile { + internal fun accessUsage() { + privateFun(privateConst) + } + +} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/private/privatePart.kt b/binary-compatibility-validator/src/test/kotlin/cases/private/privatePart.kt new file mode 100644 index 00000000..37108229 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/private/privatePart.kt @@ -0,0 +1,24 @@ +package cases.private + +// properties +private val privateVal: Any? = 1 +private var privateVar: Any? = 1 + +// constants + +private const val privateConst: Int = 4 + +// fun + +@Suppress("UNUSED_PARAMETER") +private fun privateFun(a: Any?) = privateConst + +// access +private class PrivateClassInPart { + internal fun accessUsage() { + privateFun(privateVal) + privateFun(privateVar) + privateFun(privateConst) + } + +}
\ No newline at end of file diff --git a/binary-compatibility-validator/src/test/kotlin/cases/protected/protected.txt b/binary-compatibility-validator/src/test/kotlin/cases/protected/protected.txt new file mode 100644 index 00000000..3c28d7e1 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/protected/protected.txt @@ -0,0 +1,19 @@ +public abstract class cases/protected/PublicAbstractClass { + protected fun <init> ()V + protected abstract fun getProtectedVal ()I + protected abstract fun getProtectedVar ()Ljava/lang/Object; + protected abstract fun protectedFun ()V + protected abstract fun setProtectedVar (Ljava/lang/Object;)V +} + +public final class cases/protected/PublicFinalClass { +} + +public class cases/protected/PublicOpenClass { + protected fun <init> ()V + protected final fun getProtectedVal ()I + protected final fun getProtectedVar ()I + protected final fun protectedFun ()I + protected final fun setProtectedVar (I)V +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/protected/protectedInAbstract.kt b/binary-compatibility-validator/src/test/kotlin/cases/protected/protectedInAbstract.kt new file mode 100644 index 00000000..ae106429 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/protected/protectedInAbstract.kt @@ -0,0 +1,8 @@ +package cases.protected + +public abstract class PublicAbstractClass protected constructor() { + protected abstract val protectedVal: Int + protected abstract var protectedVar: Any? + + protected abstract fun protectedFun() +} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/protected/protectedInFinal.kt b/binary-compatibility-validator/src/test/kotlin/cases/protected/protectedInFinal.kt new file mode 100644 index 00000000..50142634 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/protected/protectedInFinal.kt @@ -0,0 +1,8 @@ +package cases.protected + +public class PublicFinalClass protected constructor() { + protected val protectedVal = 1 + protected var protectedVar = 2 + + protected fun protectedFun() = protectedVal +} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/protected/protectedInOpen.kt b/binary-compatibility-validator/src/test/kotlin/cases/protected/protectedInOpen.kt new file mode 100644 index 00000000..0bb674ae --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/protected/protectedInOpen.kt @@ -0,0 +1,8 @@ +package cases.protected + +public open class PublicOpenClass protected constructor() { + protected val protectedVal = 1 + protected var protectedVar = 2 + + protected fun protectedFun() = protectedVal +} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/public/public.txt b/binary-compatibility-validator/src/test/kotlin/cases/public/public.txt new file mode 100644 index 00000000..c9dd5dd2 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/public/public.txt @@ -0,0 +1,9 @@ +public final class cases/public/MultifileKt { + public static final fun getPublicVal ()Ljava/lang/String; + public static final fun publicFun1 ()Ljava/lang/String; +} + +public final class cases/public/PublicPartKt { + public static final fun publicFun ()V +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/public/publicMultifile1.kt b/binary-compatibility-validator/src/test/kotlin/cases/public/publicMultifile1.kt new file mode 100644 index 00000000..810b1b95 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/public/publicMultifile1.kt @@ -0,0 +1,5 @@ +@file:JvmName("MultifileKt") +@file:JvmMultifileClass +package cases.public + +public fun publicFun1() = publicVal diff --git a/binary-compatibility-validator/src/test/kotlin/cases/public/publicMultifile2.kt b/binary-compatibility-validator/src/test/kotlin/cases/public/publicMultifile2.kt new file mode 100644 index 00000000..bb864fa3 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/public/publicMultifile2.kt @@ -0,0 +1,5 @@ +@file:JvmName("MultifileKt") +@file:JvmMultifileClass +package cases.public + +public val publicVal = "Public" diff --git a/binary-compatibility-validator/src/test/kotlin/cases/public/publicPart.kt b/binary-compatibility-validator/src/test/kotlin/cases/public/publicPart.kt new file mode 100644 index 00000000..b896a9ee --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/public/publicPart.kt @@ -0,0 +1,5 @@ +package cases.public + +public fun publicFun() { + +}
\ No newline at end of file diff --git a/binary-compatibility-validator/src/test/kotlin/cases/special/hidden.kt b/binary-compatibility-validator/src/test/kotlin/cases/special/hidden.kt new file mode 100644 index 00000000..3ce60206 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/special/hidden.kt @@ -0,0 +1,25 @@ +package cases.special + +@Deprecated("For binary compatibility", level = DeprecationLevel.HIDDEN) +public class HiddenClass + @Deprecated("For binary compatibility", level = DeprecationLevel.HIDDEN) + public constructor() { + + @Deprecated("For binary compatibility", level = DeprecationLevel.HIDDEN) + val hiddenVal = 1 + + @Deprecated("For binary compatibility", level = DeprecationLevel.HIDDEN) + var hiddenVar = 2 + + @Deprecated("For binary compatibility", level = DeprecationLevel.HIDDEN) + fun hiddenFun() {} + + public var varWithHiddenAccessors: String = "" + @Deprecated("For binary compatibility", level = DeprecationLevel.HIDDEN) + get + @Deprecated("For binary compatibility", level = DeprecationLevel.HIDDEN) + set +} + +@Deprecated("For binary compatibility", level = DeprecationLevel.HIDDEN) +fun hiddenTopLevelFun() {} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/special/internalLateinitMember.kt b/binary-compatibility-validator/src/test/kotlin/cases/special/internalLateinitMember.kt new file mode 100644 index 00000000..5a68249a --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/special/internalLateinitMember.kt @@ -0,0 +1,10 @@ +package cases.special + +public class ClassWithLateInitMembers internal constructor() { + + public lateinit var publicLateInitWithInternalSet: String + internal set + + internal lateinit var internalLateInit: String + +}
\ No newline at end of file diff --git a/binary-compatibility-validator/src/test/kotlin/cases/special/jvmField.kt b/binary-compatibility-validator/src/test/kotlin/cases/special/jvmField.kt new file mode 100644 index 00000000..1b511e2c --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/special/jvmField.kt @@ -0,0 +1,51 @@ +package cases.special + +public open class JvmFieldsClass { + @JvmField + public var publicField = "x" + + @JvmField + internal var internalField = "y" + + @JvmField + protected var protectedField = "y" + + public companion object JvmFieldsCompanion { + @JvmField + public var publicСField = "x" + + @JvmField + internal var internalСField = "y" + + @JvmField + protected var protectedСField = "y" + + public const val publicConst = 1 + internal const val internalConst = 2 + protected const val protectedConst = 3 + private const val privateConst = 4 + } +} + +public object JvmFieldsObject { + @JvmField + public var publicField = "x" + + @JvmField + internal var internalField = "y" + + public const val publicConst = 1 + internal const val internalConst = 2 + private const val privateConst = 4 +} + + +@JvmField +public var publicField = "x" + +@JvmField +internal var internalField = "y" + +public const val publicConst = 1 +internal const val internalConst = 2 +private const val privateConst = 4 diff --git a/binary-compatibility-validator/src/test/kotlin/cases/special/jvmNames.kt b/binary-compatibility-validator/src/test/kotlin/cases/special/jvmNames.kt new file mode 100644 index 00000000..eb24da73 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/special/jvmNames.kt @@ -0,0 +1,22 @@ +package cases.special + +@JvmName("internalFun") +internal fun internalRenamedFun() {} + +internal var internalVar: Int = 1 + @JvmName("internalVarGetter") + get + @JvmName("internalVarSetter") + set + +@JvmName("publicFun") +public fun publicRenamedFun() {} + +public var publicVar: Int = 1 + @JvmName("publicVarGetter") + get + @JvmName("publicVarSetter") + set + + + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/special/jvmOverloads.kt b/binary-compatibility-validator/src/test/kotlin/cases/special/jvmOverloads.kt new file mode 100644 index 00000000..ec941ff9 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/special/jvmOverloads.kt @@ -0,0 +1,19 @@ +@file:Suppress("UNUSED_PARAMETER") + +package cases.special + + +@JvmOverloads +public fun publicFunWithOverloads(a: Int = 0, b: String? = null) {} + +@JvmOverloads +internal fun internalFunWithOverloads(a: Int = 0, b: String? = null) {} + +public class ClassWithOverloads + @JvmOverloads + internal constructor(val a: Int = 0, val b: String? = null) { + + @JvmOverloads + internal fun internalFunWithOverloads(a: Int = 0, b: String? = null) {} + +}
\ No newline at end of file diff --git a/binary-compatibility-validator/src/test/kotlin/cases/special/special.txt b/binary-compatibility-validator/src/test/kotlin/cases/special/special.txt new file mode 100644 index 00000000..40c074d2 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/special/special.txt @@ -0,0 +1,61 @@ +public final class cases/special/ClassWithLateInitMembers { + public final fun getPublicLateInitWithInternalSet ()Ljava/lang/String; +} + +public final class cases/special/ClassWithOverloads { + public final fun getA ()I + public final fun getB ()Ljava/lang/String; +} + +public final class cases/special/HiddenClass { + public synthetic fun <init> ()V + public final synthetic fun getHiddenVal ()I + public final synthetic fun getHiddenVar ()I + public final synthetic fun getVarWithHiddenAccessors ()Ljava/lang/String; + public final synthetic fun hiddenFun ()V + public final synthetic fun setHiddenVar (I)V + public final synthetic fun setVarWithHiddenAccessors (Ljava/lang/String;)V +} + +public final class cases/special/HiddenKt { + public static final synthetic fun hiddenTopLevelFun ()V +} + +public final class cases/special/JvmFieldKt { + public static final field publicConst I + public static field publicField Ljava/lang/String; +} + +public class cases/special/JvmFieldsClass { + public static final field JvmFieldsCompanion Lcases/special/JvmFieldsClass$JvmFieldsCompanion; + protected static final field protectedConst I + protected field protectedField Ljava/lang/String; + protected static field protectedСField Ljava/lang/String; + public static final field publicConst I + public field publicField Ljava/lang/String; + public static field publicСField Ljava/lang/String; + public fun <init> ()V +} + +public final class cases/special/JvmFieldsClass$JvmFieldsCompanion { +} + +public final class cases/special/JvmFieldsObject { + public static final field INSTANCE Lcases/special/JvmFieldsObject; + public static final field publicConst I + public static field publicField Ljava/lang/String; +} + +public final class cases/special/JvmNamesKt { + public static final fun publicFun ()V + public static final fun publicVarGetter ()I + public static final fun publicVarSetter (I)V +} + +public final class cases/special/JvmOverloadsKt { + public static final fun publicFunWithOverloads ()V + public static final fun publicFunWithOverloads (I)V + public static final fun publicFunWithOverloads (ILjava/lang/String;)V + public static synthetic fun publicFunWithOverloads$default (ILjava/lang/String;ILjava/lang/Object;)V +} + diff --git a/binary-compatibility-validator/src/test/kotlin/cases/whenMappings/enumWhen.kt b/binary-compatibility-validator/src/test/kotlin/cases/whenMappings/enumWhen.kt new file mode 100644 index 00000000..8d91564c --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/whenMappings/enumWhen.kt @@ -0,0 +1,20 @@ +package cases.whenMappings + +enum class SampleEnum { + A, + B, + C +} + +fun SampleEnum.deacronimize() = when (this) { + SampleEnum.A -> "Apple" + SampleEnum.B -> "Biscuit" + SampleEnum.C -> "Cinnamon" +} + + +inline fun SampleEnum.switch(thenA: () -> Unit, thenB: () -> Unit, thenC: () -> Unit) = when (this) { + SampleEnum.C -> thenC() + SampleEnum.B -> thenB() + SampleEnum.A -> thenA() +} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/whenMappings/sealedClassWhen.kt b/binary-compatibility-validator/src/test/kotlin/cases/whenMappings/sealedClassWhen.kt new file mode 100644 index 00000000..ca82d416 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/whenMappings/sealedClassWhen.kt @@ -0,0 +1,20 @@ +package cases.whenMappings + +sealed class SampleSealed { + class A : SampleSealed() + class B : SampleSealed() + class C : SampleSealed() +} + +fun SampleSealed.deacronimize() = when (this) { + is SampleSealed.A -> "Apple" + is SampleSealed.B -> "Biscuit" + is SampleSealed.C -> "Cinnamon" +} + + +inline fun SampleSealed.switch(thenA: () -> Unit, thenB: () -> Unit, thenC: () -> Unit) = when (this) { + is SampleSealed.C -> thenC() + is SampleSealed.B -> thenB() + is SampleSealed.A -> thenA() +} diff --git a/binary-compatibility-validator/src/test/kotlin/cases/whenMappings/whenMappings.txt b/binary-compatibility-validator/src/test/kotlin/cases/whenMappings/whenMappings.txt new file mode 100644 index 00000000..1975cf13 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/cases/whenMappings/whenMappings.txt @@ -0,0 +1,33 @@ +public final class cases/whenMappings/EnumWhenKt { + public static final fun deacronimize (Lcases/whenMappings/SampleEnum;)Ljava/lang/String; + public static final fun switch (Lcases/whenMappings/SampleEnum;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +} + +public final class cases/whenMappings/SampleEnum : java/lang/Enum { + public static final field A Lcases/whenMappings/SampleEnum; + public static final field B Lcases/whenMappings/SampleEnum; + public static final field C Lcases/whenMappings/SampleEnum; + public static fun valueOf (Ljava/lang/String;)Lcases/whenMappings/SampleEnum; + public static fun values ()[Lcases/whenMappings/SampleEnum; +} + +public abstract class cases/whenMappings/SampleSealed { +} + +public final class cases/whenMappings/SampleSealed$A : cases/whenMappings/SampleSealed { + public fun <init> ()V +} + +public final class cases/whenMappings/SampleSealed$B : cases/whenMappings/SampleSealed { + public fun <init> ()V +} + +public final class cases/whenMappings/SampleSealed$C : cases/whenMappings/SampleSealed { + public fun <init> ()V +} + +public final class cases/whenMappings/SealedClassWhenKt { + public static final fun deacronimize (Lcases/whenMappings/SampleSealed;)Ljava/lang/String; + public static final fun switch (Lcases/whenMappings/SampleSealed;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +} + diff --git a/binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/CasesPublicAPITest.kt b/binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/CasesPublicAPITest.kt new file mode 100644 index 00000000..8b23a1f8 --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/CasesPublicAPITest.kt @@ -0,0 +1,94 @@ +package kotlinx.coroutines.experimental.tools + +import org.junit.* +import org.junit.rules.* +import java.io.* + +class CasesPublicAPITest { + + companion object { + val visibilities by lazy { readKotlinVisibilities(File(System.getProperty("testCasesDeclarations")!!)) } + + val baseClassPaths: List<File> = + System.getProperty("testCasesClassesDirs") + .let { requireNotNull(it) { "Specify testCasesClassesDirs with a system property" } } + .split(File.pathSeparator) + .map { File(it, "cases").canonicalFile } + val baseOutputPath = File("src/test/kotlin/cases") + } + + @Rule + @JvmField + val testName = TestName() + + @Test + fun companions() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun inline() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun interfaces() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun internal() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun java() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun localClasses() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun nestedClasses() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun private() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun protected() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun public() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun special() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun whenMappings() { + snapshotAPIAndCompare(testName.methodName) + } + + + private fun snapshotAPIAndCompare(testClassRelativePath: String) { + val testClassPaths = baseClassPaths.map { it.resolve(testClassRelativePath) } + val testClasses = testClassPaths.flatMap { it.listFiles().orEmpty().asIterable() } + check(testClasses.isNotEmpty()) { "No class files are found in paths: $testClassPaths" } + val testClassStreams = testClasses.asSequence().filter { it.name.endsWith(".class") }.map { it.inputStream() } + val api = getBinaryAPI(testClassStreams, visibilities).filterOutNonPublic() + val target = baseOutputPath.resolve(testClassRelativePath).resolve(testName.methodName + ".txt") + api.dumpAndCompareWith(target) + } +} diff --git a/binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/PublicApiTest.kt b/binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/PublicApiTest.kt new file mode 100644 index 00000000..0826466e --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/PublicApiTest.kt @@ -0,0 +1,124 @@ +package kotlinx.coroutines.experimental.tools + +import org.junit.* +import org.junit.rules.* +import java.io.* +import java.util.jar.* + +class PublicApiTest { + + /* + * How to add a test for your module kotlinx-coroutines-foo? + * + * Dump public declarations via PublicApiDump.kt and create file + * reference-public-api/kotlinx-coroutines-foo.txt with dumped declarations. + * + * Then add test: + * + * @Test + * fun kotlinxCorountesFoo() { // <- name pattern should match txt file from reference-public-api + * snapshotAPIAndCompare($relative_path_to_module) + * } + */ + + @Rule + @JvmField + val testName = TestName() + + @Test + fun kotlinxCoroutinesCore() { + snapshotAPIAndCompare("core/kotlinx-coroutines-core", nonPublicPackages = listOf("kotlinx.coroutines.experimental.internal")) + } + + @Test + fun kotlinxCoroutinesReactive() { + snapshotAPIAndCompare("reactive/kotlinx-coroutines-reactive") + } + + @Test + fun kotlinxCoroutinesReactor() { + snapshotAPIAndCompare("reactive/kotlinx-coroutines-reactor") + } + + @Test + fun kotlinxCoroutinesRx1() { + snapshotAPIAndCompare("reactive/kotlinx-coroutines-rx1") + } + + @Test + fun kotlinxCoroutinesRx2() { + snapshotAPIAndCompare("reactive/kotlinx-coroutines-rx2") + } + + @Test + fun kotlinxCoroutinesGuava() { + snapshotAPIAndCompare("integration/kotlinx-coroutines-guava") + } + + @Test + fun kotlinxCoroutinesJdk8() { + snapshotAPIAndCompare("integration/kotlinx-coroutines-jdk8") + } + + + @Test + fun kotlinxCoroutinesNio() { + snapshotAPIAndCompare("integration/kotlinx-coroutines-nio") + } + + @Test + fun kotlinxCoroutinesQuasar() { + snapshotAPIAndCompare("integration/kotlinx-coroutines-quasar") + } + + @Test + fun kotlinxCoroutinesAndroid() { + snapshotAPIAndCompare("ui/kotlinx-coroutines-android") + } + + + @Test + fun kotlinxCoroutinesJavafx() { + snapshotAPIAndCompare("ui/kotlinx-coroutines-javafx") + } + + @Test + fun kotlinxCoroutinesSwing() { + snapshotAPIAndCompare("ui/kotlinx-coroutines-swing") + } + + private fun snapshotAPIAndCompare(basePath: String, jarPattern: String = basePath.substring(basePath.indexOf("/") + 1), + publicPackages: List<String> = emptyList(), nonPublicPackages: List<String> = emptyList()) { + val base = File("../$basePath/build/libs").absoluteFile.normalize() + val jarFile = getJarPath(base, jarPattern) + val kotlinJvmMappingsFiles = listOf(base.resolve("../visibilities.json")) + + println("Reading kotlin visibilities from $kotlinJvmMappingsFiles") + val publicPackagePrefixes = publicPackages.map { it.replace('.', '/') + '/' } + val visibilities = + kotlinJvmMappingsFiles + .map { readKotlinVisibilities(it).filterKeys { name -> publicPackagePrefixes.none { name.startsWith(it) } } } + .reduce { m1, m2 -> m1 + m2 } + + println("Reading binary API from $jarFile") + val api = getBinaryAPI(JarFile(jarFile), visibilities).filterOutNonPublic(nonPublicPackages) + + val target = File("reference-public-api") + .resolve(testName.methodName.replaceCamelCaseWithDashedLowerCase() + ".txt") + + api.dumpAndCompareWith(target) + } + + private fun getJarPath(base: File, jarPattern: String, kotlinVersion: String? = null): File { + val versionPattern = kotlinVersion?.let { "-" + Regex.escape(it) } ?: ".+" + val regex = Regex("$jarPattern$versionPattern\\.jar") + val files = (base.listFiles() ?: throw Exception("Cannot list files in $base")) + .filter { it.name.let { + it matches regex + && !it.endsWith("-sources.jar") + && !it.endsWith("-javadoc.jar") + && !it.endsWith("-tests.jar")} } + + return files.singleOrNull() ?: throw Exception("No single file matching $regex in $base:\n${files.joinToString("\n")}") + } +} diff --git a/binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/utils.kt b/binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/utils.kt new file mode 100644 index 00000000..5b49befa --- /dev/null +++ b/binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/utils.kt @@ -0,0 +1,43 @@ +package kotlinx.coroutines.experimental.tools + +import java.io.* +import kotlin.test.* + +private val OVERWRITE_EXPECTED_OUTPUT = + System.getProperty("overwrite.output")?.toBoolean() ?: false // use -Doverwrite.output=true + +fun List<ClassBinarySignature>.dumpAndCompareWith(to: File) { + if (!to.exists()) { + to.parentFile?.mkdirs() + to.bufferedWriter().use { dump(to = it) } + fail("Expected data file did not exist. Generating: $to") + } else { + val actual = dump(to = StringBuilder()) + assertEqualsToFile(to, actual) + } +} + +private fun assertEqualsToFile(expectedFile: File, actual: CharSequence) { + val actualText = actual.trimTrailingWhitespacesAndAddNewlineAtEOF() + val expectedText = expectedFile.readText().trimTrailingWhitespacesAndAddNewlineAtEOF() + + if (OVERWRITE_EXPECTED_OUTPUT && expectedText != actualText) { + expectedFile.writeText(actualText) + assertEquals(expectedText, actualText, "Actual data differs from file content: ${expectedFile.name}, rewriting") + } + + assertEquals( + expectedText, + actualText, + "Actual data differs from file content: ${expectedFile.name}\nTo overwrite the expected API rerun with -Doverwrite.output=true parameter\n" + ) +} + +private fun CharSequence.trimTrailingWhitespacesAndAddNewlineAtEOF(): String = + this.lineSequence().map { it.trimEnd() }.joinToString(separator = "\n").let { + if (it.endsWith("\n")) it else it + "\n" + } + + +private val UPPER_CASE_CHARS = Regex("[A-Z]+") +fun String.replaceCamelCaseWithDashedLowerCase() = replace(UPPER_CASE_CHARS) { "-" + it.value.toLowerCase() } diff --git a/build.gradle b/build.gradle index ddc65a5d..7199e369 100644 --- a/build.gradle +++ b/build.gradle @@ -87,7 +87,7 @@ configure(subprojects.findAll { !sourceless.contains(it.name) }) { // --------------- Configure sub-projects that are part of the library --------------- -def internal = sourceless + ['benchmarks', 'knit', 'js-stub'] +def internal = sourceless + ['benchmarks', 'knit', 'js-stub', 'binary-compatibility-validator'] // configure atomicfu configure(subprojects.findAll { !internal.contains(it.name) }) { @@ -143,6 +143,11 @@ configure(subprojects.findAll { !unpublished.contains(it.name) }) { if (platform == "jvm") { dokkaJavadoc.dependsOn project(":$coroutines_core").dokka + + tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) { + kotlinOptions.freeCompilerArgs += ["-Xdump-declarations-to=${buildDir}/visibilities.json"] + } + } } diff --git a/gradle.properties b/gradle.properties index 109b0e22..339dbf0b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ version = 0.22.5-SNAPSHOT group = org.jetbrains.kotlinx -kotlin_version = 1.2.40 +kotlin_version = 1.2.41 kotlin_native_version = 0.7-dev-1436 junit_version = 4.12 atomicFU_version = 0.10.0-alpha diff --git a/settings.gradle b/settings.gradle index ebe9b165..b564b96f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -13,6 +13,8 @@ include('benchmarks') include('knit') include('site') +module('binary-compatibility-validator') + module('common/kotlinx-coroutines-core-common') module('core/kotlinx-coroutines-core') |