Skip to content
Draft
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
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/metro-compatibility.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 10 additions & 4 deletions compiler/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
plugins {
id 'com.squareup.lib'
alias libs.plugins.autoservice
alias libs.plugins.binary.compat.validator
alias libs.plugins.maven.publish
}
Expand All @@ -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 {
Expand Down Expand Up @@ -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',
Expand Down Expand Up @@ -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')
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
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
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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -924,7 +923,6 @@ public class DevelopmentAppComponentFir(session: FirSession) :
}
}

@AutoService(MetroFirDeclarationGenerationExtension.Factory::class)
public class Factory : MetroFirDeclarationGenerationExtension.Factory {
override fun create(
session: FirSession,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -286,7 +285,6 @@ public class ContributesFeatureFlagFir(session: FirSession) :
}
}

@AutoService(MetroFirDeclarationGenerationExtension.Factory::class)
public class Factory : MetroFirDeclarationGenerationExtension.Factory {
override fun create(
session: FirSession,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -297,7 +296,6 @@ public class ContributesMultibindingScopedFir(session: FirSession) :
}
}

@AutoService(MetroFirDeclarationGenerationExtension.Factory::class)
public class Factory : MetroFirDeclarationGenerationExtension.Factory {
override fun create(
session: FirSession,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -657,7 +656,6 @@ public class ContributesServiceFir(session: FirSession) :
}
}

@AutoService(MetroFirDeclarationGenerationExtension.Factory::class)
public class Factory : MetroFirDeclarationGenerationExtension.Factory {
override fun create(
session: FirSession,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
com.squareup.metro.extensions.SquareMetroExtensionsCommandLineProcessor
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
com.squareup.metro.extensions.SquareMetroExtensionsPluginComponentRegistrar
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 0 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
[versions]
autoservice = "0.1.4"
binary-compat-validator = "0.18.1"
buildconfig = "6.0.9"
jdk = "21"
Expand All @@ -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" }
Expand Down
4 changes: 4 additions & 0 deletions integration-tests/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down
1 change: 1 addition & 0 deletions integration-tests/demo/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions integration-tests/lib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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')
}
4 changes: 4 additions & 0 deletions stubs/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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')
}