aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing-Yuan Huang <laszio@google.com>2021-10-14 23:19:35 -0700
committerlaszio <ting-yuan@users.noreply.github.com>2021-10-15 14:11:32 -0700
commit4f829364524aadf68c174a2b5ff97fad5df6259d (patch)
tree8d348ee23b5b12e58faeef0dea3deb65fa0f1273
parentc7dc3d1949c8a3c4f4bcb6081299e1d4e566afed (diff)
downloadksp-4f829364524aadf68c174a2b5ff97fad5df6259d.tar.gz
New ksp option: allWarningsAsErrors
-rw-r--r--compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingPlugin.kt16
-rw-r--r--compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/MessageCollectorBasedKSPLogger.kt8
-rw-r--r--compiler-plugin/src/test/kotlin/com/google/devtools/ksp/test/AbstractKotlinKSPTest.kt3
-rw-r--r--gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspExtension.kt3
-rw-r--r--gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt5
-rw-r--r--integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt10
-rw-r--r--integration-tests/src/test/resources/playground/test-processor/src/main/kotlin/TestProcessor.kt1
7 files changed, 40 insertions, 6 deletions
diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingPlugin.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingPlugin.kt
index 08753c05..8c035786 100644
--- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingPlugin.kt
+++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingPlugin.kt
@@ -71,6 +71,7 @@ class KotlinSymbolProcessingCommandLineProcessor : CommandLineProcessor {
KspCliOption.KNOWN_REMOVED_OPTION -> knownRemoved.addAll(value.split(File.pathSeparator).map { File(it) })
KspCliOption.INCREMENTAL_OPTION -> incremental = value.toBoolean()
KspCliOption.INCREMENTAL_LOG_OPTION -> incrementalLog = value.toBoolean()
+ KspCliOption.ALL_WARNINGS_AS_ERRORS_OPTION -> allWarningsAsErrors = value.toBoolean()
KspCliOption.CHANGED_CLASSES_OPTION -> changedClasses.addAll(value.split(':'))
}
}
@@ -88,7 +89,7 @@ class KotlinSymbolProcessingComponentRegistrar : ComponentRegistrar {
}?.build() ?: return
val messageCollector = configuration.get(CLIConfigurationKeys.ORIGINAL_MESSAGE_COLLECTOR_KEY)
?: throw IllegalStateException("message collector not found!")
- val logger = MessageCollectorBasedKSPLogger(messageCollector)
+ val logger = MessageCollectorBasedKSPLogger(messageCollector, options.allWarningsAsErrors)
if (options.processingClasspath.isNotEmpty()) {
val kotlinSymbolProcessingHandlerExtension = KotlinSymbolProcessingExtension(options, logger)
AnalysisHandlerExtension.registerExtension(project, kotlinSymbolProcessingHandlerExtension)
@@ -205,6 +206,14 @@ enum class KspCliOption(
false
),
+ ALL_WARNINGS_AS_ERRORS_OPTION(
+ "allWarningsAsErrors",
+ "<allWarningsAsErrors>",
+ "treat all warnings as errors",
+ false,
+ false
+ ),
+
CHANGED_CLASSES_OPTION(
"changedClasses",
"<changedClasses>",
@@ -236,6 +245,7 @@ class KspOptions(
val kspOutputDir: File,
val incremental: Boolean,
val incrementalLog: Boolean,
+ val allWarningsAsErrors: Boolean,
val changedClasses: List<String>,
) {
class Builder {
@@ -260,6 +270,7 @@ class KspOptions(
var kspOutputDir: File? = null
var incremental: Boolean = false
var incrementalLog: Boolean = false
+ var allWarningsAsErrors: Boolean = false
var changedClasses: MutableList<String> = mutableListOf()
fun build(): KspOptions {
@@ -270,7 +281,8 @@ class KspOptions(
kotlinOutputDir!!,
resourceOutputDir!!,
processingClasspath, processors, processingOptions,
- knownModified, knownRemoved, cachesDir!!, kspOutputDir!!, incremental, incrementalLog, changedClasses
+ knownModified, knownRemoved, cachesDir!!, kspOutputDir!!, incremental, incrementalLog,
+ allWarningsAsErrors, changedClasses
)
}
}
diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/MessageCollectorBasedKSPLogger.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/MessageCollectorBasedKSPLogger.kt
index cda47429..779f2b3a 100644
--- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/MessageCollectorBasedKSPLogger.kt
+++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/MessageCollectorBasedKSPLogger.kt
@@ -26,7 +26,10 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import java.io.PrintWriter
import java.io.StringWriter
-class MessageCollectorBasedKSPLogger(private val messageCollector: MessageCollector) : KSPLogger {
+class MessageCollectorBasedKSPLogger(
+ private val messageCollector: MessageCollector,
+ private val allWarningsAsErrors: Boolean
+) : KSPLogger {
companion object {
const val PREFIX = "[ksp] "
@@ -51,7 +54,8 @@ class MessageCollectorBasedKSPLogger(private val messageCollector: MessageCollec
}
override fun warn(message: String, symbol: KSNode?) {
- recordedEvents.add(Event(CompilerMessageSeverity.WARNING, convertMessage(message, symbol)))
+ val severity = if (allWarningsAsErrors) CompilerMessageSeverity.ERROR else CompilerMessageSeverity.WARNING
+ recordedEvents.add(Event(severity, convertMessage(message, symbol)))
}
override fun error(message: String, symbol: KSNode?) {
diff --git a/compiler-plugin/src/test/kotlin/com/google/devtools/ksp/test/AbstractKotlinKSPTest.kt b/compiler-plugin/src/test/kotlin/com/google/devtools/ksp/test/AbstractKotlinKSPTest.kt
index c79b1b86..51d28c3e 100644
--- a/compiler-plugin/src/test/kotlin/com/google/devtools/ksp/test/AbstractKotlinKSPTest.kt
+++ b/compiler-plugin/src/test/kotlin/com/google/devtools/ksp/test/AbstractKotlinKSPTest.kt
@@ -129,7 +129,8 @@ abstract class AbstractKotlinKSPTest : KotlinBaseTest<AbstractKotlinKSPTest.KspT
}
if (testProcessor != null) {
val logger = MessageCollectorBasedKSPLogger(
- PrintingMessageCollector(System.err, MessageRenderer.PLAIN_FULL_PATHS, false)
+ PrintingMessageCollector(System.err, MessageRenderer.PLAIN_FULL_PATHS, false),
+ false
)
val analysisExtension =
KotlinSymbolProcessingExtension(
diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspExtension.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspExtension.kt
index 83ace369..2a82ad9a 100644
--- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspExtension.kt
+++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspExtension.kt
@@ -37,4 +37,7 @@ open class KspExtension {
// Note that it depends on behaviors of other Gradle plugins, that may bring surprises and can be hard to debug.
// Use your discretion.
open var allowSourcesFromOtherPlugins: Boolean = false
+
+ // Treat all warning as errors.
+ open var allWarningsAsErrors: Boolean = false
}
diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt
index b89545a9..76743a52 100644
--- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt
+++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt
@@ -110,6 +110,7 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
classpath: Configuration,
sourceSetName: String,
isIncremental: Boolean,
+ allWarningsAsErrors: Boolean,
): List<SubpluginOption> {
val options = mutableListOf<SubpluginOption>()
options += SubpluginOption("classOutputDir", getKspClassOutputDir(project, sourceSetName).path)
@@ -124,6 +125,7 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
project.findProperty("ksp.incremental.log")?.toString() ?: "false"
)
options += SubpluginOption("projectBaseDir", project.project.projectDir.canonicalPath)
+ options += SubpluginOption("allWarningsAsErrors", allWarningsAsErrors.toString())
options += FilesSubpluginOption("apclasspath", classpath.toList())
kspExtension.apOptions.forEach {
@@ -211,7 +213,8 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
kspExtension,
processorClasspath,
sourceSetName,
- isIncremental
+ isIncremental,
+ kspExtension.allWarningsAsErrors
)
}
)
diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt
index 42c68de6..2e746a21 100644
--- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt
+++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt
@@ -89,6 +89,16 @@ class PlaygroundIT {
}
}
+ @Test
+ fun testAllWarningsAsErrors() {
+ File(project.root, "workload/build.gradle.kts")
+ .appendText("\nksp {\n allWarningsAsErrors = true\n}\n")
+ val gradleRunner = GradleRunner.create().withProjectDir(project.root)
+ gradleRunner.withArguments("build").buildAndFail().let { result ->
+ Assert.assertTrue(result.output.contains("This is a harmless warning."))
+ }
+ }
+
// Compiler's test infra report this kind of error before KSP, so it is not testable there.
@Test
fun testNoFunctionName() {
diff --git a/integration-tests/src/test/resources/playground/test-processor/src/main/kotlin/TestProcessor.kt b/integration-tests/src/test/resources/playground/test-processor/src/main/kotlin/TestProcessor.kt
index e1c9965f..a1c7fe54 100644
--- a/integration-tests/src/test/resources/playground/test-processor/src/main/kotlin/TestProcessor.kt
+++ b/integration-tests/src/test/resources/playground/test-processor/src/main/kotlin/TestProcessor.kt
@@ -18,6 +18,7 @@ class TestProcessor : SymbolProcessor {
codeGenerator: CodeGenerator,
logger: KSPLogger
) {
+ logger.warn("This is a harmless warning.")
this.codeGenerator = codeGenerator
file = codeGenerator.createNewFile(Dependencies(false), "", "TestProcessor", "log")
emit("TestProcessor: init($options)", "")