From cfaeca88bf7d64b35d02bff6264b71a7438c1b51 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 7 Nov 2013 13:55:43 +0400 Subject: [PATCH] Reuse property search for parameters --- .../jetbrains/jet/asJava/LightClassUtil.java | 2 + .../search/usagesSearch/searchHelpers.kt | 43 +++++++++++++------ 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/LightClassUtil.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/LightClassUtil.java index 62f2072f916..c290195a95b 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/LightClassUtil.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/LightClassUtil.java @@ -151,6 +151,7 @@ public class LightClassUtil { return extractPropertyAccessors(property, getterWrapper, setterWrapper); } + @NotNull public static PropertyAccessorsPsiMethods getLightClassPropertyMethods(@NotNull JetParameter parameter) { return extractPropertyAccessors(parameter, null, null); } @@ -255,6 +256,7 @@ public class LightClassUtil { return packageName == null ? null : PackageClassUtils.getPackageClassFqName(new FqName(packageName)); } + @NotNull private static PropertyAccessorsPsiMethods extractPropertyAccessors( @NotNull JetDeclaration jetDeclaration, @Nullable PsiMethod specialGetter, @Nullable PsiMethod specialSetter 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 a3a47cdb60f..9d9eca3356d 100644 --- a/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/searchHelpers.kt +++ b/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/searchHelpers.kt @@ -36,22 +36,36 @@ 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 +import org.jetbrains.jet.lang.psi.psiUtil.* +import org.jetbrains.jet.asJava.LightClassUtil.PropertyAccessorsPsiMethods val isTargetUsage = (PsiReference::isTargetUsage).searchFilter -fun JetProperty.names(readable: Boolean = true, writable: Boolean = true): List { +fun JetNamedDeclaration.namesWithAccessors(readable: Boolean = true, writable: Boolean = true): List { val name = getName()!! - if (isLocal()) return Collections.singletonList(name) + fun PropertyAccessorsPsiMethods.toNameList(): List { + val getter = getGetter() + val setter = getSetter() - val lightMethods = LightClassUtil.getLightClassPropertyMethods(this) - val getter = lightMethods.getGetter() - val setter = lightMethods.getSetter() + val result = arrayListOf(name) + if (readable && getter != null) result.add(getter.getName()) + if (writable && setter != null) result.add(setter.getName()) + return result + } - val result = arrayListOf(name) - if (readable && getter != null) result.add(getter.getName()) - if (writable && setter != null) result.add(setter.getName()) - return result + if (JetPsiUtil.isLocal(this)) return Collections.singletonList(name) + + when (this) { + is JetProperty -> + return LightClassUtil.getLightClassPropertyMethods(this).toNameList() + is JetParameter -> + if (getValOrVarNode() != null) { + return LightClassUtil.getLightClassPropertyMethods(this).toNameList() + } + } + + return Collections.singletonList(name) } public abstract class UsagesSearchHelper { @@ -63,7 +77,7 @@ public abstract class UsagesSearchHelper { when { name == null -> Collections.emptyList() - element is JetProperty -> element.names() + element is JetProperty, element is JetParameter -> (element as JetNamedDeclaration).namesWithAccessors() else -> Collections.singletonList(name) } } @@ -161,18 +175,19 @@ class FunctionUsagesSearchHelper( val isPropertyReadOnlyUsage = (PsiReference::isPropertyReadOnlyUsage).searchFilter +// Used for JetProperty and JetParameter class PropertyUsagesSearchHelper( public val readUsages: Boolean = true, public val writeUsages: Boolean = true, public override val selfUsages: Boolean = true, public override val overrideUsages: Boolean = true, skipImports: Boolean = false -) : DefaultSearchHelper(skipImports), OverrideSearchHelper { - override fun makeWordList(target: UsagesSearchTarget): List { - return target.element.names(readable = readUsages, writable = writeUsages) +) : DefaultSearchHelper(skipImports), OverrideSearchHelper { + override fun makeWordList(target: UsagesSearchTarget): List { + return target.element.namesWithAccessors(readable = readUsages, writable = writeUsages) } - override fun makeFilter(target: UsagesSearchTarget): UsagesSearchFilter { + override fun makeFilter(target: UsagesSearchTarget): UsagesSearchFilter { val readWriteUsage = when { readUsages && writeUsages -> True readUsages -> isPropertyReadOnlyUsage