[KPM] Exclude 'InternalKotlinGradlePluginApi' apis from binary validation
^KT-51262
This commit is contained in:
committed by
Space
parent
113e363b22
commit
627cb0be3a
@@ -15,6 +15,13 @@ dependencies {
|
||||
testArtifacts project(':kotlin-stdlib-jdk8')
|
||||
testArtifacts project(':kotlin-reflect')
|
||||
testArtifacts project(':kotlin-gradle-plugin-idea')
|
||||
|
||||
testCompileOnly("org.ow2.asm:asm-tree:9.0") {
|
||||
because(
|
||||
"Necessary to compile copied 'filterOutAnnotated' implementation. " +
|
||||
"Can be removed after https://github.com/Kotlin/binary-compatibility-validator/pull/75"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pill {
|
||||
|
||||
+1
-129
@@ -10,27 +10,6 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinF
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentDependency : java/io/Serializable {
|
||||
}
|
||||
|
||||
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentImpl : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragment {
|
||||
public fun <init> (Ljava/lang/String;Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings;
|
||||
public final fun component3 ()Ljava/util/Collection;
|
||||
public final fun component4 ()Ljava/util/Collection;
|
||||
public final fun component5 ()Ljava/util/Collection;
|
||||
public final fun component6 ()Ljava/util/Collection;
|
||||
public final fun copy (Ljava/lang/String;Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentImpl;
|
||||
public static synthetic fun copy$default (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentImpl;Ljava/lang/String;Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;ILjava/lang/Object;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinFragmentImpl;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public fun getDependencies ()Ljava/util/Collection;
|
||||
public fun getDirectRefinesDependencies ()Ljava/util/Collection;
|
||||
public fun getLanguageSettings ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings;
|
||||
public fun getName ()Ljava/lang/String;
|
||||
public fun getResourceDirectories ()Ljava/util/Collection;
|
||||
public fun getSourceDirectories ()Ljava/util/Collection;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings : java/io/Serializable {
|
||||
public abstract fun getApiVersion ()Ljava/lang/String;
|
||||
public abstract fun getCompilerPluginArguments ()Ljava/util/Collection;
|
||||
@@ -42,71 +21,16 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinL
|
||||
public abstract fun isProgressiveMode ()Z
|
||||
}
|
||||
|
||||
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettingsImpl : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettings {
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;ZLjava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Z
|
||||
public final fun component4 ()Ljava/util/Collection;
|
||||
public final fun component5 ()Ljava/util/Collection;
|
||||
public final fun component6 ()Ljava/util/Collection;
|
||||
public final fun component7 ()Ljava/util/Collection;
|
||||
public final fun component8 ()Ljava/util/Collection;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;ZLjava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettingsImpl;
|
||||
public static synthetic fun copy$default (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettingsImpl;Ljava/lang/String;Ljava/lang/String;ZLjava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;ILjava/lang/Object;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLanguageSettingsImpl;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public fun getApiVersion ()Ljava/lang/String;
|
||||
public fun getCompilerPluginArguments ()Ljava/util/Collection;
|
||||
public fun getCompilerPluginClasspath ()Ljava/util/Collection;
|
||||
public fun getEnabledLanguageFeatures ()Ljava/util/Collection;
|
||||
public fun getFreeCompilerArgs ()Ljava/util/Collection;
|
||||
public fun getLanguageVersion ()Ljava/lang/String;
|
||||
public fun getOptInAnnotationsInUse ()Ljava/util/Collection;
|
||||
public fun hashCode ()I
|
||||
public fun isProgressiveMode ()Z
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLocalModuleIdentifier : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier {
|
||||
public abstract fun getBuildId ()Ljava/lang/String;
|
||||
public abstract fun getProjectId ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLocalModuleIdentifierImpl : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLocalModuleIdentifier {
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/lang/String;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLocalModuleIdentifierImpl;
|
||||
public static synthetic fun copy$default (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLocalModuleIdentifierImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinLocalModuleIdentifierImpl;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public fun getBuildId ()Ljava/lang/String;
|
||||
public fun getModuleClassifier ()Ljava/lang/String;
|
||||
public fun getProjectId ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinMavenModuleIdentifier : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier {
|
||||
public abstract fun getGroup ()Ljava/lang/String;
|
||||
public abstract fun getName ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinMavenModuleIdentifierImpl : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinMavenModuleIdentifier {
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/lang/String;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinMavenModuleIdentifierImpl;
|
||||
public static synthetic fun copy$default (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinMavenModuleIdentifierImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinMavenModuleIdentifierImpl;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public fun getGroup ()Ljava/lang/String;
|
||||
public fun getModuleClassifier ()Ljava/lang/String;
|
||||
public fun getName ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule : java/io/Serializable {
|
||||
public abstract fun getFragments ()Ljava/util/Collection;
|
||||
public abstract fun getModuleIdentifier ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier;
|
||||
@@ -116,19 +40,6 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinM
|
||||
public abstract fun getModuleClassifier ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleImpl : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModule {
|
||||
public fun <init> (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier;Ljava/util/Collection;)V
|
||||
public final fun component1 ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier;
|
||||
public final fun component2 ()Ljava/util/Collection;
|
||||
public final fun copy (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier;Ljava/util/Collection;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleImpl;
|
||||
public static synthetic fun copy$default (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleImpl;Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier;Ljava/util/Collection;ILjava/lang/Object;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleImpl;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public fun getFragments ()Ljava/util/Collection;
|
||||
public fun getModuleIdentifier ()Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinModuleIdentifier;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModel : java/io/Serializable {
|
||||
public abstract fun getCoreLibrariesVersion ()Ljava/lang/String;
|
||||
public abstract fun getExplicitApiModeCliOption ()Ljava/lang/String;
|
||||
@@ -136,53 +47,14 @@ public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinP
|
||||
public abstract fun getModules ()Ljava/util/List;
|
||||
}
|
||||
|
||||
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModelImpl : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModel {
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Ljava/util/List;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/io/File;
|
||||
public final fun component4 ()Ljava/util/List;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModelImpl;
|
||||
public static synthetic fun copy$default (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModelImpl;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinProjectModelImpl;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public fun getCoreLibrariesVersion ()Ljava/lang/String;
|
||||
public fun getExplicitApiModeCliOption ()Ljava/lang/String;
|
||||
public fun getKotlinNativeHome ()Ljava/io/File;
|
||||
public fun getModules ()Ljava/util/List;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResourceDirectory : java/io/Serializable {
|
||||
public abstract fun getFile ()Ljava/io/File;
|
||||
}
|
||||
|
||||
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResourceDirectoryImpl : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResourceDirectory {
|
||||
public fun <init> (Ljava/io/File;)V
|
||||
public final fun component1 ()Ljava/io/File;
|
||||
public final fun copy (Ljava/io/File;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResourceDirectoryImpl;
|
||||
public static synthetic fun copy$default (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResourceDirectoryImpl;Ljava/io/File;ILjava/lang/Object;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinResourceDirectoryImpl;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public fun getFile ()Ljava/io/File;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public abstract interface class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectory : java/io/Serializable {
|
||||
public abstract fun getFile ()Ljava/io/File;
|
||||
}
|
||||
|
||||
public final class org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectoryImpl : org/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectory {
|
||||
public fun <init> (Ljava/io/File;)V
|
||||
public final fun component1 ()Ljava/io/File;
|
||||
public final fun copy (Ljava/io/File;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectoryImpl;
|
||||
public static synthetic fun copy$default (Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectoryImpl;Ljava/io/File;ILjava/lang/Object;)Lorg/jetbrains/kotlin/gradle/kpm/idea/IdeaKotlinSourceDirectoryImpl;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public fun getFile ()Ljava/io/File;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public abstract interface annotation class org/jetbrains/kotlin/gradle/kpm/idea/KotlinGradlePluginApi : java/lang/annotation/Annotation {
|
||||
public abstract interface annotation class org/jetbrains/kotlin/gradle/kpm/idea/InternalKotlinGradlePluginApi : java/lang/annotation/Annotation {
|
||||
}
|
||||
|
||||
|
||||
+32
-3
@@ -34,14 +34,18 @@ class RuntimePublicAPITest {
|
||||
}
|
||||
|
||||
@Test fun kotlinGradlePluginIdea() {
|
||||
snapshotAPIAndCompare("../kotlin-gradle-plugin-idea/build/libs", "kotlin-gradle-plugin-idea(?!-[-a-z]+)")
|
||||
snapshotAPIAndCompare(
|
||||
"../kotlin-gradle-plugin-idea/build/libs", "kotlin-gradle-plugin-idea(?!-[-a-z]+)",
|
||||
nonPublicAnnotations = listOf("org/jetbrains/kotlin/gradle/kpm/idea/InternalKotlinGradlePluginApi")
|
||||
)
|
||||
}
|
||||
|
||||
private fun snapshotAPIAndCompare(
|
||||
basePath: String,
|
||||
jarPattern: String,
|
||||
publicPackages: List<String> = emptyList(),
|
||||
nonPublicPackages: List<String> = emptyList()
|
||||
nonPublicPackages: List<String> = emptyList(),
|
||||
nonPublicAnnotations: List<String> = emptyList()
|
||||
) {
|
||||
val base = File(basePath).absoluteFile.normalize()
|
||||
val jarFile = getJarPath(base, jarPattern, System.getProperty("kotlinVersion"))
|
||||
@@ -50,7 +54,9 @@ class RuntimePublicAPITest {
|
||||
val publicPackageFilter = { className: String -> publicPackagePrefixes.none { className.startsWith(it) } }
|
||||
|
||||
println("Reading binary API from $jarFile")
|
||||
val api = JarFile(jarFile).loadApiFromJvmClasses(publicPackageFilter).filterOutNonPublic(nonPublicPackages)
|
||||
val api = JarFile(jarFile).loadApiFromJvmClasses(publicPackageFilter)
|
||||
.filterOutNonPublic(nonPublicPackages)
|
||||
.filterOutAnnotated(nonPublicAnnotations.toSet())
|
||||
|
||||
val target = File("reference-public-api")
|
||||
.resolve(testName.methodName.replaceCamelCaseWithDashedLowerCase() + ".txt")
|
||||
@@ -72,3 +78,26 @@ class RuntimePublicAPITest {
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
Copied from `binary-compatibility-validator
|
||||
Can be removed after:
|
||||
https://github.com/Kotlin/binary-compatibility-validator/pull/75
|
||||
*/
|
||||
private fun List<ClassBinarySignature>.filterOutAnnotated(targetAnnotations: Set<String>): List<ClassBinarySignature> {
|
||||
if (targetAnnotations.isEmpty()) return this
|
||||
return filter {
|
||||
it.annotations.all { ann -> !targetAnnotations.any { ann.refersToName(it) } }
|
||||
}.map {
|
||||
ClassBinarySignature(
|
||||
it.name,
|
||||
it.superName,
|
||||
it.outerName,
|
||||
it.supertypes,
|
||||
it.memberSignatures.filter { it.annotations.all { ann -> !targetAnnotations.any { ann.refersToName(it) } } },
|
||||
it.access,
|
||||
it.isEffectivelyPublic,
|
||||
it.isNotUsedWhenEmpty,
|
||||
it.annotations
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user