diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 930d31ef47d..21e166de58c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -930,8 +930,8 @@ public interface Errors { DiagnosticFactory2 NESTED_CLASS_SHOULD_BE_QUALIFIED = DiagnosticFactory2.create(ERROR); DiagnosticFactory1 INACCESSIBLE_OUTER_CLASS_EXPRESSION = DiagnosticFactory1.create(ERROR); - DiagnosticFactory0 NESTED_CLASS_NOT_ALLOWED = DiagnosticFactory0.create(ERROR, DECLARATION_NAME); - DiagnosticFactory0 NESTED_OBJECT_NOT_ALLOWED = DiagnosticFactory0.create(ERROR, DECLARATION_NAME); + DiagnosticFactory1 NESTED_CLASS_NOT_ALLOWED = DiagnosticFactory1.create(ERROR, DECLARATION_NAME); + DiagnosticFactory1 NESTED_CLASS_NOT_ALLOWED_SINCE_1_3 = DiagnosticFactory1.create(WARNING, DECLARATION_NAME); //Inline and inlinable parameters DiagnosticFactory2 NON_PUBLIC_CALL_FROM_PUBLIC_INLINE = DiagnosticFactory2.create(ERROR, CALL_ELEMENT); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index 84ad5adb401..198a76fc6d4 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -423,8 +423,8 @@ public class DefaultErrorMessages { MAP.put(NESTED_CLASS_SHOULD_BE_QUALIFIED, "Nested {0} should be qualified as ''{1}''", RENDER_CLASS_OR_OBJECT_NAME, TO_STRING); MAP.put(INACCESSIBLE_OUTER_CLASS_EXPRESSION, "Expression is inaccessible from a nested class ''{0}''", NAME); - MAP.put(NESTED_CLASS_NOT_ALLOWED, "Nested class is not allowed here, use 'inner' keyword to make the class inner"); - MAP.put(NESTED_OBJECT_NOT_ALLOWED, "Objects inside inner classes are prohibited"); + MAP.put(NESTED_CLASS_NOT_ALLOWED, "{0} is not allowed here", STRING); + MAP.put(NESTED_CLASS_NOT_ALLOWED_SINCE_1_3, "{0} will not be allowed here in Kotlin 1.3 and later, please migrate your code", STRING); MAP.put(HAS_NEXT_MISSING, "hasNext() cannot be called on iterator() of type ''{0}''", RENDER_TYPE); MAP.put(HAS_NEXT_FUNCTION_AMBIGUITY, "hasNext() is ambiguous for iterator() of type ''{0}''", RENDER_TYPE); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.java index 35d7848f4e5..86e92330fbf 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.java @@ -40,12 +40,33 @@ import static org.jetbrains.kotlin.diagnostics.Errors.*; import static org.jetbrains.kotlin.lexer.KtTokens.*; public class ModifiersChecker { - private static boolean isIllegalNestedClass(@NotNull DeclarationDescriptor descriptor) { - if (!(descriptor instanceof ClassDescriptor)) return false; - DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration(); - if (!(containingDeclaration instanceof ClassDescriptor)) return false; - ClassDescriptor containingClass = (ClassDescriptor) containingDeclaration; - return containingClass.isInner() || DescriptorUtils.isLocal(containingClass); + private enum DetailedClassKind { + ENUM_CLASS("Enum class"), + ENUM_ENTRY("Enum entry"), + ANNOTATION_CLASS("Annotation class"), + INTERFACE("Interface"), + COMPANION_OBJECT("Companion object"), + ANONYMOUS_OBJECT("Anonymous object"), + OBJECT("Object"), + CLASS("Class"); + + public final String withCapitalFirstLetter; + + DetailedClassKind(String withCapitalFirstLetter) { + this.withCapitalFirstLetter = withCapitalFirstLetter; + } + + @NotNull + public static DetailedClassKind getClassKind(@NotNull ClassDescriptor descriptor) { + if (DescriptorUtils.isEnumEntry(descriptor)) return ENUM_ENTRY; + if (DescriptorUtils.isEnumClass(descriptor)) return ENUM_CLASS; + if (DescriptorUtils.isAnnotationClass(descriptor)) return ANNOTATION_CLASS; + if (DescriptorUtils.isInterface(descriptor)) return INTERFACE; + if (DescriptorUtils.isCompanionObject(descriptor)) return COMPANION_OBJECT; + if (DescriptorUtils.isAnonymousObject(descriptor)) return ANONYMOUS_OBJECT; + if (DescriptorUtils.isObject(descriptor)) return OBJECT; + return CLASS; + } } @NotNull @@ -157,18 +178,32 @@ public class ModifiersChecker { public void checkModifiersForDeclaration(@NotNull KtDeclaration modifierListOwner, @NotNull MemberDescriptor descriptor) { checkNestedClassAllowed(modifierListOwner, descriptor); - checkObjectInsideInnerClass(modifierListOwner, descriptor); checkTypeParametersModifiers(modifierListOwner); checkModifierListCommon(modifierListOwner, descriptor); checkIllegalHeader(modifierListOwner, descriptor); } - private void checkObjectInsideInnerClass(@NotNull KtDeclaration modifierListOwner, @NotNull MemberDescriptor descriptor) { - if (modifierListOwner instanceof KtObjectDeclaration) { - KtObjectDeclaration ktObject = (KtObjectDeclaration) modifierListOwner; - if (!ktObject.isLocal() && isIllegalNestedClass(descriptor)) { - trace.report(NESTED_OBJECT_NOT_ALLOWED.on(ktObject)); - } + private void checkNestedClassAllowed(@NotNull KtDeclaration declaration, @NotNull DeclarationDescriptor descriptor) { + if (!(declaration instanceof KtClassOrObject)) return; + KtClassOrObject ktClassOrObject = (KtClassOrObject) declaration; + if (!(descriptor instanceof ClassDescriptor)) return; + ClassDescriptor classDescriptor = (ClassDescriptor) descriptor; + DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration(); + if (!(containingDeclaration instanceof ClassDescriptor)) return; + ClassDescriptor containingClass = (ClassDescriptor) containingDeclaration; + + DetailedClassKind kind = DetailedClassKind.getClassKind(classDescriptor); + + if (kind == DetailedClassKind.ANONYMOUS_OBJECT || kind == DetailedClassKind.ENUM_ENTRY) return; + + // Local enums / objects / companion objects are handled in different checks + if ((kind == DetailedClassKind.ENUM_CLASS || kind == DetailedClassKind.OBJECT || kind == DetailedClassKind.COMPANION_OBJECT) && + DescriptorUtils.isLocal(classDescriptor)) { + return; + } + + if (!classDescriptor.isInner() && (containingClass.isInner() || DescriptorUtils.isLocal(containingClass))) { + trace.report(NESTED_CLASS_NOT_ALLOWED.on(ktClassOrObject, kind.withCapitalFirstLetter)); } } @@ -206,17 +241,6 @@ public class ModifiersChecker { } } - private void checkNestedClassAllowed(@NotNull KtModifierListOwner modifierListOwner, @NotNull DeclarationDescriptor descriptor) { - if (modifierListOwner.hasModifier(INNER_KEYWORD)) return; - if (modifierListOwner instanceof KtClass && !(modifierListOwner instanceof KtEnumEntry)) { - KtClass aClass = (KtClass) modifierListOwner; - boolean localEnumError = aClass.isLocal() && aClass.isEnum(); - if (!localEnumError && isIllegalNestedClass(descriptor)) { - trace.report(NESTED_CLASS_NOT_ALLOWED.on(aClass)); - } - } - } - @NotNull public Map getTokensCorrespondingToModifiers( @NotNull KtModifierList modifierList, diff --git a/compiler/testData/diagnostics/tests/classObjects/InnerClassClassObject.kt b/compiler/testData/diagnostics/tests/classObjects/InnerClassClassObject.kt index b0e1a24241b..8e0f36dd2b1 100644 --- a/compiler/testData/diagnostics/tests/classObjects/InnerClassClassObject.kt +++ b/compiler/testData/diagnostics/tests/classObjects/InnerClassClassObject.kt @@ -2,7 +2,7 @@ class A { inner class B { - companion object { } + companion object { } } } diff --git a/compiler/testData/diagnostics/tests/classObjects/multipleDissallowedDefaultObjects.kt b/compiler/testData/diagnostics/tests/classObjects/multipleDissallowedDefaultObjects.kt index 8742af35623..b7eb5bb8e6c 100644 --- a/compiler/testData/diagnostics/tests/classObjects/multipleDissallowedDefaultObjects.kt +++ b/compiler/testData/diagnostics/tests/classObjects/multipleDissallowedDefaultObjects.kt @@ -1,10 +1,10 @@ class A { inner class I { - companion object A + companion object A - companion object B + companion object B - companion object C + companion object C } } diff --git a/compiler/testData/diagnostics/tests/inner/annotationInInnerClass.kt b/compiler/testData/diagnostics/tests/inner/annotationInInnerClass.kt new file mode 100644 index 00000000000..a2203c7d271 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inner/annotationInInnerClass.kt @@ -0,0 +1,5 @@ +class Outer { + inner class Inner { + annotation class TestNestedAnnotation + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inner/annotationInInnerClass.txt b/compiler/testData/diagnostics/tests/inner/annotationInInnerClass.txt new file mode 100644 index 00000000000..38ffd2c4ac0 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inner/annotationInInnerClass.txt @@ -0,0 +1,22 @@ +package + +public final class Outer { + public constructor Outer() + 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 Inner { + public constructor Inner() + 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 annotation class TestNestedAnnotation : kotlin.Annotation { + public constructor TestNestedAnnotation() + 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 + } + } +} diff --git a/compiler/testData/diagnostics/tests/inner/enumInInnerClass.kt b/compiler/testData/diagnostics/tests/inner/enumInInnerClass.kt new file mode 100644 index 00000000000..3990e448e7c --- /dev/null +++ b/compiler/testData/diagnostics/tests/inner/enumInInnerClass.kt @@ -0,0 +1,5 @@ +class Outer { + inner class Inner { + enum class TestNestedEnum + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inner/enumInInnerClass.txt b/compiler/testData/diagnostics/tests/inner/enumInInnerClass.txt new file mode 100644 index 00000000000..3f4ed7570d3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inner/enumInInnerClass.txt @@ -0,0 +1,32 @@ +package + +public final class Outer { + public constructor Outer() + 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 Inner { + public constructor Inner() + 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 enum class TestNestedEnum : kotlin.Enum { + private constructor TestNestedEnum() + public final override /*1*/ /*fake_override*/ val name: kotlin.String + public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int + protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any + public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: Outer.Inner.TestNestedEnum): kotlin.Int + public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + protected/*protected and package*/ final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun finalize(): kotlin.Unit + public final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class! + public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): Outer.Inner.TestNestedEnum + public final /*synthesized*/ fun values(): kotlin.Array + } + } +} diff --git a/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv11.kt b/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv11.kt new file mode 100644 index 00000000000..ee2c69e7c12 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv11.kt @@ -0,0 +1,19 @@ +// LANGUAGE_VERSION: 1.1 + +enum class Enum { + ENTRY_WITH_CLASS { + inner class TestInner + + class TestNested + + interface TestInterface + + object TestObject + + enum class TestEnumClass { + OTHER_ENTRY + } + + companion object {} + } +} diff --git a/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv11.txt b/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv11.txt new file mode 100644 index 00000000000..e357e6ce0df --- /dev/null +++ b/compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv11.txt @@ -0,0 +1,20 @@ +package + +public final enum class Enum : kotlin.Enum { + enum entry ENTRY_WITH_CLASS + + private constructor Enum() + public final override /*1*/ /*fake_override*/ val name: kotlin.String + public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int + protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any + public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: Enum): kotlin.Int + public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + protected/*protected and package*/ final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun finalize(): kotlin.Unit + public final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class! + public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): Enum + public final /*synthesized*/ fun values(): kotlin.Array +} diff --git a/compiler/testData/diagnostics/tests/inner/interfaceInInnerClass.kt b/compiler/testData/diagnostics/tests/inner/interfaceInInnerClass.kt new file mode 100644 index 00000000000..f52d0ff291d --- /dev/null +++ b/compiler/testData/diagnostics/tests/inner/interfaceInInnerClass.kt @@ -0,0 +1,5 @@ +class Outer { + inner class Inner { + interface TestNestedInterface + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inner/interfaceInInnerClass.txt b/compiler/testData/diagnostics/tests/inner/interfaceInInnerClass.txt new file mode 100644 index 00000000000..18228d38bd1 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inner/interfaceInInnerClass.txt @@ -0,0 +1,21 @@ +package + +public final class Outer { + public constructor Outer() + 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 Inner { + public constructor Inner() + 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 interface TestNestedInterface { + 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 + } + } +} diff --git a/compiler/testData/diagnostics/tests/inner/nestedObject.kt b/compiler/testData/diagnostics/tests/inner/nestedObject.kt index 65c5ffc9941..3ec29ae64bb 100644 --- a/compiler/testData/diagnostics/tests/inner/nestedObject.kt +++ b/compiler/testData/diagnostics/tests/inner/nestedObject.kt @@ -1,12 +1,12 @@ // SKIP_TXT class Outer { inner class Inner1 { - object Obj1 + object Obj1 - companion object Obj2 + companion object Obj2 inner class Inner2 { - object Obj3 + object Obj3 } } } diff --git a/compiler/testData/diagnostics/tests/modifiers/const/applicability.kt b/compiler/testData/diagnostics/tests/modifiers/const/applicability.kt index d343f2ea051..af3ab9cfbed 100644 --- a/compiler/testData/diagnostics/tests/modifiers/const/applicability.kt +++ b/compiler/testData/diagnostics/tests/modifiers/const/applicability.kt @@ -61,7 +61,7 @@ enum class MyEnum { class Outer { inner class Inner { - object C { + object C { const val a = 18 } } diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index cd6c1ed59ba..9c6d2b1ffd0 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -11806,6 +11806,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/inner"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("annotationInInnerClass.kt") + public void testAnnotationInInnerClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/annotationInInnerClass.kt"); + doTest(fileName); + } + @TestMetadata("classesInClassObjectHeader.kt") public void testClassesInClassObjectHeader() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/classesInClassObjectHeader.kt"); @@ -11830,6 +11836,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("enumInInnerClass.kt") + public void testEnumInInnerClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/enumInInnerClass.kt"); + doTest(fileName); + } + @TestMetadata("extensionFun.kt") public void testExtensionFun() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/extensionFun.kt"); @@ -11848,6 +11860,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("innerClassInEnumEntryClass_lv11.kt") + public void testInnerClassInEnumEntryClass_lv11() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv11.kt"); + doTest(fileName); + } + @TestMetadata("InnerClassNameClash.kt") public void testInnerClassNameClash() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/InnerClassNameClash.kt"); @@ -11890,6 +11908,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("interfaceInInnerClass.kt") + public void testInterfaceInInnerClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/interfaceInInnerClass.kt"); + doTest(fileName); + } + @TestMetadata("kt5854.kt") public void testKt5854() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/kt5854.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 15845d28be7..48a3e923971 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -11806,6 +11806,12 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/inner"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("annotationInInnerClass.kt") + public void testAnnotationInInnerClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/annotationInInnerClass.kt"); + doTest(fileName); + } + @TestMetadata("classesInClassObjectHeader.kt") public void testClassesInClassObjectHeader() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/classesInClassObjectHeader.kt"); @@ -11830,6 +11836,12 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing doTest(fileName); } + @TestMetadata("enumInInnerClass.kt") + public void testEnumInInnerClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/enumInInnerClass.kt"); + doTest(fileName); + } + @TestMetadata("extensionFun.kt") public void testExtensionFun() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/extensionFun.kt"); @@ -11848,6 +11860,12 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing doTest(fileName); } + @TestMetadata("innerClassInEnumEntryClass_lv11.kt") + public void testInnerClassInEnumEntryClass_lv11() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/innerClassInEnumEntryClass_lv11.kt"); + doTest(fileName); + } + @TestMetadata("InnerClassNameClash.kt") public void testInnerClassNameClash() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/InnerClassNameClash.kt"); @@ -11890,6 +11908,12 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing doTest(fileName); } + @TestMetadata("interfaceInInnerClass.kt") + public void testInterfaceInInnerClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/interfaceInInnerClass.kt"); + doTest(fileName); + } + @TestMetadata("kt5854.kt") public void testKt5854() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inner/kt5854.kt");