diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/findUsagesOptions.kt b/idea/src/org/jetbrains/jet/plugin/findUsages/findUsagesOptions.kt index 323a0b5eb64..15e50bf4115 100644 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/findUsagesOptions.kt +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/findUsagesOptions.kt @@ -26,7 +26,6 @@ import org.jetbrains.jet.plugin.search.usagesSearch.UsagesSearchLocation import com.intellij.find.findUsages.FindUsagesOptions import org.jetbrains.jet.plugin.search.usagesSearch.PropertyUsagesSearchHelper import com.intellij.find.findUsages.JavaFindUsagesOptions -import org.jetbrains.jet.plugin.search.usagesSearch.DeclarationUsagesSearchHelper import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.jet.plugin.search.usagesSearch.ClassDeclarationsUsagesSearchHelper import org.jetbrains.jet.plugin.search.usagesSearch.FunctionUsagesSearchHelper diff --git a/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/searchHelpers.kt b/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/searchHelpers.kt index 3acf2156859..a3a47cdb60f 100644 --- a/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/searchHelpers.kt +++ b/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/searchHelpers.kt @@ -34,6 +34,8 @@ import com.intellij.psi.PsiMethod import com.intellij.util.Query import com.intellij.psi.search.SearchRequestCollector import org.jetbrains.jet.lang.psi.JetCallableDeclaration +import org.jetbrains.jet.lang.psi.JetParameter +import org.jetbrains.jet.lang.psi.JetPsiUtil val isTargetUsage = (PsiReference::isTargetUsage).searchFilter @@ -80,16 +82,18 @@ public abstract class UsagesSearchHelper { } } -object DefaultUsagesSearchHelper: UsagesSearchHelper() - val isNotImportUsage = !((PsiReference::isImportUsage).searchFilter) -open class DeclarationUsagesSearchHelper( - public val skipImports: Boolean = false -) : UsagesSearchHelper() { +trait ImportAwareSearchHelper { + public val skipImports: Boolean + protected val isFilteredImport: UsagesSearchFilter get() = isNotImportUsage.ifOrTrue(skipImports) +} +open class DefaultSearchHelper( + public override val skipImports: Boolean = false +): UsagesSearchHelper(), ImportAwareSearchHelper { override fun makeFilter(target: UsagesSearchTarget): UsagesSearchFilter = isTargetUsage and isFilteredImport } @@ -99,7 +103,7 @@ class ClassUsagesSearchHelper( public val constructorUsages: Boolean = false, public val nonConstructorUsages: Boolean = false, skipImports: Boolean = false -) : DeclarationUsagesSearchHelper(skipImports) { +) : DefaultSearchHelper(skipImports) { override fun makeFilter(target: UsagesSearchTarget): UsagesSearchFilter = super.makeFilter(target) and when { constructorUsages && !nonConstructorUsages -> isClassConstructorUsage @@ -113,10 +117,10 @@ class ClassDeclarationsUsagesSearchHelper( public val functionUsages: Boolean = false, public val propertyUsages: Boolean = false, skipImports: Boolean = false -) : DeclarationUsagesSearchHelper(skipImports) { +) : DefaultSearchHelper(skipImports) { override fun makeItemList(target: UsagesSearchTarget): List { val items = ArrayList() - val declHelper = DeclarationUsagesSearchHelper(skipImports) + val declHelper = DefaultSearchHelper(skipImports) for (decl in target.element.getDeclarations()) { if ((decl is JetNamedFunction && functionUsages) || (decl is JetProperty && propertyUsages)) { @@ -130,11 +134,10 @@ class ClassDeclarationsUsagesSearchHelper( val isOverrideUsage = (PsiReference::isCallableOverrideUsage).searchFilter -abstract class CallableUsagesSearchHelper( - public val selfUsages: Boolean = true, - public val overrideUsages: Boolean = true, - skipImports: Boolean = false -): DeclarationUsagesSearchHelper(skipImports) { +trait OverrideSearchHelper { + public val selfUsages: Boolean + public val overrideUsages: Boolean + val isTargetOrOverrideUsage: UsagesSearchFilter get() = isTargetUsage.ifOrFalse(selfUsages) or isOverrideUsage.ifOrFalse(overrideUsages) } @@ -145,14 +148,14 @@ val isExtensionUsage = (PsiReference::isExtensionOfDeclarationClassUsage).search class FunctionUsagesSearchHelper( public val overloadUsages: Boolean = false, public val extensionUsages: Boolean = false, - selfUsages: Boolean = true, - overrideUsages: Boolean = true, + public override val selfUsages: Boolean = true, + public override val overrideUsages: Boolean = true, skipImports: Boolean = false -) : CallableUsagesSearchHelper(selfUsages, overrideUsages, skipImports) { +) : DefaultSearchHelper(skipImports), OverrideSearchHelper { override fun makeFilter(target: UsagesSearchTarget): UsagesSearchFilter { return (isTargetOrOverrideUsage - or isOverloadUsage.ifOrFalse(overloadUsages) - or isExtensionUsage.ifOrFalse(extensionUsages)) and isFilteredImport + or isOverloadUsage.ifOrFalse(overloadUsages) + or isExtensionUsage.ifOrFalse(extensionUsages)) and isFilteredImport } } @@ -161,10 +164,10 @@ val isPropertyReadOnlyUsage = (PsiReference::isPropertyReadOnlyUsage).searchFilt class PropertyUsagesSearchHelper( public val readUsages: Boolean = true, public val writeUsages: Boolean = true, - selfUsages: Boolean = true, - overrideUsages: Boolean = true, + public override val selfUsages: Boolean = true, + public override val overrideUsages: Boolean = true, skipImports: Boolean = false -) : CallableUsagesSearchHelper(selfUsages, overrideUsages, skipImports) { +) : DefaultSearchHelper(skipImports), OverrideSearchHelper { override fun makeWordList(target: UsagesSearchTarget): List { return target.element.names(readable = readUsages, writable = writeUsages) }