diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirSealedSupertypeChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirSealedSupertypeChecker.kt index 9125e47de3a..7cf92d088a5 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirSealedSupertypeChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirSealedSupertypeChecker.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.fullyExpandedClassId import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin @@ -35,7 +36,7 @@ object FirSealedSupertypeChecker : FirClassChecker() { private fun checkGlobalDeclaration(declaration: FirClass, context: CheckerContext, reporter: DiagnosticReporter) { val subclassPackage = declaration.classId.packageFqName for (superTypeRef in declaration.superTypeRefs) { - val superClassId = superTypeRef.coneType.classId ?: continue + val superClassId = superTypeRef.coneType.fullyExpandedClassId(context.session) ?: continue if (superClassId.isLocal) { continue @@ -60,7 +61,7 @@ object FirSealedSupertypeChecker : FirClassChecker() { private fun checkLocalDeclaration(declaration: FirClass, context: CheckerContext, reporter: DiagnosticReporter) { for (it in declaration.superTypeRefs) { - val classId = it.coneType.classId ?: continue + val classId = it.coneType.fullyExpandedClassId(context.session) ?: continue if (classId.isLocal) { continue diff --git a/compiler/testData/diagnostics/tests/sealed/Local.kt b/compiler/testData/diagnostics/tests/sealed/Local.kt index 5d73b2d18c7..644b0ac5404 100644 --- a/compiler/testData/diagnostics/tests/sealed/Local.kt +++ b/compiler/testData/diagnostics/tests/sealed/Local.kt @@ -1,4 +1,6 @@ // FIR_IDENTICAL +typealias TA = Sealed + sealed class Sealed { object First: Sealed() open class NonFirst: Sealed() { @@ -6,6 +8,7 @@ sealed class Sealed { object Third: NonFirst() fun foo(): Int { val s = object: Sealed() {} + val s2 = object: TA() {} class Local: Sealed() {} return s.hashCode() } diff --git a/compiler/testData/diagnostics/tests/sealed/Local.txt b/compiler/testData/diagnostics/tests/sealed/Local.txt deleted file mode 100644 index cf186acae6f..00000000000 --- a/compiler/testData/diagnostics/tests/sealed/Local.txt +++ /dev/null @@ -1,45 +0,0 @@ -package - -public sealed class Sealed { - protected constructor Sealed() - public final val p: Sealed - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - - public object First : Sealed { - private constructor First() - public final override /*1*/ /*fake_override*/ val p: Sealed - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - } - - public open class NonFirst : Sealed { - public constructor NonFirst() - public final override /*1*/ /*fake_override*/ val p: Sealed - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public final fun foo(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - - public object Second : Sealed.NonFirst { - private constructor Second() - public final override /*1*/ /*fake_override*/ val p: Sealed - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public final override /*1*/ /*fake_override*/ fun foo(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - } - - public object Third : Sealed.NonFirst { - private constructor Third() - public final override /*1*/ /*fake_override*/ val p: Sealed - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public final override /*1*/ /*fake_override*/ fun foo(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - } - } -} - diff --git a/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.fir.kt b/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.fir.kt index c3a92539fca..2587c29584f 100644 --- a/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.fir.kt +++ b/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.fir.kt @@ -37,4 +37,7 @@ package bar import foo.Base +typealias TA = Base + class E : Base() +class E2 : TA() diff --git a/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.kt b/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.kt index 005d87ff9f2..378836ad660 100644 --- a/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.kt +++ b/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.kt @@ -37,4 +37,7 @@ package bar import foo.Base +typealias TA = Base + class E : Base() +class E2 : TA() diff --git a/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.txt b/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.txt deleted file mode 100644 index 08d57bd8c1f..00000000000 --- a/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.txt +++ /dev/null @@ -1,58 +0,0 @@ -package - -package bar { - - public final class E : foo.Base { - public constructor E() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - } -} - -package foo { - - public final class B : foo.Base { - public constructor B() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - } - - public sealed class Base { - protected constructor Base() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - - public final class A : foo.Base { - public constructor A() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - } - } - - public final class Container { - public constructor Container() - public final val anon: foo.Base - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public final fun someFun(): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - - public final class C : foo.Base { - public constructor C() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - } - - public final inner class D : foo.Base { - public constructor D() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - } - } -}