Refactored

This commit is contained in:
Valentin Kipyatkov
2015-11-05 23:20:33 +03:00
parent 0ac60701fc
commit 97ca5f0389
3 changed files with 23 additions and 18 deletions
@@ -66,17 +66,17 @@ fun PsiMember.getJavaMemberDescriptor(resolutionFacade: ResolutionFacade? = null
}
}
fun ResolutionFacade.psiClassToDescriptor(
psiClass: PsiClass,
fun PsiClass.resolveToDescriptor(
resolutionFacade: ResolutionFacade,
declarationTranslator: (KtClassOrObject) -> KtClassOrObject? = { it }
): ClassDescriptor? {
return if (psiClass is KtLightClass && psiClass !is KtLightClassForDecompiledDeclaration) {
val origin = psiClass.getOrigin() ?: return null
return if (this is KtLightClass && this !is KtLightClassForDecompiledDeclaration) {
val origin = this.getOrigin() ?: return null
val declaration = declarationTranslator(origin) ?: return null
resolveToDescriptor(declaration)
resolutionFacade.resolveToDescriptor(declaration)
}
else {
psiClass.getJavaClassDescriptor(this)
getJavaClassDescriptor(resolutionFacade)
} as? ClassDescriptor
}
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.idea.caches.resolve.psiClassToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.completion.*
import org.jetbrains.kotlin.idea.completion.handlers.KotlinFunctionInsertHandler
@@ -302,9 +302,10 @@ class TypeInstantiationItems(
override fun search(nameFilter: (String) -> Boolean, consumer: (LookupElement) -> Unit) {
val parameters = ClassInheritorsSearch.SearchParameters(psiClass, inheritorSearchScope, true, true, false, nameFilter)
for (inheritor in ClassInheritorsSearch.search(parameters)) {
val descriptor = resolutionFacade.psiClassToDescriptor(
inheritor,
{ toFromOriginalFileMapper.toSyntheticFile(it) as KtClassOrObject? }) as? ClassDescriptor ?: continue
val descriptor = inheritor.resolveToDescriptor(
resolutionFacade,
{ toFromOriginalFileMapper.toSyntheticFile(it) as KtClassOrObject? }
) ?: continue
if (!visibilityFilter(descriptor)) continue
var inheritorFuzzyType = FuzzyType(descriptor.defaultType, descriptor.typeConstructor.parameters)
@@ -24,11 +24,14 @@ import com.intellij.psi.search.PsiShortNamesCache
import com.intellij.psi.stubs.StringStubIndexExtension
import com.intellij.util.Processor
import com.intellij.util.indexing.IdFilter
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.getJavaFieldDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMethodDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.psiClassToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.imports.importableFqName
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
import org.jetbrains.kotlin.idea.stubindex.*
@@ -161,12 +164,13 @@ public class KotlinIndicesHelper(
return result
}
public fun getJvmClassesByName(name: String): Collection<ClassifierDescriptor>
= PsiShortNamesCache.getInstance(project).getClassesByName(name, scope)
.map { resolutionFacade.psiClassToDescriptor(it) }
.filterNotNull()
.filter(descriptorFilter)
.toSet()
public fun getJvmClassesByName(name: String): Collection<ClassDescriptor> {
return PsiShortNamesCache.getInstance(project).getClassesByName(name, scope)
.map { it.resolveToDescriptor(resolutionFacade) }
.filterNotNull()
.filter(descriptorFilter)
.toSet()
}
public fun getKotlinClasses(nameFilter: (String) -> Boolean, kindFilter: (ClassKind) -> Boolean): Collection<ClassDescriptor> {
return KotlinFullClassNameIndex.getInstance().getAllKeys(project).asSequence()