Got rid of allKotlinClasses() method
This commit is contained in:
+8
-8
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.analyzer.AnalysisResult;
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||
import org.jetbrains.kotlin.context.ModuleContext;
|
||||
import org.jetbrains.kotlin.context.MutableModuleContext;
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.ModuleParameters;
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider;
|
||||
@@ -34,7 +34,6 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker;
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider;
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache;
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap;
|
||||
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
||||
@@ -42,6 +41,8 @@ import org.jetbrains.kotlin.psi.JetFile;
|
||||
import org.jetbrains.kotlin.resolve.*;
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension;
|
||||
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter;
|
||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -62,13 +63,12 @@ public enum TopDownAnalyzerFacadeForJVM {
|
||||
list.add(new ImportPath("kotlin.annotation.*"));
|
||||
list.add(new ImportPath("kotlin.jvm.*"));
|
||||
list.add(new ImportPath("kotlin.io.*"));
|
||||
// all classes from package "kotlin" mapped to java classes are imported explicitly so that they take priority over classes from java.lang
|
||||
for (ClassDescriptor descriptor : JavaToKotlinClassMap.INSTANCE.allKotlinClasses()) {
|
||||
FqName fqName = DescriptorUtils.getFqNameSafe(descriptor);
|
||||
if (fqName.parent().equals(new FqName("kotlin"))) {
|
||||
list.add(new ImportPath(fqName, false));
|
||||
}
|
||||
|
||||
JetScope builtInsScope = KotlinBuiltIns.getInstance().getBuiltInsPackageScope();
|
||||
for (DeclarationDescriptor descriptor : builtInsScope.getDescriptors(DescriptorKindFilter.CLASSIFIERS, JetScope.ALL_NAME_FILTER)) {
|
||||
list.add(new ImportPath(DescriptorUtils.getFqNameSafe(descriptor), false));
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
-22
@@ -20,7 +20,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.builtins.CompanionObjectMapping;
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||
import org.jetbrains.kotlin.builtins.PrimitiveType;
|
||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.kotlin.name.ClassId;
|
||||
@@ -215,25 +214,4 @@ public class JavaToKotlinClassMap implements PlatformToKotlinClassMap {
|
||||
}
|
||||
return mutable;
|
||||
}
|
||||
|
||||
// TODO: get rid of this method, it's unclear what it does
|
||||
@NotNull
|
||||
public List<ClassDescriptor> allKotlinClasses() {
|
||||
KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance();
|
||||
|
||||
List<ClassDescriptor> result = new ArrayList<ClassDescriptor>();
|
||||
result.addAll(javaToKotlin.values());
|
||||
result.addAll(readOnlyToMutable.values());
|
||||
|
||||
for (PrimitiveType type : PrimitiveType.values()) {
|
||||
result.add(builtIns.getPrimitiveArrayClassDescriptor(type));
|
||||
}
|
||||
|
||||
result.add(builtIns.getArray());
|
||||
|
||||
result.add(builtIns.getUnit());
|
||||
result.add(builtIns.getNothing());
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
+19
-11
@@ -20,29 +20,25 @@ import com.intellij.codeInsight.completion.AllClassesGetter
|
||||
import com.intellij.codeInsight.completion.CompletionParameters
|
||||
import com.intellij.codeInsight.completion.PrefixMatcher
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.asJava.KotlinLightClass
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
|
||||
import org.jetbrains.kotlin.idea.core.KotlinIndicesHelper
|
||||
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil
|
||||
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
||||
import org.jetbrains.kotlin.psi.JetFile
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.getDescriptorsFiltered
|
||||
|
||||
class AllClassesCompletion(private val parameters: CompletionParameters,
|
||||
private val kotlinIndicesHelper: KotlinIndicesHelper,
|
||||
private val prefixMatcher: PrefixMatcher,
|
||||
private val kindFilter: (ClassKind) -> Boolean) {
|
||||
private val kindFilter: (ClassKind) -> Boolean
|
||||
) {
|
||||
fun collect(classDescriptorCollector: (ClassDescriptor) -> Unit, javaClassCollector: (PsiClass) -> Unit) {
|
||||
//TODO: this is a temporary hack until we have built-ins in indices
|
||||
val builtIns = JavaToKotlinClassMap.INSTANCE.allKotlinClasses()
|
||||
val filteredBuiltIns = builtIns
|
||||
.filter { kindFilter(it.getKind()) && prefixMatcher.prefixMatches(it.getName().asString()) }
|
||||
filteredBuiltIns.forEach { classDescriptorCollector(it) }
|
||||
collectClassesFromScope(classDescriptorCollector, KotlinBuiltIns.getInstance().builtInsPackageScope)
|
||||
|
||||
kotlinIndicesHelper
|
||||
.getKotlinClasses({ prefixMatcher.prefixMatches(it) }, kindFilter)
|
||||
@@ -53,6 +49,18 @@ class AllClassesCompletion(private val parameters: CompletionParameters,
|
||||
}
|
||||
}
|
||||
|
||||
private fun collectClassesFromScope(collector: (ClassDescriptor) -> Unit, scope: JetScope) {
|
||||
for (descriptor in scope.getDescriptorsFiltered(DescriptorKindFilter.CLASSIFIERS)) {
|
||||
if (descriptor is ClassDescriptor) {
|
||||
if (kindFilter(descriptor.kind) && prefixMatcher.prefixMatches(descriptor.name.asString())) {
|
||||
collector(descriptor)
|
||||
}
|
||||
|
||||
collectClassesFromScope(collector, descriptor.unsubstitutedInnerClassesScope)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun addAdaptedJavaCompletion(collector: (PsiClass) -> Unit) {
|
||||
AllClassesGetter.processJavaClasses(parameters, prefixMatcher, true, { psiClass ->
|
||||
if (psiClass!! !is KotlinLightClass) { // Kotlin class should have already been added as kotlin element before
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
val v: Mutable<caret>
|
||||
|
||||
// INVOCATION_COUNT: 2
|
||||
// EXIST: MutableEntry
|
||||
+6
@@ -469,6 +469,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("NestedBuiltInClass.kt")
|
||||
public void testNestedBuiltInClass() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/NestedBuiltInClass.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("NestedClassBug.kt")
|
||||
public void testNestedClassBug() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/NestedClassBug.kt");
|
||||
|
||||
+6
@@ -469,6 +469,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("NestedBuiltInClass.kt")
|
||||
public void testNestedBuiltInClass() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/NestedBuiltInClass.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("NestedClassBug.kt")
|
||||
public void testNestedClassBug() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/NestedClassBug.kt");
|
||||
|
||||
Reference in New Issue
Block a user