Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Klib support #183

Merged
merged 54 commits into from
Mar 18, 2024
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
3c57419
Introduce target hierarchy mirroring default template from KMP
fzhinkin Jan 31, 2024
4e50f6d
Implement KLib dump merger
fzhinkin Jan 31, 2024
ba998f0
Added Klib-related settings
fzhinkin Jan 31, 2024
51f7756
Added a more precise Copy task
fzhinkin Jan 31, 2024
c824926
Implemented Klib validation
fzhinkin Jan 31, 2024
cb87220
Rebased to current dev
fzhinkin Jan 31, 2024
91903af
Added a design doc
fzhinkin Feb 1, 2024
5a6cf13
Cleanup
fzhinkin Feb 1, 2024
d58121c
Mark an experimental API with a dedicated annotation
fzhinkin Feb 1, 2024
34313b1
Cleanup
fzhinkin Feb 1, 2024
4bc9d2a
Add some kdoc
fzhinkin Feb 1, 2024
a987909
Improved test coverage
fzhinkin Feb 5, 2024
5ba0dbe
Described a klib validation pipeline, fixed task names, improved erro…
fzhinkin Feb 5, 2024
9d9f1e7
Fixed klib merge task's dependencies
fzhinkin Feb 9, 2024
cf65ddf
Added shortcuts to reduce the amount of boilerplate code in the klib …
fzhinkin Feb 9, 2024
3f93275
Fixed a test
fzhinkin Feb 19, 2024
6b17087
Store children decls as a map, get rid of a separate cache
fzhinkin Feb 21, 2024
f5fdacf
Fixed typos
fzhinkin Feb 22, 2024
b274e64
Opt-in experimental annotations instead of propagating it further
fzhinkin Feb 22, 2024
369d791
Made signature version optional, improved docs, fixed typos
fzhinkin Feb 28, 2024
9006c1a
Simplify rules for target group aliases inclusion
fzhinkin Feb 28, 2024
00d3821
Merge branch 'develop' into klib-support
fzhinkin Feb 28, 2024
05c424d
Support compound target names
fzhinkin Feb 29, 2024
617189f
Fix unsupported targets filtration
fzhinkin Feb 29, 2024
5c0c764
Partially reconstruct a manifest when extracting a single target from…
fzhinkin Mar 1, 2024
4ec6a11
Add a compound target name proposal to the design doc
fzhinkin Mar 1, 2024
87c35f4
Update the doc
fzhinkin Mar 1, 2024
e7bf172
Make klib-related Gradle tasks internal
fzhinkin Mar 1, 2024
e6171f9
Use canonical target names when filtering out targets to validate
fzhinkin Mar 1, 2024
8621b3e
Use fully qualified names of supported targets
fzhinkin Mar 1, 2024
672901b
Made KlibTarget public, renamed its components and reordered them in …
fzhinkin Mar 6, 2024
a4768c6
Use KlibSignatureVersion instead of int to represent a signature version
fzhinkin Mar 6, 2024
f3cf046
Remove an option disabling target name grouping
fzhinkin Mar 6, 2024
75363a9
Fixed java class name to AbiQualifiedName transformation
fzhinkin Mar 7, 2024
a69f204
Get rid of dump setting
fzhinkin Mar 7, 2024
a21f4a9
Left a single method to load all types of dumps, supported multi-targ…
fzhinkin Mar 7, 2024
f51611d
Renaming and doc update
fzhinkin Mar 7, 2024
9aa5be8
Added public API prototype and switched Gradle tasks to it, fixed the…
fzhinkin Mar 7, 2024
28cc85a
Improved kdoc and added samples
fzhinkin Mar 7, 2024
68ce7af
Update README
fzhinkin Mar 7, 2024
4f4512e
Update docs
fzhinkin Mar 7, 2024
ba9fcf1
Update API dump and target aliasing rule
fzhinkin Mar 7, 2024
5e01cf4
Improved test coverage, clarified some corner cases
fzhinkin Mar 11, 2024
ba29177
Fixed typo in a filename
fzhinkin Mar 11, 2024
dd776f2
Update the design doc
fzhinkin Mar 11, 2024
489eefa
Addressed review comments and suggestions
fzhinkin Mar 12, 2024
a68f661
Use a length of path from a target hierarchy root to a node as a meas…
fzhinkin Mar 12, 2024
20b7fd9
Consolidated all klib dump related classes in a single package
fzhinkin Mar 12, 2024
4b19820
Use root locale instead of a default one
fzhinkin Mar 12, 2024
077c7ec
Rephrased kdoc
fzhinkin Mar 12, 2024
c1c9921
Reworked target group aliasing
fzhinkin Mar 12, 2024
081fdb0
Decapitalized L in KLib
fzhinkin Mar 12, 2024
4f63bae
Update api dump
fzhinkin Mar 12, 2024
259ad7c
Improved kdoc, cleaned up the code
fzhinkin Mar 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 110 additions & 12 deletions api/binary-compatibility-validator.api
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ public class kotlinx/validation/ApiValidationExtension {
public final fun getIgnoredClasses ()Ljava/util/Set;
public final fun getIgnoredPackages ()Ljava/util/Set;
public final fun getIgnoredProjects ()Ljava/util/Set;
public final fun getKlib ()Lkotlinx/validation/KlibValidationSettings;
public final fun getNonPublicMarkers ()Ljava/util/Set;
public final fun getPublicClasses ()Ljava/util/Set;
public final fun getPublicMarkers ()Ljava/util/Set;
public final fun getPublicPackages ()Ljava/util/Set;
public final fun getValidationDisabled ()Z
public final fun klib (Lkotlin/jvm/functions/Function1;)V
public final fun setAdditionalSourceSets (Ljava/util/Set;)V
public final fun setApiDumpDirectory (Ljava/lang/String;)V
public final fun setIgnoredClasses (Ljava/util/Set;)V
Expand All @@ -28,32 +30,128 @@ public final class kotlinx/validation/BinaryCompatibilityValidatorPlugin : org/g
public fun apply (Lorg/gradle/api/Project;)V
}

