From 3ff2c7d6f740a4e5bac429256db8a8518cba571a Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 24 Aug 2023 09:46:51 +0200 Subject: [PATCH] K2: introduce custom Enum.entries migration checkers Related to KT-56623, KT-56587 #KT-59344 Fixed --- ...CompilerTestFE10TestdataTestGenerated.java | 24 ++++ ...sticCompilerFE10TestDataTestGenerated.java | 24 ++++ ...eeOldFrontendDiagnosticsTestGenerated.java | 24 ++++ ...siOldFrontendDiagnosticsTestGenerated.java | 24 ++++ .../diagnostics/FirDiagnosticsList.kt | 2 +- .../fir/analysis/diagnostics/FirErrors.kt | 2 +- .../checkers/CommonExpressionCheckers.kt | 3 + ...CustomEnumEntriesMigrationAccessChecker.kt | 33 ++++++ ...tomEnumEntriesMigrationQualifierChecker.kt | 25 ++++ ...tomEnumEntriesMigrationReferenceChecker.kt | 26 ++++ .../jetbrains/kotlin/fir/FirCallResolver.kt | 15 ++- .../fir/resolve/calls/CandidateCollector.kt | 6 + .../fir/resolve/calls/CandidateFactory.kt | 2 - ...rCallCompletionResultsWriterTransformer.kt | 23 +++- .../fir/resolve/calls/ResolutionDiagnostic.kt | 2 + .../resolve/diagnostics/ConeDiagnostics.kt | 6 + .../expressions/FirCallableReferenceAccess.kt | 4 + .../fir/expressions/FirComponentCall.kt | 4 + .../kotlin/fir/expressions/FirFunctionCall.kt | 4 + .../fir/expressions/FirImplicitInvokeCall.kt | 4 + .../FirIntegerLiteralOperatorCall.kt | 4 + .../FirPropertyAccessExpression.kt | 4 +- .../FirQualifiedAccessExpression.kt | 4 + .../expressions/FirThisReceiverExpression.kt | 4 + .../builder/FirAbstractFunctionCallBuilder.kt | 2 + .../FirCallableReferenceAccessBuilder.kt | 3 + .../builder/FirComponentCallBuilder.kt | 3 + .../builder/FirFunctionCallBuilder.kt | 3 + .../builder/FirImplicitInvokeCallBuilder.kt | 3 + .../FirIntegerLiteralOperatorCallBuilder.kt | 3 + .../FirPropertyAccessExpressionBuilder.kt | 2 +- .../FirQualifiedAccessExpressionBuilder.kt | 3 + .../FirThisReceiverExpressionBuilder.kt | 4 + .../impl/FirCallableReferenceAccessImpl.kt | 6 + .../expressions/impl/FirComponentCallImpl.kt | 6 + .../expressions/impl/FirFunctionCallImpl.kt | 6 + .../impl/FirImplicitInvokeCallImpl.kt | 6 + .../impl/FirIntegerLiteralOperatorCallImpl.kt | 6 + .../impl/FirThisReceiverExpressionImpl.kt | 6 + .../fir/tree/generator/NodeConfigurator.kt | 3 - ...flictingPropertyEntriesAndReference.fir.kt | 15 --- .../conflictingPropertyEntriesAndReference.kt | 1 + ...ictingPropertyEntriesAndReferenceOn.fir.kt | 16 --- ...ctingPropertyEntriesAndReferenceOn.fir.txt | 2 +- ...onflictingPropertyEntriesAndReferenceOn.kt | 1 + .../entriesPropertyAsExtensionClash.fir.kt | 2 +- .../entriesPropertyAsExtensionClashOn.fir.kt | 2 +- .../entriesPropertyImportedClash.fir.kt | 2 +- .../entriesPropertyImportedClashOn.fir.kt | 2 +- .../entriesPropertyInCompanionClash.fir.kt | 2 +- .../entriesPropertyInCompanionClashOn.fir.kt | 2 +- .../entriesPropertyWithJvmStaticClash.fir.kt | 2 +- ...entriesPropertyWithJvmStaticClashOn.fir.kt | 2 +- .../genericEntriesPropertyClash.fir.kt | 2 +- .../genericEntriesPropertyClashOn.fir.kt | 2 +- .../entries/javaEnumAdditionalCases.fir.txt | 5 + .../enum/entries/javaEnumAdditionalCases.kt | 25 ++++ .../entries/javaEnumEntriesAmbiguity.fir.kt | 33 ------ .../enum/entries/javaEnumEntriesAmbiguity.kt | 1 + .../entries/javaEnumEntriesAmbiguityOn.fir.kt | 36 ------ .../entries/javaEnumEntriesAmbiguityOn.kt | 1 + ...ShadowingOfExternallyDefinedEntries.fir.kt | 4 +- ...adowingOfExternallyDefinedEntriesOn.fir.kt | 4 +- .../enum/entries/primitiveReference.fir.kt | 6 + .../tests/enum/entries/primitiveReference.kt | 6 + .../tests/enum/entries/toBeShadowed.fir.kt | 46 +++++++ .../tests/enum/entries/toBeShadowed.kt | 46 +++++++ .../entries/toBeShadowedPrioritized.fir.txt | 112 ++++++++++++++++++ .../enum/entries/toBeShadowedPrioritized.kt | 48 ++++++++ .../test/runners/DiagnosticTestGenerated.java | 24 ++++ 70 files changed, 658 insertions(+), 132 deletions(-) create mode 100644 compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCustomEnumEntriesMigrationAccessChecker.kt create mode 100644 compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCustomEnumEntriesMigrationQualifierChecker.kt create mode 100644 compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCustomEnumEntriesMigrationReferenceChecker.kt delete mode 100644 compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReference.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReferenceOn.fir.kt create mode 100644 compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.fir.txt create mode 100644 compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.kt delete mode 100644 compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguity.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguityOn.fir.kt create mode 100644 compiler/testData/diagnostics/tests/enum/entries/primitiveReference.fir.kt create mode 100644 compiler/testData/diagnostics/tests/enum/entries/primitiveReference.kt create mode 100644 compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.fir.kt create mode 100644 compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.kt create mode 100644 compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.fir.txt create mode 100644 compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 5b946bae0c0..217e996040f 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -11581,6 +11581,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClashOn.kt"); } + @Test + @TestMetadata("javaEnumAdditionalCases.kt") + public void testJavaEnumAdditionalCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.kt"); + } + @Test @TestMetadata("javaEnumEntriesAmbiguity.kt") public void testJavaEnumEntriesAmbiguity() throws Exception { @@ -11617,6 +11623,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntriesPrioritized.kt"); } + @Test + @TestMetadata("primitiveReference.kt") + public void testPrimitiveReference() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/primitiveReference.kt"); + } + @Test @TestMetadata("redeclarationOfEnumEntriesNameWithIntrinsic.kt") public void testRedeclarationOfEnumEntriesNameWithIntrinsic() throws Exception { @@ -11628,6 +11640,18 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia public void testRedeclarationOfEnumEntriesNameWithIntrinsicOn() throws Exception { runTest("compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.kt"); } + + @Test + @TestMetadata("toBeShadowed.kt") + public void testToBeShadowed() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.kt"); + } + + @Test + @TestMetadata("toBeShadowedPrioritized.kt") + public void testToBeShadowedPrioritized() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.kt"); + } } @Nested diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index d35067d2eea..1f01fb687a4 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -11581,6 +11581,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClashOn.kt"); } + @Test + @TestMetadata("javaEnumAdditionalCases.kt") + public void testJavaEnumAdditionalCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.kt"); + } + @Test @TestMetadata("javaEnumEntriesAmbiguity.kt") public void testJavaEnumEntriesAmbiguity() throws Exception { @@ -11617,6 +11623,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntriesPrioritized.kt"); } + @Test + @TestMetadata("primitiveReference.kt") + public void testPrimitiveReference() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/primitiveReference.kt"); + } + @Test @TestMetadata("redeclarationOfEnumEntriesNameWithIntrinsic.kt") public void testRedeclarationOfEnumEntriesNameWithIntrinsic() throws Exception { @@ -11628,6 +11640,18 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated public void testRedeclarationOfEnumEntriesNameWithIntrinsicOn() throws Exception { runTest("compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.kt"); } + + @Test + @TestMetadata("toBeShadowed.kt") + public void testToBeShadowed() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.kt"); + } + + @Test + @TestMetadata("toBeShadowedPrioritized.kt") + public void testToBeShadowedPrioritized() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.kt"); + } } @Nested diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 204f91ab88e..3f67771313d 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -11581,6 +11581,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClashOn.kt"); } + @Test + @TestMetadata("javaEnumAdditionalCases.kt") + public void testJavaEnumAdditionalCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.kt"); + } + @Test @TestMetadata("javaEnumEntriesAmbiguity.kt") public void testJavaEnumEntriesAmbiguity() throws Exception { @@ -11617,6 +11623,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntriesPrioritized.kt"); } + @Test + @TestMetadata("primitiveReference.kt") + public void testPrimitiveReference() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/primitiveReference.kt"); + } + @Test @TestMetadata("redeclarationOfEnumEntriesNameWithIntrinsic.kt") public void testRedeclarationOfEnumEntriesNameWithIntrinsic() throws Exception { @@ -11628,6 +11640,18 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir public void testRedeclarationOfEnumEntriesNameWithIntrinsicOn() throws Exception { runTest("compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.kt"); } + + @Test + @TestMetadata("toBeShadowed.kt") + public void testToBeShadowed() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.kt"); + } + + @Test + @TestMetadata("toBeShadowedPrioritized.kt") + public void testToBeShadowedPrioritized() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.kt"); + } } @Nested diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index c4c2bfb2df8..e1fab79970c 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -11587,6 +11587,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClashOn.kt"); } + @Test + @TestMetadata("javaEnumAdditionalCases.kt") + public void testJavaEnumAdditionalCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.kt"); + } + @Test @TestMetadata("javaEnumEntriesAmbiguity.kt") public void testJavaEnumEntriesAmbiguity() throws Exception { @@ -11623,6 +11629,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntriesPrioritized.kt"); } + @Test + @TestMetadata("primitiveReference.kt") + public void testPrimitiveReference() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/primitiveReference.kt"); + } + @Test @TestMetadata("redeclarationOfEnumEntriesNameWithIntrinsic.kt") public void testRedeclarationOfEnumEntriesNameWithIntrinsic() throws Exception { @@ -11634,6 +11646,18 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia public void testRedeclarationOfEnumEntriesNameWithIntrinsicOn() throws Exception { runTest("compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.kt"); } + + @Test + @TestMetadata("toBeShadowed.kt") + public void testToBeShadowed() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.kt"); + } + + @Test + @TestMetadata("toBeShadowedPrioritized.kt") + public void testToBeShadowedPrioritized() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.kt"); + } } @Nested 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 446240551cf..c38664cc9c0 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 @@ -1703,7 +1703,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { val ENUM_ENTRIES_DEPRECATIONS by object : DiagnosticGroup("Enum.entries resolve deprecations") { val DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY by warning() val DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM by warning() - val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning() + val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED) val DEPRECATED_DECLARATION_OF_ENUM_ENTRY by warning() } } 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 826daacacc0..e574de1a1f2 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 @@ -848,7 +848,7 @@ object FirErrors { // Enum.entries resolve deprecations val DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY by warning0() val DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM by warning0() - val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning0() + val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning0(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED) val DEPRECATED_DECLARATION_OF_ENUM_ENTRY by warning0() init { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt index 68888f536fe..fee306102c4 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt @@ -78,6 +78,7 @@ object CommonExpressionCheckers : ExpressionCheckers() { override val propertyAccessExpressionCheckers: Set get() = setOf( FirPropertyAccessTypeArgumentsChecker, + FirCustomEnumEntriesMigrationAccessChecker, ) override val tryExpressionCheckers: Set @@ -161,6 +162,7 @@ object CommonExpressionCheckers : ExpressionCheckers() { FirDeprecatedQualifierChecker, FirVisibilityQualifierChecker, FirInlineBodyResolvedQualifierChecker, + FirCustomEnumEntriesMigrationQualifierChecker, ) override val equalityOperatorCallCheckers: Set @@ -181,5 +183,6 @@ object CommonExpressionCheckers : ExpressionCheckers() { override val callableReferenceAccessCheckers: Set get() = setOf( FirTypeArgumentsOfQualifierOfCallableReferenceChecker, + FirCustomEnumEntriesMigrationReferenceChecker, ) } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCustomEnumEntriesMigrationAccessChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCustomEnumEntriesMigrationAccessChecker.kt new file mode 100644 index 00000000000..9f264a32784 --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCustomEnumEntriesMigrationAccessChecker.kt @@ -0,0 +1,33 @@ +/* + * 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.analysis.checkers.expression + +import org.jetbrains.kotlin.builtins.StandardNames +import org.jetbrains.kotlin.config.LanguageFeature +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors +import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression +import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.references.toResolvedPropertySymbol +import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeResolutionResultOverridesOtherToPreserveCompatibility + +object FirCustomEnumEntriesMigrationAccessChecker : FirPropertyAccessExpressionChecker() { + override fun check(expression: FirPropertyAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) { + if (context.languageVersionSettings.supportsFeature(LanguageFeature.PrioritizedEnumEntries)) return + val referencedSymbol = expression.calleeReference.toResolvedPropertySymbol() ?: return + if (referencedSymbol.name != StandardNames.ENUM_ENTRIES) return + if (expression.nonFatalDiagnostics.none { it is ConeResolutionResultOverridesOtherToPreserveCompatibility }) return + + // This 'if' is needed just to choose one of two diagnostics + if (expression.dispatchReceiver is FirResolvedQualifier || expression.extensionReceiver is FirResolvedQualifier) { + reporter.reportOn(expression.source, FirErrors.DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY, context) + } else { + reporter.reportOn(expression.source, FirErrors.DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM, context) + } + } +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCustomEnumEntriesMigrationQualifierChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCustomEnumEntriesMigrationQualifierChecker.kt new file mode 100644 index 00000000000..c5d70894b4f --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCustomEnumEntriesMigrationQualifierChecker.kt @@ -0,0 +1,25 @@ +/* + * 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.analysis.checkers.expression + +import org.jetbrains.kotlin.builtins.StandardNames +import org.jetbrains.kotlin.config.LanguageFeature +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors +import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeResolutionResultOverridesOtherToPreserveCompatibility + +object FirCustomEnumEntriesMigrationQualifierChecker : FirResolvedQualifierChecker() { + override fun check(expression: FirResolvedQualifier, context: CheckerContext, reporter: DiagnosticReporter) { + if (context.languageVersionSettings.supportsFeature(LanguageFeature.PrioritizedEnumEntries)) return + if (expression.symbol?.name != StandardNames.ENUM_ENTRIES) return + if (expression.nonFatalDiagnostics.none { it is ConeResolutionResultOverridesOtherToPreserveCompatibility }) return + + reporter.reportOn(expression.source, FirErrors.DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM, context) + } +} \ No newline at end of file diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCustomEnumEntriesMigrationReferenceChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCustomEnumEntriesMigrationReferenceChecker.kt new file mode 100644 index 00000000000..8b38a6a2c31 --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCustomEnumEntriesMigrationReferenceChecker.kt @@ -0,0 +1,26 @@ +/* + * 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.analysis.checkers.expression + +import org.jetbrains.kotlin.builtins.StandardNames +import org.jetbrains.kotlin.config.LanguageFeature +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors +import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess +import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeResolutionResultOverridesOtherToPreserveCompatibility + +object FirCustomEnumEntriesMigrationReferenceChecker : FirCallableReferenceAccessChecker() { + override fun check(expression: FirCallableReferenceAccess, context: CheckerContext, reporter: DiagnosticReporter) { + if (context.languageVersionSettings.supportsFeature(LanguageFeature.PrioritizedEnumEntries)) return + if (expression.calleeReference.name == StandardNames.ENUM_ENTRIES && + expression.nonFatalDiagnostics.any { it is ConeResolutionResultOverridesOtherToPreserveCompatibility } + ) { + reporter.reportOn(expression.source, FirErrors.DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE, context) + } + } +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt index e16c1e6754a..82f15b88c78 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirExpressionsResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType +import org.jetbrains.kotlin.fir.resolve.transformers.doesResolutionResultOverrideOtherToPreserveCompatibility import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol @@ -327,6 +328,15 @@ class FirCallResolver( when { referencedSymbol is FirClassLikeSymbol<*> -> { + val extraDiagnostic = + runIf(reducedCandidates.singleOrNull()?.doesResolutionResultOverrideOtherToPreserveCompatibility() == true) { + ConeResolutionResultOverridesOtherToPreserveCompatibility + } + val nonFatalDiagnosticFromExpressionWithExtra = when { + nonFatalDiagnosticFromExpression != null -> nonFatalDiagnosticFromExpression + listOfNotNull(extraDiagnostic) + extraDiagnostic == null -> null + else -> listOf(extraDiagnostic) + } return components.buildResolvedQualifierForClass( referencedSymbol, qualifiedAccess.source, @@ -336,7 +346,7 @@ class FirCallResolver( nameReference.source, qualifiedAccess.explicitReceiver, referencedSymbol, - nonFatalDiagnosticFromExpression, + nonFatalDiagnosticFromExpressionWithExtra, session ), annotations = qualifiedAccess.annotations @@ -817,7 +827,8 @@ class FirCallResolver( createResolvedReferenceWithoutCandidateForLocalVariables && explicitReceiver?.coneTypeSafe() == null && coneSymbol is FirVariableSymbol && - (coneSymbol !is FirPropertySymbol || (coneSymbol.fir as FirMemberDeclaration).typeParameters.isEmpty()) + (coneSymbol !is FirPropertySymbol || (coneSymbol.fir as FirMemberDeclaration).typeParameters.isEmpty()) && + !candidate.doesResolutionResultOverrideOtherToPreserveCompatibility() ) { return buildResolvedNamedReference { this.source = source diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateCollector.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateCollector.kt index 5f79b70f0b0..a7525392058 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateCollector.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateCollector.kt @@ -41,6 +41,12 @@ open class CandidateCollector( candidates.clear() } + if (currentApplicability == CandidateApplicability.RESOLVED_NEED_PRESERVE_COMPATIBILITY && + applicability > currentApplicability + ) { + candidate.addDiagnostic(ResolutionResultOverridesOtherToPreserveCompatibility) + } + currentApplicability = applicability bestGroup = group } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt index 06cc0460939..5b4982d1422 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin -import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.builder.buildErrorFunction import org.jetbrains.kotlin.fir.declarations.builder.buildErrorProperty @@ -23,7 +22,6 @@ import org.jetbrains.kotlin.fir.scopes.impl.originalForWrappedIntegerOperator import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.classId -import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.resolvedType import org.jetbrains.kotlin.resolve.calls.components.PostponedArgumentsAnalyzerContext import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt index f39f1c1d386..adbaf515de9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.fir.resolve.transformers -import org.jetbrains.kotlin.builtins.functions.FunctionTypeKind import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.isInline @@ -19,13 +18,11 @@ import org.jetbrains.kotlin.fir.references.builder.buildResolvedCallableReferenc import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.calls.Candidate +import org.jetbrains.kotlin.fir.resolve.calls.ResolutionResultOverridesOtherToPreserveCompatibility import org.jetbrains.kotlin.fir.resolve.calls.FirErrorReferenceWithCandidate import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate import org.jetbrains.kotlin.fir.resolve.dfa.FirDataFlowAnalyzer -import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeConstraintSystemHasContradiction -import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError -import org.jetbrains.kotlin.fir.resolve.diagnostics.ConePropertyAsOperator -import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeTypeParameterInQualifiedAccess +import org.jetbrains.kotlin.fir.resolve.diagnostics.* import org.jetbrains.kotlin.fir.resolve.inference.ResolvedLambdaAtom import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.* @@ -180,6 +177,9 @@ class FirCallCompletionResultsWriterTransformer( result.transformExplicitReceiver(typeUpdater, null) } + if (calleeReference.candidate.doesResolutionResultOverrideOtherToPreserveCompatibility()) { + result.addNonFatalDiagnostic(ConeResolutionResultOverridesOtherToPreserveCompatibility) + } return result } @@ -235,6 +235,9 @@ class FirCallCompletionResultsWriterTransformer( return arrayOfCallTransformer.transformFunctionCall(result, session) } + if (calleeReference.candidate.doesResolutionResultOverrideOtherToPreserveCompatibility()) { + result.addNonFatalDiagnostic(ConeResolutionResultOverridesOtherToPreserveCompatibility) + } return result } @@ -378,6 +381,9 @@ class FirCallCompletionResultsWriterTransformer( replaceCalleeReference(resolvedReference) replaceDispatchReceiver(subCandidate.dispatchReceiverExpression()) replaceExtensionReceiver(subCandidate.chosenExtensionReceiverExpression()) + if (calleeReference.candidate.doesResolutionResultOverrideOtherToPreserveCompatibility()) { + addNonFatalDiagnostic(ConeResolutionResultOverridesOtherToPreserveCompatibility) + } } } @@ -815,3 +821,10 @@ private fun ExpectedArgumentType.getExpectedType(argument: FirElement): ConeKotl } fun ConeKotlinType.toExpectedType(): ExpectedArgumentType = ExpectedArgumentType.ExpectedType(this) + +internal fun Candidate.doesResolutionResultOverrideOtherToPreserveCompatibility(): Boolean = + ResolutionResultOverridesOtherToPreserveCompatibility in diagnostics + +internal fun FirQualifiedAccessExpression.addNonFatalDiagnostic(diagnostic: ConeDiagnostic) { + replaceNonFatalDiagnostics(nonFatalDiagnostics + listOf(diagnostic)) +} diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionDiagnostic.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionDiagnostic.kt index 3fb919d1747..e0b853e68d3 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionDiagnostic.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionDiagnostic.kt @@ -142,3 +142,5 @@ object UnsupportedContextualDeclarationCall : ResolutionDiagnostic(INAPPLICABLE) class AmbiguousValuesForContextReceiverParameter( val expectedContextReceiverType: ConeKotlinType, ) : ResolutionDiagnostic(INAPPLICABLE) + +object ResolutionResultOverridesOtherToPreserveCompatibility : ResolutionDiagnostic(RESOLVED) diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/diagnostics/ConeDiagnostics.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/diagnostics/ConeDiagnostics.kt index d691fb473d9..58bff5ba96b 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/diagnostics/ConeDiagnostics.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/diagnostics/ConeDiagnostics.kt @@ -366,3 +366,9 @@ class ConeAmbiguouslyResolvedAnnotationArgument( - compiler arguments stage: $symbolFromAnnotationArgumentsPhase """ } + +object ConeResolutionResultOverridesOtherToPreserveCompatibility : ConeDiagnostic { + override val reason: String + get() = "Resolution result overrides another result to preserve compatibility, result maybe changed in future versions" + +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt index 27e68b6d720..46a13d8c3fa 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.ConeKotlinType @@ -28,6 +29,7 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() { abstract override val dispatchReceiver: FirExpression abstract override val extensionReceiver: FirExpression abstract override val source: KtSourceElement? + abstract override val nonFatalDiagnostics: List abstract override val calleeReference: FirNamedReference abstract val hasQuestionMarkAtLHS: Boolean @@ -54,6 +56,8 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() { @FirImplementationDetail abstract override fun replaceSource(newSource: KtSourceElement?) + abstract override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) + abstract fun replaceCalleeReference(newCalleeReference: FirNamedReference) abstract override fun replaceCalleeReference(newCalleeReference: FirReference) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt index f060ae43849..e642ccf30ba 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.ConeKotlinType @@ -27,6 +28,7 @@ abstract class FirComponentCall : FirFunctionCall() { abstract override val dispatchReceiver: FirExpression abstract override val extensionReceiver: FirExpression abstract override val source: KtSourceElement? + abstract override val nonFatalDiagnostics: List abstract override val argumentList: FirArgumentList abstract override val calleeReference: FirNamedReference abstract override val origin: FirFunctionCallOrigin @@ -54,6 +56,8 @@ abstract class FirComponentCall : FirFunctionCall() { @FirImplementationDetail abstract override fun replaceSource(newSource: KtSourceElement?) + abstract override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) + abstract override fun replaceArgumentList(newArgumentList: FirArgumentList) abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt index 673970598f8..b894c97cdda 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.ConeKotlinType @@ -28,6 +29,7 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall { abstract override val dispatchReceiver: FirExpression abstract override val extensionReceiver: FirExpression abstract override val source: KtSourceElement? + abstract override val nonFatalDiagnostics: List abstract override val argumentList: FirArgumentList abstract override val calleeReference: FirNamedReference abstract val origin: FirFunctionCallOrigin @@ -55,6 +57,8 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall { @FirImplementationDetail abstract override fun replaceSource(newSource: KtSourceElement?) + abstract override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) + abstract override fun replaceArgumentList(newArgumentList: FirArgumentList) abstract fun replaceCalleeReference(newCalleeReference: FirNamedReference) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirImplicitInvokeCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirImplicitInvokeCall.kt index adac373e1dd..ca0d9da3c52 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirImplicitInvokeCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirImplicitInvokeCall.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.ConeKotlinType @@ -28,6 +29,7 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() { abstract override val dispatchReceiver: FirExpression abstract override val extensionReceiver: FirExpression abstract override val source: KtSourceElement? + abstract override val nonFatalDiagnostics: List abstract override val argumentList: FirArgumentList abstract override val calleeReference: FirNamedReference abstract override val origin: FirFunctionCallOrigin @@ -55,6 +57,8 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() { @FirImplementationDetail abstract override fun replaceSource(newSource: KtSourceElement?) + abstract override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) + abstract override fun replaceArgumentList(newArgumentList: FirArgumentList) abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirIntegerLiteralOperatorCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirIntegerLiteralOperatorCall.kt index 66734d1577b..b376fe797e1 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirIntegerLiteralOperatorCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirIntegerLiteralOperatorCall.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.ConeKotlinType @@ -26,6 +27,7 @@ abstract class FirIntegerLiteralOperatorCall : FirFunctionCall() { abstract override val typeArguments: List abstract override val explicitReceiver: FirExpression? abstract override val source: KtSourceElement? + abstract override val nonFatalDiagnostics: List abstract override val argumentList: FirArgumentList abstract override val calleeReference: FirNamedReference abstract override val origin: FirFunctionCallOrigin @@ -51,6 +53,8 @@ abstract class FirIntegerLiteralOperatorCall : FirFunctionCall() { @FirImplementationDetail abstract override fun replaceSource(newSource: KtSourceElement?) + abstract override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) + abstract override fun replaceArgumentList(newArgumentList: FirArgumentList) abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirPropertyAccessExpression.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirPropertyAccessExpression.kt index 86888690bf4..904d3114fbe 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirPropertyAccessExpression.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirPropertyAccessExpression.kt @@ -29,7 +29,7 @@ abstract class FirPropertyAccessExpression : FirQualifiedAccessExpression() { abstract override val dispatchReceiver: FirExpression abstract override val extensionReceiver: FirExpression abstract override val source: KtSourceElement? - abstract val nonFatalDiagnostics: List + abstract override val nonFatalDiagnostics: List override fun accept(visitor: FirVisitor, data: D): R = visitor.visitPropertyAccessExpression(this, data) @@ -56,7 +56,7 @@ abstract class FirPropertyAccessExpression : FirQualifiedAccessExpression() { @FirImplementationDetail abstract override fun replaceSource(newSource: KtSourceElement?) - abstract fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) + abstract override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirPropertyAccessExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt index 44880eb9e47..123ecaa5ff7 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirTypeProjection @@ -28,6 +29,7 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirResolvable, Fi abstract val dispatchReceiver: FirExpression abstract val extensionReceiver: FirExpression abstract override val source: KtSourceElement? + abstract val nonFatalDiagnostics: List override fun accept(visitor: FirVisitor, data: D): R = visitor.visitQualifiedAccessExpression(this, data) @@ -54,6 +56,8 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirResolvable, Fi @FirImplementationDetail abstract fun replaceSource(newSource: KtSourceElement?) + abstract fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) + abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirQualifiedAccessExpression abstract override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccessExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt index 3150d86b766..81f064741ce 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.types.ConeKotlinType @@ -28,6 +29,7 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() { abstract override val dispatchReceiver: FirExpression abstract override val extensionReceiver: FirExpression abstract override val source: KtSourceElement? + abstract override val nonFatalDiagnostics: List abstract override val calleeReference: FirThisReference abstract val isImplicit: Boolean @@ -54,6 +56,8 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() { @FirImplementationDetail abstract override fun replaceSource(newSource: KtSourceElement?) + abstract override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) + abstract fun replaceCalleeReference(newCalleeReference: FirThisReference) abstract override fun replaceCalleeReference(newCalleeReference: FirReference) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAbstractFunctionCallBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAbstractFunctionCallBuilder.kt index e4e2a873cde..1d36f6c16c2 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAbstractFunctionCallBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirAbstractFunctionCallBuilder.kt @@ -9,6 +9,7 @@ package org.jetbrains.kotlin.fir.expressions.builder import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.fir.builder.FirBuilderDsl +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirExpression @@ -36,6 +37,7 @@ interface FirAbstractFunctionCallBuilder : FirQualifiedAccessExpressionBuilder, abstract override var dispatchReceiver: FirExpression abstract override var extensionReceiver: FirExpression abstract override var source: KtSourceElement? + abstract override val nonFatalDiagnostics: MutableList abstract override var argumentList: FirArgumentList abstract var calleeReference: FirNamedReference abstract var origin: FirFunctionCallOrigin diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirCallableReferenceAccessBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirCallableReferenceAccessBuilder.kt index 2b3fd79836c..b41c4d4cf6c 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirCallableReferenceAccessBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirCallableReferenceAccessBuilder.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess import org.jetbrains.kotlin.fir.expressions.FirExpression @@ -41,6 +42,7 @@ class FirCallableReferenceAccessBuilder : FirQualifiedAccessExpressionBuilder, F override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression override var source: KtSourceElement? = null + override val nonFatalDiagnostics: MutableList = mutableListOf() lateinit var calleeReference: FirNamedReference var hasQuestionMarkAtLHS: Boolean = false @@ -54,6 +56,7 @@ class FirCallableReferenceAccessBuilder : FirQualifiedAccessExpressionBuilder, F dispatchReceiver, extensionReceiver, source, + nonFatalDiagnostics.toMutableOrEmpty(), calleeReference, hasQuestionMarkAtLHS, ) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirComponentCallBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirComponentCallBuilder.kt index a1bf721727e..d71556be132 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirComponentCallBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirComponentCallBuilder.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirComponentCall @@ -45,6 +46,7 @@ class FirComponentCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, F var dispatchReceiver: FirExpression = FirNoReceiverExpression var extensionReceiver: FirExpression = FirNoReceiverExpression override var source: KtSourceElement? = null + val nonFatalDiagnostics: MutableList = mutableListOf() override var argumentList: FirArgumentList = FirEmptyArgumentList lateinit var explicitReceiver: FirExpression var componentIndex: Int by kotlin.properties.Delegates.notNull() @@ -58,6 +60,7 @@ class FirComponentCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, F dispatchReceiver, extensionReceiver, source, + nonFatalDiagnostics.toMutableOrEmpty(), argumentList, explicitReceiver, componentIndex, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirFunctionCallBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirFunctionCallBuilder.kt index d419b97e475..28f887fd18f 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirFunctionCallBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirFunctionCallBuilder.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList @@ -44,6 +45,7 @@ open class FirFunctionCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotatio override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression override var source: KtSourceElement? = null + override val nonFatalDiagnostics: MutableList = mutableListOf() override var argumentList: FirArgumentList = FirEmptyArgumentList override lateinit var calleeReference: FirNamedReference override var origin: FirFunctionCallOrigin = FirFunctionCallOrigin.Regular @@ -59,6 +61,7 @@ open class FirFunctionCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotatio dispatchReceiver, extensionReceiver, source, + nonFatalDiagnostics.toMutableOrEmpty(), argumentList, calleeReference, origin, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirImplicitInvokeCallBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirImplicitInvokeCallBuilder.kt index 6d46fb9cd8a..fddf4f26033 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirImplicitInvokeCallBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirImplicitInvokeCallBuilder.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList @@ -44,6 +45,7 @@ open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnn override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression override var source: KtSourceElement? = null + override val nonFatalDiagnostics: MutableList = mutableListOf() override var argumentList: FirArgumentList = FirEmptyArgumentList override lateinit var calleeReference: FirNamedReference @@ -57,6 +59,7 @@ open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnn dispatchReceiver, extensionReceiver, source, + nonFatalDiagnostics.toMutableOrEmpty(), argumentList, calleeReference, ) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirIntegerLiteralOperatorCallBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirIntegerLiteralOperatorCallBuilder.kt index 4ec2f2d0d7f..215673e4eaf 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirIntegerLiteralOperatorCallBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirIntegerLiteralOperatorCallBuilder.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList @@ -42,6 +43,7 @@ open class FirIntegerLiteralOperatorCallBuilder : FirAbstractFunctionCallBuilder override val typeArguments: MutableList = mutableListOf() override var explicitReceiver: FirExpression? = null override var source: KtSourceElement? = null + override val nonFatalDiagnostics: MutableList = mutableListOf() override var argumentList: FirArgumentList = FirEmptyArgumentList override lateinit var calleeReference: FirNamedReference override lateinit var origin: FirFunctionCallOrigin @@ -56,6 +58,7 @@ open class FirIntegerLiteralOperatorCallBuilder : FirAbstractFunctionCallBuilder typeArguments.toMutableOrEmpty(), explicitReceiver, source, + nonFatalDiagnostics.toMutableOrEmpty(), argumentList, calleeReference, origin, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirPropertyAccessExpressionBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirPropertyAccessExpressionBuilder.kt index eb92daf3030..77661c04f02 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirPropertyAccessExpressionBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirPropertyAccessExpressionBuilder.kt @@ -42,7 +42,7 @@ class FirPropertyAccessExpressionBuilder : FirQualifiedAccessExpressionBuilder, override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression override var source: KtSourceElement? = null - val nonFatalDiagnostics: MutableList = mutableListOf() + override val nonFatalDiagnostics: MutableList = mutableListOf() @OptIn(FirImplementationDetail::class) override fun build(): FirPropertyAccessExpression { diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessExpressionBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessExpressionBuilder.kt index 200d67f9cd7..df6fd3cc125 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessExpressionBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessExpressionBuilder.kt @@ -9,6 +9,7 @@ package org.jetbrains.kotlin.fir.expressions.builder import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.fir.builder.FirBuilderDsl +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression @@ -31,5 +32,7 @@ interface FirQualifiedAccessExpressionBuilder { abstract var dispatchReceiver: FirExpression abstract var extensionReceiver: FirExpression abstract var source: KtSourceElement? + abstract val nonFatalDiagnostics: MutableList + fun build(): FirQualifiedAccessExpression } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirThisReceiverExpressionBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirThisReceiverExpressionBuilder.kt index bb7603a521a..f86749ad3fa 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirThisReceiverExpressionBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirThisReceiverExpressionBuilder.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression @@ -38,6 +39,7 @@ class FirThisReceiverExpressionBuilder : FirQualifiedAccessExpressionBuilder, Fi override val contextReceiverArguments: MutableList = mutableListOf() override val typeArguments: MutableList = mutableListOf() override var source: KtSourceElement? = null + override val nonFatalDiagnostics: MutableList = mutableListOf() lateinit var calleeReference: FirThisReference var isImplicit: Boolean = false @@ -48,6 +50,7 @@ class FirThisReceiverExpressionBuilder : FirQualifiedAccessExpressionBuilder, Fi contextReceiverArguments.toMutableOrEmpty(), typeArguments.toMutableOrEmpty(), source, + nonFatalDiagnostics.toMutableOrEmpty(), calleeReference, isImplicit, ) @@ -95,6 +98,7 @@ inline fun buildThisReceiverExpressionCopy(original: FirThisReceiverExpression, copyBuilder.contextReceiverArguments.addAll(original.contextReceiverArguments) copyBuilder.typeArguments.addAll(original.typeArguments) copyBuilder.source = original.source + copyBuilder.nonFatalDiagnostics.addAll(original.nonFatalDiagnostics) copyBuilder.calleeReference = original.calleeReference copyBuilder.isImplicit = original.isImplicit return copyBuilder.apply(init).build() diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt index ed84014a017..9ccf4b951a9 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.expressions.impl import org.jetbrains.kotlin.KtSourceElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess import org.jetbrains.kotlin.fir.expressions.FirExpression @@ -34,6 +35,7 @@ internal class FirCallableReferenceAccessImpl( override var dispatchReceiver: FirExpression, override var extensionReceiver: FirExpression, override var source: KtSourceElement?, + override var nonFatalDiagnostics: MutableOrEmptyList, override var calleeReference: FirNamedReference, override var hasQuestionMarkAtLHS: Boolean, ) : FirCallableReferenceAccess() { @@ -119,6 +121,10 @@ internal class FirCallableReferenceAccessImpl( source = newSource } + override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) { + nonFatalDiagnostics = newNonFatalDiagnostics.toMutableOrEmpty() + } + override fun replaceCalleeReference(newCalleeReference: FirNamedReference) { calleeReference = newCalleeReference } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt index 5e259ec0b5f..9a3a89db075 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt @@ -9,6 +9,7 @@ package org.jetbrains.kotlin.fir.expressions.impl import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.fir.FirImplementationDetail +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirComponentCall @@ -38,6 +39,7 @@ internal class FirComponentCallImpl( override var dispatchReceiver: FirExpression, override var extensionReceiver: FirExpression, override var source: KtSourceElement?, + override var nonFatalDiagnostics: MutableOrEmptyList, override var argumentList: FirArgumentList, override var explicitReceiver: FirExpression, override val componentIndex: Int, @@ -125,6 +127,10 @@ internal class FirComponentCallImpl( source = newSource } + override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) { + nonFatalDiagnostics = newNonFatalDiagnostics.toMutableOrEmpty() + } + override fun replaceArgumentList(newArgumentList: FirArgumentList) { argumentList = newArgumentList } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt index e0a3f19d2fb..4f070a4f810 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt @@ -9,6 +9,7 @@ package org.jetbrains.kotlin.fir.expressions.impl import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.fir.FirImplementationDetail +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirExpression @@ -36,6 +37,7 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor( override var dispatchReceiver: FirExpression, override var extensionReceiver: FirExpression, override var source: KtSourceElement?, + override var nonFatalDiagnostics: MutableOrEmptyList, override var argumentList: FirArgumentList, override var calleeReference: FirNamedReference, override val origin: FirFunctionCallOrigin, @@ -124,6 +126,10 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor( source = newSource } + override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) { + nonFatalDiagnostics = newNonFatalDiagnostics.toMutableOrEmpty() + } + override fun replaceArgumentList(newArgumentList: FirArgumentList) { argumentList = newArgumentList } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirImplicitInvokeCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirImplicitInvokeCallImpl.kt index f1241cbdeb9..ee8044af5aa 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirImplicitInvokeCallImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirImplicitInvokeCallImpl.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.expressions.impl import org.jetbrains.kotlin.KtSourceElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirExpression @@ -36,6 +37,7 @@ internal class FirImplicitInvokeCallImpl( override var dispatchReceiver: FirExpression, override var extensionReceiver: FirExpression, override var source: KtSourceElement?, + override var nonFatalDiagnostics: MutableOrEmptyList, override var argumentList: FirArgumentList, override var calleeReference: FirNamedReference, ) : FirImplicitInvokeCall() { @@ -125,6 +127,10 @@ internal class FirImplicitInvokeCallImpl( source = newSource } + override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) { + nonFatalDiagnostics = newNonFatalDiagnostics.toMutableOrEmpty() + } + override fun replaceArgumentList(newArgumentList: FirArgumentList) { argumentList = newArgumentList } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirIntegerLiteralOperatorCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirIntegerLiteralOperatorCallImpl.kt index 45134386e00..a0c28ee554d 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirIntegerLiteralOperatorCallImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirIntegerLiteralOperatorCallImpl.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.expressions.impl import org.jetbrains.kotlin.KtSourceElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirExpression @@ -34,6 +35,7 @@ internal class FirIntegerLiteralOperatorCallImpl( override var typeArguments: MutableOrEmptyList, override var explicitReceiver: FirExpression?, override var source: KtSourceElement?, + override var nonFatalDiagnostics: MutableOrEmptyList, override var argumentList: FirArgumentList, override var calleeReference: FirNamedReference, override val origin: FirFunctionCallOrigin, @@ -126,6 +128,10 @@ internal class FirIntegerLiteralOperatorCallImpl( source = newSource } + override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) { + nonFatalDiagnostics = newNonFatalDiagnostics.toMutableOrEmpty() + } + override fun replaceArgumentList(newArgumentList: FirArgumentList) { argumentList = newArgumentList } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt index a6e344abfb0..672680c3115 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.expressions.impl import org.jetbrains.kotlin.KtSourceElement +import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression @@ -32,6 +33,7 @@ internal class FirThisReceiverExpressionImpl( override var contextReceiverArguments: MutableOrEmptyList, override var typeArguments: MutableOrEmptyList, override var source: KtSourceElement?, + override var nonFatalDiagnostics: MutableOrEmptyList, override var calleeReference: FirThisReference, override val isImplicit: Boolean, ) : FirThisReceiverExpression() { @@ -121,6 +123,10 @@ internal class FirThisReceiverExpressionImpl( source = newSource } + override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List) { + nonFatalDiagnostics = newNonFatalDiagnostics.toMutableOrEmpty() + } + override fun replaceCalleeReference(newCalleeReference: FirThisReference) { calleeReference = newCalleeReference } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index 1dd7eb14a2a..0f59573948c 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -213,9 +213,6 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild +typeArguments.withTransform() +receivers +field("source", sourceElementType, nullable = true, withReplace = true) - } - - propertyAccessExpression.configure { +fieldList("nonFatalDiagnostics", coneDiagnosticType, useMutableOrEmpty = true, withReplace = true) } diff --git a/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReference.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReference.fir.kt deleted file mode 100644 index 36e6aec2fd7..00000000000 --- a/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReference.fir.kt +++ /dev/null @@ -1,15 +0,0 @@ -// !LANGUAGE: -EnumEntries -// WITH_STDLIB - -enum class E { - ; - - val entries: Int = 0 -} - -fun test() { - E::entries - val ref = E::entries - val refType: (E) -> Int = E::entries - val refTypeWithAnyExpectedType: Any = E::entries -} diff --git a/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReference.kt b/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReference.kt index bc93b95143a..b80acd761ef 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReference.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReference.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: -EnumEntries // WITH_STDLIB diff --git a/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReferenceOn.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReferenceOn.fir.kt deleted file mode 100644 index 9f47aab862e..00000000000 --- a/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReferenceOn.fir.kt +++ /dev/null @@ -1,16 +0,0 @@ -// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries -// WITH_STDLIB -// FIR_DUMP - -enum class E { - ; - - val entries: Int = 0 -} - -fun test() { - E::entries - val ref = E::entries - val refType: (E) -> Int = E::entries - val refTypeWithAnyExpectedType: Any = E::entries -} diff --git a/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReferenceOn.fir.txt b/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReferenceOn.fir.txt index 284521e0e38..04e762d6c13 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReferenceOn.fir.txt +++ b/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReferenceOn.fir.txt @@ -1,4 +1,4 @@ -FILE: conflictingPropertyEntriesAndReferenceOn.fir.kt +FILE: conflictingPropertyEntriesAndReferenceOn.kt public final enum class E : R|kotlin/Enum| { private constructor(): R|E| { super|>() diff --git a/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReferenceOn.kt b/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReferenceOn.kt index bb0a8e245e4..0bd1a3a64ae 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReferenceOn.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/conflictingPropertyEntriesAndReferenceOn.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: +EnumEntries -PrioritizedEnumEntries // WITH_STDLIB // FIR_DUMP diff --git a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyAsExtensionClash.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyAsExtensionClash.fir.kt index d589e4a60a6..e8de84b06dd 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyAsExtensionClash.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyAsExtensionClash.fir.kt @@ -12,7 +12,7 @@ enum class A { val A.Companion.entries: Int get() = 0 fun test() { - A.entries + A.entries A.Companion.entries with(A) { diff --git a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyAsExtensionClashOn.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyAsExtensionClashOn.fir.kt index cc65644bf40..791a48f1af1 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyAsExtensionClashOn.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyAsExtensionClashOn.fir.kt @@ -13,7 +13,7 @@ enum class A { val A.Companion.entries: Int get() = 0 fun test() { - A.entries + A.entries A.Companion.entries with(A) { diff --git a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyImportedClash.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyImportedClash.fir.kt index 9aab13cf953..73c3980f516 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyImportedClash.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyImportedClash.fir.kt @@ -14,7 +14,7 @@ enum class A { } fun test() { - A.entries + A.entries with(A) { entries diff --git a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyImportedClashOn.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyImportedClashOn.fir.kt index 9d69fd17383..95a0441e0c3 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyImportedClashOn.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyImportedClashOn.fir.kt @@ -15,7 +15,7 @@ enum class A { } fun test() { - A.entries + A.entries with(A) { entries diff --git a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyInCompanionClash.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyInCompanionClash.fir.kt index 5b978647c67..779d4fc8a6e 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyInCompanionClash.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyInCompanionClash.fir.kt @@ -10,7 +10,7 @@ enum class A { } fun test() { - A.entries + A.entries A.Companion.entries with(A) { diff --git a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyInCompanionClashOn.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyInCompanionClashOn.fir.kt index bf0080025eb..d9def2ff370 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyInCompanionClashOn.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyInCompanionClashOn.fir.kt @@ -11,7 +11,7 @@ enum class A { } fun test() { - A.entries + A.entries A.Companion.entries with(A) { diff --git a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyWithJvmStaticClash.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyWithJvmStaticClash.fir.kt index fd31eeb19fe..f3b98be31cb 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyWithJvmStaticClash.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyWithJvmStaticClash.fir.kt @@ -11,7 +11,7 @@ enum class A { } fun test() { - A.entries + A.entries with(A) { entries diff --git a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyWithJvmStaticClashOn.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyWithJvmStaticClashOn.fir.kt index 8b8d5d448f0..432b7cd0965 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyWithJvmStaticClashOn.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/entriesPropertyWithJvmStaticClashOn.fir.kt @@ -12,7 +12,7 @@ enum class A { } fun test() { - A.entries + A.entries with(A) { entries diff --git a/compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClash.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClash.fir.kt index 993f0f8ad52..00b218a57d3 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClash.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClash.fir.kt @@ -12,6 +12,6 @@ enum class A { val T.entries: Int get() = 0 fun test() { - A.entries + A.entries A.Companion.entries } diff --git a/compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClashOn.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClashOn.fir.kt index 040461806d6..bcdacb7c435 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClashOn.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClashOn.fir.kt @@ -13,6 +13,6 @@ enum class A { val T.entries: Int get() = 0 fun test() { - A.entries + A.entries A.Companion.entries } diff --git a/compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.fir.txt b/compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.fir.txt new file mode 100644 index 00000000000..4c4b6f69e69 --- /dev/null +++ b/compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.fir.txt @@ -0,0 +1,5 @@ +FILE: Main.kt + public final fun main(): R|kotlin/Unit| { + R|kotlin/io/println|(Q|JavaEnum|.R|/JavaEnum.entries*s|) + R|kotlin/io/println|(Q|JavaEnum01|.R|/JavaEnum01.entries*s|) + } diff --git a/compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.kt b/compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.kt new file mode 100644 index 00000000000..ddcc6debed5 --- /dev/null +++ b/compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.kt @@ -0,0 +1,25 @@ +// FIR_IDENTICAL +// !LANGUAGE: +EnumEntries +PrioritizedEnumEntries +// WITH_STDLIB +// FIR_DUMP +// ISSUE: KT-56623 + +// FILE: JavaEnum.java +public enum JavaEnum { + public static String entries = "entries"; +} + +// FILE: JavaEnum01.java + +interface I01 { + String entries = "entries"; +} + +public enum JavaEnum01 implements I01 { +} + +// FILE: Main.kt +fun main() { + println(JavaEnum.entries) + println(JavaEnum01.entries) +} diff --git a/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguity.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguity.fir.kt deleted file mode 100644 index ae68410d1a6..00000000000 --- a/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguity.fir.kt +++ /dev/null @@ -1,33 +0,0 @@ -// !LANGUAGE: -EnumEntries -// WITH_STDLIB - -// FILE: JEnumEntry.java - -public enum JEnumEntry { - entries; -} - -// FILE: JEnumStaticField.java - -public enum JEnumStaticField { - ; - - public static final int entries = 0; -} - -// FILE: JEnumField.java - -public enum JEnumField { - ; - - public final int entries = 0; -} - -// FILE: test.kt - -fun test() { - JEnumEntry.entries - JEnumStaticField.entries - - JEnumField::entries -} diff --git a/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguity.kt b/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguity.kt index e12360c1683..58887a2bfe6 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguity.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguity.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: -EnumEntries // WITH_STDLIB diff --git a/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguityOn.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguityOn.fir.kt deleted file mode 100644 index 3f0203cafe0..00000000000 --- a/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguityOn.fir.kt +++ /dev/null @@ -1,36 +0,0 @@ -// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries -// WITH_STDLIB -// FIR_DUMP - -// FILE: JEnumEntry.java - -public enum JEnumEntry { - entries; -} - -// FILE: JEnumStaticField.java - -public enum JEnumStaticField { - ; - - public static final int entries = 0; -} - -// FILE: JEnumField.java - -public enum JEnumField { - ; - - public final int entries = 0; -} - -// FILE: test.kt - -fun test(): String { - val first = JEnumEntry.entries - val second = JEnumStaticField.entries - - val third = JEnumField::entries - - return "$first$second$third" -} diff --git a/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguityOn.kt b/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguityOn.kt index 5afcbc72880..0d174cbb80c 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguityOn.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/javaEnumEntriesAmbiguityOn.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !LANGUAGE: +EnumEntries -PrioritizedEnumEntries // WITH_STDLIB // FIR_DUMP diff --git a/compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntries.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntries.fir.kt index ea26d6ba6d8..4cf1a72d025 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntries.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntries.fir.kt @@ -9,7 +9,7 @@ enum class E { ; fun foo() { - entries + entries pckg.entries } } @@ -20,7 +20,7 @@ class A { class B { fun foo() { - entries + entries pckg.entries } } diff --git a/compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntriesOn.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntriesOn.fir.kt index d81d16cff44..38c478c047f 100644 --- a/compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntriesOn.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntriesOn.fir.kt @@ -10,7 +10,7 @@ enum class E { ; fun foo() { - entries.length + entries.length pckg.entries.length } } @@ -21,7 +21,7 @@ class A { class B { fun foo() { - entries.length + entries.length pckg.entries.length } } diff --git a/compiler/testData/diagnostics/tests/enum/entries/primitiveReference.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/primitiveReference.fir.kt new file mode 100644 index 00000000000..879239c4b25 --- /dev/null +++ b/compiler/testData/diagnostics/tests/enum/entries/primitiveReference.fir.kt @@ -0,0 +1,6 @@ +// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries +// WITH_STDLIB + +enum class Some {} + +val x = Some::entries \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/enum/entries/primitiveReference.kt b/compiler/testData/diagnostics/tests/enum/entries/primitiveReference.kt new file mode 100644 index 00000000000..5042a7da4f3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/enum/entries/primitiveReference.kt @@ -0,0 +1,6 @@ +// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries +// WITH_STDLIB + +enum class Some {} + +val x = Some::entries diff --git a/compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.fir.kt b/compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.fir.kt new file mode 100644 index 00000000000..71a415a7bf0 --- /dev/null +++ b/compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.fir.kt @@ -0,0 +1,46 @@ +// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries +// WITH_STDLIB +// ISSUE: KT-56587 + +enum class E05 { + ; + object entries +} + +fun test05() { + println(E05.entries) +} + +enum class E07(val entries: String) { + ; + fun test() { + println(entries) + } +} + +enum class E071 { + ; + constructor(entries: String) { + println(entries) + } +} + +enum class E09 { + ; + val entries: String = "entries" + fun test() { + println(entries) + } +} + +interface I01 { + val entries: String + get() = "entries" +} + +enum class E10 : I01 { + ; + fun test() { + println(entries) + } +} diff --git a/compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.kt b/compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.kt new file mode 100644 index 00000000000..93c4d0df93a --- /dev/null +++ b/compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.kt @@ -0,0 +1,46 @@ +// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries +// WITH_STDLIB +// ISSUE: KT-56587 + +enum class E05 { + ; + object entries +} + +fun test05() { + println(E05.entries) +} + +enum class E07(val entries: String) { + ; + fun test() { + println(entries) + } +} + +enum class E071 { + ; + constructor(entries: String) { + println(entries) + } +} + +enum class E09 { + ; + val entries: String = "entries" + fun test() { + println(entries) + } +} + +interface I01 { + val entries: String + get() = "entries" +} + +enum class E10 : I01 { + ; + fun test() { + println(entries) + } +} diff --git a/compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.fir.txt b/compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.fir.txt new file mode 100644 index 00000000000..d36e2977b3b --- /dev/null +++ b/compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.fir.txt @@ -0,0 +1,112 @@ +FILE: toBeShadowedPrioritized.kt + public final enum class E05 : R|kotlin/Enum| { + private constructor(): R|E05| { + super|>() + } + + public final object entries : R|kotlin/Any| { + private constructor(): R|E05.entries| { + super() + } + + } + + public final static fun values(): R|kotlin/Array| { + } + + public final static fun valueOf(value: R|kotlin/String|): R|E05| { + } + + public final static val entries: R|kotlin/enums/EnumEntries| + public get(): R|kotlin/enums/EnumEntries| + + } + public final fun test05(): R|kotlin/Unit| { + R|kotlin/io/println|(Q|E05|.R|/E05.entries*s|) + } + public final enum class E07 : R|kotlin/Enum| { + private constructor(entries: R|kotlin/String|): R|E07| { + super|>() + } + + public final val entries: R|kotlin/String| = R|/entries| + public get(): R|kotlin/String| + + public final fun test(): R|kotlin/Unit| { + R|kotlin/io/println|(this@R|/E07|.R|/E07.entries|) + } + + public final static fun values(): R|kotlin/Array| { + } + + public final static fun valueOf(value: R|kotlin/String|): R|E07| { + } + + public final static val entries: R|kotlin/enums/EnumEntries| + public get(): R|kotlin/enums/EnumEntries| + + } + public final enum class E071 : R|kotlin/Enum| { + private constructor(entries: R|kotlin/String|): R|E071| { + super|>() + R|kotlin/io/println|(R|/entries|) + } + + public final static fun values(): R|kotlin/Array| { + } + + public final static fun valueOf(value: R|kotlin/String|): R|E071| { + } + + public final static val entries: R|kotlin/enums/EnumEntries| + public get(): R|kotlin/enums/EnumEntries| + + } + public final enum class E09 : R|kotlin/Enum| { + private constructor(): R|E09| { + super|>() + } + + public final val entries: R|kotlin/String| = String(entries) + public get(): R|kotlin/String| + + public final fun test(): R|kotlin/Unit| { + R|kotlin/io/println|(this@R|/E09|.R|/E09.entries|) + } + + public final static fun values(): R|kotlin/Array| { + } + + public final static fun valueOf(value: R|kotlin/String|): R|E09| { + } + + public final static val entries: R|kotlin/enums/EnumEntries| + public get(): R|kotlin/enums/EnumEntries| + + } + public abstract interface I01 : R|kotlin/Any| { + public open val entries: R|kotlin/String| + public get(): R|kotlin/String| { + ^ String(entries) + } + + } + public final enum class E10 : R|I01|, R|kotlin/Enum| { + private constructor(): R|E10| { + super|>() + } + + public final fun test(): R|kotlin/Unit| { + R|kotlin/io/println|(this@R|/E10|.R|/I01.entries|) + } + + public final static fun values(): R|kotlin/Array| { + } + + public final static fun valueOf(value: R|kotlin/String|): R|E10| { + } + + public final static val entries: R|kotlin/enums/EnumEntries| + public get(): R|kotlin/enums/EnumEntries| + + } diff --git a/compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.kt b/compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.kt new file mode 100644 index 00000000000..a2dae30850c --- /dev/null +++ b/compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.kt @@ -0,0 +1,48 @@ +// FIR_IDENTICAL +// !LANGUAGE: +EnumEntries +PrioritizedEnumEntries +// WITH_STDLIB +// FIR_DUMP +// ISSUE: KT-56587 + +enum class E05 { + ; + object entries +} + +fun test05() { + println(E05.entries) +} + +enum class E07(val entries: String) { + ; + fun test() { + println(entries) + } +} + +enum class E071 { + ; + constructor(entries: String) { + println(entries) + } +} + +enum class E09 { + ; + val entries: String = "entries" + fun test() { + println(entries) + } +} + +interface I01 { + val entries: String + get() = "entries" +} + +enum class E10 : I01 { + ; + fun test() { + println(entries) + } +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 239e7e966ec..b87e24c4f00 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -11587,6 +11587,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/enum/entries/genericEntriesPropertyClashOn.kt"); } + @Test + @TestMetadata("javaEnumAdditionalCases.kt") + public void testJavaEnumAdditionalCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/javaEnumAdditionalCases.kt"); + } + @Test @TestMetadata("javaEnumEntriesAmbiguity.kt") public void testJavaEnumEntriesAmbiguity() throws Exception { @@ -11623,6 +11629,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/enum/entries/nameShadowingOfExternallyDefinedEntriesPrioritized.kt"); } + @Test + @TestMetadata("primitiveReference.kt") + public void testPrimitiveReference() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/primitiveReference.kt"); + } + @Test @TestMetadata("redeclarationOfEnumEntriesNameWithIntrinsic.kt") public void testRedeclarationOfEnumEntriesNameWithIntrinsic() throws Exception { @@ -11634,6 +11646,18 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { public void testRedeclarationOfEnumEntriesNameWithIntrinsicOn() throws Exception { runTest("compiler/testData/diagnostics/tests/enum/entries/redeclarationOfEnumEntriesNameWithIntrinsicOn.kt"); } + + @Test + @TestMetadata("toBeShadowed.kt") + public void testToBeShadowed() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/toBeShadowed.kt"); + } + + @Test + @TestMetadata("toBeShadowedPrioritized.kt") + public void testToBeShadowedPrioritized() throws Exception { + runTest("compiler/testData/diagnostics/tests/enum/entries/toBeShadowedPrioritized.kt"); + } } @Nested