From 0f852efb540d69c0a298eb356235d8b37eccc358 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 24 Nov 2014 21:27:46 +0300 Subject: [PATCH] LTDA: Don't store illegal 'inner' modifier in descriptors --- .../jetbrains/jet/lang/resolve/ModifiersChecker.java | 2 +- .../lazy/descriptors/LazyClassDescriptor.java | 3 ++- .../diagnostics/tests/enum/modifiersOnEnumEntry.txt | 6 +++--- .../diagnostics/tests/inner/illegalModifier.txt | 12 ++++++------ 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java index 958cb9487ca..004e40e5ce6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java @@ -154,7 +154,7 @@ public class ModifiersChecker { } } - private static boolean isIllegalInner(@NotNull DeclarationDescriptor descriptor) { + public static boolean isIllegalInner(@NotNull DeclarationDescriptor descriptor) { if (!(descriptor instanceof ClassDescriptor)) return true; ClassDescriptor classDescriptor = (ClassDescriptor) descriptor; if (classDescriptor.getKind() != ClassKind.CLASS) return true; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java index 3ed7f49d644..40198fb9646 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java @@ -34,6 +34,7 @@ import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorBase; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.DescriptorUtils; +import org.jetbrains.jet.lang.resolve.ModifiersChecker; import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver; import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil; import org.jetbrains.jet.lang.resolve.lazy.LazyEntity; @@ -132,7 +133,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes this.visibility = isSyntheticClassObject(this) ? DescriptorUtils.getSyntheticClassObjectVisibility() : resolveVisibilityFromModifiers(modifierList, getDefaultClassVisibility(this)); - this.isInner = isInnerClass(modifierList); + this.isInner = isInnerClass(modifierList) && !ModifiersChecker.isIllegalInner(this); StorageManager storageManager = resolveSession.getStorageManager(); diff --git a/compiler/testData/diagnostics/tests/enum/modifiersOnEnumEntry.txt b/compiler/testData/diagnostics/tests/enum/modifiersOnEnumEntry.txt index 412a0e2c0e5..fbdebd97ce5 100644 --- a/compiler/testData/diagnostics/tests/enum/modifiersOnEnumEntry.txt +++ b/compiler/testData/diagnostics/tests/enum/modifiersOnEnumEntry.txt @@ -103,7 +103,7 @@ internal final enum class E : kotlin.Enum { } } - public abstract enum entry ABSTRACT : E { + public enum entry ABSTRACT : E { private constructor ABSTRACT() public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: E): kotlin.Int public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean @@ -123,7 +123,7 @@ internal final enum class E : kotlin.Enum { } } - public open enum entry OPEN : E { + public enum entry OPEN : E { private constructor OPEN() public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: E): kotlin.Int public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean @@ -143,7 +143,7 @@ internal final enum class E : kotlin.Enum { } } - public open enum entry OVERRIDE : E { + public enum entry OVERRIDE : E { private constructor OVERRIDE() public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: E): kotlin.Int public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean diff --git a/compiler/testData/diagnostics/tests/inner/illegalModifier.txt b/compiler/testData/diagnostics/tests/inner/illegalModifier.txt index 53597bd25b8..6cbbe284913 100644 --- a/compiler/testData/diagnostics/tests/inner/illegalModifier.txt +++ b/compiler/testData/diagnostics/tests/inner/illegalModifier.txt @@ -4,14 +4,14 @@ internal val R: kotlin.Any internal val prop: kotlin.Int = 42 internal fun foo(): kotlin.Unit -internal final inner class A { +internal final class A { 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 } -internal inner trait B { +internal trait 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 @@ -51,7 +51,7 @@ internal final class D { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } - internal inner trait F { + internal trait F { 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 @@ -71,7 +71,7 @@ internal final class D { } } - internal final inner enum class R : kotlin.Enum { + internal final enum class R : kotlin.Enum { private constructor R() public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: D.R): kotlin.Int public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean @@ -85,7 +85,7 @@ internal final class D { public final /*synthesized*/ fun values(): kotlin.Array } - internal final inner annotation class S : kotlin.Annotation { + internal final annotation class S : kotlin.Annotation { public constructor S() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int @@ -146,7 +146,7 @@ internal trait K { public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String - internal final inner class L { + internal final class L { public constructor L() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int