Add isAnnotation to class stub

This commit is contained in:
Nikolay Krasko
2012-06-28 16:46:30 +04:00
parent 66984a5f23
commit a0bbf24709
6 changed files with 34 additions and 7 deletions
@@ -154,6 +154,11 @@ public class JetClass extends JetTypeParameterListOwnerStub<PsiJetClassStub> imp
} }
public boolean isAnnotation() { public boolean isAnnotation() {
PsiJetClassStub stub = getStub();
if (stub != null) {
return stub.isAnnotation();
}
return hasModifier(JetTokens.ANNOTATION_KEYWORD); return hasModifier(JetTokens.ANNOTATION_KEYWORD);
} }
@@ -34,6 +34,8 @@ public interface PsiJetClassStub extends NamedStub<JetClass> {
boolean isTrait(); boolean isTrait();
boolean isAnnotation();
boolean isEnumEntry(); boolean isEnumEntry();
@NotNull @NotNull
@@ -58,7 +58,7 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
FqName fqName = JetPsiUtil.getFQName(psi); FqName fqName = JetPsiUtil.getFQName(psi);
boolean isEnumEntry = psi instanceof JetEnumEntry; boolean isEnumEntry = psi instanceof JetEnumEntry;
return new PsiJetClassStubImpl(getStubType(isEnumEntry), parentStub, fqName != null ? fqName.getFqName() : null, psi.getName(), return new PsiJetClassStubImpl(getStubType(isEnumEntry), parentStub, fqName != null ? fqName.getFqName() : null, psi.getName(),
psi.getSuperNames(), psi.isTrait(), isEnumEntry); psi.getSuperNames(), psi.isTrait(), isEnumEntry, psi.isAnnotation());
} }
@Override @Override
@@ -67,6 +67,7 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
dataStream.writeName(stub.getQualifiedName()); dataStream.writeName(stub.getQualifiedName());
dataStream.writeBoolean(stub.isTrait()); dataStream.writeBoolean(stub.isTrait());
dataStream.writeBoolean(stub.isEnumEntry()); dataStream.writeBoolean(stub.isEnumEntry());
dataStream.writeBoolean(stub.isAnnotation());
List<String> superNames = stub.getSuperNames(); List<String> superNames = stub.getSuperNames();
dataStream.writeVarInt(superNames.size()); dataStream.writeVarInt(superNames.size());
@@ -81,6 +82,7 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
StringRef qualifiedName = dataStream.readName(); StringRef qualifiedName = dataStream.readName();
boolean isTrait = dataStream.readBoolean(); boolean isTrait = dataStream.readBoolean();
boolean isEnumEntry = dataStream.readBoolean(); boolean isEnumEntry = dataStream.readBoolean();
boolean isAnnotation = dataStream.readBoolean();
int superCount = dataStream.readVarInt(); int superCount = dataStream.readVarInt();
StringRef[] superNames = StringRef.createArray(superCount); StringRef[] superNames = StringRef.createArray(superCount);
@@ -88,7 +90,7 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
superNames[i] = dataStream.readName(); superNames[i] = dataStream.readName();
} }
return new PsiJetClassStubImpl(getStubType(isEnumEntry), parentStub, qualifiedName, name, superNames, isTrait, isEnumEntry); return new PsiJetClassStubImpl(getStubType(isEnumEntry), parentStub, qualifiedName, name, superNames, isTrait, isEnumEntry, isAnnotation);
} }
@Override @Override
@@ -38,7 +38,7 @@ import java.io.IOException;
* @author Nikolay Krasko * @author Nikolay Krasko
*/ */
public class JetFileElementType extends IStubFileElementType<PsiJetFileStub> { public class JetFileElementType extends IStubFileElementType<PsiJetFileStub> {
public static final int STUB_VERSION = 14; public static final int STUB_VERSION = 15;
public JetFileElementType() { public JetFileElementType() {
super("jet.FILE", JetLanguage.INSTANCE); super("jet.FILE", JetLanguage.INSTANCE);
@@ -39,6 +39,7 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
private final StringRef[] superNames; private final StringRef[] superNames;
private final boolean isTrait; private final boolean isTrait;
private final boolean isEnumEntry; private final boolean isEnumEntry;
private final boolean isAnnotation;
public PsiJetClassStubImpl( public PsiJetClassStubImpl(
JetClassElementType type, JetClassElementType type,
@@ -46,9 +47,9 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
@Nullable final String qualifiedName, @Nullable final String qualifiedName,
String name, String name,
List<String> superNames, List<String> superNames,
boolean isTrait, boolean isEnumEntry) { boolean isTrait, boolean isEnumEntry, boolean isAnnotation) {
this(type, parent, StringRef.fromString(qualifiedName), StringRef.fromString(name), wrapStrings(superNames), this(type, parent, StringRef.fromString(qualifiedName), StringRef.fromString(name), wrapStrings(superNames),
isTrait, isEnumEntry); isTrait, isEnumEntry, isAnnotation);
} }
public PsiJetClassStubImpl( public PsiJetClassStubImpl(
@@ -57,14 +58,15 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
StringRef qualifiedName, StringRef qualifiedName,
StringRef name, StringRef name,
StringRef[] superNames, StringRef[] superNames,
boolean isTrait, boolean isEnumEntry boolean isTrait, boolean isEnumEntry,
) { boolean isAnnotation) {
super(parent, type); super(parent, type);
this.qualifiedName = qualifiedName; this.qualifiedName = qualifiedName;
this.name = name; this.name = name;
this.superNames = superNames; this.superNames = superNames;
this.isTrait = isTrait; this.isTrait = isTrait;
this.isEnumEntry = isEnumEntry; this.isEnumEntry = isEnumEntry;
this.isAnnotation = isAnnotation;
} }
private static StringRef[] wrapStrings(List<String> names) { private static StringRef[] wrapStrings(List<String> names) {
@@ -85,6 +87,11 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
return isTrait; return isTrait;
} }
@Override
public boolean isAnnotation() {
return isAnnotation;
}
@Override @Override
public boolean isEnumEntry() { public boolean isEnumEntry() {
return isEnumEntry; return isEnumEntry;
@@ -118,6 +125,10 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
builder.append("trait "); builder.append("trait ");
} }
if (isAnnotation()) {
builder.append("isAnnotation ");
}
builder.append("name=").append(getName()); builder.append("name=").append(getName());
builder.append(" fqn=").append(getQualifiedName()); builder.append(" fqn=").append(getQualifiedName());
builder.append(" superNames=").append("[").append(StringUtil.join(ArrayUtil.toStringArray(getSuperNames()))).append("]"); builder.append(" superNames=").append("[").append(StringUtil.join(ArrayUtil.toStringArray(getSuperNames()))).append("]");
@@ -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) { private void doBuildTest(@NonNls final String source, @NonNls @NotNull final String tree) {
final JetFile file = (JetFile) createLightFile(JetFileType.INSTANCE, source); final JetFile file = (JetFile) createLightFile(JetFileType.INSTANCE, source);
final FileASTNode fileNode = file.getNode(); final FileASTNode fileNode = file.getNode();