From 06ee84f809f59f7c9d518d2b31ae7cb35595dd2f Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Mon, 19 Jul 2021 15:13:39 -0700 Subject: [PATCH] FIR checker: report AMBIGUOUS_SUPER --- .../testData/resolve/incorrectSuperCall.kt | 2 +- .../generator/diagnostics/FirDiagnosticsList.kt | 1 + .../kotlin/fir/analysis/diagnostics/FirErrors.kt | 2 ++ .../ErrorNodeDiagnosticCollectorComponent.kt | 5 ++++- .../diagnostics/FirDefaultErrorMessages.kt | 2 ++ .../diagnostics/coneDiagnosticToFirDiagnostic.kt | 1 + .../resolve/FirExpressionsResolveTransformer.kt | 16 +++++++++------- .../fir/diagnostics/ConeSimpleDiagnostic.kt | 1 + .../tests/enum/kt8972_cloneNotAllowed.fir.kt | 2 +- .../ambiguousSuperWithGenerics.fir.kt | 10 +++++----- .../unqualifiedSuper/unqualifiedSuper.fir.kt | 4 ++-- .../unqualifiedSuperWithAbstractMembers.fir.kt | 2 +- .../unqualifiedSuperWithCallableProperty.fir.kt | 2 +- .../unqualifiedSuperWithInnerClass.kt | 2 +- .../unqualifiedSuperWithInterfaces.fir.kt | 4 ++-- .../unqualifiedSuperWithUnresolvedBase.fir.kt | 4 ++-- .../annotations/jvmDefault/superCall.fir.kt | 6 +++--- .../fir/diagnostics/KtFirDataClassConverters.kt | 7 +++++++ .../api/fir/diagnostics/KtFirDiagnostics.kt | 5 +++++ .../api/fir/diagnostics/KtFirDiagnosticsImpl.kt | 8 ++++++++ 20 files changed, 59 insertions(+), 27 deletions(-) diff --git a/compiler/fir/analysis-tests/testData/resolve/incorrectSuperCall.kt b/compiler/fir/analysis-tests/testData/resolve/incorrectSuperCall.kt index 246394e5511..0e9c05726da 100644 --- a/compiler/fir/analysis-tests/testData/resolve/incorrectSuperCall.kt +++ b/compiler/fir/analysis-tests/testData/resolve/incorrectSuperCall.kt @@ -15,7 +15,7 @@ open class B { override fun foo() { super.foo() - super.bar() // should be ambiguity (NB: really we should have overridden bar in C) + super.bar() // should be ambiguity (NB: really we should have overridden bar in C) super.baz() // Ok baz() // Ok 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 a4302a09992..24ef38180fd 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 @@ -178,6 +178,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { parameter("type") parameter>("bounds") } + val AMBIGUOUS_SUPER by error() } val CONSTRUCTOR_PROBLEMS by object : DiagnosticGroup("Constructor problems") { 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 9a4a7ec961b..81bc9d0387b 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 @@ -71,6 +71,7 @@ import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtPropertyAccessor import org.jetbrains.kotlin.psi.KtReturnExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression +import org.jetbrains.kotlin.psi.KtSuperExpression import org.jetbrains.kotlin.psi.KtTypeAlias import org.jetbrains.kotlin.psi.KtTypeParameter import org.jetbrains.kotlin.psi.KtTypeProjection @@ -172,6 +173,7 @@ object FirErrors { val PROJECTION_IN_IMMEDIATE_ARGUMENT_TO_SUPERTYPE by error0(SourceElementPositioningStrategies.VARIANCE_MODIFIER) val INCONSISTENT_TYPE_PARAMETER_VALUES by error3>(SourceElementPositioningStrategies.SUPERTYPES_LIST) val INCONSISTENT_TYPE_PARAMETER_BOUNDS by error3>() + val AMBIGUOUS_SUPER by error0() // Constructor problems val CONSTRUCTOR_IN_OBJECT by error0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt index 4f275e8bc38..3d81dfacad9 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt @@ -79,7 +79,10 @@ class ErrorNodeDiagnosticCollectorComponent( private fun FirExpression?.cannotBeResolved(): Boolean { return when (val diagnostic = (this?.typeRef as? FirErrorTypeRef)?.diagnostic) { is ConeUnresolvedNameError, is ConeInstanceAccessBeforeSuperCall -> true - is ConeSimpleDiagnostic -> diagnostic.kind == DiagnosticKind.NotASupertype || diagnostic.kind == DiagnosticKind.SuperNotAvailable || diagnostic.kind == DiagnosticKind.UnresolvedLabel + is ConeSimpleDiagnostic -> diagnostic.kind == DiagnosticKind.NotASupertype || + diagnostic.kind == DiagnosticKind.SuperNotAvailable || + diagnostic.kind == DiagnosticKind.UnresolvedLabel || + diagnostic.kind == DiagnosticKind.AmbiguousSuper else -> false } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt index 570611d7848..0c35f8a1f3f 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt @@ -51,6 +51,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ACTUAL_TYPE_ALIAS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ACTUAL_WITHOUT_EXPECT import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.AMBIGUOUS_ACTUALS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.AMBIGUOUS_EXPECTS +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.AMBIGUOUS_SUPER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ANNOTATION_ARGUMENT_MUST_BE_CONST import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ANNOTATION_CLASS_CONSTRUCTOR_CALL import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ANNOTATION_CLASS_MEMBER @@ -582,6 +583,7 @@ class FirDefaultErrorMessages { SYMBOL, RENDER_COLLECTION_OF_TYPES ) + map.put(AMBIGUOUS_SUPER, "Many supertypes available, please specify the one you mean in angle brackets, e.g. 'super'") // Constructor problems map.put(CONSTRUCTOR_IN_OBJECT, "Constructors are not allowed for objects") diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt index 38ad6b93322..d372f1780d5 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt @@ -372,6 +372,7 @@ private fun ConeSimpleDiagnostic.getFactory(source: FirSourceElement): FirDiagno DiagnosticKind.EnumEntryAsType -> FirErrors.ENUM_ENTRY_AS_TYPE DiagnosticKind.NotASupertype -> FirErrors.NOT_A_SUPERTYPE DiagnosticKind.SuperNotAvailable -> FirErrors.SUPER_NOT_AVAILABLE + DiagnosticKind.AmbiguousSuper -> FirErrors.AMBIGUOUS_SUPER DiagnosticKind.UnresolvedSupertype, DiagnosticKind.UnresolvedExpandedType, DiagnosticKind.Other -> FirErrors.OTHER_ERROR diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 591602afbc6..45fdfbce6ac 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -236,17 +236,19 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform } else -> { val types = components.findTypesForSuperCandidates(superTypeRefs, containingCall) - val resultType = if (types.size == 1) { - // NB: NOT_A_SUPERTYPE is reported by a separate checker - buildResolvedTypeRef { + val resultType = when (types.size) { + 0 -> buildErrorTypeRef { + source = superReferenceContainer.source + // Report stub error so that it won't surface up. Instead, errors on the callee would be reported. + diagnostic = ConeStubDiagnostic(ConeSimpleDiagnostic("Unresolved super method", DiagnosticKind.Other)) + } + 1 -> buildResolvedTypeRef { source = superReferenceContainer.source?.fakeElement(FirFakeSourceElementKind.SuperCallImplicitType) type = types.single() } - } else { - buildErrorTypeRef { + else -> buildErrorTypeRef { source = superReferenceContainer.source - // NB: NOT_A_SUPERTYPE is reported by a separate checker - diagnostic = ConeStubDiagnostic(ConeSimpleDiagnostic("Ambiguous supertype", DiagnosticKind.Other)) + diagnostic = ConeSimpleDiagnostic("Ambiguous supertype", DiagnosticKind.AmbiguousSuper) } } superReferenceContainer.resultType = diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/diagnostics/ConeSimpleDiagnostic.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/diagnostics/ConeSimpleDiagnostic.kt index 85f6b0c1520..0156ee8cb60 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/diagnostics/ConeSimpleDiagnostic.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/diagnostics/ConeSimpleDiagnostic.kt @@ -48,6 +48,7 @@ enum class DiagnosticKind { MissingStdlibClass, NotASupertype, SuperNotAvailable, + AmbiguousSuper, LoopInSupertype, RecursiveTypealiasExpansion, diff --git a/compiler/testData/diagnostics/tests/enum/kt8972_cloneNotAllowed.fir.kt b/compiler/testData/diagnostics/tests/enum/kt8972_cloneNotAllowed.fir.kt index 1fb7f27f8c6..483d1c4a69e 100644 --- a/compiler/testData/diagnostics/tests/enum/kt8972_cloneNotAllowed.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/kt8972_cloneNotAllowed.fir.kt @@ -1,6 +1,6 @@ enum class E : Cloneable { A; override fun clone(): Any { - return super.clone() + return super.clone() } } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/ambiguousSuperWithGenerics.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/ambiguousSuperWithGenerics.fir.kt index 1cf25b6a047..4557a2b8555 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/ambiguousSuperWithGenerics.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/ambiguousSuperWithGenerics.fir.kt @@ -13,7 +13,7 @@ class GenericDerivedClass : GenericBaseClass(), GenericBaseInterface { override fun bar(x: T): T = super.bar(x) override fun ambiguous(x: T): T = - super.ambiguous(x) + super.ambiguous(x) } class SpecializedDerivedClass : GenericBaseClass(), GenericBaseInterface { @@ -21,9 +21,9 @@ class SpecializedDerivedClass : GenericBaseClass(), GenericBaseInterfaceambiguous(x) + super.ambiguous(x) override fun ambiguous(x: Int): Int = - super.ambiguous(x) + super.ambiguous(x) } class MixedDerivedClass : GenericBaseClass(), GenericBaseInterface { @@ -31,7 +31,7 @@ class MixedDerivedClass : GenericBaseClass(), GenericBaseInterface { override fun bar(x: T): T = super.bar(x) override fun ambiguous(x: Int): Int = - super.ambiguous(x) + super.ambiguous(x) override fun ambiguous(x: T): T = - super.ambiguous(x) + super.ambiguous(x) } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuper.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuper.fir.kt index c313f2bce4f..5f7f7daddfd 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuper.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuper.fir.kt @@ -45,13 +45,13 @@ class Derived : Base(), Interface { super.prop fun getAmbiguousSuperProp(): Int = - super.ambiguousProp + super.ambiguousProp fun callsFunFromSuperInterface() { super.bar() } fun callsAmbiguousSuperFun() { - super.ambiguous() + super.ambiguous() } } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithAbstractMembers.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithAbstractMembers.fir.kt index 71ac4fc5214..e29940041b6 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithAbstractMembers.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithAbstractMembers.fir.kt @@ -34,6 +34,6 @@ class B : A(), I { } override fun qux() { - super.qux() + super.qux() } } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithCallableProperty.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithCallableProperty.fir.kt index a66da2b01ac..3c557db9cb1 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithCallableProperty.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithCallableProperty.fir.kt @@ -13,7 +13,7 @@ interface InterfaceWithFun { class DerivedUsingFun : BaseWithCallableProp(), InterfaceWithFun { fun foo(): String = - super.fn() + super.fn() override fun bar(): String = super.bar() diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInnerClass.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInnerClass.kt index 943e875afc6..77dc5820d5d 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInnerClass.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInnerClass.kt @@ -31,4 +31,4 @@ class C : A(), B { super@D.qux() } } -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInterfaces.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInterfaces.fir.kt index 1161008ac0f..71796dac01c 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInterfaces.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInterfaces.fir.kt @@ -20,9 +20,9 @@ interface AnotherInterface { interface DerivedInterface: Interface, AnotherInterface { override fun foo() { super.foo() } override fun ambiguous() { - super.ambiguous() + super.ambiguous() } override val ambiguousProp: Int - get() = super.ambiguousProp + get() = super.ambiguousProp } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithUnresolvedBase.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithUnresolvedBase.fir.kt index 616f92cc092..5267ee8c6db 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithUnresolvedBase.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithUnresolvedBase.fir.kt @@ -41,13 +41,13 @@ class ClassDerivedFromUnresolved : Base(), Interface, Un super.prop fun getAmbiguousSuperProp(): Int = - super.ambiguousProp + super.ambiguousProp fun callsFunFromSuperInterface() { super.bar() } fun callsAmbiguousSuperFun() { - super.ambiguous() + super.ambiguous() } } diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.fir.kt index c4ff52717ea..cccd5e782bb 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.fir.kt @@ -41,7 +41,7 @@ class ManySupers: Foo2(), B { fun foo() { super.test() super<B>.test() - super.test() + super.test() } } @@ -49,7 +49,7 @@ class ManySupers2: Foo2(), C { fun foo() { super.test() super.test() - super.test() + super.test() } } @@ -57,6 +57,6 @@ class ManySupers2: Foo2(), C { fun foo() { super.test() super.test() - super.test() + super.test() } } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt index 5a80db35f21..bf71dbf2d0f 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -51,6 +51,7 @@ import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtPropertyAccessor import org.jetbrains.kotlin.psi.KtReturnExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression +import org.jetbrains.kotlin.psi.KtSuperExpression import org.jetbrains.kotlin.psi.KtTypeAlias import org.jetbrains.kotlin.psi.KtTypeParameter import org.jetbrains.kotlin.psi.KtTypeProjection @@ -515,6 +516,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.AMBIGUOUS_SUPER) { firDiagnostic -> + AmbiguousSuperImpl( + firDiagnostic as FirPsiDiagnostic, + token, + ) + } add(FirErrors.CONSTRUCTOR_IN_OBJECT) { firDiagnostic -> ConstructorInObjectImpl( firDiagnostic as FirPsiDiagnostic, diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt index 9a02f3aa921..3cc11438c94 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt @@ -59,6 +59,7 @@ import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtPropertyAccessor import org.jetbrains.kotlin.psi.KtReturnExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression +import org.jetbrains.kotlin.psi.KtSuperExpression import org.jetbrains.kotlin.psi.KtTypeAlias import org.jetbrains.kotlin.psi.KtTypeParameter import org.jetbrains.kotlin.psi.KtTypeProjection @@ -384,6 +385,10 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { abstract val bounds: List } + abstract class AmbiguousSuper : KtFirDiagnostic() { + override val diagnosticClass get() = AmbiguousSuper::class + } + abstract class ConstructorInObject : KtFirDiagnostic() { override val diagnosticClass get() = ConstructorInObject::class } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 96a235207c4..5fbb65fd5a1 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -61,6 +61,7 @@ import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtPropertyAccessor import org.jetbrains.kotlin.psi.KtReturnExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression +import org.jetbrains.kotlin.psi.KtSuperExpression import org.jetbrains.kotlin.psi.KtTypeAlias import org.jetbrains.kotlin.psi.KtTypeParameter import org.jetbrains.kotlin.psi.KtTypeProjection @@ -592,6 +593,13 @@ internal class InconsistentTypeParameterBoundsImpl( override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic) } +internal class AmbiguousSuperImpl( + firDiagnostic: FirPsiDiagnostic, + override val token: ValidityToken, +) : KtFirDiagnostic.AmbiguousSuper(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic) +} + internal class ConstructorInObjectImpl( firDiagnostic: FirPsiDiagnostic, override val token: ValidityToken,