Introduce utility functions for operations on search scopes
This commit is contained in:
+6
-2
@@ -49,6 +49,11 @@ import com.intellij.refactoring.util.TextOccurrencesUtil
|
|||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
import org.jetbrains.jet.plugin.refactoring.move.PackageNameInfo
|
import org.jetbrains.jet.plugin.refactoring.move.PackageNameInfo
|
||||||
import org.jetbrains.jet.plugin.refactoring.move.updateInternalReferencesOnPackageNameChange
|
import org.jetbrains.jet.plugin.refactoring.move.updateInternalReferencesOnPackageNameChange
|
||||||
|
import org.jetbrains.jet.plugin.search.projectScope
|
||||||
|
import org.jetbrains.jet.plugin.search.fileScope
|
||||||
|
import org.jetbrains.jet.plugin.search.not
|
||||||
|
import org.jetbrains.jet.plugin.search.and
|
||||||
|
import org.jetbrains.jet.plugin.search.minus
|
||||||
|
|
||||||
public class MoveKotlinFileHandler : MoveFileHandler() {
|
public class MoveKotlinFileHandler : MoveFileHandler() {
|
||||||
class object {
|
class object {
|
||||||
@@ -108,8 +113,7 @@ public class MoveKotlinFileHandler : MoveFileHandler() {
|
|||||||
val project = psiFile.getProject()
|
val project = psiFile.getProject()
|
||||||
val newPackageName = newParent.getPackage()?.getQualifiedName() ?: ""
|
val newPackageName = newParent.getPackage()?.getQualifiedName() ?: ""
|
||||||
|
|
||||||
val searchScope = GlobalSearchScope.projectScope(project) intersectWith
|
val searchScope = project.projectScope() - psiFile.fileScope()
|
||||||
GlobalSearchScope.notScope(GlobalSearchScope.fileScope(psiFile))
|
|
||||||
return psiFile.getDeclarations().flatMap { declaration ->
|
return psiFile.getDeclarations().flatMap { declaration ->
|
||||||
val name = (declaration as? JetNamedDeclaration)?.getName()
|
val name = (declaration as? JetNamedDeclaration)?.getName()
|
||||||
if (name != null) {
|
if (name != null) {
|
||||||
|
|||||||
+2
-1
@@ -71,6 +71,7 @@ import com.intellij.util.VisibilityUtil
|
|||||||
import com.intellij.openapi.util.Ref
|
import com.intellij.openapi.util.Ref
|
||||||
import org.jetbrains.jet.plugin.refactoring.getKotlinFqName
|
import org.jetbrains.jet.plugin.refactoring.getKotlinFqName
|
||||||
import org.jetbrains.jet.plugin.references.JetSimpleNameReference.ShorteningMode
|
import org.jetbrains.jet.plugin.references.JetSimpleNameReference.ShorteningMode
|
||||||
|
import org.jetbrains.jet.plugin.search.projectScope
|
||||||
|
|
||||||
public class MoveKotlinTopLevelDeclarationsOptions(
|
public class MoveKotlinTopLevelDeclarationsOptions(
|
||||||
val elementsToMove: Collection<JetNamedDeclaration>,
|
val elementsToMove: Collection<JetNamedDeclaration>,
|
||||||
@@ -107,7 +108,7 @@ public class MoveKotlinTopLevelDeclarationsProcessor(project: Project, val optio
|
|||||||
val newFqName = StringUtil.getQualifiedName(newPackageName, lightElement.getName())
|
val newFqName = StringUtil.getQualifiedName(newPackageName, lightElement.getName())
|
||||||
|
|
||||||
val foundReferences = HashSet<PsiReference>()
|
val foundReferences = HashSet<PsiReference>()
|
||||||
val projectScope = GlobalSearchScope.projectScope(lightElement.getProject())
|
val projectScope = lightElement.getProject().projectScope()
|
||||||
val results = ReferencesSearch
|
val results = ReferencesSearch
|
||||||
.search(lightElement, projectScope, false)
|
.search(lightElement, projectScope, false)
|
||||||
.mapTo(ArrayList<UsageInfo?>()) { ref ->
|
.mapTo(ArrayList<UsageInfo?>()) { ref ->
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import org.jetbrains.jet.asJava.*
|
|||||||
import org.jetbrains.jet.lang.psi.JetElement
|
import org.jetbrains.jet.lang.psi.JetElement
|
||||||
import org.jetbrains.jet.utils.keysToMap
|
import org.jetbrains.jet.utils.keysToMap
|
||||||
import com.intellij.psi.PsiMethod
|
import com.intellij.psi.PsiMethod
|
||||||
|
import org.jetbrains.jet.plugin.search.allScope
|
||||||
|
|
||||||
public trait JetReference : PsiPolyVariantReference {
|
public trait JetReference : PsiPolyVariantReference {
|
||||||
public fun resolveToDescriptors(): Collection<DeclarationDescriptor>
|
public fun resolveToDescriptors(): Collection<DeclarationDescriptor>
|
||||||
@@ -120,7 +121,7 @@ abstract class AbstractJetReference<T : JetElement>(element: T)
|
|||||||
val psiFacade = JavaPsiFacade.getInstance(project)
|
val psiFacade = JavaPsiFacade.getInstance(project)
|
||||||
val fqName = (targetDescriptor as PackageViewDescriptor).getFqName().asString()
|
val fqName = (targetDescriptor as PackageViewDescriptor).getFqName().asString()
|
||||||
ContainerUtil.addIfNotNull(result, psiFacade.findPackage(fqName))
|
ContainerUtil.addIfNotNull(result, psiFacade.findPackage(fqName))
|
||||||
ContainerUtil.addIfNotNull(result, psiFacade.findClass(fqName, GlobalSearchScope.allScope(project)))
|
ContainerUtil.addIfNotNull(result, psiFacade.findClass(fqName, project.allScope()))
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import com.intellij.psi.search.searches.DirectClassInheritorsSearch
|
|||||||
import com.intellij.util.EmptyQuery
|
import com.intellij.util.EmptyQuery
|
||||||
import com.intellij.util.MergeQuery
|
import com.intellij.util.MergeQuery
|
||||||
import org.jetbrains.jet.asJava.toLightMethods
|
import org.jetbrains.jet.asJava.toLightMethods
|
||||||
|
import org.jetbrains.jet.plugin.search.allScope
|
||||||
|
|
||||||
fun PsiElement.isOverridableElement(): Boolean = when (this) {
|
fun PsiElement.isOverridableElement(): Boolean = when (this) {
|
||||||
is PsiMethod -> PsiUtil.canBeOverriden(this)
|
is PsiMethod -> PsiUtil.canBeOverriden(this)
|
||||||
@@ -70,7 +71,7 @@ public object KotlinPsiMethodOverridersSearch : HierarchySearch<PsiMethod>(PsiMe
|
|||||||
override fun nextElements(current: PsiClass): Iterable<PsiClass> =
|
override fun nextElements(current: PsiClass): Iterable<PsiClass> =
|
||||||
DirectClassInheritorsSearch.search(
|
DirectClassInheritorsSearch.search(
|
||||||
current,
|
current,
|
||||||
GlobalSearchScope.allScope(current.getProject()),
|
current.getProject().allScope(),
|
||||||
/* checkInheritance = */ true,
|
/* checkInheritance = */ true,
|
||||||
/* includeAnonymous = */ true
|
/* includeAnonymous = */ true
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-1
@@ -27,6 +27,7 @@ import org.jetbrains.jet.plugin.libraries.JetSourceNavigationHelper
|
|||||||
import org.jetbrains.jet.plugin.stubindex.JetSuperClassIndex
|
import org.jetbrains.jet.plugin.stubindex.JetSuperClassIndex
|
||||||
import org.jetbrains.jet.lang.resolve.*
|
import org.jetbrains.jet.lang.resolve.*
|
||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
|
import org.jetbrains.jet.plugin.search.fileScope
|
||||||
|
|
||||||
public open class KotlinDirectInheritorsSearcher() : QueryExecutorBase<PsiClass, DirectClassInheritorsSearch.SearchParameters>(true) {
|
public open class KotlinDirectInheritorsSearcher() : QueryExecutorBase<PsiClass, DirectClassInheritorsSearch.SearchParameters>(true) {
|
||||||
public override fun processQuery(queryParameters: DirectClassInheritorsSearch.SearchParameters, consumer: Processor<PsiClass>) {
|
public override fun processQuery(queryParameters: DirectClassInheritorsSearch.SearchParameters, consumer: Processor<PsiClass>) {
|
||||||
@@ -40,7 +41,7 @@ public open class KotlinDirectInheritorsSearcher() : QueryExecutorBase<PsiClass,
|
|||||||
val scope = if (originalScope is GlobalSearchScope)
|
val scope = if (originalScope is GlobalSearchScope)
|
||||||
originalScope
|
originalScope
|
||||||
else
|
else
|
||||||
baseClass.getContainingFile()?.let { file -> GlobalSearchScope.fileScope(file) }
|
baseClass.getContainingFile()?.let { file -> file.fileScope() }
|
||||||
|
|
||||||
if (scope == null) return
|
if (scope == null) return
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2014 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.jet.plugin.search
|
||||||
|
|
||||||
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.psi.PsiFile
|
||||||
|
import com.intellij.psi.search.SearchScope
|
||||||
|
|
||||||
|
fun SearchScope.and(otherScope: SearchScope): SearchScope = intersectWith(otherScope)
|
||||||
|
fun SearchScope.or(otherScope: SearchScope): SearchScope = union(otherScope)
|
||||||
|
fun SearchScope.minus(otherScope: GlobalSearchScope) = this and !otherScope
|
||||||
|
fun GlobalSearchScope.not(): GlobalSearchScope = GlobalSearchScope.notScope(this)
|
||||||
|
|
||||||
|
fun Project.allScope(): GlobalSearchScope = GlobalSearchScope.allScope(this)
|
||||||
|
|
||||||
|
fun Project.projectScope(): GlobalSearchScope = GlobalSearchScope.projectScope(this)
|
||||||
|
|
||||||
|
fun PsiFile.fileScope(): GlobalSearchScope = GlobalSearchScope.fileScope(this)
|
||||||
@@ -46,6 +46,7 @@ import com.intellij.util.EmptyQuery
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import java.util.ArrayDeque
|
import java.util.ArrayDeque
|
||||||
import org.jetbrains.jet.plugin.search.usagesSearch.UsagesSearchFilter.*
|
import org.jetbrains.jet.plugin.search.usagesSearch.UsagesSearchFilter.*
|
||||||
|
import org.jetbrains.jet.plugin.search.and
|
||||||
|
|
||||||
public data class UsagesSearchLocation(
|
public data class UsagesSearchLocation(
|
||||||
val inCode: Boolean = true,
|
val inCode: Boolean = true,
|
||||||
@@ -152,7 +153,7 @@ fun <A: PsiElement, B: PsiElement> UsagesSearchTarget<A>.retarget(element: B) =
|
|||||||
UsagesSearchTarget<B>(element, scope, location, restrictByTargetScope)
|
UsagesSearchTarget<B>(element, scope, location, restrictByTargetScope)
|
||||||
|
|
||||||
val <T: PsiElement> UsagesSearchTarget<T>.effectiveScope: SearchScope
|
val <T: PsiElement> UsagesSearchTarget<T>.effectiveScope: SearchScope
|
||||||
get() = if (restrictByTargetScope) scope.intersectWith(element.effectiveScope) else scope
|
get() = if (restrictByTargetScope) scope and element.effectiveScope else scope
|
||||||
|
|
||||||
val PsiElement.effectiveScope: SearchScope
|
val PsiElement.effectiveScope: SearchScope
|
||||||
get() = PsiSearchHelper.SERVICE.getInstance(getProject())!!.getUseScope(this)
|
get() = PsiSearchHelper.SERVICE.getInstance(getProject())!!.getUseScope(this)
|
||||||
|
|||||||
+2
-1
@@ -27,11 +27,12 @@ import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFacto
|
|||||||
import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFactoryService
|
import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFactoryService
|
||||||
import org.jetbrains.jet.plugin.stubindex.JetSourceFilterScope
|
import org.jetbrains.jet.plugin.stubindex.JetSourceFilterScope
|
||||||
import org.jetbrains.jet.storage.StorageManager
|
import org.jetbrains.jet.storage.StorageManager
|
||||||
|
import org.jetbrains.jet.plugin.search.allScope
|
||||||
|
|
||||||
public class PluginDeclarationProviderFactoryService : DeclarationProviderFactoryService() {
|
public class PluginDeclarationProviderFactoryService : DeclarationProviderFactoryService() {
|
||||||
|
|
||||||
override fun create(project: Project, storageManager: StorageManager, files: Collection<JetFile>): DeclarationProviderFactory {
|
override fun create(project: Project, storageManager: StorageManager, files: Collection<JetFile>): DeclarationProviderFactory {
|
||||||
val indexedSourcesScope = JetSourceFilterScope.kotlinSourcesAndLibraries(GlobalSearchScope.allScope(project))
|
val indexedSourcesScope = JetSourceFilterScope.kotlinSourcesAndLibraries(project.allScope())
|
||||||
val nonIndexedFiles = files.filter {
|
val nonIndexedFiles = files.filter {
|
||||||
file ->
|
file ->
|
||||||
!file.isPhysical() || !indexedSourcesScope.contains(file.getVirtualFile()!!)
|
!file.isPhysical() || !indexedSourcesScope.contains(file.getVirtualFile()!!)
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ import org.jetbrains.jet.plugin.refactoring.move.moveTopLevelDeclarations.MoveDe
|
|||||||
import org.jetbrains.jet.plugin.refactoring.move.moveTopLevelDeclarations.MoveKotlinTopLevelDeclarationsOptions
|
import org.jetbrains.jet.plugin.refactoring.move.moveTopLevelDeclarations.MoveKotlinTopLevelDeclarationsOptions
|
||||||
import org.jetbrains.jet.plugin.refactoring.move.moveTopLevelDeclarations.JetFileKotlinMoveTarget
|
import org.jetbrains.jet.plugin.refactoring.move.moveTopLevelDeclarations.JetFileKotlinMoveTarget
|
||||||
import org.jetbrains.jet.lang.psi.JetFile
|
import org.jetbrains.jet.lang.psi.JetFile
|
||||||
|
import org.jetbrains.jet.plugin.search.allScope
|
||||||
|
|
||||||
public abstract class AbstractJetMoveTest : MultiFileTestCase() {
|
public abstract class AbstractJetMoveTest : MultiFileTestCase() {
|
||||||
protected fun doTest(path: String) {
|
protected fun doTest(path: String) {
|
||||||
@@ -194,7 +195,7 @@ enum class MoveAction {
|
|||||||
MoveClassToInnerProcessor(
|
MoveClassToInnerProcessor(
|
||||||
project,
|
project,
|
||||||
array(classToMove),
|
array(classToMove),
|
||||||
JavaPsiFacade.getInstance(project).findClass(targetClass, GlobalSearchScope.allScope(project))!!,
|
JavaPsiFacade.getInstance(project).findClass(targetClass, project.allScope())!!,
|
||||||
/* searchInComments = */ false,
|
/* searchInComments = */ false,
|
||||||
/* searchInNonJavaFiles = */ true,
|
/* searchInNonJavaFiles = */ true,
|
||||||
/* moveCallback = */ null
|
/* moveCallback = */ null
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe
|
|||||||
import org.jetbrains.jet.lang.resolve.name.isSubpackageOf
|
import org.jetbrains.jet.lang.resolve.name.isSubpackageOf
|
||||||
import org.jetbrains.jet.getString
|
import org.jetbrains.jet.getString
|
||||||
import org.jetbrains.jet.getNullableString
|
import org.jetbrains.jet.getNullableString
|
||||||
|
import org.jetbrains.jet.plugin.search.allScope
|
||||||
|
|
||||||
private enum class RenameType {
|
private enum class RenameType {
|
||||||
JAVA_CLASS
|
JAVA_CLASS
|
||||||
@@ -104,7 +105,7 @@ public abstract class AbstractRenameTest : MultiFileTestCase() {
|
|||||||
val newName = renameParamsObject.getString("newName")
|
val newName = renameParamsObject.getString("newName")
|
||||||
|
|
||||||
doTest { rootDir, rootAfter ->
|
doTest { rootDir, rootAfter ->
|
||||||
val aClass = context.javaFacade.findClass(classFQN, GlobalSearchScope.allScope(context.project))!!
|
val aClass = context.javaFacade.findClass(classFQN, context.project.allScope())!!
|
||||||
val substitution = RenamePsiElementProcessor.forElement(aClass).substituteElementToRename(aClass, null)
|
val substitution = RenamePsiElementProcessor.forElement(aClass).substituteElementToRename(aClass, null)
|
||||||
|
|
||||||
RenameProcessor(context.project, substitution, newName, true, true).run()
|
RenameProcessor(context.project, substitution, newName, true, true).run()
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import com.intellij.openapi.roots.ModuleRootModificationUtil
|
import com.intellij.openapi.roots.ModuleRootModificationUtil
|
||||||
|
import org.jetbrains.jet.plugin.search.allScope
|
||||||
|
|
||||||
class RunConfigurationTest: CodeInsightTestCase() {
|
class RunConfigurationTest: CodeInsightTestCase() {
|
||||||
private val project: Project get() = myProject!!
|
private val project: Project get() = myProject!!
|
||||||
@@ -82,8 +83,7 @@ class RunConfigurationTest: CodeInsightTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createConfigurationFromMain(mainFqn: String): JetRunConfiguration {
|
private fun createConfigurationFromMain(mainFqn: String): JetRunConfiguration {
|
||||||
val mainFunction = JetTopLevelFunctionsFqnNameIndex.getInstance()!!.get(
|
val mainFunction = JetTopLevelFunctionsFqnNameIndex.getInstance()!!.get(mainFqn, project, project.allScope())!!.first()
|
||||||
mainFqn, project, GlobalSearchScope.allScope(project))!!.first()
|
|
||||||
|
|
||||||
val dataContext = MapDataContext()
|
val dataContext = MapDataContext()
|
||||||
dataContext.put(Location.DATA_KEY, PsiLocation(project, mainFunction))
|
dataContext.put(Location.DATA_KEY, PsiLocation(project, mainFunction))
|
||||||
|
|||||||
Reference in New Issue
Block a user