K2: introduce custom Enum.entries migration checkers
Related to KT-56623, KT-56587 #KT-59344 Fixed
This commit is contained in:
committed by
Space Team
parent
e0d68fc93e
commit
3ff2c7d6f7
+24
@@ -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
|
||||
|
||||
+24
@@ -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
|
||||
|
||||
+24
@@ -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
|
||||
|
||||
+24
@@ -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
|
||||
|
||||
+1
-1
@@ -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<PsiElement>()
|
||||
val DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM by warning<PsiElement>()
|
||||
val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning<PsiElement>()
|
||||
val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning<PsiElement>(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED)
|
||||
val DEPRECATED_DECLARATION_OF_ENUM_ENTRY by warning<KtEnumEntry>()
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -848,7 +848,7 @@ object FirErrors {
|
||||
// Enum.entries resolve deprecations
|
||||
val DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY by warning0<PsiElement>()
|
||||
val DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM by warning0<PsiElement>()
|
||||
val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning0<PsiElement>()
|
||||
val DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE by warning0<PsiElement>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED)
|
||||
val DEPRECATED_DECLARATION_OF_ENUM_ENTRY by warning0<KtEnumEntry>()
|
||||
|
||||
init {
|
||||
|
||||
+3
@@ -78,6 +78,7 @@ object CommonExpressionCheckers : ExpressionCheckers() {
|
||||
override val propertyAccessExpressionCheckers: Set<FirPropertyAccessExpressionChecker>
|
||||
get() = setOf(
|
||||
FirPropertyAccessTypeArgumentsChecker,
|
||||
FirCustomEnumEntriesMigrationAccessChecker,
|
||||
)
|
||||
|
||||
override val tryExpressionCheckers: Set<FirTryExpressionChecker>
|
||||
@@ -161,6 +162,7 @@ object CommonExpressionCheckers : ExpressionCheckers() {
|
||||
FirDeprecatedQualifierChecker,
|
||||
FirVisibilityQualifierChecker,
|
||||
FirInlineBodyResolvedQualifierChecker,
|
||||
FirCustomEnumEntriesMigrationQualifierChecker,
|
||||
)
|
||||
|
||||
override val equalityOperatorCallCheckers: Set<FirEqualityOperatorCallChecker>
|
||||
@@ -181,5 +183,6 @@ object CommonExpressionCheckers : ExpressionCheckers() {
|
||||
override val callableReferenceAccessCheckers: Set<FirCallableReferenceAccessChecker>
|
||||
get() = setOf(
|
||||
FirTypeArgumentsOfQualifierOfCallableReferenceChecker,
|
||||
FirCustomEnumEntriesMigrationReferenceChecker,
|
||||
)
|
||||
}
|
||||
|
||||
+33
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
+25
@@ -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)
|
||||
}
|
||||
}
|
||||
+26
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<ConeIntegerLiteralType>() == 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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
+18
-5
@@ -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))
|
||||
}
|
||||
|
||||
+2
@@ -142,3 +142,5 @@ object UnsupportedContextualDeclarationCall : ResolutionDiagnostic(INAPPLICABLE)
|
||||
class AmbiguousValuesForContextReceiverParameter(
|
||||
val expectedContextReceiverType: ConeKotlinType,
|
||||
) : ResolutionDiagnostic(INAPPLICABLE)
|
||||
|
||||
object ResolutionResultOverridesOtherToPreserveCompatibility : ResolutionDiagnostic(RESOLVED)
|
||||
|
||||
+6
@@ -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"
|
||||
|
||||
}
|
||||
|
||||
+4
@@ -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<ConeDiagnostic>
|
||||
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<ConeDiagnostic>)
|
||||
|
||||
abstract fun replaceCalleeReference(newCalleeReference: FirNamedReference)
|
||||
|
||||
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
|
||||
|
||||
@@ -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<ConeDiagnostic>
|
||||
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<ConeDiagnostic>)
|
||||
|
||||
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
|
||||
|
||||
abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference)
|
||||
|
||||
@@ -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<ConeDiagnostic>
|
||||
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<ConeDiagnostic>)
|
||||
|
||||
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
|
||||
|
||||
abstract fun replaceCalleeReference(newCalleeReference: FirNamedReference)
|
||||
|
||||
@@ -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<ConeDiagnostic>
|
||||
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<ConeDiagnostic>)
|
||||
|
||||
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
|
||||
|
||||
abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference)
|
||||
|
||||
+4
@@ -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<FirTypeProjection>
|
||||
abstract override val explicitReceiver: FirExpression?
|
||||
abstract override val source: KtSourceElement?
|
||||
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
|
||||
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<ConeDiagnostic>)
|
||||
|
||||
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
|
||||
|
||||
abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference)
|
||||
|
||||
+2
-2
@@ -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<ConeDiagnostic>
|
||||
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, 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<ConeDiagnostic>)
|
||||
abstract override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List<ConeDiagnostic>)
|
||||
|
||||
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression
|
||||
|
||||
|
||||
+4
@@ -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<ConeDiagnostic>
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, 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<ConeDiagnostic>)
|
||||
|
||||
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpression
|
||||
|
||||
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpression
|
||||
|
||||
+4
@@ -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<ConeDiagnostic>
|
||||
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<ConeDiagnostic>)
|
||||
|
||||
abstract fun replaceCalleeReference(newCalleeReference: FirThisReference)
|
||||
|
||||
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
|
||||
|
||||
+2
@@ -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<ConeDiagnostic>
|
||||
abstract override var argumentList: FirArgumentList
|
||||
abstract var calleeReference: FirNamedReference
|
||||
abstract var origin: FirFunctionCallOrigin
|
||||
|
||||
+3
@@ -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<ConeDiagnostic> = mutableListOf()
|
||||
lateinit var calleeReference: FirNamedReference
|
||||
var hasQuestionMarkAtLHS: Boolean = false
|
||||
|
||||
@@ -54,6 +56,7 @@ class FirCallableReferenceAccessBuilder : FirQualifiedAccessExpressionBuilder, F
|
||||
dispatchReceiver,
|
||||
extensionReceiver,
|
||||
source,
|
||||
nonFatalDiagnostics.toMutableOrEmpty(),
|
||||
calleeReference,
|
||||
hasQuestionMarkAtLHS,
|
||||
)
|
||||
|
||||
+3
@@ -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<ConeDiagnostic> = mutableListOf()
|
||||
override var argumentList: FirArgumentList = FirEmptyArgumentList
|
||||
lateinit var explicitReceiver: FirExpression
|
||||
var componentIndex: Int by kotlin.properties.Delegates.notNull<Int>()
|
||||
@@ -58,6 +60,7 @@ class FirComponentCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, F
|
||||
dispatchReceiver,
|
||||
extensionReceiver,
|
||||
source,
|
||||
nonFatalDiagnostics.toMutableOrEmpty(),
|
||||
argumentList,
|
||||
explicitReceiver,
|
||||
componentIndex,
|
||||
|
||||
+3
@@ -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<ConeDiagnostic> = 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,
|
||||
|
||||
+3
@@ -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<ConeDiagnostic> = 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,
|
||||
)
|
||||
|
||||
+3
@@ -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<FirTypeProjection> = mutableListOf()
|
||||
override var explicitReceiver: FirExpression? = null
|
||||
override var source: KtSourceElement? = null
|
||||
override val nonFatalDiagnostics: MutableList<ConeDiagnostic> = 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,
|
||||
|
||||
+1
-1
@@ -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<ConeDiagnostic> = mutableListOf()
|
||||
override val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
|
||||
|
||||
@OptIn(FirImplementationDetail::class)
|
||||
override fun build(): FirPropertyAccessExpression {
|
||||
|
||||
+3
@@ -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<ConeDiagnostic>
|
||||
|
||||
fun build(): FirQualifiedAccessExpression
|
||||
}
|
||||
|
||||
+4
@@ -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<FirExpression> = mutableListOf()
|
||||
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
|
||||
override var source: KtSourceElement? = null
|
||||
override val nonFatalDiagnostics: MutableList<ConeDiagnostic> = 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()
|
||||
|
||||
+6
@@ -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<ConeDiagnostic>,
|
||||
override var calleeReference: FirNamedReference,
|
||||
override var hasQuestionMarkAtLHS: Boolean,
|
||||
) : FirCallableReferenceAccess() {
|
||||
@@ -119,6 +121,10 @@ internal class FirCallableReferenceAccessImpl(
|
||||
source = newSource
|
||||
}
|
||||
|
||||
override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List<ConeDiagnostic>) {
|
||||
nonFatalDiagnostics = newNonFatalDiagnostics.toMutableOrEmpty()
|
||||
}
|
||||
|
||||
override fun replaceCalleeReference(newCalleeReference: FirNamedReference) {
|
||||
calleeReference = newCalleeReference
|
||||
}
|
||||
|
||||
+6
@@ -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<ConeDiagnostic>,
|
||||
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<ConeDiagnostic>) {
|
||||
nonFatalDiagnostics = newNonFatalDiagnostics.toMutableOrEmpty()
|
||||
}
|
||||
|
||||
override fun replaceArgumentList(newArgumentList: FirArgumentList) {
|
||||
argumentList = newArgumentList
|
||||
}
|
||||
|
||||
@@ -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<ConeDiagnostic>,
|
||||
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<ConeDiagnostic>) {
|
||||
nonFatalDiagnostics = newNonFatalDiagnostics.toMutableOrEmpty()
|
||||
}
|
||||
|
||||
override fun replaceArgumentList(newArgumentList: FirArgumentList) {
|
||||
argumentList = newArgumentList
|
||||
}
|
||||
|
||||
+6
@@ -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<ConeDiagnostic>,
|
||||
override var argumentList: FirArgumentList,
|
||||
override var calleeReference: FirNamedReference,
|
||||
) : FirImplicitInvokeCall() {
|
||||
@@ -125,6 +127,10 @@ internal class FirImplicitInvokeCallImpl(
|
||||
source = newSource
|
||||
}
|
||||
|
||||
override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List<ConeDiagnostic>) {
|
||||
nonFatalDiagnostics = newNonFatalDiagnostics.toMutableOrEmpty()
|
||||
}
|
||||
|
||||
override fun replaceArgumentList(newArgumentList: FirArgumentList) {
|
||||
argumentList = newArgumentList
|
||||
}
|
||||
|
||||
+6
@@ -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<FirTypeProjection>,
|
||||
override var explicitReceiver: FirExpression?,
|
||||
override var source: KtSourceElement?,
|
||||
override var nonFatalDiagnostics: MutableOrEmptyList<ConeDiagnostic>,
|
||||
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<ConeDiagnostic>) {
|
||||
nonFatalDiagnostics = newNonFatalDiagnostics.toMutableOrEmpty()
|
||||
}
|
||||
|
||||
override fun replaceArgumentList(newArgumentList: FirArgumentList) {
|
||||
argumentList = newArgumentList
|
||||
}
|
||||
|
||||
+6
@@ -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<FirExpression>,
|
||||
override var typeArguments: MutableOrEmptyList<FirTypeProjection>,
|
||||
override var source: KtSourceElement?,
|
||||
override var nonFatalDiagnostics: MutableOrEmptyList<ConeDiagnostic>,
|
||||
override var calleeReference: FirThisReference,
|
||||
override val isImplicit: Boolean,
|
||||
) : FirThisReceiverExpression() {
|
||||
@@ -121,6 +123,10 @@ internal class FirThisReceiverExpressionImpl(
|
||||
source = newSource
|
||||
}
|
||||
|
||||
override fun replaceNonFatalDiagnostics(newNonFatalDiagnostics: List<ConeDiagnostic>) {
|
||||
nonFatalDiagnostics = newNonFatalDiagnostics.toMutableOrEmpty()
|
||||
}
|
||||
|
||||
override fun replaceCalleeReference(newCalleeReference: FirThisReference) {
|
||||
calleeReference = newCalleeReference
|
||||
}
|
||||
|
||||
-3
@@ -213,9 +213,6 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
+typeArguments.withTransform()
|
||||
+receivers
|
||||
+field("source", sourceElementType, nullable = true, withReplace = true)
|
||||
}
|
||||
|
||||
propertyAccessExpression.configure {
|
||||
+fieldList("nonFatalDiagnostics", coneDiagnosticType, useMutableOrEmpty = true, withReplace = true)
|
||||
}
|
||||
|
||||
|
||||
Vendored
-15
@@ -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
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: -EnumEntries
|
||||
// WITH_STDLIB
|
||||
|
||||
|
||||
Vendored
-16
@@ -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
|
||||
}
|
||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
||||
FILE: conflictingPropertyEntriesAndReferenceOn.fir.kt
|
||||
FILE: conflictingPropertyEntriesAndReferenceOn.kt
|
||||
public final enum class E : R|kotlin/Enum<E>| {
|
||||
private constructor(): R|E| {
|
||||
super<R|kotlin/Enum<E>|>()
|
||||
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries
|
||||
// WITH_STDLIB
|
||||
// FIR_DUMP
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ enum class A {
|
||||
val A.Companion.entries: Int get() = 0
|
||||
|
||||
fun test() {
|
||||
A.entries
|
||||
<!DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY!>A.entries<!>
|
||||
A.Companion.entries
|
||||
|
||||
with(A) {
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ enum class A {
|
||||
val A.Companion.entries: Int get() = 0
|
||||
|
||||
fun test() {
|
||||
A.entries
|
||||
<!DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY!>A.entries<!>
|
||||
A.Companion.entries
|
||||
|
||||
with(A) {
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ enum class A {
|
||||
}
|
||||
|
||||
fun test() {
|
||||
A.entries
|
||||
<!DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY!>A.entries<!>
|
||||
|
||||
with(A) {
|
||||
entries
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ enum class A {
|
||||
}
|
||||
|
||||
fun test() {
|
||||
A.entries
|
||||
<!DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY!>A.entries<!>
|
||||
|
||||
with(A) {
|
||||
entries
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ enum class A {
|
||||
}
|
||||
|
||||
fun test() {
|
||||
A.entries
|
||||
<!DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY!>A.entries<!>
|
||||
A.Companion.entries
|
||||
|
||||
with(A) {
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ enum class A {
|
||||
}
|
||||
|
||||
fun test() {
|
||||
A.entries
|
||||
<!DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY!>A.entries<!>
|
||||
A.Companion.entries
|
||||
|
||||
with(A) {
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ enum class A {
|
||||
}
|
||||
|
||||
fun test() {
|
||||
A.entries
|
||||
<!DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY!>A.entries<!>
|
||||
|
||||
with(A) {
|
||||
entries
|
||||
|
||||
Vendored
+1
-1
@@ -12,7 +12,7 @@ enum class A {
|
||||
}
|
||||
|
||||
fun test() {
|
||||
A.entries
|
||||
<!DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY!>A.entries<!>
|
||||
|
||||
with(A) {
|
||||
entries
|
||||
|
||||
+1
-1
@@ -12,6 +12,6 @@ enum class A {
|
||||
val <T> T.entries: Int get() = 0
|
||||
|
||||
fun test() {
|
||||
A.entries
|
||||
<!DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY!>A.entries<!>
|
||||
A.Companion.entries
|
||||
}
|
||||
|
||||
+1
-1
@@ -13,6 +13,6 @@ enum class A {
|
||||
val <T> T.entries: Int get() = 0
|
||||
|
||||
fun test() {
|
||||
A.entries
|
||||
<!DEPRECATED_ACCESS_TO_ENUM_ENTRY_COMPANION_PROPERTY!>A.entries<!>
|
||||
A.Companion.entries
|
||||
}
|
||||
|
||||
+5
@@ -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|)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
-33
@@ -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
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: -EnumEntries
|
||||
// WITH_STDLIB
|
||||
|
||||
|
||||
-36
@@ -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"
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries
|
||||
// WITH_STDLIB
|
||||
// FIR_DUMP
|
||||
|
||||
Vendored
+2
-2
@@ -9,7 +9,7 @@ enum class E {
|
||||
;
|
||||
|
||||
fun foo() {
|
||||
entries
|
||||
<!DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM!>entries<!>
|
||||
pckg.entries
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ class A {
|
||||
|
||||
class B {
|
||||
fun foo() {
|
||||
entries
|
||||
<!DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM!>entries<!>
|
||||
pckg.entries
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -10,7 +10,7 @@ enum class E {
|
||||
;
|
||||
|
||||
fun foo() {
|
||||
entries.length
|
||||
<!DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM!>entries<!>.length
|
||||
pckg.entries.length
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,7 @@ class A {
|
||||
|
||||
class B {
|
||||
fun foo() {
|
||||
entries.length
|
||||
<!DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM!>entries<!>.length
|
||||
pckg.entries.length
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries
|
||||
// WITH_STDLIB
|
||||
|
||||
enum class Some {}
|
||||
|
||||
val x = Some::entries
|
||||
@@ -0,0 +1,6 @@
|
||||
// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries
|
||||
// WITH_STDLIB
|
||||
|
||||
enum class Some {}
|
||||
|
||||
val x = Some::<!DEPRECATED_ACCESS_TO_ENUM_ENTRY_PROPERTY_AS_REFERENCE!>entries<!>
|
||||
@@ -0,0 +1,46 @@
|
||||
// !LANGUAGE: +EnumEntries -PrioritizedEnumEntries
|
||||
// WITH_STDLIB
|
||||
// ISSUE: KT-56587
|
||||
|
||||
enum class E05 {
|
||||
;
|
||||
object entries
|
||||
}
|
||||
|
||||
fun test05() {
|
||||
println(<!DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM!>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)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
FILE: toBeShadowedPrioritized.kt
|
||||
public final enum class E05 : R|kotlin/Enum<E05>| {
|
||||
private constructor(): R|E05| {
|
||||
super<R|kotlin/Enum<E05>|>()
|
||||
}
|
||||
|
||||
public final object entries : R|kotlin/Any| {
|
||||
private constructor(): R|E05.entries| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public final static fun values(): R|kotlin/Array<E05>| {
|
||||
}
|
||||
|
||||
public final static fun valueOf(value: R|kotlin/String|): R|E05| {
|
||||
}
|
||||
|
||||
public final static val entries: R|kotlin/enums/EnumEntries<E05>|
|
||||
public get(): R|kotlin/enums/EnumEntries<E05>|
|
||||
|
||||
}
|
||||
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<E07>| {
|
||||
private constructor(entries: R|kotlin/String|): R|E07| {
|
||||
super<R|kotlin/Enum<E07>|>()
|
||||
}
|
||||
|
||||
public final val entries: R|kotlin/String| = R|<local>/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<E07>| {
|
||||
}
|
||||
|
||||
public final static fun valueOf(value: R|kotlin/String|): R|E07| {
|
||||
}
|
||||
|
||||
public final static val entries: R|kotlin/enums/EnumEntries<E07>|
|
||||
public get(): R|kotlin/enums/EnumEntries<E07>|
|
||||
|
||||
}
|
||||
public final enum class E071 : R|kotlin/Enum<E071>| {
|
||||
private constructor(entries: R|kotlin/String|): R|E071| {
|
||||
super<R|kotlin/Enum<E071>|>()
|
||||
R|kotlin/io/println|(R|<local>/entries|)
|
||||
}
|
||||
|
||||
public final static fun values(): R|kotlin/Array<E071>| {
|
||||
}
|
||||
|
||||
public final static fun valueOf(value: R|kotlin/String|): R|E071| {
|
||||
}
|
||||
|
||||
public final static val entries: R|kotlin/enums/EnumEntries<E071>|
|
||||
public get(): R|kotlin/enums/EnumEntries<E071>|
|
||||
|
||||
}
|
||||
public final enum class E09 : R|kotlin/Enum<E09>| {
|
||||
private constructor(): R|E09| {
|
||||
super<R|kotlin/Enum<E09>|>()
|
||||
}
|
||||
|
||||
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<E09>| {
|
||||
}
|
||||
|
||||
public final static fun valueOf(value: R|kotlin/String|): R|E09| {
|
||||
}
|
||||
|
||||
public final static val entries: R|kotlin/enums/EnumEntries<E09>|
|
||||
public get(): R|kotlin/enums/EnumEntries<E09>|
|
||||
|
||||
}
|
||||
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<E10>| {
|
||||
private constructor(): R|E10| {
|
||||
super<R|kotlin/Enum<E10>|>()
|
||||
}
|
||||
|
||||
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<E10>| {
|
||||
}
|
||||
|
||||
public final static fun valueOf(value: R|kotlin/String|): R|E10| {
|
||||
}
|
||||
|
||||
public final static val entries: R|kotlin/enums/EnumEntries<E10>|
|
||||
public get(): R|kotlin/enums/EnumEntries<E10>|
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
Generated
+24
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user