diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java index c641bdb1636..c7fca35ba93 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java @@ -56,6 +56,7 @@ import org.jetbrains.kotlin.util.ReenteringLazyValueComputationException; import java.util.*; +import static org.jetbrains.kotlin.config.LanguageFeature.FreedomForSealedClasses; import static org.jetbrains.kotlin.config.LanguageFeature.TopLevelSealedInheritance; import static org.jetbrains.kotlin.diagnostics.Errors.*; import static org.jetbrains.kotlin.resolve.BindingContext.*; @@ -635,7 +636,12 @@ public class BodyResolver { containingDescriptor = containingDescriptor.getContainingDeclaration(); } if (containingDescriptor == null) { - trace.report(SEALED_SUPERTYPE.on(typeReference)); + if ( + !languageVersionSettings.supportsFeature(FreedomForSealedClasses) || + DescriptorUtils.isLocal(supertypeOwner) + ) { + trace.report(SEALED_SUPERTYPE.on(typeReference)); + } } else { trace.report(SEALED_SUPERTYPE_IN_LOCAL_CLASS.on(typeReference)); diff --git a/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.fir.kt b/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.fir.kt index 062325d1383..a490bda54c5 100644 --- a/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.fir.kt +++ b/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.fir.kt @@ -18,6 +18,12 @@ class Container { class C : Base() inner class D : Base() + + val anon = object : Base() {} // Should be an error + + fun someFun() { + class LocalClass : Base() {} // Should be an error + } } // FILE: d.kt @@ -26,5 +32,7 @@ fun test(base: Base) { val x = when (base) { is Base.A -> 1 is B -> 2 + is Container.C -> 3 + is Container.D -> 4 } } diff --git a/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.kt b/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.kt index 76ee023fea1..267ac83315a 100644 --- a/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.kt +++ b/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.kt @@ -15,9 +15,15 @@ class B : Base() // FILE: c.kt class Container { - class C : Base() + class C : Base() - inner class D : Base() + inner class D : Base() + + val anon = object : Base() {} // Should be an error + + fun someFun() { + class LocalClass : Base() {} // Should be an error + } } // FILE: d.kt @@ -26,5 +32,7 @@ fun test(base: Base) { val x = when (base) { is Base.A -> 1 is B -> 2 + is Container.C -> 3 + is Container.D -> 4 } } diff --git a/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.txt b/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.txt index c03f125ae7a..0a71f3f94b6 100644 --- a/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.txt +++ b/compiler/testData/diagnostics/tests/sealed/MultipleFiles_enabled.txt @@ -25,8 +25,10 @@ public sealed class Base { public final class Container { public constructor Container() + public final val anon: 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 : Base {