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):
|
||||
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
-8
@@ -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
|
||||
|
||||
+12
-19
@@ -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
|
||||
|
||||
+13
-22
@@ -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()
|
||||
|
||||
|
||||
-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.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
|
||||
|
||||
Reference in New Issue
Block a user