public abstract class kotlinx/validation/BuildTaskBase : org/gradle/api/DefaultTask {
public field outputApiFile Ljava/io/File;
public fun <init> ()V
public final fun getIgnoredClasses ()Ljava/util/Set;
public final fun getIgnoredPackages ()Ljava/util/Set;
public final fun getNonPublicMarkers ()Ljava/util/Set;
public final fun getOutputApiFile ()Ljava/io/File;
public final fun getPublicClasses ()Ljava/util/Set;
public final fun getPublicMarkers ()Ljava/util/Set;
public final fun getPublicPackages ()Ljava/util/Set;
public final fun setIgnoredClasses (Ljava/util/Set;)V
public final fun setIgnoredPackages (Ljava/util/Set;)V
public final fun setNonPublicMarkers (Ljava/util/Set;)V
public final fun setOutputApiFile (Ljava/io/File;)V
public final fun setPublicClasses (Ljava/util/Set;)V
public final fun setPublicMarkers (Ljava/util/Set;)V
public final fun setPublicPackages (Ljava/util/Set;)V
}

public abstract interface annotation class kotlinx/validation/ExperimentalBCVApi : java/lang/annotation/Annotation {
}

public abstract interface annotation class kotlinx/validation/ExternalApi : java/lang/annotation/Annotation {
}

