Optimize the way of enabling "--warning-mode=fail"

Make sure project directory is cleaned up after testing
This change is a "follow-up" PR of
https://github.com/JetBrains/kotlin/pull/3804.
This commit is contained in:
Bingran
2020-11-03 15:48:52 +00:00
committed by nataliya.valtman
parent e5539b9a9e
commit 5dc7964137
7 changed files with 47 additions and 125 deletions
@@ -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<T>) 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)
}
@@ -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
@@ -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
@@ -26,17 +26,7 @@ abstract class StructureTransformAction : TransformAction<TransformParameters.No
override fun transform(outputs: TransformOutputs) {
try {
val input = inputArtifact.get().asFile
val data = if (input.isDirectory) {
visitDirectory(input)
} else {
visitJar(input)
}
val dataFile = outputs.file("output.bin")
data.saveTo(dataFile)
transform(inputArtifact.get().asFile, outputs)
} catch (e: Throwable) {
throw e
}
@@ -55,23 +45,24 @@ abstract class StructureTransformLegacyAction : TransformAction<TransformParamet
override fun transform(outputs: TransformOutputs) {
try {
val input = inputArtifact
val data = if (input.isDirectory) {
visitDirectory(input)
} else {
visitJar(input)
}
val dataFile = outputs.file("output.bin")
data.saveTo(dataFile)
transform(inputArtifact, outputs)
} catch (e: Throwable) {
throw e
}
}
}
private fun transform(input: File, outputs: TransformOutputs) {
val data = if (input.isDirectory) {
visitDirectory(input)
} else {
visitJar(input)
}
val dataFile = outputs.file("output.bin")
data.saveTo(dataFile)
}
private fun visitDirectory(directory: File): ClasspathEntryData {
val entryData = ClasspathEntryData()
@@ -1,48 +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.Transformer
import org.gradle.api.provider.Provider
import java.util.function.BiFunction
class FakeGradleProvider<T>(private val v: (()-> T)?): Provider<T> {
constructor(v: T): this({v})
override fun <S : Any?> flatMap(transformer: Transformer<out Provider<out S>, in T>): Provider<S> {
@Suppress("UNCHECKED_CAST")
return transformer.transform(v!!.invoke()) as Provider<S>
}
override fun isPresent() = v != null
override fun getOrElse(p0: T) = if (isPresent) orNull else p0
override fun <S : Any> map(transformer: Transformer<out S, in T>): Provider<S> {
return FakeGradleProvider { transformer.transform(get()) }
}
override fun get() = orNull!!
override fun getOrNull() = v?.invoke()
override fun orElse(p0: T): Provider<T> {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun orElse(p0: Provider<out T>): Provider<T> {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun forUseAtConfigurationTime(): Provider<T> {
TODO("Not yet implemented")
}
override fun <B : Any?, R : Any?> zip(p0: Provider<B>, p1: BiFunction<T, B, R>): Provider<R> {
TODO("Not yet implemented")
}
}
@@ -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
}
@@ -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<FileSystemLocation> = FakeGradleProvider(FakeGradleRegularFile(input))
class StructureTransformTestAction(val input: File, val projectDir: File) : StructureTransformAction() {
private val project = ProjectBuilder.builder().withProjectDir(projectDir).build()
override val inputArtifact: Provider<FileSystemLocation> = project.provider { project.objects.fileProperty().fileValue(input).get() }
override fun getParameters(): TransformParameters.None? {
//no need for StructureTransformAction and so for test