Add local class/object declarations to super name index

This commit is contained in:
Alexey Sedunov
2013-11-08 18:01:21 +04:00
parent 72c7399df1
commit 594c966c44
9 changed files with 128 additions and 50 deletions
@@ -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();
} }
@@ -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
@@ -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);
@@ -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
@@ -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("]");
@@ -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" +