From a0bbf2470909355f735b72172d6152c4e90d12a4 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 28 Jun 2012 16:46:30 +0400 Subject: [PATCH] Add isAnnotation to class stub --- .../org/jetbrains/jet/lang/psi/JetClass.java | 5 +++++ .../jet/lang/psi/stubs/PsiJetClassStub.java | 2 ++ .../stubs/elements/JetClassElementType.java | 6 ++++-- .../stubs/elements/JetFileElementType.java | 2 +- .../psi/stubs/impl/PsiJetClassStubImpl.java | 19 +++++++++++++++---- .../jet/plugin/stubs/JetStubsTest.java | 7 +++++++ 6 files changed, 34 insertions(+), 7 deletions(-) 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 01d967a53fe..b901e48fdc1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClass.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClass.java @@ -154,6 +154,11 @@ public class JetClass extends JetTypeParameterListOwnerStub imp } public boolean isAnnotation() { + PsiJetClassStub stub = getStub(); + if (stub != null) { + return stub.isAnnotation(); + } + return hasModifier(JetTokens.ANNOTATION_KEYWORD); } 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 e6461a20343..b1949d3e55b 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 @@ -34,6 +34,8 @@ public interface PsiJetClassStub extends NamedStub { boolean isTrait(); + boolean isAnnotation(); + 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 86ab6bcd982..093e8a882bb 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 @@ -58,7 +58,7 @@ public class JetClassElementType extends JetStubElementType superNames = stub.getSuperNames(); dataStream.writeVarInt(superNames.size()); @@ -81,6 +82,7 @@ public class JetClassElementType extends JetStubElementType { - public static final int STUB_VERSION = 14; + public static final int STUB_VERSION = 15; 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 9e1b3169aec..827f20f64c4 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 @@ -39,6 +39,7 @@ public class PsiJetClassStubImpl extends StubBase implements PsiJetCla private final StringRef[] superNames; private final boolean isTrait; private final boolean isEnumEntry; + private final boolean isAnnotation; public PsiJetClassStubImpl( JetClassElementType type, @@ -46,9 +47,9 @@ public class PsiJetClassStubImpl extends StubBase implements PsiJetCla @Nullable final String qualifiedName, String name, List superNames, - boolean isTrait, boolean isEnumEntry) { + boolean isTrait, boolean isEnumEntry, boolean isAnnotation) { this(type, parent, StringRef.fromString(qualifiedName), StringRef.fromString(name), wrapStrings(superNames), - isTrait, isEnumEntry); + isTrait, isEnumEntry, isAnnotation); } public PsiJetClassStubImpl( @@ -57,14 +58,15 @@ public class PsiJetClassStubImpl extends StubBase implements PsiJetCla StringRef qualifiedName, StringRef name, StringRef[] superNames, - boolean isTrait, boolean isEnumEntry - ) { + boolean isTrait, boolean isEnumEntry, + boolean isAnnotation) { super(parent, type); this.qualifiedName = qualifiedName; this.name = name; this.superNames = superNames; this.isTrait = isTrait; this.isEnumEntry = isEnumEntry; + this.isAnnotation = isAnnotation; } private static StringRef[] wrapStrings(List names) { @@ -85,6 +87,11 @@ public class PsiJetClassStubImpl extends StubBase implements PsiJetCla return isTrait; } + @Override + public boolean isAnnotation() { + return isAnnotation; + } + @Override public boolean isEnumEntry() { return isEnumEntry; @@ -118,6 +125,10 @@ public class PsiJetClassStubImpl extends StubBase implements PsiJetCla builder.append("trait "); } + if (isAnnotation()) { + builder.append("isAnnotation "); + } + builder.append("name=").append(getName()); builder.append(" fqn=").append(getQualifiedName()); builder.append(" superNames=").append("[").append(StringUtil.join(ArrayUtil.toStringArray(getSuperNames()))).append("]"); diff --git a/idea/tests/org/jetbrains/jet/plugin/stubs/JetStubsTest.java b/idea/tests/org/jetbrains/jet/plugin/stubs/JetStubsTest.java index aba17b641bc..81020c7532b 100644 --- a/idea/tests/org/jetbrains/jet/plugin/stubs/JetStubsTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/stubs/JetStubsTest.java @@ -129,6 +129,13 @@ public class JetStubsTest extends LightCodeInsightFixtureTestCase { ); } + public void testAnnotationClass() { + doBuildTest("annotation class Test {}", + "PsiJetFileStubImpl[package=]\n" + + " CLASS:PsiJetClassStubImpl[isAnnotation name=Test fqn=Test superNames=[]]\n" + + " TYPE_PARAMETER_LIST:PsiJetTypeParameterListStubImpl\n"); + } + private void doBuildTest(@NonNls final String source, @NonNls @NotNull final String tree) { final JetFile file = (JetFile) createLightFile(JetFileType.INSTANCE, source); final FileASTNode fileNode = file.getNode();