From ebce992f20ee73a89e0a6fe7695a0a4f2a7d55fe Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 2 Sep 2015 21:34:00 +0200 Subject: [PATCH] search for members of companion object in KotlinReferencesSearch is optional --- .../KotlinReferencesSearcher.kt | 39 +++++++++++-------- .../handlers/KotlinFindClassUsagesHandler.kt | 6 ++- .../handlers/KotlinFindMemberUsagesHandler.kt | 4 -- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt index d6bf79865b3..f687ae913c2 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.asJava.* import org.jetbrains.kotlin.idea.JetFileType import org.jetbrains.kotlin.idea.references.JetSimpleNameReference import org.jetbrains.kotlin.idea.search.KOTLIN_NAMED_ARGUMENT_SEARCH_CONTEXT +import org.jetbrains.kotlin.idea.search.allScope import org.jetbrains.kotlin.idea.search.usagesSearch.* import org.jetbrains.kotlin.idea.stubindex.JetSourceFilterScope import org.jetbrains.kotlin.idea.util.application.runReadAction @@ -34,9 +35,10 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.parents -data class KotlinReferencesSearchOptions(val acceptCallableOverrides: Boolean, - val acceptOverloads: Boolean, - val acceptExtensionsOfDeclarationClass: Boolean) { +data class KotlinReferencesSearchOptions(val acceptCallableOverrides: Boolean = false, + val acceptOverloads: Boolean = false, + val acceptExtensionsOfDeclarationClass: Boolean = false, + val acceptCompanionObjectMembers: Boolean = false) { fun anyEnabled(): Boolean = acceptCallableOverrides || acceptOverloads || acceptExtensionsOfDeclarationClass companion object { @@ -45,10 +47,10 @@ data class KotlinReferencesSearchOptions(val acceptCallableOverrides: Boolean, } public class KotlinReferencesSearchParameters(elementToSearch: PsiElement, - scope: SearchScope, - ignoreAccessScope: Boolean, - optimizer: SearchRequestCollector?, - val kotlinOptions: KotlinReferencesSearchOptions) + scope: SearchScope = elementToSearch.project.allScope(), + ignoreAccessScope: Boolean = false, + optimizer: SearchRequestCollector? = null, + val kotlinOptions: KotlinReferencesSearchOptions = KotlinReferencesSearchOptions.Empty) : ReferencesSearch.SearchParameters(elementToSearch, scope, ignoreAccessScope, optimizer) { } @@ -179,17 +181,20 @@ public class KotlinReferencesSearcher : QueryExecutorBase() - val originLightClass = LightClassUtil.getPsiClass(originClass) - if (originLightClass != null) { - val lightDeclarations: List?> = - originLightClass.methods.map { it as? KotlinLightMethod } + - originLightClass.fields.map { it as? KotlinLightFieldForDeclaration } + val kotlinReferencesSearchOptions = (queryParameters as? KotlinReferencesSearchParameters)?.kotlinOptions + if (kotlinReferencesSearchOptions?.acceptCompanionObjectMembers == true) { + val originClass = element.getStrictParentOfType() + val originLightClass = LightClassUtil.getPsiClass(originClass) + if (originLightClass != null) { + val lightDeclarations: List?> = + originLightClass.methods.map { it as? KotlinLightMethod } + + originLightClass.fields.map { it as? KotlinLightFieldForDeclaration } - for (declaration in element.declarations) { - val lightDeclaration = lightDeclarations.find { it?.getOrigin() == declaration } - if (lightDeclaration != null) { - searchNamedElement(queryParameters, lightDeclaration) + for (declaration in element.declarations) { + val lightDeclaration = lightDeclarations.find { it?.getOrigin() == declaration } + if (lightDeclaration != null) { + searchNamedElement(queryParameters, lightDeclaration) + } } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt index 84f45fb98ec..0fd0f584487 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt @@ -41,6 +41,8 @@ import org.jetbrains.kotlin.idea.findUsages.dialogs.KotlinFindClassUsagesDialog import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest import org.jetbrains.kotlin.idea.search.declarationsSearch.searchInheritors +import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions +import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor import org.jetbrains.kotlin.idea.search.usagesSearch.isConstructorUsage import org.jetbrains.kotlin.idea.search.usagesSearch.isImportUsage @@ -126,7 +128,9 @@ public class KotlinFindClassUsagesHandler( private fun processClassReferences(classOrObject: JetClassOrObject, options: KotlinClassFindUsagesOptions, processor: Processor): Boolean { - var usagesQuery = ReferencesSearch.search(classOrObject) + val searchParameters = KotlinReferencesSearchParameters(classOrObject, + kotlinOptions = KotlinReferencesSearchOptions(acceptCompanionObjectMembers = true)) + var usagesQuery = ReferencesSearch.search(searchParameters) if (options.isSkipImportStatements) { usagesQuery = FilteredQuery(usagesQuery) { !it.isImportUsage() } diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindMemberUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindMemberUsagesHandler.kt index e80595feeae..12c3598141d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindMemberUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindMemberUsagesHandler.kt @@ -35,7 +35,6 @@ import org.jetbrains.kotlin.idea.findUsages.KotlinFunctionFindUsagesOptions import org.jetbrains.kotlin.idea.findUsages.KotlinPropertyFindUsagesOptions import org.jetbrains.kotlin.idea.findUsages.dialogs.KotlinFindFunctionUsagesDialog import org.jetbrains.kotlin.idea.findUsages.dialogs.KotlinFindPropertyUsagesDialog -import org.jetbrains.kotlin.idea.search.allScope import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest import org.jetbrains.kotlin.idea.search.declarationsSearch.searchOverriders import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReadWriteAccessDetector @@ -126,9 +125,6 @@ public abstract class KotlinFindMemberUsagesHandler if (options.isUsages) { val searchParameters = KotlinReferencesSearchParameters(element, - element.project.allScope(), - ignoreAccessScope = false, - optimizer = null, kotlinOptions = createKotlinReferencesSearchOptions(options)) val query = applyQueryFilters(element, options, ReferencesSearch.search(searchParameters))