Refactor search helpers: replace some classes with traits

This commit is contained in:
Alexey Sedunov
2013-11-06 20:48:48 +04:00
parent dabd048352
commit 58f7a3efbf
2 changed files with 24 additions and 22 deletions
@@ -26,7 +26,6 @@ import org.jetbrains.jet.plugin.search.usagesSearch.UsagesSearchLocation
import com.intellij.find.findUsages.FindUsagesOptions import com.intellij.find.findUsages.FindUsagesOptions
import org.jetbrains.jet.plugin.search.usagesSearch.PropertyUsagesSearchHelper import org.jetbrains.jet.plugin.search.usagesSearch.PropertyUsagesSearchHelper
import com.intellij.find.findUsages.JavaFindUsagesOptions import com.intellij.find.findUsages.JavaFindUsagesOptions
import org.jetbrains.jet.plugin.search.usagesSearch.DeclarationUsagesSearchHelper
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.jet.plugin.search.usagesSearch.ClassDeclarationsUsagesSearchHelper import org.jetbrains.jet.plugin.search.usagesSearch.ClassDeclarationsUsagesSearchHelper
import org.jetbrains.jet.plugin.search.usagesSearch.FunctionUsagesSearchHelper import org.jetbrains.jet.plugin.search.usagesSearch.FunctionUsagesSearchHelper
@@ -34,6 +34,8 @@ import com.intellij.psi.PsiMethod
import com.intellij.util.Query import com.intellij.util.Query
import com.intellij.psi.search.SearchRequestCollector import com.intellij.psi.search.SearchRequestCollector
import org.jetbrains.jet.lang.psi.JetCallableDeclaration 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 val isTargetUsage = (PsiReference::isTargetUsage).searchFilter
@@ -80,16 +82,18 @@ public abstract class UsagesSearchHelper<T : PsiNamedElement> {
} }
} }
object DefaultUsagesSearchHelper: UsagesSearchHelper<PsiNamedElement>()
val isNotImportUsage = !((PsiReference::isImportUsage).searchFilter) val isNotImportUsage = !((PsiReference::isImportUsage).searchFilter)
open class DeclarationUsagesSearchHelper<T : PsiNamedElement>( trait ImportAwareSearchHelper {
public val skipImports: Boolean = false public val skipImports: Boolean
) : UsagesSearchHelper<T>() {
protected val isFilteredImport: UsagesSearchFilter protected val isFilteredImport: UsagesSearchFilter
get() = isNotImportUsage.ifOrTrue(skipImports) get() = isNotImportUsage.ifOrTrue(skipImports)
}
open class DefaultSearchHelper<T: PsiNamedElement>(
public override val skipImports: Boolean = false
): UsagesSearchHelper<T>(), ImportAwareSearchHelper {
override fun makeFilter(target: UsagesSearchTarget<T>): UsagesSearchFilter = isTargetUsage and isFilteredImport override fun makeFilter(target: UsagesSearchTarget<T>): UsagesSearchFilter = isTargetUsage and isFilteredImport
} }
@@ -99,7 +103,7 @@ class ClassUsagesSearchHelper(
public val constructorUsages: Boolean = false, public val constructorUsages: Boolean = false,
public val nonConstructorUsages: Boolean = false, public val nonConstructorUsages: Boolean = false,
skipImports: Boolean = false skipImports: Boolean = false
) : DeclarationUsagesSearchHelper<JetClassOrObject>(skipImports) { ) : DefaultSearchHelper<JetClassOrObject>(skipImports) {
override fun makeFilter(target: UsagesSearchTarget<JetClassOrObject>): UsagesSearchFilter = override fun makeFilter(target: UsagesSearchTarget<JetClassOrObject>): UsagesSearchFilter =
super.makeFilter(target) and when { super.makeFilter(target) and when {
constructorUsages && !nonConstructorUsages -> isClassConstructorUsage constructorUsages && !nonConstructorUsages -> isClassConstructorUsage
@@ -113,10 +117,10 @@ class ClassDeclarationsUsagesSearchHelper(
public val functionUsages: Boolean = false, public val functionUsages: Boolean = false,
public val propertyUsages: Boolean = false, public val propertyUsages: Boolean = false,
skipImports: Boolean = false skipImports: Boolean = false
) : DeclarationUsagesSearchHelper<JetClassOrObject>(skipImports) { ) : DefaultSearchHelper<JetClassOrObject>(skipImports) {
override fun makeItemList(target: UsagesSearchTarget<JetClassOrObject>): List<UsagesSearchRequestItem> { override fun makeItemList(target: UsagesSearchTarget<JetClassOrObject>): List<UsagesSearchRequestItem> {
val items = ArrayList<UsagesSearchRequestItem>() val items = ArrayList<UsagesSearchRequestItem>()
val declHelper = DeclarationUsagesSearchHelper<JetNamedDeclaration>(skipImports) val declHelper = DefaultSearchHelper<JetNamedDeclaration>(skipImports)
for (decl in target.element.getDeclarations()) { for (decl in target.element.getDeclarations()) {
if ((decl is JetNamedFunction && functionUsages) || (decl is JetProperty && propertyUsages)) { if ((decl is JetNamedFunction && functionUsages) || (decl is JetProperty && propertyUsages)) {
@@ -130,11 +134,10 @@ class ClassDeclarationsUsagesSearchHelper(
val isOverrideUsage = (PsiReference::isCallableOverrideUsage).searchFilter val isOverrideUsage = (PsiReference::isCallableOverrideUsage).searchFilter
abstract class CallableUsagesSearchHelper<T: JetCallableDeclaration>( trait OverrideSearchHelper {
public val selfUsages: Boolean = true, public val selfUsages: Boolean
public val overrideUsages: Boolean = true, public val overrideUsages: Boolean
skipImports: Boolean = false
): DeclarationUsagesSearchHelper<T>(skipImports) {
val isTargetOrOverrideUsage: UsagesSearchFilter val isTargetOrOverrideUsage: UsagesSearchFilter
get() = isTargetUsage.ifOrFalse(selfUsages) or isOverrideUsage.ifOrFalse(overrideUsages) get() = isTargetUsage.ifOrFalse(selfUsages) or isOverrideUsage.ifOrFalse(overrideUsages)
} }
@@ -145,14 +148,14 @@ val isExtensionUsage = (PsiReference::isExtensionOfDeclarationClassUsage).search
class FunctionUsagesSearchHelper( class FunctionUsagesSearchHelper(
public val overloadUsages: Boolean = false, public val overloadUsages: Boolean = false,
public val extensionUsages: Boolean = false, public val extensionUsages: Boolean = false,
selfUsages: Boolean = true, public override val selfUsages: Boolean = true,
overrideUsages: Boolean = true, public override val overrideUsages: Boolean = true,
skipImports: Boolean = false skipImports: Boolean = false
) : CallableUsagesSearchHelper<JetNamedFunction>(selfUsages, overrideUsages, skipImports) { ) : DefaultSearchHelper<JetNamedFunction>(skipImports), OverrideSearchHelper {
override fun makeFilter(target: UsagesSearchTarget<JetNamedFunction>): UsagesSearchFilter { override fun makeFilter(target: UsagesSearchTarget<JetNamedFunction>): UsagesSearchFilter {
return (isTargetOrOverrideUsage return (isTargetOrOverrideUsage
or isOverloadUsage.ifOrFalse(overloadUsages) or isOverloadUsage.ifOrFalse(overloadUsages)
or isExtensionUsage.ifOrFalse(extensionUsages)) and isFilteredImport or isExtensionUsage.ifOrFalse(extensionUsages)) and isFilteredImport
} }
} }
@@ -161,10 +164,10 @@ val isPropertyReadOnlyUsage = (PsiReference::isPropertyReadOnlyUsage).searchFilt
class PropertyUsagesSearchHelper( class PropertyUsagesSearchHelper(
public val readUsages: Boolean = true, public val readUsages: Boolean = true,
public val writeUsages: Boolean = true, public val writeUsages: Boolean = true,
selfUsages: Boolean = true, public override val selfUsages: Boolean = true,
overrideUsages: Boolean = true, public override val overrideUsages: Boolean = true,
skipImports: Boolean = false skipImports: Boolean = false
) : CallableUsagesSearchHelper<JetProperty>(selfUsages, overrideUsages, skipImports) { ) : DefaultSearchHelper<JetProperty>(skipImports), OverrideSearchHelper {
override fun makeWordList(target: UsagesSearchTarget<JetProperty>): List<String> { override fun makeWordList(target: UsagesSearchTarget<JetProperty>): List<String> {
return target.element.names(readable = readUsages, writable = writeUsages) return target.element.names(readable = readUsages, writable = writeUsages)
} }