Support DefaultImpls in light-classes and indices

#KT-4647 Fixed
This commit is contained in:
Denis Zharkov
2015-09-29 13:27:00 +03:00
parent 8b8fa40348
commit 22d58239e3
13 changed files with 192 additions and 7 deletions
@@ -26,11 +26,13 @@ import com.intellij.util.Processor
import com.intellij.util.containers.ContainerUtil
import com.intellij.util.containers.HashSet
import org.jetbrains.kotlin.asJava.JavaElementFinder
import org.jetbrains.kotlin.asJava.defaultImplsChild
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
import org.jetbrains.kotlin.idea.stubindex.JetClassShortNameIndex
import org.jetbrains.kotlin.idea.stubindex.JetFileFacadeShortNameIndex
import org.jetbrains.kotlin.idea.stubindex.JetFunctionShortNameIndex
import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.name.FqName
import java.util.*
@@ -68,10 +70,14 @@ public class JetShortNamesCache(private val project: Project) : PsiShortNamesCac
for (fqName in allFqNames) {
if (fqName == null) continue
assert(fqName.shortName().asString() == name) {
val isInterfaceDefaultImpl = name == JvmAbi.DEFAULT_IMPLS_CLASS_NAME && fqName.shortName().asString() != name
assert(fqName.shortName().asString() == name || isInterfaceDefaultImpl) {
"A declaration obtained from index has non-matching name:\nin index: $name\ndeclared: ${fqName.shortName()}($fqName)"
}
val psiClass = JavaElementFinder.getInstance(project).findClass(fqName.asString(), scope)
val fqNameToSearch = if (isInterfaceDefaultImpl) fqName.defaultImplsChild() else fqName
val psiClass = JavaElementFinder.getInstance(project).findClass(fqNameToSearch.asString(), scope)
if (psiClass != null) {
result.add(psiClass)
}
@@ -24,6 +24,7 @@ import com.intellij.util.io.StringRef;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name;
@@ -35,7 +36,6 @@ import org.jetbrains.kotlin.util.TypeIndexUtilKt;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class IdeStubIndexService extends StubIndexService {
@@ -95,6 +95,10 @@ public class IdeStubIndexService extends StubIndexService {
}
}
if (stub.isInterface()) {
sink.occurrence(JetClassShortNameIndex.getInstance().getKey(), JvmAbi.DEFAULT_IMPLS_CLASS_NAME);
}
indexSuperNames(stub, sink);
}