Skip to content

use BCV-MU to check BCV-MU #6

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

Merged
merged 5 commits into from
Mar 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ plugins {
dependencies {
implementation("org.gradle.kotlin:gradle-kotlin-dsl-plugins:$expectedKotlinDslPluginsVersion")

implementation(libs.gradlePlugin.bcvMu)
implementation(libs.gradlePlugin.pluginPublishing)
implementation(libs.gradlePlugin.shadow)
}
Expand Down
2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ kotlinx-bcv = "0.13.0"

gradlePluginPublishPlugin = "1.1.0"
shadowPlugin = "8.1.0"
bcvMu = "0.0.3"

supportedGradleVersion = "7.6" # the minimal supported Gradle plugin version, used in functional tests

Expand All @@ -31,6 +32,7 @@ junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "jun
## endregion

## region Gradle Plugins
gradlePlugin-bcvMu = { module = "dev.adamko.kotlin.binary_compatibility_validator:bcv-gradle-plugin", version.ref = "bcvMu" }
gradlePlugin-pluginPublishing = { module = "com.gradle.publish:plugin-publish-plugin", version.ref = "gradlePluginPublishPlugin" }
gradlePlugin-shadow = { module = "com.github.johnrengelman:shadow", version.ref = "shadowPlugin" }
## endregion
102 changes: 102 additions & 0 deletions modules/bcv-gradle-plugin/api/bcv-gradle-plugin.api
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
public abstract class dev/adamko/kotlin/binary_compatibility_validator/BCVPlugin : org/gradle/api/Plugin {
public static final field API_DIR Ljava/lang/String;
public static final field Companion Ldev/adamko/kotlin/binary_compatibility_validator/BCVPlugin$Companion;
public static final field EXTENSION_NAME Ljava/lang/String;
public static final field RUNTIME_CLASSPATH_CONFIGURATION_NAME Ljava/lang/String;
public static final field TASK_GROUP Ljava/lang/String;
public synthetic fun apply (Ljava/lang/Object;)V
public fun apply (Lorg/gradle/api/plugins/PluginAware;)V
}

public final class dev/adamko/kotlin/binary_compatibility_validator/BCVPlugin$Companion {
}

public abstract interface class dev/adamko/kotlin/binary_compatibility_validator/BCVProjectExtension : dev/adamko/kotlin/binary_compatibility_validator/targets/BCVTargetSpec, org/gradle/api/plugins/ExtensionAware {
public abstract fun getEnabled ()Lorg/gradle/api/provider/Property;
public abstract fun getIgnoredClasses ()Lorg/gradle/api/provider/SetProperty;
public abstract fun getIgnoredMarkers ()Lorg/gradle/api/provider/SetProperty;
public abstract fun getIgnoredPackages ()Lorg/gradle/api/provider/SetProperty;
public abstract fun getKotlinxBinaryCompatibilityValidatorVersion ()Lorg/gradle/api/provider/Property;
public abstract fun getNonPublicMarkers ()Lorg/gradle/api/provider/SetProperty;
public abstract fun getOutputApiDir ()Lorg/gradle/api/file/DirectoryProperty;
public abstract fun getProjectName ()Lorg/gradle/api/provider/Property;
public abstract fun getTargets ()Lorg/gradle/api/NamedDomainObjectContainer;
}

public abstract class dev/adamko/kotlin/binary_compatibility_validator/BCVProjectPlugin : org/gradle/api/Plugin {
public synthetic fun apply (Ljava/lang/Object;)V
public fun apply (Lorg/gradle/api/Project;)V
}

public abstract class dev/adamko/kotlin/binary_compatibility_validator/BCVSettingsPlugin : org/gradle/api/Plugin {
public synthetic fun apply (Ljava/lang/Object;)V
public fun apply (Lorg/gradle/api/initialization/Settings;)V
}

public abstract class dev/adamko/kotlin/binary_compatibility_validator/BCVSettingsPlugin$Extension {
public fun <init> (Ldev/adamko/kotlin/binary_compatibility_validator/targets/BCVTargetSpec;)V
public final fun defaultTargetValues (Lkotlin/jvm/functions/Function1;)V
public final fun getDefaultTargetValues ()Ldev/adamko/kotlin/binary_compatibility_validator/targets/BCVTargetSpec;
public abstract fun getIgnoredProjects ()Lorg/gradle/api/provider/SetProperty;
}

public final class dev/adamko/kotlin/binary_compatibility_validator/BCVSettingsPlugin$apply$1$inlined$sam$i$org_gradle_api_Action$0 : org/gradle/api/Action {
public fun <init> (Lkotlin/jvm/functions/Function1;)V
public final synthetic fun execute (Ljava/lang/Object;)V
}

public abstract class dev/adamko/kotlin/binary_compatibility_validator/targets/BCVTarget : dev/adamko/kotlin/binary_compatibility_validator/targets/BCVTargetSpec, java/io/Serializable, org/gradle/api/Named {
public fun <init> (Ljava/lang/String;)V
public abstract fun getEnabled ()Lorg/gradle/api/provider/Property;
public abstract fun getIgnoredClasses ()Lorg/gradle/api/provider/SetProperty;
public abstract fun getIgnoredMarkers ()Lorg/gradle/api/provider/SetProperty;
public abstract fun getIgnoredPackages ()Lorg/gradle/api/provider/SetProperty;
public abstract fun getInputClasses ()Lorg/gradle/api/file/ConfigurableFileCollection;
public abstract fun getInputJar ()Lorg/gradle/api/file/RegularFileProperty;
public fun getName ()Ljava/lang/String;
public final fun getPlatformType ()Ljava/lang/String;
}

public abstract interface class dev/adamko/kotlin/binary_compatibility_validator/targets/BCVTargetSpec : java/io/Serializable {
public abstract fun getEnabled ()Lorg/gradle/api/provider/Property;
public abstract fun getIgnoredClasses ()Lorg/gradle/api/provider/SetProperty;
public abstract fun getIgnoredMarkers ()Lorg/gradle/api/provider/SetProperty;
public abstract fun getIgnoredPackages ()Lorg/gradle/api/provider/SetProperty;
public abstract fun getInputClasses ()Lorg/gradle/api/file/ConfigurableFileCollection;
public abstract fun getInputJar ()Lorg/gradle/api/file/RegularFileProperty;
}

public abstract class dev/adamko/kotlin/binary_compatibility_validator/tasks/BCVApiCheckTask : dev/adamko/kotlin/binary_compatibility_validator/tasks/BCVDefaultTask {
public abstract fun getApiBuildDir ()Lorg/gradle/api/file/DirectoryProperty;
public abstract fun getExpectedApiDirPath ()Lorg/gradle/api/provider/Property;
public final fun getProjectApiDir ()Lorg/gradle/api/provider/Provider;
public final fun verify ()V
}

public abstract class dev/adamko/kotlin/binary_compatibility_validator/tasks/BCVApiDumpTask : dev/adamko/kotlin/binary_compatibility_validator/tasks/BCVDefaultTask {
public final fun action ()V
public abstract fun getApiDirectory ()Lorg/gradle/api/file/DirectoryProperty;
public abstract fun getApiDumpFiles ()Lorg/gradle/api/file/ConfigurableFileCollection;
}

public abstract class dev/adamko/kotlin/binary_compatibility_validator/tasks/BCVApiGenerateTask : dev/adamko/kotlin/binary_compatibility_validator/tasks/BCVDefaultTask {
public final fun generate ()V
public abstract fun getInputDependencies ()Lorg/gradle/api/file/ConfigurableFileCollection;
public abstract fun getOutputApiBuildDir ()Lorg/gradle/api/file/DirectoryProperty;
public abstract fun getProjectName ()Lorg/gradle/api/provider/Property;
public abstract fun getRuntimeClasspath ()Lorg/gradle/api/file/ConfigurableFileCollection;
public abstract fun getTargets ()Lorg/gradle/api/NamedDomainObjectContainer;
}

public abstract class dev/adamko/kotlin/binary_compatibility_validator/tasks/BCVDefaultTask : org/gradle/api/DefaultTask {
public abstract fun getBcvEnabled ()Lorg/gradle/api/provider/Property;
}

public final class dev/adamko/kotlin/binary_compatibility_validator/workers/BCVSignaturesWorker$Companion {
}

public final class org/gradle/kotlin/dsl/BcvGradleDslAccessorsKt {
public static final fun binaryCompatibilityValidator (Lorg/gradle/api/initialization/Settings;Lkotlin/jvm/functions/Function1;)V
public static final fun getBinaryCompatibilityValidator (Lorg/gradle/api/initialization/Settings;)Ldev/adamko/kotlin/binary_compatibility_validator/BCVSettingsPlugin$Extension;
}

14 changes: 14 additions & 0 deletions modules/bcv-gradle-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import buildsrc.utils.configurationNames
import buildsrc.utils.skipTestFixturesPublications
import org.gradle.api.attributes.plugin.GradlePluginApiVersion.GRADLE_PLUGIN_API_VERSION_ATTRIBUTE
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
buildsrc.conventions.`kotlin-gradle-plugin`
buildsrc.conventions.`maven-publish-test`
`java-test-fixtures`
//com.github.johnrengelman.shadow
//buildsrc.conventions.`gradle-plugin-variants`
dev.adamko.kotlin.`binary-compatibility-validator`
}

