Support DefaultImpls in light-classes and indices
#KT-4647 Fixed
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user