From 95bf63d6cbdcb1bb4e333ac1d670cdf40f713443 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 17 Jul 2023 11:09:07 +0200 Subject: [PATCH] K2: introduce OptIn language version checker #KT-60598 Fixed --- .../FirOptInLanguageVersionSettingsChecker.kt | 38 +++++++++++++++- ...guageVersionSettingsDiagnosticComponent.kt | 9 +--- .../FirImportResolveTransformer.kt | 36 --------------- .../fir/resolve/transformers/ImportUtils.kt | 45 +++++++++++++++++++ .../cli/jvm/experimentalDeprecated.args | 2 + .../cli/jvm/experimentalDeprecated.out | 5 ++- .../cli/jvm/experimentalDeprecatedK1.args | 8 ++++ .../cli/jvm/experimentalDeprecatedK1.out | 3 ++ .../jvm/experimentalDeprecatedWarning.args | 3 +- .../cli/jvm/experimentalDeprecatedWarning.out | 3 +- .../jvm/experimentalDeprecatedWarningK1.args | 8 ++++ .../jvm/experimentalDeprecatedWarningK1.out | 3 ++ .../cli/jvm/experimentalIsNotAnnotation.args | 2 + .../cli/jvm/experimentalIsNotAnnotation.out | 1 + .../jvm/experimentalIsNotAnnotationK1.args | 8 ++++ .../cli/jvm/experimentalIsNotAnnotationK1.out | 3 ++ .../cli/jvm/experimentalIsNotMarker.args | 2 + .../cli/jvm/experimentalIsNotMarker.out | 1 + .../cli/jvm/experimentalIsNotMarkerK1.args | 6 +++ .../cli/jvm/experimentalIsNotMarkerK1.out | 2 + .../testData/cli/jvm/experimentalNested.args | 2 + .../testData/cli/jvm/experimentalNested.out | 1 + .../cli/jvm/experimentalNestedK1.args | 7 +++ .../testData/cli/jvm/experimentalNestedK1.out | 1 + .../cli/jvm/experimentalUnresolved.args | 3 +- .../cli/jvm/experimentalUnresolved.out | 1 + .../cli/jvm/experimentalUnresolvedK1.args | 9 ++++ .../cli/jvm/experimentalUnresolvedK1.out | 3 ++ .../kotlin/cli/CliTestGenerated.java | 30 +++++++++++++ 29 files changed, 196 insertions(+), 49 deletions(-) create mode 100644 compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/transformers/ImportUtils.kt create mode 100644 compiler/testData/cli/jvm/experimentalDeprecatedK1.args create mode 100644 compiler/testData/cli/jvm/experimentalDeprecatedK1.out create mode 100644 compiler/testData/cli/jvm/experimentalDeprecatedWarningK1.args create mode 100644 compiler/testData/cli/jvm/experimentalDeprecatedWarningK1.out create mode 100644 compiler/testData/cli/jvm/experimentalIsNotAnnotationK1.args create mode 100644 compiler/testData/cli/jvm/experimentalIsNotAnnotationK1.out create mode 100644 compiler/testData/cli/jvm/experimentalIsNotMarkerK1.args create mode 100644 compiler/testData/cli/jvm/experimentalIsNotMarkerK1.out create mode 100644 compiler/testData/cli/jvm/experimentalNestedK1.args create mode 100644 compiler/testData/cli/jvm/experimentalNestedK1.out create mode 100644 compiler/testData/cli/jvm/experimentalUnresolvedK1.args create mode 100644 compiler/testData/cli/jvm/experimentalUnresolvedK1.out diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/config/FirOptInLanguageVersionSettingsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/config/FirOptInLanguageVersionSettingsChecker.kt index 364b25f6f6b..9c521d86713 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/config/FirOptInLanguageVersionSettingsChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/config/FirOptInLanguageVersionSettingsChecker.kt @@ -5,9 +5,45 @@ package org.jetbrains.kotlin.fir.analysis.checkers.config +import org.jetbrains.kotlin.config.AnalysisFlags import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId +import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider +import org.jetbrains.kotlin.fir.resolve.transformers.PackageResolutionResult +import org.jetbrains.kotlin.fir.resolve.transformers.resolveToPackageOrClass +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.resolve.checkers.OptInNames +import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue object FirOptInLanguageVersionSettingsChecker : FirLanguageVersionSettingsChecker() { override fun check(context: CheckerContext, rawReport: (Boolean, String) -> Unit) { + context.languageVersionSettings.getFlag(AnalysisFlags.optIn).forEach { fqNameAsString -> + if (fqNameAsString != OptInNames.REQUIRES_OPT_IN_FQ_NAME.asString()) { + checkOptInMarkerArgument(context, fqNameAsString, rawReport) + } + } } -} \ No newline at end of file + + private fun checkOptInMarkerArgument(context: CheckerContext, fqNameAsString: String, rawReport: (Boolean, String) -> Unit) { + val packageOrClass = resolveToPackageOrClass(context.session.symbolProvider, FqName(fqNameAsString)) + val symbol = (packageOrClass as? PackageResolutionResult.PackageOrClass)?.classSymbol + + if (symbol == null) { + rawReport( + false, + "Opt-in requirement marker $fqNameAsString is unresolved. Please make sure it's present in the module dependencies" + ) + return + } + + if (symbol.getAnnotationByClassId(OptInNames.REQUIRES_OPT_IN_CLASS_ID, context.session) == null) { + rawReport(false, "Class $fqNameAsString is not an opt-in requirement marker") + return + } + val deprecationInfo = symbol.getDeprecation(context.languageVersionSettings.apiVersion)?.all ?: return + rawReport( + deprecationInfo.deprecationLevel != DeprecationLevelValue.WARNING, + "Opt-in requirement marker $fqNameAsString is deprecated" + deprecationInfo.message?.let { ". $it" }.orEmpty() + ) + } +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/LanguageVersionSettingsDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/LanguageVersionSettingsDiagnosticComponent.kt index 95a02c9c687..3c10b138eae 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/LanguageVersionSettingsDiagnosticComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/LanguageVersionSettingsDiagnosticComponent.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.CheckersComponentInternal import org.jetbrains.kotlin.fir.analysis.checkers.LanguageVersionSettingsCheckers -import org.jetbrains.kotlin.fir.analysis.checkers.config.FirLanguageVersionSettingsChecker import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkersComponent @@ -21,13 +20,9 @@ class LanguageVersionSettingsDiagnosticComponent( private val checkers: LanguageVersionSettingsCheckers = session.checkersComponent.languageVersionSettingsCheckers, ) : AbstractDiagnosticCollectorComponent(session, reporter) { override fun checkSettings(data: CheckerContext) { - checkers.languageVersionSettingsCheckers.check(data) - } - - private fun Collection.check(context: CheckerContext) { val rawReport = (reporter as? BaseDiagnosticsCollector)?.rawReport ?: return - for (checker in this) { - checker.check(context, rawReport) + for (checker in checkers.languageVersionSettingsCheckers) { + checker.check(data, rawReport) } } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt index 2f266fc120c..9af37a9c439 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt @@ -13,16 +13,12 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.builder.buildErrorImport import org.jetbrains.kotlin.fir.declarations.builder.buildResolvedImport -import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.lookupTracker import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeImportFromSingleton -import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedParentInImport import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider -import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.withFileAnalysisExceptionWrapping -import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName class FirImportResolveProcessor(session: FirSession, scopeSession: ScopeSession) : FirTransformerBasedResolveProcessor( @@ -100,35 +96,3 @@ open class FirImportResolveTransformer protected constructor( } } } - -fun resolveToPackageOrClass(symbolProvider: FirSymbolProvider, fqName: FqName): PackageResolutionResult { - var currentPackage = fqName - - val pathSegments = fqName.pathSegments() - var prefixSize = pathSegments.size - while (!currentPackage.isRoot && prefixSize > 0) { - if (symbolProvider.getPackage(currentPackage) != null) { - break - } - currentPackage = currentPackage.parent() - prefixSize-- - } - - if (currentPackage == fqName) return PackageResolutionResult.PackageOrClass(currentPackage, null, null) - val relativeClassFqName = FqName.fromSegments((prefixSize until pathSegments.size).map { pathSegments[it].asString() }) - - val classId = ClassId(currentPackage, relativeClassFqName, false) - val symbol = symbolProvider.getClassLikeSymbolByClassId(classId) ?: return PackageResolutionResult.Error( - ConeUnresolvedParentInImport(classId) - ) - - return PackageResolutionResult.PackageOrClass(currentPackage, relativeClassFqName, symbol) -} - -sealed class PackageResolutionResult { - data class PackageOrClass( - val packageFqName: FqName, val relativeClassFqName: FqName?, val classSymbol: FirClassLikeSymbol<*>? - ) : PackageResolutionResult() - - class Error(val diagnostic: ConeDiagnostic) : PackageResolutionResult() -} diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/transformers/ImportUtils.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/transformers/ImportUtils.kt new file mode 100644 index 00000000000..8a3b0be7e8e --- /dev/null +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/transformers/ImportUtils.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2010-2023 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.fir.resolve.transformers + +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic +import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedParentInImport +import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider +import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName + +fun resolveToPackageOrClass(symbolProvider: FirSymbolProvider, fqName: FqName): PackageResolutionResult { + var currentPackage = fqName + + val pathSegments = fqName.pathSegments() + var prefixSize = pathSegments.size + while (!currentPackage.isRoot && prefixSize > 0) { + if (symbolProvider.getPackage(currentPackage) != null) { + break + } + currentPackage = currentPackage.parent() + prefixSize-- + } + + if (currentPackage == fqName) return PackageResolutionResult.PackageOrClass(currentPackage, null, null) + val relativeClassFqName = FqName.fromSegments((prefixSize until pathSegments.size).map { pathSegments[it].asString() }) + + val classId = ClassId(currentPackage, relativeClassFqName, false) + val symbol = symbolProvider.getClassLikeSymbolByClassId(classId) ?: return PackageResolutionResult.Error( + ConeUnresolvedParentInImport(classId) + ) + + return PackageResolutionResult.PackageOrClass(currentPackage, relativeClassFqName, symbol) +} + +sealed class PackageResolutionResult { + data class PackageOrClass( + val packageFqName: FqName, val relativeClassFqName: FqName?, val classSymbol: FirClassLikeSymbol<*>? + ) : PackageResolutionResult() + + class Error(val diagnostic: ConeDiagnostic) : PackageResolutionResult() +} diff --git a/compiler/testData/cli/jvm/experimentalDeprecated.args b/compiler/testData/cli/jvm/experimentalDeprecated.args index 8c037a079fd..772d3560da1 100644 --- a/compiler/testData/cli/jvm/experimentalDeprecated.args +++ b/compiler/testData/cli/jvm/experimentalDeprecated.args @@ -1,6 +1,8 @@ $TESTDATA_DIR$/experimentalDeprecated.kt -d $TEMP_DIR$ +-language-version +2.0 -opt-in=kotlin.RequiresOptIn -opt-in=org.test.Error -opt-in=org.test.Hidden diff --git a/compiler/testData/cli/jvm/experimentalDeprecated.out b/compiler/testData/cli/jvm/experimentalDeprecated.out index 5556c4bab32..4998a33ff73 100644 --- a/compiler/testData/cli/jvm/experimentalDeprecated.out +++ b/compiler/testData/cli/jvm/experimentalDeprecated.out @@ -1,3 +1,4 @@ -error: opt-in requirement marker org.test.Error is deprecated. Error -error: opt-in requirement marker org.test.Hidden is deprecated. Hidden +warning: language version 2.0 is experimental, there are no backwards compatibility guarantees for new language and library features +error: opt-in requirement marker org.test.Error is deprecated +error: opt-in requirement marker org.test.Hidden is deprecated COMPILATION_ERROR diff --git a/compiler/testData/cli/jvm/experimentalDeprecatedK1.args b/compiler/testData/cli/jvm/experimentalDeprecatedK1.args new file mode 100644 index 00000000000..69cc82d0036 --- /dev/null +++ b/compiler/testData/cli/jvm/experimentalDeprecatedK1.args @@ -0,0 +1,8 @@ +$TESTDATA_DIR$/experimentalDeprecated.kt +-d +$TEMP_DIR$ +-language-version +1.9 +-opt-in=kotlin.RequiresOptIn +-opt-in=org.test.Error +-opt-in=org.test.Hidden diff --git a/compiler/testData/cli/jvm/experimentalDeprecatedK1.out b/compiler/testData/cli/jvm/experimentalDeprecatedK1.out new file mode 100644 index 00000000000..5556c4bab32 --- /dev/null +++ b/compiler/testData/cli/jvm/experimentalDeprecatedK1.out @@ -0,0 +1,3 @@ +error: opt-in requirement marker org.test.Error is deprecated. Error +error: opt-in requirement marker org.test.Hidden is deprecated. Hidden +COMPILATION_ERROR diff --git a/compiler/testData/cli/jvm/experimentalDeprecatedWarning.args b/compiler/testData/cli/jvm/experimentalDeprecatedWarning.args index 2c811785c3d..e3c83ad1e05 100644 --- a/compiler/testData/cli/jvm/experimentalDeprecatedWarning.args +++ b/compiler/testData/cli/jvm/experimentalDeprecatedWarning.args @@ -1,7 +1,8 @@ $TESTDATA_DIR$/experimentalDeprecatedWarning.kt -d $TEMP_DIR$ +-language-version +2.0 -Xopt-in=kotlin.RequiresOptIn -opt-in=kotlin.RequiresOptIn -opt-in=org.test.Warning - diff --git a/compiler/testData/cli/jvm/experimentalDeprecatedWarning.out b/compiler/testData/cli/jvm/experimentalDeprecatedWarning.out index 03e36c75643..8348a16c0a9 100644 --- a/compiler/testData/cli/jvm/experimentalDeprecatedWarning.out +++ b/compiler/testData/cli/jvm/experimentalDeprecatedWarning.out @@ -1,3 +1,4 @@ warning: argument -Xopt-in is deprecated. Please use -opt-in instead -warning: opt-in requirement marker org.test.Warning is deprecated. Warning +warning: language version 2.0 is experimental, there are no backwards compatibility guarantees for new language and library features +warning: opt-in requirement marker org.test.Warning is deprecated OK diff --git a/compiler/testData/cli/jvm/experimentalDeprecatedWarningK1.args b/compiler/testData/cli/jvm/experimentalDeprecatedWarningK1.args new file mode 100644 index 00000000000..45188050a8d --- /dev/null +++ b/compiler/testData/cli/jvm/experimentalDeprecatedWarningK1.args @@ -0,0 +1,8 @@ +$TESTDATA_DIR$/experimentalDeprecatedWarning.kt +-d +$TEMP_DIR$ +-language-version +1.9 +-Xopt-in=kotlin.RequiresOptIn +-opt-in=kotlin.RequiresOptIn +-opt-in=org.test.Warning diff --git a/compiler/testData/cli/jvm/experimentalDeprecatedWarningK1.out b/compiler/testData/cli/jvm/experimentalDeprecatedWarningK1.out new file mode 100644 index 00000000000..03e36c75643 --- /dev/null +++ b/compiler/testData/cli/jvm/experimentalDeprecatedWarningK1.out @@ -0,0 +1,3 @@ +warning: argument -Xopt-in is deprecated. Please use -opt-in instead +warning: opt-in requirement marker org.test.Warning is deprecated. Warning +OK diff --git a/compiler/testData/cli/jvm/experimentalIsNotAnnotation.args b/compiler/testData/cli/jvm/experimentalIsNotAnnotation.args index fb4fd87e8d3..8dc20baa20f 100644 --- a/compiler/testData/cli/jvm/experimentalIsNotAnnotation.args +++ b/compiler/testData/cli/jvm/experimentalIsNotAnnotation.args @@ -1,6 +1,8 @@ $TESTDATA_DIR$/experimentalIsNotAnnotation.kt -d $TEMP_DIR$ +-language-version +2.0 -opt-in org.test.NotAnAnnotation1 -opt-in=org.test.NotAnAnnotation2 diff --git a/compiler/testData/cli/jvm/experimentalIsNotAnnotation.out b/compiler/testData/cli/jvm/experimentalIsNotAnnotation.out index d6e2b0c05b2..095c4f4a608 100644 --- a/compiler/testData/cli/jvm/experimentalIsNotAnnotation.out +++ b/compiler/testData/cli/jvm/experimentalIsNotAnnotation.out @@ -1,3 +1,4 @@ +warning: language version 2.0 is experimental, there are no backwards compatibility guarantees for new language and library features warning: class org.test.NotAnAnnotation1 is not an opt-in requirement marker warning: class org.test.NotAnAnnotation2 is not an opt-in requirement marker OK diff --git a/compiler/testData/cli/jvm/experimentalIsNotAnnotationK1.args b/compiler/testData/cli/jvm/experimentalIsNotAnnotationK1.args new file mode 100644 index 00000000000..efa58dcdce8 --- /dev/null +++ b/compiler/testData/cli/jvm/experimentalIsNotAnnotationK1.args @@ -0,0 +1,8 @@ +$TESTDATA_DIR$/experimentalIsNotAnnotation.kt +-d +$TEMP_DIR$ +-language-version +1.9 +-opt-in +org.test.NotAnAnnotation1 +-opt-in=org.test.NotAnAnnotation2 diff --git a/compiler/testData/cli/jvm/experimentalIsNotAnnotationK1.out b/compiler/testData/cli/jvm/experimentalIsNotAnnotationK1.out new file mode 100644 index 00000000000..d6e2b0c05b2 --- /dev/null +++ b/compiler/testData/cli/jvm/experimentalIsNotAnnotationK1.out @@ -0,0 +1,3 @@ +warning: class org.test.NotAnAnnotation1 is not an opt-in requirement marker +warning: class org.test.NotAnAnnotation2 is not an opt-in requirement marker +OK diff --git a/compiler/testData/cli/jvm/experimentalIsNotMarker.args b/compiler/testData/cli/jvm/experimentalIsNotMarker.args index 83c9ebf6684..9f111cf05ce 100644 --- a/compiler/testData/cli/jvm/experimentalIsNotMarker.args +++ b/compiler/testData/cli/jvm/experimentalIsNotMarker.args @@ -1,4 +1,6 @@ $TESTDATA_DIR$/experimentalIsNotMarker.kt -d $TEMP_DIR$ +-language-version +2.0 -opt-in=org.test.NotAMarker diff --git a/compiler/testData/cli/jvm/experimentalIsNotMarker.out b/compiler/testData/cli/jvm/experimentalIsNotMarker.out index e48b1d5ebe8..4927ebcbdf3 100644 --- a/compiler/testData/cli/jvm/experimentalIsNotMarker.out +++ b/compiler/testData/cli/jvm/experimentalIsNotMarker.out @@ -1,2 +1,3 @@ +warning: language version 2.0 is experimental, there are no backwards compatibility guarantees for new language and library features warning: class org.test.NotAMarker is not an opt-in requirement marker OK diff --git a/compiler/testData/cli/jvm/experimentalIsNotMarkerK1.args b/compiler/testData/cli/jvm/experimentalIsNotMarkerK1.args new file mode 100644 index 00000000000..325de178e30 --- /dev/null +++ b/compiler/testData/cli/jvm/experimentalIsNotMarkerK1.args @@ -0,0 +1,6 @@ +$TESTDATA_DIR$/experimentalIsNotMarker.kt +-d +$TEMP_DIR$ +-language-version +1.9 +-opt-in=org.test.NotAMarker diff --git a/compiler/testData/cli/jvm/experimentalIsNotMarkerK1.out b/compiler/testData/cli/jvm/experimentalIsNotMarkerK1.out new file mode 100644 index 00000000000..e48b1d5ebe8 --- /dev/null +++ b/compiler/testData/cli/jvm/experimentalIsNotMarkerK1.out @@ -0,0 +1,2 @@ +warning: class org.test.NotAMarker is not an opt-in requirement marker +OK diff --git a/compiler/testData/cli/jvm/experimentalNested.args b/compiler/testData/cli/jvm/experimentalNested.args index 255feebde3b..3621c5527d8 100644 --- a/compiler/testData/cli/jvm/experimentalNested.args +++ b/compiler/testData/cli/jvm/experimentalNested.args @@ -1,5 +1,7 @@ $TESTDATA_DIR$/experimentalNested.kt -d $TEMP_DIR$ +-language-version +2.0 -opt-in=kotlin.RequiresOptIn -opt-in=org.test.Outer.Nested diff --git a/compiler/testData/cli/jvm/experimentalNested.out b/compiler/testData/cli/jvm/experimentalNested.out index d86bac9de59..86ca0241885 100644 --- a/compiler/testData/cli/jvm/experimentalNested.out +++ b/compiler/testData/cli/jvm/experimentalNested.out @@ -1 +1,2 @@ +warning: language version 2.0 is experimental, there are no backwards compatibility guarantees for new language and library features OK diff --git a/compiler/testData/cli/jvm/experimentalNestedK1.args b/compiler/testData/cli/jvm/experimentalNestedK1.args new file mode 100644 index 00000000000..a52e2ee668f --- /dev/null +++ b/compiler/testData/cli/jvm/experimentalNestedK1.args @@ -0,0 +1,7 @@ +$TESTDATA_DIR$/experimentalNested.kt +-d +$TEMP_DIR$ +-language-version +1.9 +-opt-in=kotlin.RequiresOptIn +-opt-in=org.test.Outer.Nested diff --git a/compiler/testData/cli/jvm/experimentalNestedK1.out b/compiler/testData/cli/jvm/experimentalNestedK1.out new file mode 100644 index 00000000000..d86bac9de59 --- /dev/null +++ b/compiler/testData/cli/jvm/experimentalNestedK1.out @@ -0,0 +1 @@ +OK diff --git a/compiler/testData/cli/jvm/experimentalUnresolved.args b/compiler/testData/cli/jvm/experimentalUnresolved.args index 163d1ca5f87..35df663eb23 100644 --- a/compiler/testData/cli/jvm/experimentalUnresolved.args +++ b/compiler/testData/cli/jvm/experimentalUnresolved.args @@ -1,8 +1,9 @@ $TESTDATA_DIR$/experimentalUnresolved.kt -d $TEMP_DIR$ +-language-version +2.0 -opt-in org.test.Unresolved1 -opt-in org.test.Unresolved2 - diff --git a/compiler/testData/cli/jvm/experimentalUnresolved.out b/compiler/testData/cli/jvm/experimentalUnresolved.out index a7636802d5d..9528b4a8583 100644 --- a/compiler/testData/cli/jvm/experimentalUnresolved.out +++ b/compiler/testData/cli/jvm/experimentalUnresolved.out @@ -1,3 +1,4 @@ +warning: language version 2.0 is experimental, there are no backwards compatibility guarantees for new language and library features warning: opt-in requirement marker org.test.Unresolved1 is unresolved. Please make sure it's present in the module dependencies warning: opt-in requirement marker org.test.Unresolved2 is unresolved. Please make sure it's present in the module dependencies OK diff --git a/compiler/testData/cli/jvm/experimentalUnresolvedK1.args b/compiler/testData/cli/jvm/experimentalUnresolvedK1.args new file mode 100644 index 00000000000..5c5d71963c2 --- /dev/null +++ b/compiler/testData/cli/jvm/experimentalUnresolvedK1.args @@ -0,0 +1,9 @@ +$TESTDATA_DIR$/experimentalUnresolved.kt +-d +$TEMP_DIR$ +-language-version +1.9 +-opt-in +org.test.Unresolved1 +-opt-in +org.test.Unresolved2 diff --git a/compiler/testData/cli/jvm/experimentalUnresolvedK1.out b/compiler/testData/cli/jvm/experimentalUnresolvedK1.out new file mode 100644 index 00000000000..a7636802d5d --- /dev/null +++ b/compiler/testData/cli/jvm/experimentalUnresolvedK1.out @@ -0,0 +1,3 @@ +warning: opt-in requirement marker org.test.Unresolved1 is unresolved. Please make sure it's present in the module dependencies +warning: opt-in requirement marker org.test.Unresolved2 is unresolved. Please make sure it's present in the module dependencies +OK diff --git a/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java index 6aa116fd55e..b5baec70979 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java @@ -410,31 +410,61 @@ public class CliTestGenerated extends AbstractCliTest { runTest("compiler/testData/cli/jvm/experimentalDeprecated.args"); } + @TestMetadata("experimentalDeprecatedK1.args") + public void testExperimentalDeprecatedK1() throws Exception { + runTest("compiler/testData/cli/jvm/experimentalDeprecatedK1.args"); + } + @TestMetadata("experimentalDeprecatedWarning.args") public void testExperimentalDeprecatedWarning() throws Exception { runTest("compiler/testData/cli/jvm/experimentalDeprecatedWarning.args"); } + @TestMetadata("experimentalDeprecatedWarningK1.args") + public void testExperimentalDeprecatedWarningK1() throws Exception { + runTest("compiler/testData/cli/jvm/experimentalDeprecatedWarningK1.args"); + } + @TestMetadata("experimentalIsNotAnnotation.args") public void testExperimentalIsNotAnnotation() throws Exception { runTest("compiler/testData/cli/jvm/experimentalIsNotAnnotation.args"); } + @TestMetadata("experimentalIsNotAnnotationK1.args") + public void testExperimentalIsNotAnnotationK1() throws Exception { + runTest("compiler/testData/cli/jvm/experimentalIsNotAnnotationK1.args"); + } + @TestMetadata("experimentalIsNotMarker.args") public void testExperimentalIsNotMarker() throws Exception { runTest("compiler/testData/cli/jvm/experimentalIsNotMarker.args"); } + @TestMetadata("experimentalIsNotMarkerK1.args") + public void testExperimentalIsNotMarkerK1() throws Exception { + runTest("compiler/testData/cli/jvm/experimentalIsNotMarkerK1.args"); + } + @TestMetadata("experimentalNested.args") public void testExperimentalNested() throws Exception { runTest("compiler/testData/cli/jvm/experimentalNested.args"); } + @TestMetadata("experimentalNestedK1.args") + public void testExperimentalNestedK1() throws Exception { + runTest("compiler/testData/cli/jvm/experimentalNestedK1.args"); + } + @TestMetadata("experimentalUnresolved.args") public void testExperimentalUnresolved() throws Exception { runTest("compiler/testData/cli/jvm/experimentalUnresolved.args"); } + @TestMetadata("experimentalUnresolvedK1.args") + public void testExperimentalUnresolvedK1() throws Exception { + runTest("compiler/testData/cli/jvm/experimentalUnresolvedK1.args"); + } + @TestMetadata("explicitlyDisableSamConversionsWithOldFlag.args") public void testExplicitlyDisableSamConversionsWithOldFlag() throws Exception { runTest("compiler/testData/cli/jvm/explicitlyDisableSamConversionsWithOldFlag.args");