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:
committed by
nataliya.valtman
parent
e5539b9a9e
commit
5dc7964137
+10
-1
@@ -830,7 +830,16 @@ Finished executing task ':$taskName'|
|
|||||||
|
|
||||||
// Workaround: override a console type set in the user machine gradle.properties (since Gradle 4.3):
|
// Workaround: override a console type set in the user machine gradle.properties (since Gradle 4.3):
|
||||||
add("--console=plain")
|
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)
|
addAll(options.freeCommandLineArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-8
@@ -1,7 +1,6 @@
|
|||||||
package org.jetbrains.kotlin.gradle
|
package org.jetbrains.kotlin.gradle
|
||||||
|
|
||||||
import org.gradle.api.logging.configuration.WarningMode
|
import org.gradle.api.logging.configuration.WarningMode
|
||||||
import org.gradle.util.GradleVersion
|
|
||||||
import org.jetbrains.kotlin.gradle.util.*
|
import org.jetbrains.kotlin.gradle.util.*
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
@@ -21,13 +20,7 @@ open class KaptIncrementalIT : BaseGradleIT() {
|
|||||||
arrayOf("A", "funA", "valA", "funUtil", "valUtil", "B", "funB", "valB", "useB")
|
arrayOf("A", "funA", "valA", "funUtil", "valUtil", "B", "funB", "valB", "useB")
|
||||||
|
|
||||||
override fun defaultBuildOptions(): BuildOptions {
|
override fun defaultBuildOptions(): BuildOptions {
|
||||||
val gradleVersion = GradleVersion.version(this.getProject().chooseWrapperVersionOrFinishTest())
|
return super.defaultBuildOptions().copy(incremental = true, warningMode = WarningMode.Fail)
|
||||||
//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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
+12
-19
@@ -518,26 +518,19 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To
|
|||||||
|
|
||||||
private fun maybeRegisterTransform(project: Project) {
|
private fun maybeRegisterTransform(project: Project) {
|
||||||
if (!project.extensions.extraProperties.has("KaptStructureTransformAdded")) {
|
if (!project.extensions.extraProperties.has("KaptStructureTransformAdded")) {
|
||||||
if (GradleVersion.current() >= GradleVersion.version("5.4")) {
|
val transformActionClass =
|
||||||
project.dependencies.registerTransform(StructureTransformAction::class.java) { transformSpec ->
|
if (GradleVersion.current() >= GradleVersion.version("5.4"))
|
||||||
transformSpec.from.attribute(artifactType, "jar")
|
StructureTransformAction::class.java
|
||||||
transformSpec.to.attribute(artifactType, CLASS_STRUCTURE_ARTIFACT_TYPE)
|
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 ->
|
project.dependencies.registerTransform(transformActionClass) { transformSpec ->
|
||||||
transformSpec.from.attribute(artifactType, "directory")
|
transformSpec.from.attribute(artifactType, "directory")
|
||||||
transformSpec.to.attribute(artifactType, CLASS_STRUCTURE_ARTIFACT_TYPE)
|
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.extensions.extraProperties["KaptStructureTransformAdded"] = true
|
project.extensions.extraProperties["KaptStructureTransformAdded"] = true
|
||||||
|
|||||||
+13
-22
@@ -26,17 +26,7 @@ abstract class StructureTransformAction : TransformAction<TransformParameters.No
|
|||||||
|
|
||||||
override fun transform(outputs: TransformOutputs) {
|
override fun transform(outputs: TransformOutputs) {
|
||||||
try {
|
try {
|
||||||
val input = inputArtifact.get().asFile
|
transform(inputArtifact.get().asFile, outputs)
|
||||||
|
|
||||||
val data = if (input.isDirectory) {
|
|
||||||
visitDirectory(input)
|
|
||||||
} else {
|
|
||||||
visitJar(input)
|
|
||||||
}
|
|
||||||
|
|
||||||
val dataFile = outputs.file("output.bin")
|
|
||||||
data.saveTo(dataFile)
|
|
||||||
|
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
throw e
|
throw e
|
||||||
}
|
}
|
||||||
@@ -55,23 +45,24 @@ abstract class StructureTransformLegacyAction : TransformAction<TransformParamet
|
|||||||
|
|
||||||
override fun transform(outputs: TransformOutputs) {
|
override fun transform(outputs: TransformOutputs) {
|
||||||
try {
|
try {
|
||||||
val input = inputArtifact
|
transform(inputArtifact, outputs)
|
||||||
|
|
||||||
val data = if (input.isDirectory) {
|
|
||||||
visitDirectory(input)
|
|
||||||
} else {
|
|
||||||
visitJar(input)
|
|
||||||
}
|
|
||||||
|
|
||||||
val dataFile = outputs.file("output.bin")
|
|
||||||
data.saveTo(dataFile)
|
|
||||||
|
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
throw e
|
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 {
|
private fun visitDirectory(directory: File): ClasspathEntryData {
|
||||||
val entryData = ClasspathEntryData()
|
val entryData = ClasspathEntryData()
|
||||||
|
|
||||||
|
|||||||
-48
@@ -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")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-13
@@ -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
|
|
||||||
}
|
|
||||||
+11
-14
@@ -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.TransformOutputs
|
||||||
import org.gradle.api.artifacts.transform.TransformParameters
|
import org.gradle.api.artifacts.transform.TransformParameters
|
||||||
import org.gradle.api.file.FileSystemLocation
|
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.Provider
|
||||||
import org.gradle.api.provider.ProviderFactory
|
import org.gradle.testfixtures.ProjectBuilder
|
||||||
import org.jetbrains.kotlin.gradle.fixtures.FakeGradleProvider
|
|
||||||
import org.jetbrains.kotlin.gradle.fixtures.FakeGradleRegularFile
|
|
||||||
import org.jetbrains.org.objectweb.asm.ClassWriter
|
import org.jetbrains.org.objectweb.asm.ClassWriter
|
||||||
import org.jetbrains.org.objectweb.asm.Opcodes
|
import org.jetbrains.org.objectweb.asm.Opcodes
|
||||||
import org.junit.Assert.*
|
import org.junit.Assert.*
|
||||||
@@ -21,7 +17,6 @@ import org.junit.Rule
|
|||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.rules.TemporaryFolder
|
import org.junit.rules.TemporaryFolder
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.concurrent.Callable
|
|
||||||
import java.util.zip.ZipEntry
|
import java.util.zip.ZipEntry
|
||||||
import java.util.zip.ZipOutputStream
|
import java.util.zip.ZipOutputStream
|
||||||
|
|
||||||
@@ -44,7 +39,7 @@ class ClasspathAnalyzerTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
val outputs = TransformOutputsMock(tmp.newFolder())
|
val outputs = TransformOutputsMock(tmp.newFolder())
|
||||||
StructureTransformTestAction(classesDir).transform(outputs)
|
StructureTransformTestAction(classesDir, tmp.newFolder("project")).transform(outputs)
|
||||||
|
|
||||||
val data = ClasspathEntryData.ClasspathEntrySerializer.loadFrom(outputs.createdOutputs.single())
|
val data = ClasspathEntryData.ClasspathEntrySerializer.loadFrom(outputs.createdOutputs.single())
|
||||||
assertEquals(setOf("test/A", "test/B"), data.classAbiHash.keys)
|
assertEquals(setOf("test/A", "test/B"), data.classAbiHash.keys)
|
||||||
@@ -80,7 +75,7 @@ class ClasspathAnalyzerTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
val outputs = TransformOutputsMock(tmp.newFolder())
|
val outputs = TransformOutputsMock(tmp.newFolder())
|
||||||
StructureTransformTestAction(inputJar).transform(outputs)
|
StructureTransformTestAction(inputJar, tmp.newFolder("project")).transform(outputs)
|
||||||
|
|
||||||
val data = ClasspathEntryData.ClasspathEntrySerializer.loadFrom(outputs.createdOutputs.single())
|
val data = ClasspathEntryData.ClasspathEntrySerializer.loadFrom(outputs.createdOutputs.single())
|
||||||
assertEquals(setOf("test/A", "test/B"), data.classAbiHash.keys)
|
assertEquals(setOf("test/A", "test/B"), data.classAbiHash.keys)
|
||||||
@@ -106,7 +101,7 @@ class ClasspathAnalyzerTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
val outputsA = TransformOutputsMock(tmp.newFolder())
|
val outputsA = TransformOutputsMock(tmp.newFolder())
|
||||||
StructureTransformTestAction(jarA).transform(outputsA)
|
StructureTransformTestAction(jarA, tmp.newFolder("projectA")).transform(outputsA)
|
||||||
|
|
||||||
val jarB = tmp.newFile("inputB.jar").also { jar ->
|
val jarB = tmp.newFile("inputB.jar").also { jar ->
|
||||||
ZipOutputStream(jar.outputStream()).use {
|
ZipOutputStream(jar.outputStream()).use {
|
||||||
@@ -120,14 +115,14 @@ class ClasspathAnalyzerTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
val outputsB = TransformOutputsMock(tmp.newFolder())
|
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())
|
assertArrayEquals(outputsA.createdOutputs.single().readBytes(), outputsB.createdOutputs.single().readBytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun emptyInput() {
|
fun emptyInput() {
|
||||||
val transformAction = StructureTransformTestAction(tmp.newFolder("input"))
|
val transformAction = StructureTransformTestAction(tmp.newFolder("input"), tmp.newFolder("project"))
|
||||||
val outputs = TransformOutputsMock(tmp.newFolder())
|
val outputs = TransformOutputsMock(tmp.newFolder())
|
||||||
|
|
||||||
transformAction.transform(outputs)
|
transformAction.transform(outputs)
|
||||||
@@ -154,7 +149,7 @@ class ClasspathAnalyzerTest {
|
|||||||
it.closeEntry()
|
it.closeEntry()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val transformAction = StructureTransformTestAction(inputJar)
|
val transformAction = StructureTransformTestAction(inputJar, tmp.newFolder("project"))
|
||||||
val outputs = TransformOutputsMock(tmp.newFolder())
|
val outputs = TransformOutputsMock(tmp.newFolder())
|
||||||
|
|
||||||
transformAction.transform(outputs)
|
transformAction.transform(outputs)
|
||||||
@@ -171,8 +166,10 @@ class ClasspathAnalyzerTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class StructureTransformTestAction(val input: File) : StructureTransformAction() {
|
class StructureTransformTestAction(val input: File, val projectDir: File) : StructureTransformAction() {
|
||||||
override val inputArtifact: Provider<FileSystemLocation> = FakeGradleProvider(FakeGradleRegularFile(input))
|
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? {
|
override fun getParameters(): TransformParameters.None? {
|
||||||
//no need for StructureTransformAction and so for test
|
//no need for StructureTransformAction and so for test
|
||||||
|
|||||||
Reference in New Issue
Block a user