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:
Andrey Breslav
2013-02-14 19:48:56 +04:00
parent 53b2bbad68
commit 15938e3d28
6 changed files with 59 additions and 13 deletions
@@ -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" +