dependencies {
Expand Down Expand Up @@ -88,3 +90,15 @@ skipTestFixturesPublications()
// isEnableRelocation = false
// archiveClassifier.set("")
//}

tasks.withType<KotlinCompile>().configureEach {
kotlinOptions {
freeCompilerArgs += listOf(
"-opt-in=dev.adamko.kotlin.binary_compatibility_validator.internal.BCVInternalApi"
)
}
}

binaryCompatibilityValidator {
ignoredMarkers.add("dev.adamko.kotlin.binary_compatibility_validator.internal.BCVInternalApi")
}
5 changes: 4 additions & 1 deletion modules/bcv-gradle-plugin/src/main/kotlin/BCVPlugin.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package dev.adamko.kotlin.binary_compatibility_validator

import dev.adamko.kotlin.binary_compatibility_validator.internal.BCVInternalApi
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.initialization.Settings
import org.gradle.api.plugins.PluginAware
import org.gradle.kotlin.dsl.*


abstract class BCVPlugin : Plugin<PluginAware> {
abstract class BCVPlugin
@BCVInternalApi
constructor() : Plugin<PluginAware> {
override fun apply(target: PluginAware) {
when (target) {
is Project -> target.pluginManager.apply(BCVProjectPlugin::class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package dev.adamko.kotlin.binary_compatibility_validator
import dev.adamko.kotlin.binary_compatibility_validator.BCVPlugin.Companion.API_DIR
import dev.adamko.kotlin.binary_compatibility_validator.BCVPlugin.Companion.EXTENSION_NAME
import dev.adamko.kotlin.binary_compatibility_validator.BCVPlugin.Companion.RUNTIME_CLASSPATH_CONFIGURATION_NAME
import dev.adamko.kotlin.binary_compatibility_validator.internal.BCVInternalApi
import dev.adamko.kotlin.binary_compatibility_validator.internal.sourceSets
import dev.adamko.kotlin.binary_compatibility_validator.tasks.BCVApiCheckTask
import dev.adamko.kotlin.binary_compatibility_validator.tasks.BCVApiDumpTask
Expand All @@ -22,7 +23,10 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetContainer
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetsContainer


abstract class BCVProjectPlugin @Inject constructor(
abstract class BCVProjectPlugin
@BCVInternalApi
@Inject
constructor(
private val providers: ProviderFactory,
private val layout: ProjectLayout,
) : Plugin<Project> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.adamko.kotlin.binary_compatibility_validator

import dev.adamko.kotlin.binary_compatibility_validator.internal.BCVInternalApi
import dev.adamko.kotlin.binary_compatibility_validator.internal.globToRegex
import dev.adamko.kotlin.binary_compatibility_validator.targets.BCVTargetSpec
import javax.inject.Inject
Expand All @@ -10,7 +11,10 @@ import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.SetProperty
import org.gradle.kotlin.dsl.*

abstract class BCVSettingsPlugin @Inject constructor(
abstract class BCVSettingsPlugin
@BCVInternalApi
@Inject
constructor(
private val objects: ObjectFactory
) : Plugin<Settings> {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package dev.adamko.kotlin.binary_compatibility_validator.internal

import kotlin.annotation.AnnotationTarget.*


@RequiresOptIn(
"Internal API - may change at any time without notice",
level = RequiresOptIn.Level.WARNING
)
@Retention(AnnotationRetention.BINARY)
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY)
annotation class BCVInternalApi
@Target(
CLASS,
FUNCTION,
PROPERTY,
CONSTRUCTOR,
)
internal annotation class BCVInternalApi
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package dev.adamko.kotlin.binary_compatibility_validator.internal

import org.gradle.api.Project

typealias GradlePath = org.gradle.util.Path
internal typealias GradlePath = org.gradle.util.Path

fun GradlePath(path: String): GradlePath = GradlePath.path(path)
internal fun GradlePath(path: String): GradlePath = GradlePath.path(path)

internal val Project.isRootProject get() = this == rootProject

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ import org.gradle.api.provider.Property
import org.gradle.api.provider.SetProperty
import org.gradle.api.tasks.*

abstract class BCVTarget @Inject constructor(
abstract class BCVTarget
@Inject
constructor(
/**
* The JVM platform being targeted.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package dev.adamko.kotlin.binary_compatibility_validator.tasks

import com.github.difflib.DiffUtils
import com.github.difflib.UnifiedDiffUtils
import dev.adamko.kotlin.binary_compatibility_validator.internal.BCVInternalApi
import dev.adamko.kotlin.binary_compatibility_validator.internal.GradlePath
import dev.adamko.kotlin.binary_compatibility_validator.internal.fullPath
import java.io.*
Expand All @@ -16,7 +17,10 @@ import org.gradle.api.provider.ProviderFactory
import org.gradle.api.tasks.*

@CacheableTask
abstract class BCVApiCheckTask @Inject constructor(
abstract class BCVApiCheckTask
@BCVInternalApi
@Inject
constructor(
private val objects: ObjectFactory,
private val providers: ProviderFactory,
) : BCVDefaultTask() {
Expand Down Expand Up @@ -147,12 +151,6 @@ abstract class BCVApiCheckTask @Inject constructor(
)
return diff.joinToString("\n")
}

companion object {
// private fun setOfRelativePaths() = TreeSet<RelativePath> { rp1, rp2 ->
// rp1.toString().compareTo(rp2.toString(), true)
// }
}
}

/*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package dev.adamko.kotlin.binary_compatibility_validator.tasks

import dev.adamko.kotlin.binary_compatibility_validator.internal.BCVInternalApi
import javax.inject.Inject
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.FileSystemOperations
import org.gradle.api.tasks.*

@CacheableTask
abstract class BCVApiDumpTask @Inject constructor(
abstract class BCVApiDumpTask
@BCVInternalApi
@Inject
constructor(
private val fs: FileSystemOperations
) : BCVDefaultTask() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ import org.gradle.workers.WorkQueue
import org.gradle.workers.WorkerExecutor

@CacheableTask
abstract class BCVApiGenerateTask @Inject constructor(
abstract class BCVApiGenerateTask
@BCVInternalApi
@Inject
constructor(
private val workers: WorkerExecutor,
private val fs: FileSystemOperations,
) : BCVDefaultTask() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package dev.adamko.kotlin.binary_compatibility_validator.tasks

import dev.adamko.kotlin.binary_compatibility_validator.BCVPlugin
import dev.adamko.kotlin.binary_compatibility_validator.internal.BCVInternalApi
import org.gradle.api.DefaultTask
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.Input

@CacheableTask
abstract class BCVDefaultTask : DefaultTask() {
abstract class BCVDefaultTask
@BCVInternalApi
constructor() : DefaultTask() {

@get:Input
abstract val bcvEnabled: Property<Boolean>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ abstract class BCVSignaturesWorker : WorkAction<BCVSignaturesWorker.Parameters>

private val logger = Logging.getLogger(this::class.java)

@BCVInternalApi
interface Parameters : WorkParameters {
val outputApiDir: DirectoryProperty

Expand Down