Add 'inner' keyword
Support for the keyword in PSI and stubs #KT-1174 In Progress
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
+5
-2
@@ -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
|
||||
|
||||
+15
-3
@@ -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);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
class Outer {
|
||||
inner class Inner
|
||||
}
|
||||
@@ -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" +
|
||||
|
||||
Reference in New Issue
Block a user