Added ResolutionFacada.resolveImportReference and used it (but not all places replaced yet!!)

This commit is contained in:
Valentin Kipyatkov
2015-05-16 13:53:31 +03:00
parent 5a737b8973
commit 1e60c24134
6 changed files with 40 additions and 56 deletions
@@ -33,13 +33,12 @@ import org.jetbrains.kotlin.idea.project.TargetPlatform.JS
import org.jetbrains.kotlin.idea.project.TargetPlatform.JVM
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.psi.JetCodeFragment
import org.jetbrains.kotlin.psi.JetDeclaration
import org.jetbrains.kotlin.psi.JetElement
import org.jetbrains.kotlin.psi.JetFile
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.scopes.JetScope
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator
import org.jetbrains.kotlin.utils.keysToMap
import kotlin.platform.platformStatic
@@ -73,6 +72,15 @@ public class KotlinCacheService(val project: Project) {
return cache.getLazyResolveSession(file).getScopeProvider().getFileScope(file)
}
override fun resolveImportReference(file: JetFile, fqName: FqName): Collection<DeclarationDescriptor> {
val importDirective = JetPsiFactory(project).createImportDirective(ImportPath(fqName, false))
val moduleDescriptor = findModuleDescriptor(file)
val scope = JetModuleUtil.getSubpackagesOfRootScope(moduleDescriptor)
val resolver = cache.getLazyResolveSession(file).getQualifiedExpressionResolver()
return resolver.processImportReference(
importDirective, scope, scope, BindingTraceContext(), QualifiedExpressionResolver.LookupMode.EVERYTHING).getAllDescriptors()
}
override fun <T> get(extension: CacheExtension<T>): T {
return cache[extension]
}
@@ -16,14 +16,15 @@
package org.jetbrains.kotlin.idea.caches.resolve
import org.jetbrains.kotlin.psi.JetElement
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.psi.JetDeclaration
import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.JetDeclaration
import org.jetbrains.kotlin.psi.JetElement
import org.jetbrains.kotlin.psi.JetFile
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.scopes.JetScope
public trait ResolutionFacade {
@@ -36,6 +37,9 @@ public trait ResolutionFacade {
public fun getFileTopLevelScope(file: JetFile): JetScope
//TODO: better pass ModuleDescriptor here
public fun resolveImportReference(file: JetFile, fqName: FqName): Collection<DeclarationDescriptor>
public fun findModuleDescriptor(element: JetElement): ModuleDescriptor
public fun <T> get(extension: CacheExtension<T>): T
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.psi.psiUtil.PsiUtilPackage;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.BindingContextUtils;
import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver;
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode;
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
@@ -138,4 +139,9 @@ public class ResolveSessionForBodies implements KotlinCodeAnalyzer {
public PackageFragmentProvider getPackageFragmentProvider() {
return resolveSession.getPackageFragmentProvider();
}
@NotNull
public QualifiedExpressionResolver getQualifiedExpressionResolver() {
return resolveSession.getQualifiedExpressionResolver();
}
}