Stub for enum entry
This commit is contained in:
@@ -38,7 +38,7 @@ public interface JetNodeTypes {
|
|||||||
|
|
||||||
JetNodeType CLASS_OBJECT = new JetNodeType("CLASS_OBJECT", JetClassObject.class);
|
JetNodeType CLASS_OBJECT = new JetNodeType("CLASS_OBJECT", JetClassObject.class);
|
||||||
JetNodeType CONSTRUCTOR = new JetNodeType("CONSTRUCTOR", JetSecondaryConstructor.class);
|
JetNodeType CONSTRUCTOR = new JetNodeType("CONSTRUCTOR", JetSecondaryConstructor.class);
|
||||||
JetNodeType ENUM_ENTRY = new JetNodeType("ENUM_ENTRY", JetEnumEntry.class);
|
IElementType ENUM_ENTRY = JetStubElementTypes.ENUM_ENTRY;
|
||||||
JetNodeType ANONYMOUS_INITIALIZER = new JetNodeType("ANONYMOUS_INITIALIZER", JetClassInitializer.class);
|
JetNodeType ANONYMOUS_INITIALIZER = new JetNodeType("ANONYMOUS_INITIALIZER", JetClassInitializer.class);
|
||||||
|
|
||||||
IElementType TYPE_PARAMETER_LIST = JetStubElementTypes.TYPE_PARAMETER_LIST;
|
IElementType TYPE_PARAMETER_LIST = JetStubElementTypes.TYPE_PARAMETER_LIST;
|
||||||
|
|||||||
@@ -18,10 +18,13 @@ package org.jetbrains.jet.lang.psi;
|
|||||||
|
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
|
import com.intellij.psi.stubs.IStubElementType;
|
||||||
import com.intellij.util.IncorrectOperationException;
|
import com.intellij.util.IncorrectOperationException;
|
||||||
import org.jetbrains.annotations.NonNls;
|
import org.jetbrains.annotations.NonNls;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.JetNodeTypes;
|
import org.jetbrains.jet.JetNodeTypes;
|
||||||
|
import org.jetbrains.jet.lang.psi.stubs.PsiJetClassStub;
|
||||||
|
import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -34,8 +37,17 @@ public class JetEnumEntry extends JetClass {
|
|||||||
super(node);
|
super(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public JetEnumEntry(@NotNull PsiJetClassStub stub) {
|
||||||
|
super(stub);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
|
PsiJetClassStub classStub = getStub();
|
||||||
|
if (classStub != null) {
|
||||||
|
return classStub.getName();
|
||||||
|
}
|
||||||
|
|
||||||
JetObjectDeclarationName nameAsDeclaration = getNameAsDeclaration();
|
JetObjectDeclarationName nameAsDeclaration = getNameAsDeclaration();
|
||||||
return nameAsDeclaration == null ? "<Anonymous>" : nameAsDeclaration.getName();
|
return nameAsDeclaration == null ? "<Anonymous>" : nameAsDeclaration.getName();
|
||||||
}
|
}
|
||||||
@@ -46,6 +58,12 @@ public class JetEnumEntry extends JetClass {
|
|||||||
return nameAsDeclaration == null ? null : nameAsDeclaration.getNameIdentifier();
|
return nameAsDeclaration == null ? null : nameAsDeclaration.getNameIdentifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public IStubElementType getElementType() {
|
||||||
|
return JetStubElementTypes.ENUM_ENTRY;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
|
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
|
||||||
JetObjectDeclarationName nameAsDeclaration = getNameAsDeclaration();
|
JetObjectDeclarationName nameAsDeclaration = getNameAsDeclaration();
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ public interface PsiJetClassStub extends NamedStub<JetClass> {
|
|||||||
|
|
||||||
boolean isTrait();
|
boolean isTrait();
|
||||||
|
|
||||||
|
boolean isEnumEntry();
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
List<String> getSuperNames();
|
List<String> getSuperNames();
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-5
@@ -25,6 +25,7 @@ import com.intellij.util.io.StringRef;
|
|||||||
import org.jetbrains.annotations.NonNls;
|
import org.jetbrains.annotations.NonNls;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.psi.JetClass;
|
import org.jetbrains.jet.lang.psi.JetClass;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetEnumEntry;
|
||||||
import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
||||||
import org.jetbrains.jet.lang.psi.stubs.PsiJetClassStub;
|
import org.jetbrains.jet.lang.psi.stubs.PsiJetClassStub;
|
||||||
import org.jetbrains.jet.lang.psi.stubs.impl.PsiJetClassStubImpl;
|
import org.jetbrains.jet.lang.psi.stubs.impl.PsiJetClassStubImpl;
|
||||||
@@ -44,19 +45,20 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JetClass createPsi(@NotNull PsiJetClassStub stub) {
|
public JetClass createPsi(@NotNull PsiJetClassStub stub) {
|
||||||
return new JetClass(stub);
|
return !stub.isEnumEntry() ? new JetClass(stub) : new JetEnumEntry(stub);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JetClass createPsiFromAst(@NotNull ASTNode node) {
|
public JetClass createPsiFromAst(@NotNull ASTNode node) {
|
||||||
return new JetClass(node);
|
return node.getElementType() != JetStubElementTypes.ENUM_ENTRY ? new JetClass(node) : new JetEnumEntry(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PsiJetClassStub createStub(@NotNull JetClass psi, StubElement parentStub) {
|
public PsiJetClassStub createStub(@NotNull JetClass psi, StubElement parentStub) {
|
||||||
FqName fqName = JetPsiUtil.getFQName(psi);
|
FqName fqName = JetPsiUtil.getFQName(psi);
|
||||||
return new PsiJetClassStubImpl(JetStubElementTypes.CLASS, parentStub, fqName != null ? fqName.getFqName() : null, psi.getName(),
|
boolean isEnumEntry = psi instanceof JetEnumEntry;
|
||||||
psi.getSuperNames(), psi.isTrait());
|
return new PsiJetClassStubImpl(getStubType(isEnumEntry), parentStub, fqName != null ? fqName.getFqName() : null, psi.getName(),
|
||||||
|
psi.getSuperNames(), psi.isTrait(), isEnumEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -64,6 +66,7 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
|
|||||||
dataStream.writeName(stub.getName());
|
dataStream.writeName(stub.getName());
|
||||||
dataStream.writeName(stub.getQualifiedName());
|
dataStream.writeName(stub.getQualifiedName());
|
||||||
dataStream.writeBoolean(stub.isTrait());
|
dataStream.writeBoolean(stub.isTrait());
|
||||||
|
dataStream.writeBoolean(stub.isEnumEntry());
|
||||||
|
|
||||||
List<String> superNames = stub.getSuperNames();
|
List<String> superNames = stub.getSuperNames();
|
||||||
dataStream.writeVarInt(superNames.size());
|
dataStream.writeVarInt(superNames.size());
|
||||||
@@ -77,6 +80,7 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
|
|||||||
StringRef name = dataStream.readName();
|
StringRef name = dataStream.readName();
|
||||||
StringRef qualifiedName = dataStream.readName();
|
StringRef qualifiedName = dataStream.readName();
|
||||||
boolean isTrait = dataStream.readBoolean();
|
boolean isTrait = dataStream.readBoolean();
|
||||||
|
boolean isEnumEntry = dataStream.readBoolean();
|
||||||
|
|
||||||
int superCount = dataStream.readVarInt();
|
int superCount = dataStream.readVarInt();
|
||||||
StringRef[] superNames = StringRef.createArray(superCount);
|
StringRef[] superNames = StringRef.createArray(superCount);
|
||||||
@@ -84,11 +88,15 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
|
|||||||
superNames[i] = dataStream.readName();
|
superNames[i] = dataStream.readName();
|
||||||
}
|
}
|
||||||
|
|
||||||
return new PsiJetClassStubImpl(JetStubElementTypes.CLASS, parentStub, qualifiedName, name, superNames, isTrait);
|
return new PsiJetClassStubImpl(getStubType(isEnumEntry), parentStub, qualifiedName, name, superNames, isTrait, isEnumEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void indexStub(PsiJetClassStub stub, IndexSink sink) {
|
public void indexStub(PsiJetClassStub stub, IndexSink sink) {
|
||||||
StubIndexServiceFactory.getInstance().indexClass(stub, sink);
|
StubIndexServiceFactory.getInstance().indexClass(stub, sink);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static JetClassElementType getStubType(boolean isEnumEntry) {
|
||||||
|
return isEnumEntry ? JetStubElementTypes.ENUM_ENTRY : JetStubElementTypes.CLASS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -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 = 13;
|
public static final int STUB_VERSION = 14;
|
||||||
|
|
||||||
public JetFileElementType() {
|
public JetFileElementType() {
|
||||||
super("jet.FILE", JetLanguage.INSTANCE);
|
super("jet.FILE", JetLanguage.INSTANCE);
|
||||||
|
|||||||
+1
@@ -25,6 +25,7 @@ public interface JetStubElementTypes {
|
|||||||
JetClassElementType CLASS = new JetClassElementType("CLASS");
|
JetClassElementType CLASS = new JetClassElementType("CLASS");
|
||||||
JetFunctionElementType FUNCTION = new JetFunctionElementType("FUN");
|
JetFunctionElementType FUNCTION = new JetFunctionElementType("FUN");
|
||||||
JetPropertyElementType PROPERTY = new JetPropertyElementType("PROPERTY");
|
JetPropertyElementType PROPERTY = new JetPropertyElementType("PROPERTY");
|
||||||
|
JetClassElementType ENUM_ENTRY = new JetClassElementType("ENUM_ENTRY");
|
||||||
|
|
||||||
JetParameterElementType VALUE_PARAMETER = new JetParameterElementType("VALUE_PARAMETER");
|
JetParameterElementType VALUE_PARAMETER = new JetParameterElementType("VALUE_PARAMETER");
|
||||||
JetParameterListElementType VALUE_PARAMETER_LIST = new JetParameterListElementType("VALUE_PARAMETER_LIST");
|
JetParameterListElementType VALUE_PARAMETER_LIST = new JetParameterListElementType("VALUE_PARAMETER_LIST");
|
||||||
|
|||||||
+29
-18
@@ -34,11 +34,11 @@ import java.util.List;
|
|||||||
* @author Nikolay Krasko
|
* @author Nikolay Krasko
|
||||||
*/
|
*/
|
||||||
public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetClassStub {
|
public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetClassStub {
|
||||||
|
|
||||||
private final StringRef qualifiedName;
|
private final StringRef qualifiedName;
|
||||||
private final StringRef name;
|
private final StringRef name;
|
||||||
private final StringRef[] superNames;
|
private final StringRef[] superNames;
|
||||||
private final boolean isTrait;
|
private final boolean isTrait;
|
||||||
|
private final boolean isEnumEntry;
|
||||||
|
|
||||||
public PsiJetClassStubImpl(
|
public PsiJetClassStubImpl(
|
||||||
JetClassElementType type,
|
JetClassElementType type,
|
||||||
@@ -46,8 +46,25 @@ 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 isTrait, boolean isEnumEntry) {
|
||||||
this(type, parent, StringRef.fromString(qualifiedName), StringRef.fromString(name), wrapStrings(superNames), isTrait);
|
this(type, parent, StringRef.fromString(qualifiedName), StringRef.fromString(name), wrapStrings(superNames),
|
||||||
|
isTrait, isEnumEntry);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PsiJetClassStubImpl(
|
||||||
|
JetClassElementType type,
|
||||||
|
StubElement parent,
|
||||||
|
StringRef qualifiedName,
|
||||||
|
StringRef name,
|
||||||
|
StringRef[] superNames,
|
||||||
|
boolean isTrait, boolean isEnumEntry
|
||||||
|
) {
|
||||||
|
super(parent, type);
|
||||||
|
this.qualifiedName = qualifiedName;
|
||||||
|
this.name = name;
|
||||||
|
this.superNames = superNames;
|
||||||
|
this.isTrait = isTrait;
|
||||||
|
this.isEnumEntry = isEnumEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static StringRef[] wrapStrings(List<String> names) {
|
private static StringRef[] wrapStrings(List<String> names) {
|
||||||
@@ -58,21 +75,6 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
|
|||||||
return refs;
|
return refs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PsiJetClassStubImpl(
|
|
||||||
JetClassElementType type,
|
|
||||||
StubElement parent,
|
|
||||||
StringRef qualifiedName,
|
|
||||||
StringRef name,
|
|
||||||
StringRef[] superNames,
|
|
||||||
boolean isTrait) {
|
|
||||||
|
|
||||||
super(parent, type);
|
|
||||||
this.qualifiedName = qualifiedName;
|
|
||||||
this.name = name;
|
|
||||||
this.superNames = superNames;
|
|
||||||
this.isTrait = isTrait;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getQualifiedName() {
|
public String getQualifiedName() {
|
||||||
return StringRef.toString(qualifiedName);
|
return StringRef.toString(qualifiedName);
|
||||||
@@ -83,6 +85,11 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
|
|||||||
return isTrait;
|
return isTrait;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnumEntry() {
|
||||||
|
return isEnumEntry;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return StringRef.toString(name);
|
return StringRef.toString(name);
|
||||||
@@ -103,6 +110,10 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
|
|||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
builder.append("PsiJetClassStubImpl[");
|
builder.append("PsiJetClassStubImpl[");
|
||||||
|
|
||||||
|
if (isEnumEntry()) {
|
||||||
|
builder.append("enumEntry ");
|
||||||
|
}
|
||||||
|
|
||||||
if (isTrait()) {
|
if (isTrait()) {
|
||||||
builder.append("trait ");
|
builder.append("trait ");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,6 +91,18 @@ public class JetStubsTest extends LightCodeInsightFixtureTestCase {
|
|||||||
" VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n");
|
" VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testSimpleEnumBuild() {
|
||||||
|
doBuildTest("enum class Test { First\n Second\n }",
|
||||||
|
"PsiJetFileStubImpl[package=]\n" +
|
||||||
|
" CLASS:PsiJetClassStubImpl[name=Test fqn=Test superNames=[]]\n" +
|
||||||
|
" TYPE_PARAMETER_LIST:PsiJetTypeParameterListStubImpl\n" +
|
||||||
|
" ENUM_ENTRY:PsiJetClassStubImpl[enumEntry name=First fqn=Test.First superNames=[]]\n" +
|
||||||
|
" TYPE_PARAMETER_LIST:PsiJetTypeParameterListStubImpl\n" +
|
||||||
|
" ENUM_ENTRY:PsiJetClassStubImpl[enumEntry name=Second fqn=Test.Second 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();
|
||||||
|
|||||||
Reference in New Issue
Block a user