bcv: use kotlinx-metadata-jvm to read kotlin visibilities

It's no longer required to dump kotlin-to-java declaration mapping to json
before using binary-compatibility-validator.

@JvmOverloads are not supported yet, so remove them from test.

Use asm:6.0 in bcv
This commit is contained in:
Ilya Gorbunov
2018-05-20 18:36:47 +03:00
parent 1872550f25
commit fcf323851e
8 changed files with 298 additions and 45 deletions
@@ -15,15 +15,3 @@ public final class cases/default/InterfaceFunctions$DefaultImpls {
public static synthetic fun withSomeDefaults$default (Lcases/default/InterfaceFunctions;ILjava/lang/String;ILjava/lang/Object;)V
}
public final class cases/default/JvmOverloadsClass {
public final fun getA ()I
public final fun getB ()Ljava/lang/String;
}
public final class cases/default/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
}
@@ -8,6 +8,9 @@
package cases.default
/* JvmOverloads are not supported by metadata reader
@JvmOverloads
public fun publicFunWithOverloads(a: Int = 0, b: String? = null) {}
@@ -21,4 +24,22 @@ internal constructor(val a: Int = 0, val b: String? = null) {
@JvmOverloads
internal fun internalFunWithOverloads(a: Int = 0, b: String? = null) {}
}
}
*/
/* expected:
public final class cases/default/JvmOverloadsClass {
public final fun getA ()I
public final fun getB ()Ljava/lang/String;
}
public final class cases/default/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
}
*/
@@ -68,13 +68,14 @@ class RuntimePublicAPITest {
println("Reading kotlin visibilities from $kotlinJvmMappingsFiles")
val publicPackagePrefixes = publicPackages.map { it.replace('.', '/') + '/' }
val publicPackageFilter = { className: String -> publicPackagePrefixes.none { className.startsWith(it) } }
val visibilities =
kotlinJvmMappingsFiles
.map { readKotlinVisibilities(it).filterKeys { name -> publicPackagePrefixes.none { name.startsWith(it) } } }
.map { readKotlinVisibilities(it).filterKeys(publicPackageFilter) }
.reduce { m1, m2 -> m1 + m2 }
println("Reading binary API from $jarFile")
val api = getBinaryAPI(JarFile(jarFile), visibilities).filterOutNonPublic(nonPublicPackages)
val api = getBinaryAPI(JarFile(jarFile), visibilities, publicPackageFilter).filterOutNonPublic(nonPublicPackages)
val target = File("reference-public-api")
.resolve(testName.methodName.replaceCamelCaseWithDashedLowerCase() + ".txt")