From 6f8c9bf0d10d9379c360010cb5f578437a21b387 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 26 Dec 2012 20:27:55 +0400 Subject: [PATCH] JetClass.isEnum() introduced --- .../codegen/ImplementationBodyCodegen.java | 2 +- .../org/jetbrains/jet/lang/psi/JetClass.java | 9 +++++++++ .../jet/lang/psi/stubs/PsiJetClassStub.java | 2 ++ .../stubs/elements/JetClassElementType.java | 6 ++++-- .../stubs/elements/JetFileElementType.java | 2 +- .../psi/stubs/impl/PsiJetClassStubImpl.java | 19 ++++++++++++++++--- .../lang/resolve/TypeHierarchyResolver.java | 4 ++-- .../lang/resolve/lazy/data/JetClassInfo.java | 5 ++--- .../jetbrains/jet/plugin/JetIconProvider.java | 2 +- .../jet/plugin/stubs/JetStubsTest.java | 2 +- 10 files changed, 39 insertions(+), 14 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index b96130efd01..2bd3fd2d392 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -107,7 +107,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { isAnnotation = true; signature.getInterfaces().add("java/lang/annotation/Annotation"); } - else if (jetClass.hasModifier(JetTokens.ENUM_KEYWORD)) { + else if (jetClass.isEnum()) { isAbstract = hasAbstractMembers(descriptor); isEnum = true; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClass.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClass.java index 6652f032766..856910aac40 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClass.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClass.java @@ -142,6 +142,15 @@ public class JetClass extends JetTypeParameterListOwnerStub imp return findChildByType(JetTokens.TRAIT_KEYWORD) != null; } + public boolean isEnum() { + PsiJetClassStub stub = getStub(); + if (stub != null) { + return stub.isEnumClass(); + } + + return hasModifier(JetTokens.ENUM_KEYWORD); + } + public boolean isAnnotation() { PsiJetClassStub stub = getStub(); if (stub != null) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/PsiJetClassStub.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/PsiJetClassStub.java index ea81ffdf539..b47d6620f1c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/PsiJetClassStub.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/PsiJetClassStub.java @@ -33,6 +33,8 @@ public interface PsiJetClassStub extends NamedStub { boolean isAnnotation(); + boolean isEnumClass(); + boolean isEnumEntry(); @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/elements/JetClassElementType.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/elements/JetClassElementType.java index 9c5efaeccb4..64bd5243a73 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/elements/JetClassElementType.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/elements/JetClassElementType.java @@ -55,7 +55,7 @@ public class JetClassElementType extends JetStubElementType { - public static final int STUB_VERSION = 19; + public static final int STUB_VERSION = 20; public JetFileElementType() { super("jet.FILE", JetLanguage.INSTANCE); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/impl/PsiJetClassStubImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/impl/PsiJetClassStubImpl.java index 9e602f266ea..92845fd336d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/impl/PsiJetClassStubImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/impl/PsiJetClassStubImpl.java @@ -35,6 +35,7 @@ public class PsiJetClassStubImpl extends StubBase implements PsiJetCla private final StringRef name; private final StringRef[] superNames; private final boolean isTrait; + private final boolean isEnumClass; private final boolean isEnumEntry; private final boolean isAnnotation; @@ -44,9 +45,9 @@ public class PsiJetClassStubImpl extends StubBase implements PsiJetCla @Nullable final String qualifiedName, String name, List superNames, - boolean isTrait, boolean isEnumEntry, boolean isAnnotation) { + boolean isTrait, boolean isEnumClass, boolean isEnumEntry, boolean isAnnotation) { this(type, parent, StringRef.fromString(qualifiedName), StringRef.fromString(name), wrapStrings(superNames), - isTrait, isEnumEntry, isAnnotation); + isTrait, isEnumClass, isEnumEntry, isAnnotation); } public PsiJetClassStubImpl( @@ -55,13 +56,16 @@ public class PsiJetClassStubImpl extends StubBase implements PsiJetCla StringRef qualifiedName, StringRef name, StringRef[] superNames, - boolean isTrait, boolean isEnumEntry, + boolean isTrait, + boolean isEnumClass, + boolean isEnumEntry, boolean isAnnotation) { super(parent, type); this.qualifiedName = qualifiedName; this.name = name; this.superNames = superNames; this.isTrait = isTrait; + this.isEnumClass = isEnumClass; this.isEnumEntry = isEnumEntry; this.isAnnotation = isAnnotation; } @@ -89,6 +93,11 @@ public class PsiJetClassStubImpl extends StubBase implements PsiJetCla return isAnnotation; } + @Override + public boolean isEnumClass() { + return isEnumClass; + } + @Override public boolean isEnumEntry() { return isEnumEntry; @@ -114,6 +123,10 @@ public class PsiJetClassStubImpl extends StubBase implements PsiJetCla StringBuilder builder = new StringBuilder(); builder.append("PsiJetClassStubImpl["); + if (isEnumClass()) { + builder.append("enumClass "); + } + if (isEnumEntry()) { builder.append("enumEntry "); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java index 759a621f02b..e6bf31e5ab6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java @@ -208,8 +208,8 @@ public class TypeHierarchyResolver { @NotNull private static ClassKind getClassKind(@NotNull JetClass jetClass) { if (jetClass.isTrait()) return ClassKind.TRAIT; - if (jetClass.hasModifier(JetTokens.ANNOTATION_KEYWORD)) return ClassKind.ANNOTATION_CLASS; - if (jetClass.hasModifier(JetTokens.ENUM_KEYWORD)) return ClassKind.ENUM_CLASS; + if (jetClass.isAnnotation()) return ClassKind.ANNOTATION_CLASS; + if (jetClass.isEnum()) return ClassKind.ENUM_CLASS; return ClassKind.CLASS; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/data/JetClassInfo.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/data/JetClassInfo.java index 179a845cdec..ca6eb21ff00 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/data/JetClassInfo.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/data/JetClassInfo.java @@ -19,7 +19,6 @@ package org.jetbrains.jet.lang.resolve.lazy.data; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.ClassKind; import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.lexer.JetTokens; import java.util.List; @@ -36,10 +35,10 @@ public class JetClassInfo extends JetClassOrObjectInfo { else if (element.isTrait()) { this.kind = ClassKind.TRAIT; } - else if (element.hasModifier(JetTokens.ANNOTATION_KEYWORD)) { + else if (element.isAnnotation()) { this.kind = ClassKind.ANNOTATION_CLASS; } - else if (element.hasModifier(JetTokens.ENUM_KEYWORD)) { + else if (element.isEnum()) { this.kind = ClassKind.ENUM_CLASS; } else { diff --git a/idea/src/org/jetbrains/jet/plugin/JetIconProvider.java b/idea/src/org/jetbrains/jet/plugin/JetIconProvider.java index 772a4a4bce8..bec4dc59ebe 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetIconProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/JetIconProvider.java @@ -130,7 +130,7 @@ public class JetIconProvider extends IconProvider { return JetIcons.TRAIT; } - Icon icon = jetClass.hasModifier(JetTokens.ENUM_KEYWORD) ? PlatformIcons.ENUM_ICON : JetIcons.CLASS; + Icon icon = jetClass.isEnum() ? PlatformIcons.ENUM_ICON : JetIcons.CLASS; if (jetClass instanceof JetEnumEntry) { JetEnumEntry enumEntry = (JetEnumEntry) jetClass; if (enumEntry.getPrimaryConstructorParameterList() == null) { diff --git a/idea/tests/org/jetbrains/jet/plugin/stubs/JetStubsTest.java b/idea/tests/org/jetbrains/jet/plugin/stubs/JetStubsTest.java index 029efff4b75..d3bce857cb9 100644 --- a/idea/tests/org/jetbrains/jet/plugin/stubs/JetStubsTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/stubs/JetStubsTest.java @@ -141,7 +141,7 @@ public class JetStubsTest extends LightCodeInsightFixtureTestCase { public void testSimpleEnumBuild() { doBuildTest("enum class Test { First\n Second\n }", "PsiJetFileStubImpl[package=]\n" + - " CLASS:PsiJetClassStubImpl[name=Test fqn=Test superNames=[]]\n" + + " CLASS:PsiJetClassStubImpl[enumClass name=Test fqn=Test superNames=[]]\n" + " TYPE_PARAMETER_LIST:PsiJetTypeParameterListStubImpl\n" + " ENUM_ENTRY:PsiJetClassStubImpl[enumEntry name=First fqn=Test.First superNames=[]]\n" + " ENUM_ENTRY:PsiJetClassStubImpl[enumEntry name=Second fqn=Test.Second superNames=[]]\n"