public class kotlinx/validation/KotlinApiBuildTask : org/gradle/api/DefaultTask {
public class kotlinx/validation/KlibValidationSettings {
public fun <init> ()V
public final fun getEnabled ()Z
public final fun getSignatureVersion ()I
public final fun getStrictValidation ()Z
public final fun getUseTargetGroupAliases ()Z
public final fun setEnabled (Z)V
public final fun setSignatureVersion (I)V
public final fun setStrictValidation (Z)V
public final fun setUseTargetGroupAliases (Z)V
}

public class kotlinx/validation/KotlinApiBuildTask : kotlinx/validation/BuildTaskBase {
public field inputDependencies Lorg/gradle/api/file/FileCollection;
public field outputApiDir Ljava/io/File;
public fun <init> ()V
public final fun getInputClassesDirs ()Lorg/gradle/api/file/FileCollection;
public final fun getInputDependencies ()Lorg/gradle/api/file/FileCollection;
public final fun getInputJar ()Lorg/gradle/api/file/RegularFileProperty;
public final fun getOutputApiDir ()Ljava/io/File;
public final fun setInputClassesDirs (Lorg/gradle/api/file/FileCollection;)V
public final fun setInputDependencies (Lorg/gradle/api/file/FileCollection;)V
public final fun setOutputApiDir (Ljava/io/File;)V
}

public class kotlinx/validation/KotlinApiCompareTask : org/gradle/api/DefaultTask {
public field apiBuildDir Ljava/io/File;
public field generatedApiFile Ljava/io/File;
public field projectApiFile Ljava/io/File;
public fun <init> (Lorg/gradle/api/model/ObjectFactory;)V
public final fun getApiBuildDir ()Ljava/io/File;
public final fun getDummyOutputFile ()Ljava/io/File;
public final fun getNonExistingProjectApiDir ()Ljava/lang/String;
public final fun getProjectApiDir ()Ljava/io/File;
public final fun setApiBuildDir (Ljava/io/File;)V
public final fun setNonExistingProjectApiDir (Ljava/lang/String;)V
public final fun setProjectApiDir (Ljava/io/File;)V
public final fun getGeneratedApiFile ()Ljava/io/File;
public final fun getProjectApiFile ()Ljava/io/File;
public final fun setGeneratedApiFile (Ljava/io/File;)V
public final fun setProjectApiFile (Ljava/io/File;)V
}

public abstract class kotlinx/validation/KotlinKlibAbiBuildTask : kotlinx/validation/BuildTaskBase {
public field compilationDependencies Lorg/gradle/api/file/FileCollection;
public field klibFile Lorg/gradle/api/file/FileCollection;
public field target Ljava/lang/String;
public fun <init> ()V
public final fun getCompilationDependencies ()Lorg/gradle/api/file/FileCollection;
public final fun getKlibFile ()Lorg/gradle/api/file/FileCollection;
public final fun getSignatureVersion ()Ljava/lang/Integer;
public final fun getTarget ()Ljava/lang/String;
public final fun setCompilationDependencies (Lorg/gradle/api/file/FileCollection;)V
public final fun setKlibFile (Lorg/gradle/api/file/FileCollection;)V
public final fun setSignatureVersion (Ljava/lang/Integer;)V
public final fun setTarget (Ljava/lang/String;)V
}

public abstract class kotlinx/validation/KotlinKlibExtractSupportedTargetsAbiTask : org/gradle/api/DefaultTask {
public field inputAbiFile Ljava/io/File;
public field outputAbiFile Ljava/io/File;
public field targets Lorg/gradle/api/provider/Provider;
public fun <init> ()V
public final fun getGroupTargetNames ()Z
public final fun getInputAbiFile ()Ljava/io/File;
public final fun getOutputAbiFile ()Ljava/io/File;
public final fun getStrictValidation ()Z
public final fun getTargets ()Lorg/gradle/api/provider/Provider;
public final fun setGroupTargetNames (Z)V
public final fun setInputAbiFile (Ljava/io/File;)V
public final fun setOutputAbiFile (Ljava/io/File;)V
public final fun setStrictValidation (Z)V
public final fun setTargets (Lorg/gradle/api/provider/Provider;)V
}

public abstract class kotlinx/validation/KotlinKlibInferAbiForUnsupportedTargetTask : org/gradle/api/DefaultTask {
public field dumpFileName Ljava/lang/String;
public field inputImageFile Ljava/io/File;
public field outputApiDir Ljava/lang/String;
public field outputFile Ljava/io/File;
public field supportedTargets Ljava/util/Set;
public field unsupportedTarget Ljava/lang/String;
public fun <init> ()V
public final fun getDumpFileName ()Ljava/lang/String;
public final fun getInputImageFile ()Ljava/io/File;
public final fun getOutputApiDir ()Ljava/lang/String;
public final fun getOutputFile ()Ljava/io/File;
public final fun getSupportedTargets ()Ljava/util/Set;
public final fun getUnsupportedTarget ()Ljava/lang/String;
public final fun setDumpFileName (Ljava/lang/String;)V
public final fun setInputImageFile (Ljava/io/File;)V
public final fun setOutputApiDir (Ljava/lang/String;)V
public final fun setOutputFile (Ljava/io/File;)V
public final fun setSupportedTargets (Ljava/util/Set;)V
public final fun setUnsupportedTarget (Ljava/lang/String;)V
}

public abstract class kotlinx/validation/KotlinKlibMergeAbiTask : org/gradle/api/DefaultTask {
public field dumpFileName Ljava/lang/String;
public field mergedFile Ljava/io/File;
public fun <init> ()V
public final fun getDumpFileName ()Ljava/lang/String;
public final fun getGroupTargetNames ()Z
public final fun getMergedFile ()Ljava/io/File;
public final fun getTargets ()Ljava/util/Set;
public final fun setDumpFileName (Ljava/lang/String;)V
public final fun setGroupTargetNames (Z)V
public final fun setMergedFile (Ljava/io/File;)V
}

public final class kotlinx/validation/api/ClassBinarySignature {
Expand Down
7 changes: 5 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ val createClasspathManifest = tasks.register("createClasspathManifest") {
dependencies {
implementation(gradleApi())
implementation(libs.kotlinx.metadata)
compileOnly(libs.kotlin.compiler.embeddable)
implementation(libs.ow2.asm)
implementation(libs.ow2.asmTree)
implementation(libs.javaDiffUtils)
Expand All @@ -78,7 +79,6 @@ dependencies {

tasks.compileKotlin {
compilerOptions {
freeCompilerArgs.add("-Xexplicit-api=strict")
allWarningsAsErrors.set(true)
@Suppress("DEPRECATION") // Compatibility with Gradle 7 requires Kotlin 1.4
languageVersion.set(KotlinVersion.KOTLIN_1_4)
Expand All @@ -87,7 +87,9 @@ tasks.compileKotlin {
// Suppressing "w: Language version 1.4 is deprecated and its support will be removed" message
// because LV=1.4 in practice is mandatory as it is a default language version in Gradle 7.0+ for users' kts scripts.
freeCompilerArgs.addAll(
"-Xsuppress-version-warnings"
"-Xexplicit-api=strict",
"-Xsuppress-version-warnings",
"-Xopt-in=kotlin.RequiresOptIn"
)
}
}
Expand Down Expand Up @@ -162,6 +164,7 @@ testing {
implementation(project())
implementation(libs.assertJ.core)
implementation(libs.kotlin.test)
implementation(libs.kotlin.compiler.embeddable)
}
}

Expand Down
Loading