diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index fb9c3adc351..a143d387f88 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -4889,6 +4889,22 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.TYPEALIAS_AS_CALLABLE_QUALIFIER_IN_IMPORT.errorFactory) { firDiagnostic -> + TypealiasAsCallableQualifierInImportErrorImpl( + firDiagnostic.a, + firDiagnostic.b, + firDiagnostic as KtPsiDiagnostic, + token, + ) + } + add(FirErrors.TYPEALIAS_AS_CALLABLE_QUALIFIER_IN_IMPORT.warningFactory) { firDiagnostic -> + TypealiasAsCallableQualifierInImportWarningImpl( + firDiagnostic.a, + firDiagnostic.b, + firDiagnostic as KtPsiDiagnostic, + token, + ) + } add(FirErrors.ILLEGAL_SUSPEND_FUNCTION_CALL) { firDiagnostic -> IllegalSuspendFunctionCallImpl( firSymbolBuilder.buildSymbol(firDiagnostic.a), diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index a22aa126e98..c9f2f10abd2 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -3406,6 +3406,18 @@ sealed interface KtFirDiagnostic : KtDiagnosticWithPsi { override val diagnosticClass get() = OperatorRenamedOnImport::class } + interface TypealiasAsCallableQualifierInImportError : KtFirDiagnostic { + override val diagnosticClass get() = TypealiasAsCallableQualifierInImportError::class + val typealiasName: Name + val originalClassName: Name + } + + interface TypealiasAsCallableQualifierInImportWarning : KtFirDiagnostic { + override val diagnosticClass get() = TypealiasAsCallableQualifierInImportWarning::class + val typealiasName: Name + val originalClassName: Name + } + interface IllegalSuspendFunctionCall : KtFirDiagnostic { override val diagnosticClass get() = IllegalSuspendFunctionCall::class val suspendCallable: KtSymbol diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 7d656bba9a7..f01358b1a91 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -4106,6 +4106,20 @@ internal class OperatorRenamedOnImportImpl( token: KtLifetimeToken, ) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.OperatorRenamedOnImport +internal class TypealiasAsCallableQualifierInImportErrorImpl( + override val typealiasName: Name, + override val originalClassName: Name, + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.TypealiasAsCallableQualifierInImportError + +internal class TypealiasAsCallableQualifierInImportWarningImpl( + override val typealiasName: Name, + override val originalClassName: Name, + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.TypealiasAsCallableQualifierInImportWarning + internal class IllegalSuspendFunctionCallImpl( override val suspendCallable: KtSymbol, firDiagnostic: KtPsiDiagnostic, diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 91afe5b2e09..0f5539bb75c 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -1732,6 +1732,14 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { } val OPERATOR_RENAMED_ON_IMPORT by error(PositioningStrategy.IMPORT_LAST_NAME) + + val TYPEALIAS_AS_CALLABLE_QUALIFIER_IN_IMPORT by deprecationError( + LanguageFeature.ProhibitTypealiasAsCallableQualifierInImport, + PositioningStrategy.IMPORT_LAST_BUT_ONE_NAME, + ) { + parameter("typealiasName") + parameter("originalClassName") + } } val SUSPEND by object : DiagnosticGroup("Suspend errors") { diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/RegularDiagnosticData.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/RegularDiagnosticData.kt index dce0813a768..ee781dd0dce 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/RegularDiagnosticData.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/RegularDiagnosticData.kt @@ -93,6 +93,7 @@ enum class PositioningStrategy(private val strategy: String? = null) { QUESTION_MARK_BY_TYPE, ANNOTATION_USE_SITE, IMPORT_LAST_NAME, + IMPORT_LAST_BUT_ONE_NAME, DATA_MODIFIER, SPREAD_OPERATOR, DECLARATION_WITH_BODY, diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index a659001ef33..72df3bff39e 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.config.LanguageFeature.ProhibitInvisibleAbstractMeth import org.jetbrains.kotlin.config.LanguageFeature.ProhibitNonReifiedArraysAsReifiedTypeArguments import org.jetbrains.kotlin.config.LanguageFeature.ProhibitScriptTopLevelInnerClasses import org.jetbrains.kotlin.config.LanguageFeature.ProhibitSingleNamedFunctionAsExpression +import org.jetbrains.kotlin.config.LanguageFeature.ProhibitTypealiasAsCallableQualifierInImport import org.jetbrains.kotlin.config.LanguageFeature.ProhibitUseSiteTargetAnnotationsOnSuperTypes import org.jetbrains.kotlin.config.LanguageFeature.RestrictRetentionForExpressionAnnotations import org.jetbrains.kotlin.config.LanguageFeature.RestrictionOfValReassignmentViaBackingField @@ -858,6 +859,7 @@ object FirErrors { val CANNOT_BE_IMPORTED: KtDiagnosticFactory1 by error1(SourceElementPositioningStrategies.IMPORT_LAST_NAME) val CONFLICTING_IMPORT: KtDiagnosticFactory1 by error1(SourceElementPositioningStrategies.IMPORT_ALIAS) val OPERATOR_RENAMED_ON_IMPORT: KtDiagnosticFactory0 by error0(SourceElementPositioningStrategies.IMPORT_LAST_NAME) + val TYPEALIAS_AS_CALLABLE_QUALIFIER_IN_IMPORT: KtDiagnosticFactoryForDeprecation2 by deprecationError2(ProhibitTypealiasAsCallableQualifierInImport, SourceElementPositioningStrategies.IMPORT_LAST_BUT_ONE_NAME) // Suspend errors val ILLEGAL_SUSPEND_FUNCTION_CALL: KtDiagnosticFactory1> by error1>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt index c5544fabfaf..7d230a79d63 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt @@ -95,7 +95,8 @@ object FirImportsChecker : FirFileChecker(MppCheckerKind.Common) { val symbolProvider = context.session.symbolProvider val parentClassId = (import as? FirResolvedImport)?.resolvedParentClassId if (parentClassId != null) { - val parentClassSymbol = parentClassId.resolveToClass(context) ?: return + val parentClassLikeSymbol = parentClassId.resolveToClassLike(context) ?: return + val parentClassSymbol = parentClassLikeSymbol.fullyExpandedClass(context.session) ?: return fun reportInvisibleParentClasses(classSymbol: FirRegularClassSymbol, depth: Int) { if (!classSymbol.isVisible(context)) { @@ -109,7 +110,14 @@ object FirImportsChecker : FirFileChecker(MppCheckerKind.Common) { reportInvisibleParentClasses(parentClassSymbol, 1) when (val status = parentClassSymbol.getImportStatusOfCallableMembers(context, importedName)) { - ImportStatus.OK -> return + ImportStatus.OK -> { + if (parentClassLikeSymbol is FirTypeAliasSymbol) { + reporter.reportOn( + import.source, FirErrors.TYPEALIAS_AS_CALLABLE_QUALIFIER_IN_IMPORT, + parentClassLikeSymbol.name, parentClassSymbol.name, context + ) + } + } is ImportStatus.Invisible -> { val source = import.getSourceForImportSegment(0) reporter.report(status.symbol.toInvisibleReferenceDiagnostic(source), context) @@ -237,8 +245,12 @@ object FirImportsChecker : FirFileChecker(MppCheckerKind.Common) { } } + private fun ClassId.resolveToClassLike(context: CheckerContext): FirClassLikeSymbol<*>? { + return context.session.symbolProvider.getClassLikeSymbolByClassId(this) + } + private fun ClassId.resolveToClass(context: CheckerContext): FirRegularClassSymbol? { - val classSymbol = context.session.symbolProvider.getClassLikeSymbolByClassId(this) ?: return null + val classSymbol = resolveToClassLike(context) ?: return null return when (classSymbol) { is FirRegularClassSymbol -> classSymbol is FirTypeAliasSymbol -> classSymbol.fullyExpandedClass(context.session) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt index 023546f7dfe..f773c949ec2 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt @@ -611,6 +611,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.THROWABLE_TYPE_MI import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TOO_MANY_ARGUMENTS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TOO_MANY_CHARACTERS_IN_CHARACTER_LITERAL import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TOPLEVEL_TYPEALIASES_ONLY +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPEALIAS_AS_CALLABLE_QUALIFIER_IN_IMPORT import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPEALIAS_EXPANSION_DEPRECATION import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPEALIAS_EXPANSION_DEPRECATION_ERROR @@ -2511,6 +2512,13 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() { TO_STRING ) map.put(OPERATOR_RENAMED_ON_IMPORT, "Operator renamed to a different operator on import.") + map.put( + TYPEALIAS_AS_CALLABLE_QUALIFIER_IN_IMPORT, + "Cannot use typealias ''{0}'' as a callable qualifier in import. " + + "Use original class ''{1}'' instead or rewrite calls with ''{0}'' as a qualifier. " + + "See https://youtrack.jetbrains.com/issue/KT-64431.", + NAME, NAME + ) // Suspend map.put( diff --git a/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/LightTreePositioningStrategies.kt b/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/LightTreePositioningStrategies.kt index cd981f2e588..1da3f2685cb 100644 --- a/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/LightTreePositioningStrategies.kt +++ b/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/LightTreePositioningStrategies.kt @@ -1048,6 +1048,19 @@ object LightTreePositioningStrategies { } } + val IMPORT_LAST_BUT_ONE_NAME: LightTreePositioningStrategy = object : LightTreePositioningStrategy() { + override fun mark( + node: LighterASTNode, + startOffset: Int, + endOffset: Int, + tree: FlyweightCapableTreeStructure + ): List { + val references = tree.collectDescendantsOfType(node, KtNodeTypes.REFERENCE_EXPRESSION) + val nodeToMark = references.elementAtOrNull(references.size - 2) ?: node + return markElement(nodeToMark, startOffset, endOffset, tree, node) + } + } + val IMPORT_ALIAS: LightTreePositioningStrategy = object : LightTreePositioningStrategy() { override fun mark( node: LighterASTNode, diff --git a/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt b/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt index 669768c0f66..610e50fbc35 100644 --- a/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt +++ b/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt @@ -17,6 +17,8 @@ import org.jetbrains.kotlin.lexer.KtTokens.MODALITY_MODIFIERS import org.jetbrains.kotlin.lexer.KtTokens.VISIBILITY_MODIFIERS import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* +import org.jetbrains.kotlin.utils.addToStdlib.UnsafeCastFunction +import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.sure object PositioningStrategies { @@ -1013,6 +1015,20 @@ object PositioningStrategies { } } + @OptIn(UnsafeCastFunction::class) + val IMPORT_LAST_BUT_ONE_NAME: PositioningStrategy = object : PositioningStrategy() { + override fun mark(element: KtImportDirective): List { + element.importedReference + ?.safeAs() + ?.receiverExpression + ?.safeAs() + ?.selectorExpression + ?.let { return markElement(it) } + + return super.mark(element) + } + } + val LABEL: PositioningStrategy = object : PositioningStrategy() { override fun mark(element: KtElement): List { return super.mark((element as? KtExpressionWithLabel)?.labelQualifier ?: element) diff --git a/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/SourceElementPositioningStrategies.kt b/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/SourceElementPositioningStrategies.kt index 26aeb93b1e3..8cae6f4a5f5 100644 --- a/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/SourceElementPositioningStrategies.kt +++ b/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/SourceElementPositioningStrategies.kt @@ -286,6 +286,11 @@ object SourceElementPositioningStrategies { PositioningStrategies.IMPORT_LAST_NAME ) + val IMPORT_LAST_BUT_ONE_NAME = SourceElementPositioningStrategy( + LightTreePositioningStrategies.IMPORT_LAST_BUT_ONE_NAME, + PositioningStrategies.IMPORT_LAST_BUT_ONE_NAME, + ) + val SPREAD_OPERATOR = SourceElementPositioningStrategy( LightTreePositioningStrategies.SPREAD_OPERATOR, PositioningStrategies.SPREAD_OPERATOR diff --git a/compiler/testData/diagnostics/tests/typealias/importFromTypeAliasObject.fir.kt b/compiler/testData/diagnostics/tests/typealias/importFromTypeAliasObject.fir.kt new file mode 100644 index 00000000000..e1ba5deeb5f --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/importFromTypeAliasObject.fir.kt @@ -0,0 +1,15 @@ +// FILE: 1.kt +package bar + +typealias HostAlias = Host + +object Host { + fun foo() {} +} + +// FILE: 2.kt +import bar.HostAlias.foo + +fun test() { + foo() +} diff --git a/compiler/testData/diagnostics/tests/typealias/importFromTypeAliasObject.kt b/compiler/testData/diagnostics/tests/typealias/importFromTypeAliasObject.kt index 53a250ce5dc..59cc6fc3462 100644 --- a/compiler/testData/diagnostics/tests/typealias/importFromTypeAliasObject.kt +++ b/compiler/testData/diagnostics/tests/typealias/importFromTypeAliasObject.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // FILE: 1.kt package bar diff --git a/compiler/testData/diagnostics/tests/typealias/importFromTypeAliasObject.reversed.kt b/compiler/testData/diagnostics/tests/typealias/importFromTypeAliasObject.reversed.kt index 4a8243d6368..427a1d6c5e3 100644 --- a/compiler/testData/diagnostics/tests/typealias/importFromTypeAliasObject.reversed.kt +++ b/compiler/testData/diagnostics/tests/typealias/importFromTypeAliasObject.reversed.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // FILE: 1.kt package bar @@ -9,7 +8,7 @@ object Host { } // FILE: 2.kt -import bar.HostAlias.foo +import bar.HostAlias.foo fun test() { foo() diff --git a/compiler/testData/diagnostics/tests/typealias/importMemberFromJavaViaAlias.fir.kt b/compiler/testData/diagnostics/tests/typealias/importMemberFromJavaViaAlias.fir.kt new file mode 100644 index 00000000000..f76b1de6e4b --- /dev/null +++ b/compiler/testData/diagnostics/tests/typealias/importMemberFromJavaViaAlias.fir.kt @@ -0,0 +1,28 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +// SKIP_JAVAC + +// FILE: test/jv/JavaSample.java + +package test.jv; + +public class JavaSample { + public static void member() {} +} + +// FILE: foo.kt + +package test.kot + +typealias JavaAlias = test.jv.JavaSample + +// FILE: test.kt + +import test.kot.JavaAlias +import test.kot.JavaAlias.member + +fun foo( + sample: JavaSample, + alias: JavaAlias +) { + member() +} diff --git a/compiler/testData/diagnostics/tests/typealias/importMemberFromJavaViaAlias.kt b/compiler/testData/diagnostics/tests/typealias/importMemberFromJavaViaAlias.kt index 8c4115c85b5..c45435b3b73 100644 --- a/compiler/testData/diagnostics/tests/typealias/importMemberFromJavaViaAlias.kt +++ b/compiler/testData/diagnostics/tests/typealias/importMemberFromJavaViaAlias.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_PARAMETER // SKIP_JAVAC diff --git a/compiler/testData/diagnostics/tests/typealias/importMemberFromJavaViaAlias.reversed.kt b/compiler/testData/diagnostics/tests/typealias/importMemberFromJavaViaAlias.reversed.kt index 5dc659160fd..a62594caba8 100644 --- a/compiler/testData/diagnostics/tests/typealias/importMemberFromJavaViaAlias.reversed.kt +++ b/compiler/testData/diagnostics/tests/typealias/importMemberFromJavaViaAlias.reversed.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_PARAMETER // SKIP_JAVAC @@ -19,7 +18,7 @@ typealias JavaAlias = test.jv.JavaSample // FILE: test.kt import test.kot.JavaAlias -import test.kot.JavaAlias.member +import test.kot.JavaAlias.member fun foo( sample: JavaSample, diff --git a/compiler/testData/diagnostics/tests/typealias/typeAliasesInImportDirectives.fir.kt b/compiler/testData/diagnostics/tests/typealias/typeAliasesInImportDirectives.fir.kt index ea4b5fd995a..0df465b2c50 100644 --- a/compiler/testData/diagnostics/tests/typealias/typeAliasesInImportDirectives.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/typeAliasesInImportDirectives.fir.kt @@ -42,6 +42,6 @@ import test.EnumAlias.Nested3 import test.EnumSample.Nested3.* import test.EnumAlias.Nested3.* -import test.EnumAlias.Entry +import test.EnumAlias.Entry fun f() {} diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index 64b32346d5a..d52705e1e85 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -323,6 +323,7 @@ enum class LanguageFeature( JsAllowInvalidCharsIdentifiersEscaping(KOTLIN_2_1, kind = OTHER), // KT-31799 SupportJavaErrorEnhancementOfArgumentsOfWarningLevelEnhanced(KOTLIN_2_1, kind = BUG_FIX), // KT-63209 ProhibitPrivateOperatorCallInInline(KOTLIN_2_1, kind = BUG_FIX), // KT-65494 + ProhibitTypealiasAsCallableQualifierInImport(KOTLIN_2_1, kind = BUG_FIX), // KT-64350 // End of 2.* language features --------------------------------------------------