aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVsevolod Tolstopyatov <qwwdfsad@gmail.com>2018-05-03 20:07:54 +0300
committerRoman Elizarov <elizarov@gmail.com>2018-05-14 01:53:02 -0700
commit74bcc923bbd748a0b3b582d3c7b7c64780ba22d1 (patch)
treeb9917083628c3aa91b7eb3419d62dffd48478b8c
parenta518edc42fe2f8125305a2806ecb3ed43df35d01 (diff)
downloadkotlinx.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
-rw-r--r--binary-compatibility-validator/README.md6
-rw-r--r--binary-compatibility-validator/build.gradle52
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-android.txt23
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-core.txt952
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-guava.txt11
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-io.txt259
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-javafx.txt10
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-jdk8.txt32
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-nio.txt13
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-quasar.txt10
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-reactive.txt32
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-reactor.txt38
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-rx1.txt68
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-rx2.txt85
-rw-r--r--binary-compatibility-validator/reference-public-api/kotlinx-coroutines-swing.txt9
-rw-r--r--binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/PublicApiDump.kt126
-rw-r--r--binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/asmUtils.kt169
-rw-r--r--binary-compatibility-validator/src/main/kotlin/kotlinx/coroutines/experimental/tools/kotlinVisibilities.kt53
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/companions/companions.kt102
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/companions/companions.txt66
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/inline/inline.txt9
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/inline/inlineExposed.kt24
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/inline/inlineOnly.kt5
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/interfaces/interfaceWithEmptyImpls.kt22
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/interfaces/interfaceWithImpls.kt30
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/interfaces/interfaces.txt27
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/internal/internal.txt3
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/internal/internalClass.kt7
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/internal/internalMultifile1.kt5
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/internal/internalMultifile2.kt5
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/internal/internalPart.kt7
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/internal/publicClassInternalMember.kt9
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/java/Facade.java12
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/java/java.txt6
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/localClasses/fromStdlib.kt3
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/localClasses/lambdas.kt20
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/localClasses/localClasses.kt23
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/localClasses/localClasses.txt18
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/internalClass.kt24
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/internalInterface.kt14
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/internalObject.kt17
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/nestedClasses.txt86
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/privateClass.kt24
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/privateInterface.kt14
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/privateObject.kt17
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicAbstractClass.kt12
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicClass.kt24
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicInterface.kt14
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicObject.kt17
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/nestedClasses/publicOpenClass.kt12
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/private/private.txt0
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/private/privateClassMembers.kt7
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/private/privateMultifile1.kt8
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/private/privateMultifile2.kt19
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/private/privatePart.kt24
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/protected/protected.txt19
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/protected/protectedInAbstract.kt8
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/protected/protectedInFinal.kt8
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/protected/protectedInOpen.kt8
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/public/public.txt9
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/public/publicMultifile1.kt5
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/public/publicMultifile2.kt5
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/public/publicPart.kt5
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/special/hidden.kt25
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/special/internalLateinitMember.kt10
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/special/jvmField.kt51
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/special/jvmNames.kt22
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/special/jvmOverloads.kt19
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/special/special.txt61
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/whenMappings/enumWhen.kt20
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/whenMappings/sealedClassWhen.kt20
-rw-r--r--binary-compatibility-validator/src/test/kotlin/cases/whenMappings/whenMappings.txt33
-rw-r--r--binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/CasesPublicAPITest.kt94
-rw-r--r--binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/PublicApiTest.kt124
-rw-r--r--binary-compatibility-validator/src/test/kotlin/kotlinx/coroutines/experimental/tools/utils.kt43
-rw-r--r--build.gradle7
-rw-r--r--gradle.properties2
-rw-r--r--settings.gradle2
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')