search for members of companion object in KotlinReferencesSearch is optional
This commit is contained in:
+22
-17
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.asJava.*
|
|||||||
import org.jetbrains.kotlin.idea.JetFileType
|
import org.jetbrains.kotlin.idea.JetFileType
|
||||||
import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
|
import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
|
||||||
import org.jetbrains.kotlin.idea.search.KOTLIN_NAMED_ARGUMENT_SEARCH_CONTEXT
|
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.search.usagesSearch.*
|
||||||
import org.jetbrains.kotlin.idea.stubindex.JetSourceFilterScope
|
import org.jetbrains.kotlin.idea.stubindex.JetSourceFilterScope
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
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.getStrictParentOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.parents
|
import org.jetbrains.kotlin.psi.psiUtil.parents
|
||||||
|
|
||||||
data class KotlinReferencesSearchOptions(val acceptCallableOverrides: Boolean,
|
data class KotlinReferencesSearchOptions(val acceptCallableOverrides: Boolean = false,
|
||||||
val acceptOverloads: Boolean,
|
val acceptOverloads: Boolean = false,
|
||||||
val acceptExtensionsOfDeclarationClass: Boolean) {
|
val acceptExtensionsOfDeclarationClass: Boolean = false,
|
||||||
|
val acceptCompanionObjectMembers: Boolean = false) {
|
||||||
fun anyEnabled(): Boolean = acceptCallableOverrides || acceptOverloads || acceptExtensionsOfDeclarationClass
|
fun anyEnabled(): Boolean = acceptCallableOverrides || acceptOverloads || acceptExtensionsOfDeclarationClass
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -45,10 +47,10 @@ data class KotlinReferencesSearchOptions(val acceptCallableOverrides: Boolean,
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class KotlinReferencesSearchParameters(elementToSearch: PsiElement,
|
public class KotlinReferencesSearchParameters(elementToSearch: PsiElement,
|
||||||
scope: SearchScope,
|
scope: SearchScope = elementToSearch.project.allScope(),
|
||||||
ignoreAccessScope: Boolean,
|
ignoreAccessScope: Boolean = false,
|
||||||
optimizer: SearchRequestCollector?,
|
optimizer: SearchRequestCollector? = null,
|
||||||
val kotlinOptions: KotlinReferencesSearchOptions)
|
val kotlinOptions: KotlinReferencesSearchOptions = KotlinReferencesSearchOptions.Empty)
|
||||||
: ReferencesSearch.SearchParameters(elementToSearch, scope, ignoreAccessScope, optimizer) {
|
: ReferencesSearch.SearchParameters(elementToSearch, scope, ignoreAccessScope, optimizer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,17 +181,20 @@ public class KotlinReferencesSearcher : QueryExecutorBase<PsiReference, Referenc
|
|||||||
searchNamedElement(queryParameters, fieldForCompanionObject)
|
searchNamedElement(queryParameters, fieldForCompanionObject)
|
||||||
}
|
}
|
||||||
|
|
||||||
val originClass = element.getStrictParentOfType<JetClass>()
|
val kotlinReferencesSearchOptions = (queryParameters as? KotlinReferencesSearchParameters)?.kotlinOptions
|
||||||
val originLightClass = LightClassUtil.getPsiClass(originClass)
|
if (kotlinReferencesSearchOptions?.acceptCompanionObjectMembers == true) {
|
||||||
if (originLightClass != null) {
|
val originClass = element.getStrictParentOfType<JetClass>()
|
||||||
val lightDeclarations: List<KotlinLightElement<*, *>?> =
|
val originLightClass = LightClassUtil.getPsiClass(originClass)
|
||||||
originLightClass.methods.map { it as? KotlinLightMethod } +
|
if (originLightClass != null) {
|
||||||
originLightClass.fields.map { it as? KotlinLightFieldForDeclaration }
|
val lightDeclarations: List<KotlinLightElement<*, *>?> =
|
||||||
|
originLightClass.methods.map { it as? KotlinLightMethod } +
|
||||||
|
originLightClass.fields.map { it as? KotlinLightFieldForDeclaration }
|
||||||
|
|
||||||
for (declaration in element.declarations) {
|
for (declaration in element.declarations) {
|
||||||
val lightDeclaration = lightDeclarations.find { it?.getOrigin() == declaration }
|
val lightDeclaration = lightDeclarations.find { it?.getOrigin() == declaration }
|
||||||
if (lightDeclaration != null) {
|
if (lightDeclaration != null) {
|
||||||
searchNamedElement(queryParameters, lightDeclaration)
|
searchNamedElement(queryParameters, lightDeclaration)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -41,6 +41,8 @@ import org.jetbrains.kotlin.idea.findUsages.dialogs.KotlinFindClassUsagesDialog
|
|||||||
import org.jetbrains.kotlin.idea.references.mainReference
|
import org.jetbrains.kotlin.idea.references.mainReference
|
||||||
import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest
|
import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest
|
||||||
import org.jetbrains.kotlin.idea.search.declarationsSearch.searchInheritors
|
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.descriptor
|
||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.isConstructorUsage
|
import org.jetbrains.kotlin.idea.search.usagesSearch.isConstructorUsage
|
||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.isImportUsage
|
import org.jetbrains.kotlin.idea.search.usagesSearch.isImportUsage
|
||||||
@@ -126,7 +128,9 @@ public class KotlinFindClassUsagesHandler(
|
|||||||
private fun processClassReferences(classOrObject: JetClassOrObject,
|
private fun processClassReferences(classOrObject: JetClassOrObject,
|
||||||
options: KotlinClassFindUsagesOptions,
|
options: KotlinClassFindUsagesOptions,
|
||||||
processor: Processor<PsiReference>): Boolean {
|
processor: Processor<PsiReference>): Boolean {
|
||||||
var usagesQuery = ReferencesSearch.search(classOrObject)
|
val searchParameters = KotlinReferencesSearchParameters(classOrObject,
|
||||||
|
kotlinOptions = KotlinReferencesSearchOptions(acceptCompanionObjectMembers = true))
|
||||||
|
var usagesQuery = ReferencesSearch.search(searchParameters)
|
||||||
|
|
||||||
if (options.isSkipImportStatements) {
|
if (options.isSkipImportStatements) {
|
||||||
usagesQuery = FilteredQuery(usagesQuery) { !it.isImportUsage() }
|
usagesQuery = FilteredQuery(usagesQuery) { !it.isImportUsage() }
|
||||||
|
|||||||
-4
@@ -35,7 +35,6 @@ import org.jetbrains.kotlin.idea.findUsages.KotlinFunctionFindUsagesOptions
|
|||||||
import org.jetbrains.kotlin.idea.findUsages.KotlinPropertyFindUsagesOptions
|
import org.jetbrains.kotlin.idea.findUsages.KotlinPropertyFindUsagesOptions
|
||||||
import org.jetbrains.kotlin.idea.findUsages.dialogs.KotlinFindFunctionUsagesDialog
|
import org.jetbrains.kotlin.idea.findUsages.dialogs.KotlinFindFunctionUsagesDialog
|
||||||
import org.jetbrains.kotlin.idea.findUsages.dialogs.KotlinFindPropertyUsagesDialog
|
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.HierarchySearchRequest
|
||||||
import org.jetbrains.kotlin.idea.search.declarationsSearch.searchOverriders
|
import org.jetbrains.kotlin.idea.search.declarationsSearch.searchOverriders
|
||||||
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReadWriteAccessDetector
|
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReadWriteAccessDetector
|
||||||
@@ -126,9 +125,6 @@ public abstract class KotlinFindMemberUsagesHandler<T : JetNamedDeclaration>
|
|||||||
|
|
||||||
if (options.isUsages) {
|
if (options.isUsages) {
|
||||||
val searchParameters = KotlinReferencesSearchParameters(element,
|
val searchParameters = KotlinReferencesSearchParameters(element,
|
||||||
element.project.allScope(),
|
|
||||||
ignoreAccessScope = false,
|
|
||||||
optimizer = null,
|
|
||||||
kotlinOptions = createKotlinReferencesSearchOptions(options))
|
kotlinOptions = createKotlinReferencesSearchOptions(options))
|
||||||
|
|
||||||
val query = applyQueryFilters(element, options, ReferencesSearch.search(searchParameters))
|
val query = applyQueryFilters(element, options, ReferencesSearch.search(searchParameters))
|
||||||
|
|||||||
Reference in New Issue
Block a user