Add 'inner' keyword

Support for the keyword in PSI and stubs

 #KT-1174 In Progress
This commit is contained in:
Alexander Udalov
2012-11-29 16:15:36 +04:00
parent 949f5ed834
commit 84e4611d2b
8 changed files with 70 additions and 7 deletions
@@ -160,6 +160,15 @@ public class JetClass extends JetTypeParameterListOwnerStub<PsiJetClassStub> imp
return hasModifier(JetTokens.ANNOTATION_KEYWORD);
}
public boolean isInner() {
PsiJetClassStub stub = getStub();
if (stub != null) {
return stub.isInner();
}
return hasModifier(JetTokens.INNER_KEYWORD);
}
@NotNull
@Override
public IStubElementType getElementType() {
@@ -34,6 +34,8 @@ public interface PsiJetClassStub extends NamedStub<JetClass> {
boolean isAnnotation();
boolean isEnumClass();
boolean isInner();
boolean isEnumEntry();
@@ -55,7 +55,7 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
FqName fqName = JetPsiUtil.getFQName(psi);
boolean isEnumEntry = psi instanceof JetEnumEntry;
return new PsiJetClassStubImpl(getStubType(isEnumEntry), parentStub, fqName != null ? fqName.getFqName() : null, psi.getName(),
psi.getSuperNames(), psi.isTrait(), psi.isEnum(), isEnumEntry, psi.isAnnotation());
psi.getSuperNames(), psi.isTrait(), psi.isEnum(), isEnumEntry, psi.isAnnotation(), psi.isInner());
}
@Override
@@ -66,6 +66,7 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
dataStream.writeBoolean(stub.isEnumClass());
dataStream.writeBoolean(stub.isEnumEntry());
dataStream.writeBoolean(stub.isAnnotation());
dataStream.writeBoolean(stub.isInner());
List<String> superNames = stub.getSuperNames();
dataStream.writeVarInt(superNames.size());
@@ -82,6 +83,7 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
boolean isEnumClass = dataStream.readBoolean();
boolean isEnumEntry = dataStream.readBoolean();
boolean isAnnotation = dataStream.readBoolean();
boolean isInner = dataStream.readBoolean();
int superCount = dataStream.readVarInt();
StringRef[] superNames = StringRef.createArray(superCount);
@@ -89,7 +91,8 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
superNames[i] = dataStream.readName();
}
return new PsiJetClassStubImpl(getStubType(isEnumEntry), parentStub, qualifiedName, name, superNames, isTrait, isEnumClass, isEnumEntry, isAnnotation);
return new PsiJetClassStubImpl(getStubType(isEnumEntry), parentStub, qualifiedName, name, superNames,
isTrait, isEnumClass, isEnumEntry, isAnnotation, isInner);
}
@Override
@@ -38,6 +38,7 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
private final boolean isEnumClass;
private final boolean isEnumEntry;
private final boolean isAnnotation;
private final boolean isInner;
public PsiJetClassStubImpl(
JetClassElementType type,
@@ -45,9 +46,9 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
@Nullable final String qualifiedName,
String name,
List<String> superNames,
boolean isTrait, boolean isEnumClass, boolean isEnumEntry, boolean isAnnotation) {
boolean isTrait, boolean isEnumClass, boolean isEnumEntry, boolean isAnnotation, boolean isInner) {
this(type, parent, StringRef.fromString(qualifiedName), StringRef.fromString(name), wrapStrings(superNames),
isTrait, isEnumClass, isEnumEntry, isAnnotation);
isTrait, isEnumClass, isEnumEntry, isAnnotation, isInner);
}
public PsiJetClassStubImpl(
@@ -59,7 +60,8 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
boolean isTrait,
boolean isEnumClass,
boolean isEnumEntry,
boolean isAnnotation) {
boolean isAnnotation,
boolean isInner) {
super(parent, type);
this.qualifiedName = qualifiedName;
this.name = name;
@@ -68,6 +70,7 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
this.isEnumClass = isEnumClass;
this.isEnumEntry = isEnumEntry;
this.isAnnotation = isAnnotation;
this.isInner = isInner;
}
private static StringRef[] wrapStrings(List<String> names) {
@@ -102,6 +105,11 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
public boolean isEnumEntry() {
return isEnumEntry;
}
@Override
public boolean isInner() {
return isInner;
}
@Override
public String getName() {
@@ -139,6 +147,10 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
builder.append("isAnnotation ");
}
if (isInner()) {
builder.append("inner ");
}
builder.append("name=").append(getName());
builder.append(" fqn=").append(getQualifiedName());
builder.append(" superNames=").append("[").append(StringUtil.join(ArrayUtil.toStringArray(getSuperNames()))).append("]");
@@ -144,6 +144,7 @@ public interface JetTokens {
JetKeywordToken ABSTRACT_KEYWORD = JetKeywordToken.softKeyword("abstract");
JetKeywordToken ENUM_KEYWORD = JetKeywordToken.softKeyword("enum");
JetKeywordToken OPEN_KEYWORD = JetKeywordToken.softKeyword("open");
JetKeywordToken INNER_KEYWORD = JetKeywordToken.softKeyword("inner");
JetKeywordToken ANNOTATION_KEYWORD = JetKeywordToken.softKeyword("annotation");
JetKeywordToken OVERRIDE_KEYWORD = JetKeywordToken.softKeyword("override");
JetKeywordToken PRIVATE_KEYWORD = JetKeywordToken.softKeyword("private");
@@ -169,13 +170,13 @@ public interface JetTokens {
);
TokenSet SOFT_KEYWORDS = TokenSet.create(IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, GET_KEYWORD,
SET_KEYWORD, ABSTRACT_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, ANNOTATION_KEYWORD,
SET_KEYWORD, ABSTRACT_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, INNER_KEYWORD, ANNOTATION_KEYWORD,
OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD,
CATCH_KEYWORD, FINALLY_KEYWORD, OUT_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD, REIFIED_KEYWORD
);
TokenSet MODIFIER_KEYWORDS = TokenSet.create(ABSTRACT_KEYWORD, ENUM_KEYWORD,
OPEN_KEYWORD, ANNOTATION_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
OPEN_KEYWORD, INNER_KEYWORD, ANNOTATION_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD, REIFIED_KEYWORD
);
TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.create(WHITE_SPACE, BLOCK_COMMENT, EOL_COMMENT, DOC_COMMENT, SHEBANG_COMMENT);
+3
View File
@@ -0,0 +1,3 @@
class Outer {
inner class Inner
}
+24
View File
@@ -0,0 +1,24 @@
JetFile: Inner.jet
NAMESPACE_HEADER
<empty list>
CLASS
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Outer')
PsiWhiteSpace(' ')
TYPE_PARAMETER_LIST
<empty list>
CLASS_BODY
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
CLASS
MODIFIER_LIST
PsiElement(inner)('inner')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('Inner')
PsiWhiteSpace('\n')
TYPE_PARAMETER_LIST
<empty list>
PsiElement(RBRACE)('}')
@@ -155,6 +155,15 @@ public class JetStubsTest extends LightCodeInsightFixtureTestCase {
" TYPE_PARAMETER_LIST:PsiJetTypeParameterListStubImpl\n");
}
public void testInnerClass() {
doBuildTest("class A { inner class B { } }",
"PsiJetFileStubImpl[package=]\n" +
" CLASS:PsiJetClassStubImpl[name=A fqn=A superNames=[]]\n" +
" TYPE_PARAMETER_LIST:PsiJetTypeParameterListStubImpl\n" +
" CLASS:PsiJetClassStubImpl[inner name=B fqn=A.B superNames=[]]\n" +
" TYPE_PARAMETER_LIST:PsiJetTypeParameterListStubImpl\n");
}
public void testNamedObject() {
doBuildTest("object Test {}",
"PsiJetFileStubImpl[package=]\n" +