Class object FqNames indexed properly
#KT-3337 In Progress LightClasses: class object's property getter unresolved in Java, but compiles OK
This commit is contained in:
@@ -21,7 +21,9 @@ import com.intellij.psi.stubs.StubElement;
|
||||
import org.jetbrains.jet.lang.psi.JetClassOrObject;
|
||||
import org.jetbrains.jet.lang.psi.stubs.*;
|
||||
import org.jetbrains.jet.lang.psi.stubs.elements.StubIndexService;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
|
||||
public class StubIndexServiceImpl implements StubIndexService {
|
||||
|
||||
@@ -61,7 +63,22 @@ public class StubIndexServiceImpl implements StubIndexService {
|
||||
@Override
|
||||
public void indexObject(PsiJetObjectStub stub, IndexSink sink) {
|
||||
String name = stub.getName();
|
||||
assert name != null;
|
||||
FqName fqName = stub.getFQName();
|
||||
|
||||
if (stub.isClassObject()) {
|
||||
StubElement parentStub = stub.getParentStub();
|
||||
assert parentStub instanceof PsiJetClassStub : "Something but a class is a parent to class object stub: " + parentStub;
|
||||
|
||||
name = JvmAbi.CLASS_OBJECT_CLASS_NAME;
|
||||
|
||||
String qualifiedName = ((PsiJetClassStub) parentStub).getQualifiedName();
|
||||
if (qualifiedName != null) {
|
||||
fqName = new FqName(qualifiedName).child(Name.identifier(name));
|
||||
}
|
||||
}
|
||||
else {
|
||||
assert name != null;
|
||||
}
|
||||
|
||||
sink.occurrence(JetShortClassNameIndex.getInstance().getKey(), name);
|
||||
|
||||
@@ -69,7 +86,6 @@ public class StubIndexServiceImpl implements StubIndexService {
|
||||
sink.occurrence(JetTopLevelShortObjectNameIndex.getInstance().getKey(), name);
|
||||
}
|
||||
|
||||
FqName fqName = stub.getFQName();
|
||||
if (fqName != null) {
|
||||
sink.occurrence(JetFullClassNameIndex.getInstance().getKey(), fqName.getFqName());
|
||||
}
|
||||
|
||||
@@ -72,6 +72,16 @@ public class JetStubsTest extends LightCodeInsightFixtureTestCase {
|
||||
" TYPE_PARAMETER:PsiJetTypeParameterStubImpl[name=T extendText=null]\n");
|
||||
}
|
||||
|
||||
public void testClassObject() {
|
||||
doBuildTest("class C { class object { fun foo() {} }}",
|
||||
"PsiJetFileStubImpl[package=]\n" +
|
||||
" CLASS:PsiJetClassStubImpl[name=C fqn=C superNames=[]]\n" +
|
||||
" TYPE_PARAMETER_LIST:PsiJetTypeParameterListStubImpl\n" +
|
||||
" OBJECT_DECLARATION:PsiJetObjectStubImpl[class-object name=null fqName=null]\n" +
|
||||
" FUN:PsiJetFunctionStubImpl[name=foo]\n" +
|
||||
" VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n");
|
||||
}
|
||||
|
||||
public void testFunctionInNotNamedObject() {
|
||||
doBuildTest("object { fun testing() = 12 }",
|
||||
"PsiJetFileStubImpl[package=]\n" +
|
||||
|
||||
Reference in New Issue
Block a user