diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 11156c0..9bd5113 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,9 +22,9 @@ jobs: - uses: actions/checkout@v6 - id: kotlin-versions uses: ./.github/actions/kotlin-versions -# with: + with: # preview-versions: 2.3.20-RC, 2.4.0-Beta1 -# preview-versions: 2.3.20 + preview-versions: 2.4.0-Beta1 test: needs: configure-kotlin-versions diff --git a/.github/workflows/metro-compatibility.yml b/.github/workflows/metro-compatibility.yml index e14c26d..9e5502b 100644 --- a/.github/workflows/metro-compatibility.yml +++ b/.github/workflows/metro-compatibility.yml @@ -23,9 +23,9 @@ jobs: - uses: actions/checkout@v6 - id: kotlin-versions uses: ./.github/actions/kotlin-versions -# with: + with: # preview-versions: 2.3.20-RC, 2.4.0-Beta1 -# preview-versions: 2.3.20 + preview-versions: 2.4.0-Beta1 metro-compatibility: needs: configure-kotlin-versions diff --git a/compiler/build.gradle b/compiler/build.gradle index 83a5e9f..70c892c 100644 --- a/compiler/build.gradle +++ b/compiler/build.gradle @@ -1,6 +1,5 @@ plugins { id 'com.squareup.lib' - alias libs.plugins.autoservice alias libs.plugins.binary.compat.validator alias libs.plugins.maven.publish } @@ -15,6 +14,12 @@ if (!kotlinVersionMatch.find()) { throw new GradleException("Unable to find kotlin version in ${libsVersionsToml}") } def catalogKotlinVersion = kotlinVersionMatch.group(1) +def configuredKotlinVersion = libs.versions.kotlin.get() +def kotlinVersionCore = configuredKotlinVersion.replaceFirst(/[-+].*$/, '') +def kotlinVersionParts = kotlinVersionCore.tokenize('.').collect { it as int } +def isKotlin24OrNewer = + kotlinVersionParts.size() >= 2 && + (kotlinVersionParts[0] > 2 || (kotlinVersionParts[0] == 2 && kotlinVersionParts[1] >= 4)) configurations { annotationsRuntimeClasspath { @@ -51,7 +56,9 @@ dependencies { //noinspection UnnecessaryQualifiedReference tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { compilerOptions { - freeCompilerArgs.add('-Xcontext-parameters') + if (!isKotlin24OrNewer) { + freeCompilerArgs.add('-Xcontext-parameters') + } optIn.addAll([ 'org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi', 'org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI', @@ -125,8 +132,7 @@ tasks.withType(Test).configureEach { testTask -> // Dump test golden files are version-sensitive and only match the version from // gradle/libs.versions.toml. Skip them whenever Kotlin is overridden to a different version. - def effectiveKotlinVersion = libs.versions.kotlin.get() - if (effectiveKotlinVersion != catalogKotlinVersion) { + if (configuredKotlinVersion != catalogKotlinVersion) { systemProperty('squareMetroExtensions.previewKotlinBuild', 'true') } } diff --git a/compiler/src/main/kotlin/com/squareup/metro/extensions/SquareMetroExtensionsCommandLineProcessor.kt b/compiler/src/main/kotlin/com/squareup/metro/extensions/SquareMetroExtensionsCommandLineProcessor.kt index aeb39dd..a896f47 100644 --- a/compiler/src/main/kotlin/com/squareup/metro/extensions/SquareMetroExtensionsCommandLineProcessor.kt +++ b/compiler/src/main/kotlin/com/squareup/metro/extensions/SquareMetroExtensionsCommandLineProcessor.kt @@ -1,12 +1,10 @@ package com.squareup.metro.extensions -import com.fueledbycaffeine.autoservice.AutoService import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption import org.jetbrains.kotlin.compiler.plugin.CliOption import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor import org.jetbrains.kotlin.config.CompilerConfiguration -@AutoService(CommandLineProcessor::class) public class SquareMetroExtensionsCommandLineProcessor : CommandLineProcessor { override val pluginId: String = "com.squareup.metro.extensions" diff --git a/compiler/src/main/kotlin/com/squareup/metro/extensions/SquareMetroExtensionsPluginComponentRegistrar.kt b/compiler/src/main/kotlin/com/squareup/metro/extensions/SquareMetroExtensionsPluginComponentRegistrar.kt index b805191..9b32d09 100644 --- a/compiler/src/main/kotlin/com/squareup/metro/extensions/SquareMetroExtensionsPluginComponentRegistrar.kt +++ b/compiler/src/main/kotlin/com/squareup/metro/extensions/SquareMetroExtensionsPluginComponentRegistrar.kt @@ -1,6 +1,5 @@ package com.squareup.metro.extensions -import com.fueledbycaffeine.autoservice.AutoService import com.squareup.metro.extensions.featureflag.ContributesFeatureFlagIrExtension import com.squareup.metro.extensions.service.ContributesServiceIrExtension import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension @@ -8,7 +7,6 @@ import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter -@AutoService(CompilerPluginRegistrar::class) public class SquareMetroExtensionsPluginComponentRegistrar : CompilerPluginRegistrar() { override val pluginId: String = "com.squareup.metro.extensions" override val supportsK2: Boolean = true diff --git a/compiler/src/main/kotlin/com/squareup/metro/extensions/developmentapp/DevelopmentAppComponentFir.kt b/compiler/src/main/kotlin/com/squareup/metro/extensions/developmentapp/DevelopmentAppComponentFir.kt index a66eb6f..a91f6d6 100644 --- a/compiler/src/main/kotlin/com/squareup/metro/extensions/developmentapp/DevelopmentAppComponentFir.kt +++ b/compiler/src/main/kotlin/com/squareup/metro/extensions/developmentapp/DevelopmentAppComponentFir.kt @@ -1,6 +1,5 @@ package com.squareup.metro.extensions.developmentapp -import com.fueledbycaffeine.autoservice.AutoService import com.squareup.metro.extensions.ArgNames import com.squareup.metro.extensions.ClassIds import com.squareup.metro.extensions.Keys.DevelopmentAppComponentGeneratorKey @@ -924,7 +923,6 @@ public class DevelopmentAppComponentFir(session: FirSession) : } } - @AutoService(MetroFirDeclarationGenerationExtension.Factory::class) public class Factory : MetroFirDeclarationGenerationExtension.Factory { override fun create( session: FirSession, diff --git a/compiler/src/main/kotlin/com/squareup/metro/extensions/developmentapp/DevelopmentAppComponentMetroExtension.kt b/compiler/src/main/kotlin/com/squareup/metro/extensions/developmentapp/DevelopmentAppComponentMetroExtension.kt index e2769f6..70b48f2 100644 --- a/compiler/src/main/kotlin/com/squareup/metro/extensions/developmentapp/DevelopmentAppComponentMetroExtension.kt +++ b/compiler/src/main/kotlin/com/squareup/metro/extensions/developmentapp/DevelopmentAppComponentMetroExtension.kt @@ -1,6 +1,5 @@ package com.squareup.metro.extensions.developmentapp -import com.fueledbycaffeine.autoservice.AutoService import com.squareup.metro.extensions.ClassIds import com.squareup.metro.extensions.fir.findAnnotation import dev.zacsweers.metro.compiler.MetroOptions @@ -148,7 +147,6 @@ public class DevelopmentAppComponentMetroExtension(private val session: FirSessi return classId } - @AutoService(MetroContributionExtension.Factory::class) public class Factory : MetroContributionExtension.Factory { override fun create( session: FirSession, diff --git a/compiler/src/main/kotlin/com/squareup/metro/extensions/featureflag/ContributesFeatureFlagFir.kt b/compiler/src/main/kotlin/com/squareup/metro/extensions/featureflag/ContributesFeatureFlagFir.kt index 465aa38..67567ef 100644 --- a/compiler/src/main/kotlin/com/squareup/metro/extensions/featureflag/ContributesFeatureFlagFir.kt +++ b/compiler/src/main/kotlin/com/squareup/metro/extensions/featureflag/ContributesFeatureFlagFir.kt @@ -1,6 +1,5 @@ package com.squareup.metro.extensions.featureflag -import com.fueledbycaffeine.autoservice.AutoService import com.squareup.metro.extensions.ArgNames import com.squareup.metro.extensions.ClassIds import com.squareup.metro.extensions.Keys.ContributesFeatureFlagGeneratorKey @@ -286,7 +285,6 @@ public class ContributesFeatureFlagFir(session: FirSession) : } } - @AutoService(MetroFirDeclarationGenerationExtension.Factory::class) public class Factory : MetroFirDeclarationGenerationExtension.Factory { override fun create( session: FirSession, diff --git a/compiler/src/main/kotlin/com/squareup/metro/extensions/featureflag/ContributesFeatureFlagMetroExtension.kt b/compiler/src/main/kotlin/com/squareup/metro/extensions/featureflag/ContributesFeatureFlagMetroExtension.kt index b8a0509..c72b665 100644 --- a/compiler/src/main/kotlin/com/squareup/metro/extensions/featureflag/ContributesFeatureFlagMetroExtension.kt +++ b/compiler/src/main/kotlin/com/squareup/metro/extensions/featureflag/ContributesFeatureFlagMetroExtension.kt @@ -1,6 +1,5 @@ package com.squareup.metro.extensions.featureflag -import com.fueledbycaffeine.autoservice.AutoService import com.squareup.metro.extensions.ClassIds import com.squareup.metro.extensions.fir.hasAnnotation import dev.zacsweers.metro.compiler.MetroOptions @@ -89,7 +88,6 @@ public class ContributesFeatureFlagMetroExtension(private val session: FirSessio return null } - @AutoService(MetroContributionExtension.Factory::class) public class Factory : MetroContributionExtension.Factory { override fun create( session: FirSession, diff --git a/compiler/src/main/kotlin/com/squareup/metro/extensions/robot/ContributesRobotFir.kt b/compiler/src/main/kotlin/com/squareup/metro/extensions/robot/ContributesRobotFir.kt index a744f7a..3fc28f7 100644 --- a/compiler/src/main/kotlin/com/squareup/metro/extensions/robot/ContributesRobotFir.kt +++ b/compiler/src/main/kotlin/com/squareup/metro/extensions/robot/ContributesRobotFir.kt @@ -1,6 +1,5 @@ package com.squareup.metro.extensions.robot -import com.fueledbycaffeine.autoservice.AutoService import com.squareup.metro.extensions.ArgNames import com.squareup.metro.extensions.ClassIds import com.squareup.metro.extensions.Keys.ContributesRobotGeneratorKey @@ -222,7 +221,6 @@ public class ContributesRobotFir(session: FirSession) : return "get$generatedPackage$fileName" } - @AutoService(MetroFirDeclarationGenerationExtension.Factory::class) public class Factory : MetroFirDeclarationGenerationExtension.Factory { override fun create( session: FirSession, diff --git a/compiler/src/main/kotlin/com/squareup/metro/extensions/robot/ContributesRobotMetroExtension.kt b/compiler/src/main/kotlin/com/squareup/metro/extensions/robot/ContributesRobotMetroExtension.kt index e976327..38f05d0 100644 --- a/compiler/src/main/kotlin/com/squareup/metro/extensions/robot/ContributesRobotMetroExtension.kt +++ b/compiler/src/main/kotlin/com/squareup/metro/extensions/robot/ContributesRobotMetroExtension.kt @@ -1,6 +1,5 @@ package com.squareup.metro.extensions.robot -import com.fueledbycaffeine.autoservice.AutoService import com.squareup.metro.extensions.fir.extractScopeClassId import dev.zacsweers.metro.compiler.MetroOptions import dev.zacsweers.metro.compiler.api.fir.MetroContributionExtension @@ -77,7 +76,6 @@ public class ContributesRobotMetroExtension(private val session: FirSession) : } } - @AutoService(MetroContributionExtension.Factory::class) public class Factory : MetroContributionExtension.Factory { override fun create( session: FirSession, diff --git a/compiler/src/main/kotlin/com/squareup/metro/extensions/scoped/ContributesMultibindingScopedFir.kt b/compiler/src/main/kotlin/com/squareup/metro/extensions/scoped/ContributesMultibindingScopedFir.kt index 1b9017e..83488d1 100644 --- a/compiler/src/main/kotlin/com/squareup/metro/extensions/scoped/ContributesMultibindingScopedFir.kt +++ b/compiler/src/main/kotlin/com/squareup/metro/extensions/scoped/ContributesMultibindingScopedFir.kt @@ -1,6 +1,5 @@ package com.squareup.metro.extensions.scoped -import com.fueledbycaffeine.autoservice.AutoService import com.squareup.metro.extensions.ArgNames import com.squareup.metro.extensions.ClassIds import com.squareup.metro.extensions.Keys.ContributesMultibindingScopedGeneratorKey @@ -297,7 +296,6 @@ public class ContributesMultibindingScopedFir(session: FirSession) : } } - @AutoService(MetroFirDeclarationGenerationExtension.Factory::class) public class Factory : MetroFirDeclarationGenerationExtension.Factory { override fun create( session: FirSession, diff --git a/compiler/src/main/kotlin/com/squareup/metro/extensions/scoped/ContributesMultibindingScopedMetroExtension.kt b/compiler/src/main/kotlin/com/squareup/metro/extensions/scoped/ContributesMultibindingScopedMetroExtension.kt index 5a68d0f..15ca946 100644 --- a/compiler/src/main/kotlin/com/squareup/metro/extensions/scoped/ContributesMultibindingScopedMetroExtension.kt +++ b/compiler/src/main/kotlin/com/squareup/metro/extensions/scoped/ContributesMultibindingScopedMetroExtension.kt @@ -1,6 +1,5 @@ package com.squareup.metro.extensions.scoped -import com.fueledbycaffeine.autoservice.AutoService import com.squareup.metro.extensions.fir.extractScopeClassId import dev.zacsweers.metro.compiler.MetroOptions import dev.zacsweers.metro.compiler.api.fir.MetroContributionExtension @@ -83,7 +82,6 @@ public class ContributesMultibindingScopedMetroExtension(private val session: Fi } } - @AutoService(MetroContributionExtension.Factory::class) public class Factory : MetroContributionExtension.Factory { override fun create( session: FirSession, diff --git a/compiler/src/main/kotlin/com/squareup/metro/extensions/service/ContributesServiceFir.kt b/compiler/src/main/kotlin/com/squareup/metro/extensions/service/ContributesServiceFir.kt index 6705e62..cf35ea8 100644 --- a/compiler/src/main/kotlin/com/squareup/metro/extensions/service/ContributesServiceFir.kt +++ b/compiler/src/main/kotlin/com/squareup/metro/extensions/service/ContributesServiceFir.kt @@ -1,6 +1,5 @@ package com.squareup.metro.extensions.service -import com.fueledbycaffeine.autoservice.AutoService import com.squareup.metro.extensions.ArgNames import com.squareup.metro.extensions.ClassIds import com.squareup.metro.extensions.Keys.ContributesServiceGeneratorKey @@ -657,7 +656,6 @@ public class ContributesServiceFir(session: FirSession) : } } - @AutoService(MetroFirDeclarationGenerationExtension.Factory::class) public class Factory : MetroFirDeclarationGenerationExtension.Factory { override fun create( session: FirSession, diff --git a/compiler/src/main/kotlin/com/squareup/metro/extensions/service/ContributesServiceMetroExtension.kt b/compiler/src/main/kotlin/com/squareup/metro/extensions/service/ContributesServiceMetroExtension.kt index ce9e2c2..2d0ba2a 100644 --- a/compiler/src/main/kotlin/com/squareup/metro/extensions/service/ContributesServiceMetroExtension.kt +++ b/compiler/src/main/kotlin/com/squareup/metro/extensions/service/ContributesServiceMetroExtension.kt @@ -1,6 +1,5 @@ package com.squareup.metro.extensions.service -import com.fueledbycaffeine.autoservice.AutoService import com.squareup.metro.extensions.ArgNames import com.squareup.metro.extensions.fir.extractClassIdsFromArrayArg import com.squareup.metro.extensions.fir.extractScopeClassId @@ -118,7 +117,6 @@ public class ContributesServiceMetroExtension(private val session: FirSession) : ) } - @AutoService(MetroContributionExtension.Factory::class) public class Factory : MetroContributionExtension.Factory { override fun create( session: FirSession, diff --git a/compiler/src/main/resources/META-INF/services/dev.zacsweers.metro.compiler.api.fir.MetroContributionExtension$Factory b/compiler/src/main/resources/META-INF/services/dev.zacsweers.metro.compiler.api.fir.MetroContributionExtension$Factory new file mode 100644 index 0000000..4e412c0 --- /dev/null +++ b/compiler/src/main/resources/META-INF/services/dev.zacsweers.metro.compiler.api.fir.MetroContributionExtension$Factory @@ -0,0 +1,5 @@ +com.squareup.metro.extensions.developmentapp.DevelopmentAppComponentMetroExtension$Factory +com.squareup.metro.extensions.featureflag.ContributesFeatureFlagMetroExtension$Factory +com.squareup.metro.extensions.robot.ContributesRobotMetroExtension$Factory +com.squareup.metro.extensions.scoped.ContributesMultibindingScopedMetroExtension$Factory +com.squareup.metro.extensions.service.ContributesServiceMetroExtension$Factory diff --git a/compiler/src/main/resources/META-INF/services/dev.zacsweers.metro.compiler.api.fir.MetroFirDeclarationGenerationExtension$Factory b/compiler/src/main/resources/META-INF/services/dev.zacsweers.metro.compiler.api.fir.MetroFirDeclarationGenerationExtension$Factory new file mode 100644 index 0000000..107cd0e --- /dev/null +++ b/compiler/src/main/resources/META-INF/services/dev.zacsweers.metro.compiler.api.fir.MetroFirDeclarationGenerationExtension$Factory @@ -0,0 +1,5 @@ +com.squareup.metro.extensions.developmentapp.DevelopmentAppComponentFir$Factory +com.squareup.metro.extensions.featureflag.ContributesFeatureFlagFir$Factory +com.squareup.metro.extensions.robot.ContributesRobotFir$Factory +com.squareup.metro.extensions.scoped.ContributesMultibindingScopedFir$Factory +com.squareup.metro.extensions.service.ContributesServiceFir$Factory diff --git a/compiler/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor b/compiler/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor new file mode 100644 index 0000000..7d4770a --- /dev/null +++ b/compiler/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor @@ -0,0 +1 @@ +com.squareup.metro.extensions.SquareMetroExtensionsCommandLineProcessor diff --git a/compiler/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar b/compiler/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar new file mode 100644 index 0000000..304a066 --- /dev/null +++ b/compiler/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar @@ -0,0 +1 @@ +com.squareup.metro.extensions.SquareMetroExtensionsPluginComponentRegistrar diff --git a/compiler/src/test/kotlin/com/squareup/metro/extensions/services/ExtensionRegistrarConfigurator.kt b/compiler/src/test/kotlin/com/squareup/metro/extensions/services/ExtensionRegistrarConfigurator.kt index be98429..9ce5514 100644 --- a/compiler/src/test/kotlin/com/squareup/metro/extensions/services/ExtensionRegistrarConfigurator.kt +++ b/compiler/src/test/kotlin/com/squareup/metro/extensions/services/ExtensionRegistrarConfigurator.kt @@ -45,6 +45,14 @@ private class ExtensionRegistrarConfigurator(testServices: TestServices) : metroCliProcessor.processOption(option, "true", configuration) } + val compilerVersionAliasesOption = + metroCliProcessor.pluginOptions.first { it.optionName == "compiler-version-aliases" } + metroCliProcessor.processOption( + compilerVersionAliasesOption, + "2.4.0-Beta1=2.4.0-dev-2124", + configuration, + ) + // Configure isReleaseBuild from directive (defaults to false) if (MetroDirectives.IS_RELEASE_BUILD in module.directives) { configuration.put(SquareMetroExtensionsConfig.IS_RELEASE_BUILD_KEY, true) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 66a0056..9ea8a43 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,4 @@ [versions] -autoservice = "0.1.4" binary-compat-validator = "0.18.1" buildconfig = "6.0.9" jdk = "21" @@ -24,7 +23,6 @@ metro-compiler = { module = "dev.zacsweers.metro:compiler", version.ref = "metro metro-runtime = { module = "dev.zacsweers.metro:runtime", version.ref = "metro" } [plugins] -autoservice = { id = "com.fueledbycaffeine.autoservice", version.ref = "autoservice" } binary-compat-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compat-validator" } buildconfig = { id = "com.github.gmazzo.buildconfig", version.ref = "buildconfig" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } diff --git a/integration-tests/app/build.gradle b/integration-tests/app/build.gradle index d62c54d..ad10648 100644 --- a/integration-tests/app/build.gradle +++ b/integration-tests/app/build.gradle @@ -4,6 +4,10 @@ plugins { alias libs.plugins.metro } +metro { + compilerVersionAliases.put('2.4.0-Beta1', '2.4.0-dev-2124') +} + dependencies { implementation project(':integration-tests:lib') implementation project(':stubs') diff --git a/integration-tests/demo/build.gradle b/integration-tests/demo/build.gradle index d3ef19b..0bebce7 100644 --- a/integration-tests/demo/build.gradle +++ b/integration-tests/demo/build.gradle @@ -5,6 +5,7 @@ plugins { } metro { + compilerVersionAliases.put('2.4.0-Beta1', '2.4.0-dev-2124') // The generated MetroComponent factory takes an Application parameter (@Provides) that may not // be consumed in this demo app. Suppress the warning since this is expected. unusedGraphInputsSeverity = dev.zacsweers.metro.gradle.DiagnosticSeverity.NONE diff --git a/integration-tests/lib/build.gradle b/integration-tests/lib/build.gradle index 6f728ff..cccb09e 100644 --- a/integration-tests/lib/build.gradle +++ b/integration-tests/lib/build.gradle @@ -4,6 +4,10 @@ plugins { alias libs.plugins.metro } +metro { + compilerVersionAliases.put('2.4.0-Beta1', '2.4.0-dev-2124') +} + dependencies { implementation project(':stubs') } diff --git a/stubs/build.gradle b/stubs/build.gradle index 60064e9..2c05ed2 100644 --- a/stubs/build.gradle +++ b/stubs/build.gradle @@ -2,3 +2,7 @@ plugins { id 'com.squareup.lib' alias libs.plugins.metro } + +metro { + compilerVersionAliases.put('2.4.0-Beta1', '2.4.0-dev-2124') +}