Refactoring: move method to utility and don't create intermediate kotlin scope

This commit is contained in:
Nikolay Krasko
2014-10-08 19:32:33 +04:00
parent 3ea2d420b2
commit 1143db85f1
3 changed files with 24 additions and 37 deletions
@@ -26,16 +26,15 @@ import com.intellij.psi.util.PsiModificationTracker
import com.intellij.psi.util.CachedValueProvider
import org.jetbrains.jet.lang.resolve.BindingContext
import com.intellij.openapi.components.ServiceManager
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.jet.plugin.project.AnalyzerFacadeProvider
import org.jetbrains.jet.plugin.project.TargetPlatform
import org.jetbrains.jet.plugin.project.TargetPlatform.*
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies
import org.jetbrains.jet.plugin.project.TargetPlatformDetector
import org.jetbrains.jet.lang.psi.JetCodeFragment
import org.jetbrains.jet.plugin.stubindex.JetSourceFilterScope
import org.jetbrains.jet.utils.keysToMap
import com.intellij.openapi.roots.ProjectRootModificationTracker
import org.jetbrains.jet.plugin.util.ProjectRootsUtil
private val LOG = Logger.getInstance(javaClass<KotlinCacheService>())
@@ -171,7 +170,7 @@ public class KotlinCacheService(val project: Project) {
public fun getLazyResolveSession(element: JetElement): ResolveSessionForBodies {
val file = element.getContainingJetFile()
if (!isFileInScope(file)) {
if (!ProjectRootsUtil.isInProjectSource(file)) {
return getCacheForSyntheticFile(file).getLazyResolveSession(file)
}
@@ -182,25 +181,13 @@ public class KotlinCacheService(val project: Project) {
if (elements.isEmpty()) return AnalyzeExhaust.EMPTY
val firstFile = elements.first().getContainingJetFile()
if (elements.size == 1 && (!isFileInScope(firstFile) && firstFile !is JetCodeFragment)) {
if (elements.size == 1 && (!ProjectRootsUtil.isInProjectSource(firstFile) && firstFile !is JetCodeFragment)) {
return getCacheForSyntheticFile(firstFile).getAnalysisResultsForElements(elements)
}
return getGlobalCache(TargetPlatformDetector.getPlatform(firstFile)).getAnalysisResultsForElements(elements)
}
private fun isFileInScope(jetFile: JetFile): Boolean {
val virtualFile = jetFile.getVirtualFile()
if (virtualFile == null) {
return false
}
return virtualFile in kotlinSourcesInProjectScope()
}
private fun kotlinSourcesInProjectScope(): GlobalSearchScope {
return JetSourceFilterScope.kotlinSources(GlobalSearchScope.allScope(project), project)
}
public fun <T> get(extension: CacheExtension<T>): T {
return getGlobalCache(extension.platform)[extension]
}
@@ -23,7 +23,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.search.DelegatingGlobalSearchScope;
import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager;
import org.jetbrains.jet.plugin.util.ProjectRootsUtil;
public class JetSourceFilterScope extends DelegatingGlobalSearchScope {
@NotNull
@@ -59,22 +59,6 @@ public class JetSourceFilterScope extends DelegatingGlobalSearchScope {
return false;
}
return isInProjectSources(project, file, index, /* withClassesRoots */ true, includeLibraries);
}
public static boolean isInProjectSources(
@NotNull Project project,
@NotNull VirtualFile file,
@NotNull ProjectFileIndex fileIndex,
boolean withClassesRoots,
boolean withLibraries
) {
if (fileIndex.isInSourceContent(file)) {
return !JetModuleTypeManager.getInstance().isKtFileInGradleProjectInWrongFolder(file, project);
}
if (!withLibraries) return false;
return (withClassesRoots && fileIndex.isInLibraryClasses(file)) || fileIndex.isInLibrarySource(file);
return ProjectRootsUtil.isInSources(project, file, includeLibraries, /* withLibraryClassesRoots */ true, index);
}
}
@@ -21,9 +21,26 @@ import com.intellij.psi.PsiElement
import kotlin.platform.platformStatic
import org.jetbrains.jet.plugin.util.application.runReadAction
import org.jetbrains.jet.plugin.stubindex.JetSourceFilterScope
import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
public object ProjectRootsUtil {
private fun isInSource(element: PsiElement, includeLibrarySources: Boolean): Boolean {
platformStatic
public fun isInSources(project: Project, file: VirtualFile,
includeLibrarySources: Boolean, withLibraryClassesRoots: Boolean,
fileIndex: ProjectFileIndex = ProjectFileIndex.SERVICE.getInstance(project)): Boolean {
if (fileIndex.isInSourceContent(file)) {
return !JetModuleTypeManager.getInstance()!!.isKtFileInGradleProjectInWrongFolder(file, project)
}
if (!includeLibrarySources) return false
return (withLibraryClassesRoots && fileIndex.isInLibraryClasses(file)) || fileIndex.isInLibrarySource(file)
}
platformStatic
public fun isInSource(element: PsiElement, includeLibrarySources: Boolean, withLibraryClassesRoots: Boolean = false): Boolean {
return runReadAction { (): Boolean ->
val containingFile = element.getContainingFile()
if (containingFile == null) return@runReadAction false
@@ -32,8 +49,7 @@ public object ProjectRootsUtil {
if (virtualFile == null) return@runReadAction false
val project = element.getProject()
val index = ProjectFileIndex.SERVICE.getInstance(project)
return@runReadAction JetSourceFilterScope.isInProjectSources(project, virtualFile, index, false, includeLibrarySources)
return@runReadAction isInSources(project, virtualFile, includeLibrarySources, withLibraryClassesRoots)
}!!
}