Add local class/object declarations to super name index
This commit is contained in:
@@ -1008,8 +1008,10 @@ public class JetPsiUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
JetElement container =
|
JetElement container = PsiTreeUtil.getParentOfType(
|
||||||
PsiTreeUtil.getParentOfType(declaration, JetBlockExpression.class, JetClassInitializer.class);
|
declaration,
|
||||||
|
JetBlockExpression.class, JetClassInitializer.class, JetProperty.class, JetFunction.class
|
||||||
|
);
|
||||||
if (container == null) return null;
|
if (container == null) return null;
|
||||||
|
|
||||||
return (container instanceof JetClassInitializer) ? ((JetClassInitializer) container).getBody() : container;
|
return (container instanceof JetClassInitializer) ? ((JetClassInitializer) container).getBody() : container;
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ import org.jetbrains.jet.lang.psi.JetClassOrObject;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface PsiJetClassOrObjectStub<T extends JetClassOrObject> extends PsiJetStubWithFqName<T> {
|
public interface PsiJetClassOrObjectStub<T extends JetClassOrObject> extends PsiJetStubWithFqName<T> {
|
||||||
|
boolean isLocal();
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
List<String> getSuperNames();
|
List<String> getSuperNames();
|
||||||
}
|
}
|
||||||
|
|||||||
+21
-3
@@ -50,13 +50,29 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
|
|||||||
return node.getElementType() != JetStubElementTypes.ENUM_ENTRY ? new JetClass(node) : new JetEnumEntry(node);
|
return node.getElementType() != JetStubElementTypes.ENUM_ENTRY ? new JetClass(node) : new JetEnumEntry(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldCreateStub(ASTNode node) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@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);
|
||||||
boolean isEnumEntry = psi instanceof JetEnumEntry;
|
boolean isEnumEntry = psi instanceof JetEnumEntry;
|
||||||
List<String> superNames = PsiUtilPackage.getSuperNames(psi);
|
List<String> superNames = PsiUtilPackage.getSuperNames(psi);
|
||||||
return new PsiJetClassStubImpl(getStubType(isEnumEntry), parentStub, fqName != null ? fqName.asString() : null, psi.getName(),
|
return new PsiJetClassStubImpl(
|
||||||
superNames, psi.isTrait(), psi.isEnum(), isEnumEntry, psi.isAnnotation(), psi.isInner());
|
getStubType(isEnumEntry),
|
||||||
|
parentStub,
|
||||||
|
fqName != null ? fqName.asString() : null,
|
||||||
|
psi.getName(),
|
||||||
|
superNames,
|
||||||
|
psi.isTrait(),
|
||||||
|
psi.isEnum(),
|
||||||
|
isEnumEntry,
|
||||||
|
psi.isAnnotation(),
|
||||||
|
psi.isInner(),
|
||||||
|
JetPsiUtil.isLocal(psi)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -69,6 +85,7 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
|
|||||||
dataStream.writeBoolean(stub.isEnumEntry());
|
dataStream.writeBoolean(stub.isEnumEntry());
|
||||||
dataStream.writeBoolean(stub.isAnnotation());
|
dataStream.writeBoolean(stub.isAnnotation());
|
||||||
dataStream.writeBoolean(stub.isInner());
|
dataStream.writeBoolean(stub.isInner());
|
||||||
|
dataStream.writeBoolean(stub.isLocal());
|
||||||
|
|
||||||
List<String> superNames = stub.getSuperNames();
|
List<String> superNames = stub.getSuperNames();
|
||||||
dataStream.writeVarInt(superNames.size());
|
dataStream.writeVarInt(superNames.size());
|
||||||
@@ -87,6 +104,7 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
|
|||||||
boolean isEnumEntry = dataStream.readBoolean();
|
boolean isEnumEntry = dataStream.readBoolean();
|
||||||
boolean isAnnotation = dataStream.readBoolean();
|
boolean isAnnotation = dataStream.readBoolean();
|
||||||
boolean isInner = dataStream.readBoolean();
|
boolean isInner = dataStream.readBoolean();
|
||||||
|
boolean isLocal = dataStream.readBoolean();
|
||||||
|
|
||||||
int superCount = dataStream.readVarInt();
|
int superCount = dataStream.readVarInt();
|
||||||
StringRef[] superNames = StringRef.createArray(superCount);
|
StringRef[] superNames = StringRef.createArray(superCount);
|
||||||
@@ -95,7 +113,7 @@ public class JetClassElementType extends JetStubElementType<PsiJetClassStub, Jet
|
|||||||
}
|
}
|
||||||
|
|
||||||
return new PsiJetClassStubImpl(getStubType(isEnumEntry), parentStub, qualifiedName, name, superNames,
|
return new PsiJetClassStubImpl(getStubType(isEnumEntry), parentStub, qualifiedName, name, superNames,
|
||||||
isTrait, isEnumClass, isEnumEntry, isAnnotation, isInner);
|
isTrait, isEnumClass, isEnumEntry, isAnnotation, isInner, isLocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -36,7 +36,7 @@ import org.jetbrains.jet.plugin.JetLanguage;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class JetFileElementType extends IStubFileElementType<PsiJetFileStub> {
|
public class JetFileElementType extends IStubFileElementType<PsiJetFileStub> {
|
||||||
public static final int STUB_VERSION = 25;
|
public static final int STUB_VERSION = 26;
|
||||||
|
|
||||||
public JetFileElementType() {
|
public JetFileElementType() {
|
||||||
super("jet.FILE", JetLanguage.INSTANCE);
|
super("jet.FILE", JetLanguage.INSTANCE);
|
||||||
|
|||||||
+15
-12
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.jet.lang.psi.stubs.elements;
|
package org.jetbrains.jet.lang.psi.stubs.elements;
|
||||||
|
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import com.intellij.psi.stubs.IndexSink;
|
import com.intellij.psi.stubs.IndexSink;
|
||||||
import com.intellij.psi.stubs.StubElement;
|
import com.intellij.psi.stubs.StubElement;
|
||||||
import com.intellij.psi.stubs.StubInputStream;
|
import com.intellij.psi.stubs.StubInputStream;
|
||||||
@@ -27,6 +26,7 @@ import org.jetbrains.annotations.NonNls;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.psi.JetClassObject;
|
import org.jetbrains.jet.lang.psi.JetClassObject;
|
||||||
import org.jetbrains.jet.lang.psi.JetObjectDeclaration;
|
import org.jetbrains.jet.lang.psi.JetObjectDeclaration;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
||||||
import org.jetbrains.jet.lang.psi.psiUtil.PsiUtilPackage;
|
import org.jetbrains.jet.lang.psi.psiUtil.PsiUtilPackage;
|
||||||
import org.jetbrains.jet.lang.psi.stubs.PsiJetObjectStub;
|
import org.jetbrains.jet.lang.psi.stubs.PsiJetObjectStub;
|
||||||
import org.jetbrains.jet.lang.psi.stubs.impl.PsiJetObjectStubImpl;
|
import org.jetbrains.jet.lang.psi.stubs.impl.PsiJetObjectStubImpl;
|
||||||
@@ -52,15 +52,7 @@ public class JetObjectElementType extends JetStubElementType<PsiJetObjectStub, J
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldCreateStub(ASTNode node) {
|
public boolean shouldCreateStub(ASTNode node) {
|
||||||
if (super.shouldCreateStub(node)) {
|
return true;
|
||||||
PsiElement psiElement = node.getPsi();
|
|
||||||
if (psiElement instanceof JetObjectDeclaration) {
|
|
||||||
JetObjectDeclaration objectDeclaration = (JetObjectDeclaration) psiElement;
|
|
||||||
return objectDeclaration.getName() != null || isClassObject(objectDeclaration);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -69,7 +61,14 @@ public class JetObjectElementType extends JetStubElementType<PsiJetObjectStub, J
|
|||||||
FqName fqName = psi.getFqName();
|
FqName fqName = psi.getFqName();
|
||||||
List<String> superNames = PsiUtilPackage.getSuperNames(psi);
|
List<String> superNames = PsiUtilPackage.getSuperNames(psi);
|
||||||
return new PsiJetObjectStubImpl(
|
return new PsiJetObjectStubImpl(
|
||||||
JetStubElementTypes.OBJECT_DECLARATION, parentStub, name, fqName, superNames, psi.isTopLevel(), isClassObject(psi)
|
JetStubElementTypes.OBJECT_DECLARATION,
|
||||||
|
parentStub,
|
||||||
|
name,
|
||||||
|
fqName,
|
||||||
|
superNames,
|
||||||
|
psi.isTopLevel(),
|
||||||
|
isClassObject(psi),
|
||||||
|
JetPsiUtil.isLocal(psi)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,6 +81,7 @@ public class JetObjectElementType extends JetStubElementType<PsiJetObjectStub, J
|
|||||||
|
|
||||||
dataStream.writeBoolean(stub.isTopLevel());
|
dataStream.writeBoolean(stub.isTopLevel());
|
||||||
dataStream.writeBoolean(stub.isClassObject());
|
dataStream.writeBoolean(stub.isClassObject());
|
||||||
|
dataStream.writeBoolean(stub.isLocal());
|
||||||
|
|
||||||
List<String> superNames = stub.getSuperNames();
|
List<String> superNames = stub.getSuperNames();
|
||||||
dataStream.writeVarInt(superNames.size());
|
dataStream.writeVarInt(superNames.size());
|
||||||
@@ -99,6 +99,7 @@ public class JetObjectElementType extends JetStubElementType<PsiJetObjectStub, J
|
|||||||
|
|
||||||
boolean isTopLevel = dataStream.readBoolean();
|
boolean isTopLevel = dataStream.readBoolean();
|
||||||
boolean isClassObject = dataStream.readBoolean();
|
boolean isClassObject = dataStream.readBoolean();
|
||||||
|
boolean isLocal = dataStream.readBoolean();
|
||||||
|
|
||||||
int superCount = dataStream.readVarInt();
|
int superCount = dataStream.readVarInt();
|
||||||
StringRef[] superNames = StringRef.createArray(superCount);
|
StringRef[] superNames = StringRef.createArray(superCount);
|
||||||
@@ -106,7 +107,9 @@ public class JetObjectElementType extends JetStubElementType<PsiJetObjectStub, J
|
|||||||
superNames[i] = dataStream.readName();
|
superNames[i] = dataStream.readName();
|
||||||
}
|
}
|
||||||
|
|
||||||
return new PsiJetObjectStubImpl(JetStubElementTypes.OBJECT_DECLARATION, parentStub, name, fqName, superNames, isTopLevel, isClassObject);
|
return new PsiJetObjectStubImpl(
|
||||||
|
JetStubElementTypes.OBJECT_DECLARATION, parentStub, name, fqName, superNames, isTopLevel, isClassObject, isLocal
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+15
-3
@@ -40,6 +40,7 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
|
|||||||
private final boolean isEnumEntry;
|
private final boolean isEnumEntry;
|
||||||
private final boolean isAnnotation;
|
private final boolean isAnnotation;
|
||||||
private final boolean isInner;
|
private final boolean isInner;
|
||||||
|
private final boolean isLocal;
|
||||||
|
|
||||||
public PsiJetClassStubImpl(
|
public PsiJetClassStubImpl(
|
||||||
JetClassElementType type,
|
JetClassElementType type,
|
||||||
@@ -47,9 +48,9 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
|
|||||||
@Nullable String qualifiedName,
|
@Nullable String qualifiedName,
|
||||||
String name,
|
String name,
|
||||||
List<String> superNames,
|
List<String> superNames,
|
||||||
boolean isTrait, boolean isEnumClass, boolean isEnumEntry, boolean isAnnotation, boolean isInner) {
|
boolean isTrait, boolean isEnumClass, boolean isEnumEntry, boolean isAnnotation, boolean isInner, boolean isLocal) {
|
||||||
this(type, parent, StringRef.fromString(qualifiedName), StringRef.fromString(name), wrapStrings(superNames),
|
this(type, parent, StringRef.fromString(qualifiedName), StringRef.fromString(name), wrapStrings(superNames),
|
||||||
isTrait, isEnumClass, isEnumEntry, isAnnotation, isInner);
|
isTrait, isEnumClass, isEnumEntry, isAnnotation, isInner, isLocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PsiJetClassStubImpl(
|
public PsiJetClassStubImpl(
|
||||||
@@ -62,7 +63,8 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
|
|||||||
boolean isEnumClass,
|
boolean isEnumClass,
|
||||||
boolean isEnumEntry,
|
boolean isEnumEntry,
|
||||||
boolean isAnnotation,
|
boolean isAnnotation,
|
||||||
boolean isInner) {
|
boolean isInner,
|
||||||
|
boolean isLocal) {
|
||||||
super(parent, type);
|
super(parent, type);
|
||||||
this.qualifiedName = qualifiedName;
|
this.qualifiedName = qualifiedName;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@@ -72,6 +74,7 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
|
|||||||
this.isEnumEntry = isEnumEntry;
|
this.isEnumEntry = isEnumEntry;
|
||||||
this.isAnnotation = isAnnotation;
|
this.isAnnotation = isAnnotation;
|
||||||
this.isInner = isInner;
|
this.isInner = isInner;
|
||||||
|
this.isLocal = isLocal;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static StringRef[] wrapStrings(List<String> names) {
|
private static StringRef[] wrapStrings(List<String> names) {
|
||||||
@@ -116,6 +119,11 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
|
|||||||
return isInner;
|
return isInner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLocal() {
|
||||||
|
return isLocal;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return StringRef.toString(name);
|
return StringRef.toString(name);
|
||||||
@@ -156,6 +164,10 @@ public class PsiJetClassStubImpl extends StubBase<JetClass> implements PsiJetCla
|
|||||||
builder.append("inner ");
|
builder.append("inner ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isLocal()) {
|
||||||
|
builder.append("local ");
|
||||||
|
}
|
||||||
|
|
||||||
builder.append("name=").append(getName());
|
builder.append("name=").append(getName());
|
||||||
builder.append(" fqn=").append(getFqName());
|
builder.append(" fqn=").append(getFqName());
|
||||||
builder.append(" superNames=").append("[").append(StringUtil.join(ArrayUtil.toStringArray(getSuperNames()))).append("]");
|
builder.append(" superNames=").append("[").append(StringUtil.join(ArrayUtil.toStringArray(getSuperNames()))).append("]");
|
||||||
|
|||||||
+16
-3
@@ -37,6 +37,7 @@ public class PsiJetObjectStubImpl extends StubBase<JetObjectDeclaration> impleme
|
|||||||
private final StringRef[] superNames;
|
private final StringRef[] superNames;
|
||||||
private final boolean isTopLevel;
|
private final boolean isTopLevel;
|
||||||
private final boolean isClassObject;
|
private final boolean isClassObject;
|
||||||
|
private final boolean isLocal;
|
||||||
|
|
||||||
public PsiJetObjectStubImpl(
|
public PsiJetObjectStubImpl(
|
||||||
@NotNull IStubElementType elementType,
|
@NotNull IStubElementType elementType,
|
||||||
@@ -45,9 +46,10 @@ public class PsiJetObjectStubImpl extends StubBase<JetObjectDeclaration> impleme
|
|||||||
@Nullable FqName fqName,
|
@Nullable FqName fqName,
|
||||||
@NotNull List<String> superNames,
|
@NotNull List<String> superNames,
|
||||||
boolean isTopLevel,
|
boolean isTopLevel,
|
||||||
boolean isClassObject
|
boolean isClassObject,
|
||||||
|
boolean isLocal
|
||||||
) {
|
) {
|
||||||
this(elementType, parent, StringRef.fromString(name), fqName, Utils.instance$.wrapStrings(superNames), isTopLevel, isClassObject);
|
this(elementType, parent, StringRef.fromString(name), fqName, Utils.instance$.wrapStrings(superNames), isTopLevel, isClassObject, isLocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PsiJetObjectStubImpl(
|
public PsiJetObjectStubImpl(
|
||||||
@@ -57,7 +59,8 @@ public class PsiJetObjectStubImpl extends StubBase<JetObjectDeclaration> impleme
|
|||||||
@Nullable FqName fqName,
|
@Nullable FqName fqName,
|
||||||
@NotNull StringRef[] superNames,
|
@NotNull StringRef[] superNames,
|
||||||
boolean isTopLevel,
|
boolean isTopLevel,
|
||||||
boolean isClassObject) {
|
boolean isClassObject,
|
||||||
|
boolean isLocal) {
|
||||||
super(parent, elementType);
|
super(parent, elementType);
|
||||||
|
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@@ -65,6 +68,7 @@ public class PsiJetObjectStubImpl extends StubBase<JetObjectDeclaration> impleme
|
|||||||
this.superNames = superNames;
|
this.superNames = superNames;
|
||||||
this.isTopLevel = isTopLevel;
|
this.isTopLevel = isTopLevel;
|
||||||
this.isClassObject = isClassObject;
|
this.isClassObject = isClassObject;
|
||||||
|
this.isLocal = isLocal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -98,6 +102,11 @@ public class PsiJetObjectStubImpl extends StubBase<JetObjectDeclaration> impleme
|
|||||||
return isClassObject;
|
return isClassObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLocal() {
|
||||||
|
return isLocal;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
@@ -112,6 +121,10 @@ public class PsiJetObjectStubImpl extends StubBase<JetObjectDeclaration> impleme
|
|||||||
builder.append("top ");
|
builder.append("top ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isLocal()) {
|
||||||
|
builder.append("local ");
|
||||||
|
}
|
||||||
|
|
||||||
builder.append("name=").append(getName());
|
builder.append("name=").append(getName());
|
||||||
builder.append(" fqName=").append(fqName != null ? fqName.toString() : "null");
|
builder.append(" fqName=").append(fqName != null ? fqName.toString() : "null");
|
||||||
builder.append(" superNames=").append("[").append(StringUtil.join(ArrayUtil.toStringArray(getSuperNames()))).append("]");
|
builder.append(" superNames=").append("[").append(StringUtil.join(ArrayUtil.toStringArray(getSuperNames()))).append("]");
|
||||||
|
|||||||
@@ -47,23 +47,16 @@ public class StubIndexServiceImpl implements StubIndexService {
|
|||||||
if (name != null) {
|
if (name != null) {
|
||||||
sink.occurrence(JetShortClassNameIndex.getInstance().getKey(), name);
|
sink.occurrence(JetShortClassNameIndex.getInstance().getKey(), name);
|
||||||
}
|
}
|
||||||
|
|
||||||
FqName fqn = stub.getFqName();
|
FqName fqn = stub.getFqName();
|
||||||
if (fqn != null) {
|
if (fqn != null) {
|
||||||
sink.occurrence(JetFullClassNameIndex.getInstance().getKey(), fqn.asString());
|
sink.occurrence(JetFullClassNameIndex.getInstance().getKey(), fqn.asString());
|
||||||
}
|
}
|
||||||
|
|
||||||
indexSuperNames(stub, sink);
|
indexSuperNames(stub, sink);
|
||||||
|
|
||||||
recordClassOrObjectByPackage(stub, sink);
|
recordClassOrObjectByPackage(stub, sink);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static <T extends JetClassOrObject> void indexSuperNames(PsiJetClassOrObjectStub<T> stub, IndexSink sink) {
|
|
||||||
for (String superName : stub.getSuperNames()) {
|
|
||||||
sink.occurrence(JetSuperClassIndex.getInstance().getKey(), superName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void indexObject(PsiJetObjectStub stub, IndexSink sink) {
|
public void indexObject(PsiJetObjectStub stub, IndexSink sink) {
|
||||||
String name = stub.getName();
|
String name = stub.getName();
|
||||||
@@ -80,14 +73,13 @@ public class StubIndexServiceImpl implements StubIndexService {
|
|||||||
fqName = parentFqName.child(Name.identifier(name));
|
fqName = parentFqName.child(Name.identifier(name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
assert name != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
sink.occurrence(JetShortClassNameIndex.getInstance().getKey(), name);
|
if (name != null) {
|
||||||
|
sink.occurrence(JetShortClassNameIndex.getInstance().getKey(), name);
|
||||||
|
|
||||||
if (stub.isTopLevel()) {
|
if (stub.isTopLevel()) {
|
||||||
sink.occurrence(JetTopLevelShortObjectNameIndex.getInstance().getKey(), name);
|
sink.occurrence(JetTopLevelShortObjectNameIndex.getInstance().getKey(), name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fqName != null) {
|
if (fqName != null) {
|
||||||
@@ -95,10 +87,15 @@ public class StubIndexServiceImpl implements StubIndexService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
indexSuperNames(stub, sink);
|
indexSuperNames(stub, sink);
|
||||||
|
|
||||||
recordClassOrObjectByPackage(stub, sink);
|
recordClassOrObjectByPackage(stub, sink);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void indexSuperNames(PsiJetClassOrObjectStub<? extends JetClassOrObject> stub, IndexSink sink) {
|
||||||
|
for (String superName : stub.getSuperNames()) {
|
||||||
|
sink.occurrence(JetSuperClassIndex.getInstance().getKey(), superName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void recordClassOrObjectByPackage(StubElement<? extends JetClassOrObject> stub, IndexSink sink) {
|
private static void recordClassOrObjectByPackage(StubElement<? extends JetClassOrObject> stub, IndexSink sink) {
|
||||||
StubElement parentStub = stub.getParentStub();
|
StubElement parentStub = stub.getParentStub();
|
||||||
if (parentStub instanceof PsiJetFileStub) {
|
if (parentStub instanceof PsiJetFileStub) {
|
||||||
|
|||||||
@@ -27,9 +27,7 @@ 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.JetDeclaration;
|
import org.jetbrains.jet.lang.psi.JetDeclaration;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.psi.JetObjectDeclaration;
|
|
||||||
import org.jetbrains.jet.lang.psi.stubs.PsiJetClassStub;
|
import org.jetbrains.jet.lang.psi.stubs.PsiJetClassStub;
|
||||||
import org.jetbrains.jet.lang.psi.stubs.PsiJetObjectStub;
|
|
||||||
import org.jetbrains.jet.lang.psi.stubs.elements.JetFileStubBuilder;
|
import org.jetbrains.jet.lang.psi.stubs.elements.JetFileStubBuilder;
|
||||||
import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes;
|
import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes;
|
||||||
import org.jetbrains.jet.plugin.JetFileType;
|
import org.jetbrains.jet.plugin.JetFileType;
|
||||||
@@ -86,8 +84,9 @@ public class JetStubsTest extends LightCodeInsightFixtureTestCase {
|
|||||||
public void testFunctionInNotNamedObject() {
|
public void testFunctionInNotNamedObject() {
|
||||||
doBuildTest("object { fun testing() = 12 }",
|
doBuildTest("object { fun testing() = 12 }",
|
||||||
"PsiJetFileStubImpl[package=]\n" +
|
"PsiJetFileStubImpl[package=]\n" +
|
||||||
" FUN:PsiJetFunctionStubImpl[name=testing]\n" +
|
" OBJECT_DECLARATION:PsiJetObjectStubImpl[top name=null fqName=null superNames=[]]\n" +
|
||||||
" VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n");
|
" FUN:PsiJetFunctionStubImpl[name=testing]\n" +
|
||||||
|
" VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testFunctionParameters() {
|
public void testFunctionParameters() {
|
||||||
@@ -99,13 +98,6 @@ public class JetStubsTest extends LightCodeInsightFixtureTestCase {
|
|||||||
" VALUE_PARAMETER:PsiJetParameterStubImpl[val name=other typeText=String defaultValue=\"hello\"]\n");
|
" VALUE_PARAMETER:PsiJetParameterStubImpl[val name=other typeText=String defaultValue=\"hello\"]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testNotStoreInFunction() {
|
|
||||||
doBuildTest("fun some() { val test = 12;\n fun fake() {}\n class FakeClass\n }",
|
|
||||||
"PsiJetFileStubImpl[package=]\n" +
|
|
||||||
" FUN:PsiJetFunctionStubImpl[top topFQName=some name=some]\n" +
|
|
||||||
" VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testPackageProperty() {
|
public void testPackageProperty() {
|
||||||
doBuildTest("package test.testing\n" +
|
doBuildTest("package test.testing\n" +
|
||||||
"val some = 12",
|
"val some = 12",
|
||||||
@@ -175,6 +167,26 @@ public class JetStubsTest extends LightCodeInsightFixtureTestCase {
|
|||||||
" CLASS:PsiJetClassStubImpl[inner name=B fqn=A.B superNames=[]]\n");
|
" CLASS:PsiJetClassStubImpl[inner name=B fqn=A.B superNames=[]]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testLocalClass() {
|
||||||
|
doBuildTest("class A\ntrait T\nfun foo() { class Test: A(), T }",
|
||||||
|
"PsiJetFileStubImpl[package=]\n" +
|
||||||
|
" CLASS:PsiJetClassStubImpl[name=A fqn=A superNames=[]]\n" +
|
||||||
|
" CLASS:PsiJetClassStubImpl[trait name=T fqn=T superNames=[]]\n" +
|
||||||
|
" FUN:PsiJetFunctionStubImpl[top topFQName=foo name=foo]\n" +
|
||||||
|
" VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n" +
|
||||||
|
" CLASS:PsiJetClassStubImpl[local name=Test fqn=null superNames=[AT]]\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testLocalClassInLocalFunction() {
|
||||||
|
doBuildTest("class A\ntrait T\nfun foo() { fun bar() { class Test: A(), T } }",
|
||||||
|
"PsiJetFileStubImpl[package=]\n" +
|
||||||
|
" CLASS:PsiJetClassStubImpl[name=A fqn=A superNames=[]]\n" +
|
||||||
|
" CLASS:PsiJetClassStubImpl[trait name=T fqn=T superNames=[]]\n" +
|
||||||
|
" FUN:PsiJetFunctionStubImpl[top topFQName=foo name=foo]\n" +
|
||||||
|
" VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n" +
|
||||||
|
" CLASS:PsiJetClassStubImpl[local name=Test fqn=null superNames=[AT]]\n");
|
||||||
|
}
|
||||||
|
|
||||||
public void testNamedObject() {
|
public void testNamedObject() {
|
||||||
doBuildTest("class A\ntrait T\nobject Test: A(), T {}",
|
doBuildTest("class A\ntrait T\nobject Test: A(), T {}",
|
||||||
"PsiJetFileStubImpl[package=]\n" +
|
"PsiJetFileStubImpl[package=]\n" +
|
||||||
@@ -183,6 +195,25 @@ public class JetStubsTest extends LightCodeInsightFixtureTestCase {
|
|||||||
" OBJECT_DECLARATION:PsiJetObjectStubImpl[top name=Test fqName=Test superNames=[AT]]\n");
|
" OBJECT_DECLARATION:PsiJetObjectStubImpl[top name=Test fqName=Test superNames=[AT]]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testLocalNamedObject() {
|
||||||
|
doBuildTest("class A\ntrait T\nfun foo() { object O: A(), T }",
|
||||||
|
"PsiJetFileStubImpl[package=]\n" +
|
||||||
|
" CLASS:PsiJetClassStubImpl[name=A fqn=A superNames=[]]\n" +
|
||||||
|
" CLASS:PsiJetClassStubImpl[trait name=T fqn=T superNames=[]]\n" +
|
||||||
|
" FUN:PsiJetFunctionStubImpl[top topFQName=foo name=foo]\n" +
|
||||||
|
" VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n" +
|
||||||
|
" OBJECT_DECLARATION:PsiJetObjectStubImpl[local name=O fqName=null superNames=[AT]]\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAnonymousObject() {
|
||||||
|
doBuildTest("class A\ntrait T\nval obj = object : A(), T",
|
||||||
|
"PsiJetFileStubImpl[package=]\n" +
|
||||||
|
" CLASS:PsiJetClassStubImpl[name=A fqn=A superNames=[]]\n" +
|
||||||
|
" CLASS:PsiJetClassStubImpl[trait name=T fqn=T superNames=[]]\n" +
|
||||||
|
" PROPERTY:PsiJetPropertyStubImpl[val top topFQName=obj name=obj typeText=null bodyText=object : A(), T]\n" +
|
||||||
|
" OBJECT_DECLARATION:PsiJetObjectStubImpl[local name=null fqName=null superNames=[AT]]\n");
|
||||||
|
}
|
||||||
|
|
||||||
public void testAnnotationOnClass() {
|
public void testAnnotationOnClass() {
|
||||||
doBuildTest("Deprecated class Test {}",
|
doBuildTest("Deprecated class Test {}",
|
||||||
"PsiJetFileStubImpl[package=]\n" +
|
"PsiJetFileStubImpl[package=]\n" +
|
||||||
|
|||||||
Reference in New Issue
Block a user