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