diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt index 50012ecc3f3..e0364c9b69c 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt @@ -830,7 +830,16 @@ Finished executing task ':$taskName'| // Workaround: override a console type set in the user machine gradle.properties (since Gradle 4.3): add("--console=plain") - add("--warning-mode=${options.warningMode.name.toLowerCase()}") + //The feature of failing the build on deprecation warnings is introduced in gradle 5.6 + val supportFailingBuildOnWarning = + GradleVersion.version(chooseWrapperVersionOrFinishTest()) >= GradleVersion.version("5.6") + // Agp uses Gradle internal API constructor DefaultDomainObjectSet(Class) until Agp 3.6.0 which is deprecated by Gradle, + // so we don't run with --warning-mode=fail when Agp 3.6 or less is used. + val notUsingAgpWithWarnings = + options.androidGradlePluginVersion == null || options.androidGradlePluginVersion > AGPVersion.v3_6_0 + if (supportFailingBuildOnWarning && notUsingAgpWithWarnings && options.warningMode == WarningMode.Fail) { + add("--warning-mode=${WarningMode.Fail.name.toLowerCase()}") + } addAll(options.freeCommandLineArgs) } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt index db5ff4ca228..c520e6bee6e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlin.gradle import org.gradle.api.logging.configuration.WarningMode -import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.util.* import org.junit.Test import kotlin.test.assertEquals @@ -21,13 +20,7 @@ open class KaptIncrementalIT : BaseGradleIT() { arrayOf("A", "funA", "valA", "funUtil", "valUtil", "B", "funB", "valB", "useB") override fun defaultBuildOptions(): BuildOptions { - val gradleVersion = GradleVersion.version(this.getProject().chooseWrapperVersionOrFinishTest()) - //The feature of failing the build on deprecation warnings is introduced in gradle 5.6 - return if (gradleVersion >= GradleVersion.version("5.6")) { - super.defaultBuildOptions().copy(incremental = true, warningMode = WarningMode.Fail) - } else { - super.defaultBuildOptions().copy(incremental = true) - } + return super.defaultBuildOptions().copy(incremental = true, warningMode = WarningMode.Fail) } @Test diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt index e15d3a23cbf..177b339949c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt @@ -518,26 +518,19 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To private fun maybeRegisterTransform(project: Project) { if (!project.extensions.extraProperties.has("KaptStructureTransformAdded")) { - if (GradleVersion.current() >= GradleVersion.version("5.4")) { - project.dependencies.registerTransform(StructureTransformAction::class.java) { transformSpec -> - transformSpec.from.attribute(artifactType, "jar") - transformSpec.to.attribute(artifactType, CLASS_STRUCTURE_ARTIFACT_TYPE) - } + val transformActionClass = + if (GradleVersion.current() >= GradleVersion.version("5.4")) + StructureTransformAction::class.java + else + StructureTransformLegacyAction::class.java + project.dependencies.registerTransform(transformActionClass) { transformSpec -> + transformSpec.from.attribute(artifactType, "jar") + transformSpec.to.attribute(artifactType, CLASS_STRUCTURE_ARTIFACT_TYPE) + } - project.dependencies.registerTransform(StructureTransformAction::class.java) { transformSpec -> - transformSpec.from.attribute(artifactType, "directory") - transformSpec.to.attribute(artifactType, CLASS_STRUCTURE_ARTIFACT_TYPE) - } - } else { - project.dependencies.registerTransform(StructureTransformLegacyAction::class.java) { transformSpec -> - transformSpec.from.attribute(artifactType, "jar") - transformSpec.to.attribute(artifactType, CLASS_STRUCTURE_ARTIFACT_TYPE) - } - - project.dependencies.registerTransform(StructureTransformLegacyAction::class.java) { transformSpec -> - transformSpec.from.attribute(artifactType, "directory") - transformSpec.to.attribute(artifactType, CLASS_STRUCTURE_ARTIFACT_TYPE) - } + project.dependencies.registerTransform(transformActionClass) { transformSpec -> + transformSpec.from.attribute(artifactType, "directory") + transformSpec.to.attribute(artifactType, CLASS_STRUCTURE_ARTIFACT_TYPE) } project.extensions.extraProperties["KaptStructureTransformAdded"] = true diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt index 9eaf03489dd..72454c280d6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt @@ -26,17 +26,7 @@ abstract class StructureTransformAction : TransformAction(private val v: (()-> T)?): Provider { - - constructor(v: T): this({v}) - - override fun flatMap(transformer: Transformer, in T>): Provider { - @Suppress("UNCHECKED_CAST") - return transformer.transform(v!!.invoke()) as Provider - } - - override fun isPresent() = v != null - - override fun getOrElse(p0: T) = if (isPresent) orNull else p0 - - override fun map(transformer: Transformer): Provider { - return FakeGradleProvider { transformer.transform(get()) } - } - - override fun get() = orNull!! - - override fun getOrNull() = v?.invoke() - - override fun orElse(p0: T): Provider { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - override fun orElse(p0: Provider): Provider { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - override fun forUseAtConfigurationTime(): Provider { - TODO("Not yet implemented") - } - - override fun zip(p0: Provider, p1: BiFunction): Provider { - TODO("Not yet implemented") - } -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/fixtures/FakeGradleRegularFile.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/fixtures/FakeGradleRegularFile.kt deleted file mode 100644 index b4523063d35..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/fixtures/FakeGradleRegularFile.kt +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.gradle.fixtures - -import org.gradle.api.file.RegularFile -import java.io.File - -class FakeGradleRegularFile(private val file: File) : RegularFile { - override fun getAsFile(): File = file -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzerTest.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzerTest.kt index 1fdf0a2a66a..87fbeb98536 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzerTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzerTest.kt @@ -8,12 +8,8 @@ package org.jetbrains.kotlin.gradle.internal.kapt.incremental import org.gradle.api.artifacts.transform.TransformOutputs import org.gradle.api.artifacts.transform.TransformParameters import org.gradle.api.file.FileSystemLocation -import org.gradle.api.internal.file.DefaultFileSystemLocation -import org.gradle.api.internal.provider.DefaultProvider import org.gradle.api.provider.Provider -import org.gradle.api.provider.ProviderFactory -import org.jetbrains.kotlin.gradle.fixtures.FakeGradleProvider -import org.jetbrains.kotlin.gradle.fixtures.FakeGradleRegularFile +import org.gradle.testfixtures.ProjectBuilder import org.jetbrains.org.objectweb.asm.ClassWriter import org.jetbrains.org.objectweb.asm.Opcodes import org.junit.Assert.* @@ -21,7 +17,6 @@ import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder import java.io.File -import java.util.concurrent.Callable import java.util.zip.ZipEntry import java.util.zip.ZipOutputStream @@ -44,7 +39,7 @@ class ClasspathAnalyzerTest { } } val outputs = TransformOutputsMock(tmp.newFolder()) - StructureTransformTestAction(classesDir).transform(outputs) + StructureTransformTestAction(classesDir, tmp.newFolder("project")).transform(outputs) val data = ClasspathEntryData.ClasspathEntrySerializer.loadFrom(outputs.createdOutputs.single()) assertEquals(setOf("test/A", "test/B"), data.classAbiHash.keys) @@ -80,7 +75,7 @@ class ClasspathAnalyzerTest { } } val outputs = TransformOutputsMock(tmp.newFolder()) - StructureTransformTestAction(inputJar).transform(outputs) + StructureTransformTestAction(inputJar, tmp.newFolder("project")).transform(outputs) val data = ClasspathEntryData.ClasspathEntrySerializer.loadFrom(outputs.createdOutputs.single()) assertEquals(setOf("test/A", "test/B"), data.classAbiHash.keys) @@ -106,7 +101,7 @@ class ClasspathAnalyzerTest { } } val outputsA = TransformOutputsMock(tmp.newFolder()) - StructureTransformTestAction(jarA).transform(outputsA) + StructureTransformTestAction(jarA, tmp.newFolder("projectA")).transform(outputsA) val jarB = tmp.newFile("inputB.jar").also { jar -> ZipOutputStream(jar.outputStream()).use { @@ -120,14 +115,14 @@ class ClasspathAnalyzerTest { } } val outputsB = TransformOutputsMock(tmp.newFolder()) - StructureTransformTestAction(jarB).transform(outputsB) + StructureTransformTestAction(jarB, tmp.newFolder("projectB")).transform(outputsB) assertArrayEquals(outputsA.createdOutputs.single().readBytes(), outputsB.createdOutputs.single().readBytes()) } @Test fun emptyInput() { - val transformAction = StructureTransformTestAction(tmp.newFolder("input")) + val transformAction = StructureTransformTestAction(tmp.newFolder("input"), tmp.newFolder("project")) val outputs = TransformOutputsMock(tmp.newFolder()) transformAction.transform(outputs) @@ -154,7 +149,7 @@ class ClasspathAnalyzerTest { it.closeEntry() } } - val transformAction = StructureTransformTestAction(inputJar) + val transformAction = StructureTransformTestAction(inputJar, tmp.newFolder("project")) val outputs = TransformOutputsMock(tmp.newFolder()) transformAction.transform(outputs) @@ -171,8 +166,10 @@ class ClasspathAnalyzerTest { } } -class StructureTransformTestAction(val input: File) : StructureTransformAction() { - override val inputArtifact: Provider = FakeGradleProvider(FakeGradleRegularFile(input)) +class StructureTransformTestAction(val input: File, val projectDir: File) : StructureTransformAction() { + private val project = ProjectBuilder.builder().withProjectDir(projectDir).build() + + override val inputArtifact: Provider = project.provider { project.objects.fileProperty().fileValue(input).get() } override fun getParameters(): TransformParameters.None? { //no need for StructureTransformAction and so for test