From 224df7a1ead257df503b6ae52d1c49cd37761eae Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 25 Jul 2017 19:19:41 +0300 Subject: [PATCH] Change -Xload-jsr305-annotations argument to -Xjsr305-annotations={ignore|enable} See https://youtrack.jetbrains.com/issue/KT-19229 for a complete explanation #KT-19229 Fixed #KT-10942 --- .../arguments/K2JVMCompilerArguments.java | 16 +++++++++++--- .../kotlin/frontend/java/di/injection.kt | 2 +- compiler/testData/cli/jvm/extraHelp.out | 3 ++- .../AbstractForeignAnnotationsTest.kt | 2 +- .../LoadJavaPackageAnnotationsTest.kt | 2 +- .../TypeQualifierAnnotationResolverTest.kt | 2 +- .../jetbrains/kotlin/config/AnalysisFlag.kt | 22 ++++++++++++++++++- 7 files changed, 40 insertions(+), 9 deletions(-) diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java index 502b70f99b9..f7272cd46ac 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.cli.common.arguments; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.config.AnalysisFlag; +import org.jetbrains.kotlin.config.Jsr305State; import org.jetbrains.kotlin.config.JvmTarget; import java.util.Map; @@ -162,8 +163,12 @@ public class K2JVMCompilerArguments extends CommonCompilerArguments { description = "Java compiler arguments") public String[] javacArguments; - @Argument(value = "-Xload-jsr305-annotations", description = "Load JSR-305 nullability annotations") - public boolean loadJsr305annotations; + @Argument( + value = "-Xjsr305-annotations", + valueDescription = "{ignore|enable}", + description = "Specify global behavior for JSR-305 nullability annotations: ignore, or treat as other supported nullability annotations" + ) + public String jsr305GlobalReportLevel = Jsr305State.DEFAULT.getDescription(); // Paths to output directories for friend modules. public String[] friendPaths; @@ -172,7 +177,12 @@ public class K2JVMCompilerArguments extends CommonCompilerArguments { @NotNull public Map, Object> configureAnalysisFlags() { Map, Object> result = super.configureAnalysisFlags(); - result.put(AnalysisFlag.getLoadJsr305Annotations(), loadJsr305annotations); + for (Jsr305State state : Jsr305State.values()) { + if (state.getDescription().equals(jsr305GlobalReportLevel)) { + result.put(AnalysisFlag.getLoadJsr305Annotations(), state); + break; + } + } return result; } } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt index a051baab601..21ba46214ca 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt @@ -103,7 +103,7 @@ fun createContainerForLazyResolveWithJava( useInstance(languageVersionSettings) - if (languageVersionSettings.getFlag(AnalysisFlag.loadJsr305Annotations)) { + if (languageVersionSettings.getFlag(AnalysisFlag.loadJsr305Annotations).shouldReportError) { useImpl() } else { diff --git a/compiler/testData/cli/jvm/extraHelp.out b/compiler/testData/cli/jvm/extraHelp.out index 93dabd3b532..ac3988bc4d8 100644 --- a/compiler/testData/cli/jvm/extraHelp.out +++ b/compiler/testData/cli/jvm/extraHelp.out @@ -20,7 +20,8 @@ where advanced options include: Script resolver environment in key-value pairs (the value could be quoted and escaped) -Xuse-javac Use javac for Java source and class files analysis -Xjavac-arguments= Java compiler arguments - -Xload-jsr305-annotations Load JSR-305 nullability annotations + -Xjsr305-annotations={ignore|enable} + Specify global behavior for JSR-305 nullability annotations: ignore, or treat as other supported nullability annotations -Xno-inline Disable method inlining -Xrepeat= Repeat compilation (for performance analysis) -Xskip-metadata-version-check Load classes with bad metadata version anyway (incl. pre-release classes) diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsTest.kt b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsTest.kt index 4d4ad6ce020..9b51b1ef011 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsTest.kt @@ -31,5 +31,5 @@ abstract class AbstractForeignAnnotationsTest : AbstractDiagnosticsWithFullJdkTe override fun loadLanguageVersionSettings(module: List): LanguageVersionSettings = LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE, - mapOf(AnalysisFlag.loadJsr305Annotations to true)) + mapOf(AnalysisFlag.loadJsr305Annotations to Jsr305State.ENABLE)) } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaPackageAnnotationsTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaPackageAnnotationsTest.kt index 6e8de73c6fd..829b9cc1964 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaPackageAnnotationsTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaPackageAnnotationsTest.kt @@ -46,7 +46,7 @@ class LoadJavaPackageAnnotationsTest : KtUsefulTestCase() { put(JVMConfigurationKeys.USE_JAVAC, true) } languageVersionSettings = LanguageVersionSettingsImpl( - LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE, mapOf(AnalysisFlag.loadJsr305Annotations to true) + LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE, mapOf(AnalysisFlag.loadJsr305Annotations to Jsr305State.ENABLE) ) configurator(this) } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/TypeQualifierAnnotationResolverTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/TypeQualifierAnnotationResolverTest.kt index 6264245d3be..e3d5e1e693d 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/TypeQualifierAnnotationResolverTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/TypeQualifierAnnotationResolverTest.kt @@ -95,7 +95,7 @@ class TypeQualifierAnnotationResolverTest : KtUsefulTestCase() { listOf(File(TEST_DATA_PATH)) ).apply { languageVersionSettings = LanguageVersionSettingsImpl( - LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE, mapOf(AnalysisFlag.loadJsr305Annotations to true) + LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE, mapOf(AnalysisFlag.loadJsr305Annotations to Jsr305State.ENABLE) ) } diff --git a/compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlag.kt b/compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlag.kt index b5e618bd586..288bfc67bfc 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlag.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlag.kt @@ -37,6 +37,10 @@ class AnalysisFlag internal constructor( object Boolean { operator fun provideDelegate(instance: Any?, property: KProperty<*>) = Flag(property.name, false) } + + object Jsr305StateIgnoreByDefault { + operator fun provideDelegate(instance: Any?, property: KProperty<*>) = Flag(property.name, Jsr305State.IGNORE) + } } companion object Flags { @@ -47,6 +51,22 @@ class AnalysisFlag internal constructor( val multiPlatformDoNotCheckImpl by Flag.Boolean @JvmStatic - val loadJsr305Annotations by Flag.Boolean + val loadJsr305Annotations by Flag.Jsr305StateIgnoreByDefault + } +} + +enum class Jsr305State( + val description: String, + val shouldReportWarning: Boolean = false, + val shouldReportError: Boolean = false +) { + IGNORE("ignore"), + WARN("warn", shouldReportWarning = true), + ENABLE("enable", shouldReportError = true), + ; + + companion object { + @JvmField + val DEFAULT: Jsr305State = IGNORE } }