From fc2bab3a4db809b3dab3dcd0e4e5a9c11ab18969 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 12 Apr 2010 16:24:49 +0400 Subject: [PATCH] don't search for dynamic groovy usages in non-source content don't rename them automatically --- .../findUsages/JavaFindUsagesHandler.java | 3 +- .../refactoring/rename/RenameUtil.java | 2 +- .../MethodLateBoundReferencesSearcher.java | 28 +++++++++++++------ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java b/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java index a7eb2f685bc4..b474b34f42de 100644 --- a/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java +++ b/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java @@ -633,7 +633,8 @@ public class JavaFindUsagesHandler extends FindUsagesHandler{ public static boolean addResult(Processor results, PsiReference ref, FindUsagesOptions options, PsiElement refElement) { if (filterUsage(ref.getElement(), options, refElement)){ TextRange rangeInElement = ref.getRangeInElement(); - return results.process(new UsageInfo(ref.getElement(), rangeInElement.getStartOffset(), rangeInElement.getEndOffset(), false)); + final boolean validRef = ref.isReferenceTo(refElement); + return results.process(new UsageInfo(ref.getElement(), rangeInElement.getStartOffset(), rangeInElement.getEndOffset(), !validRef)); } return true; } diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameUtil.java b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameUtil.java index 3956fd3a3e00..512497024dbe 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameUtil.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameUtil.java @@ -69,7 +69,7 @@ public class RenameUtil { PsiElement referenceElement = ref.getElement(); result.add(new MoveRenameUsageInfo(referenceElement, ref, ref.getRangeInElement().getStartOffset(), ref.getRangeInElement().getEndOffset(), element, - false)); + !ref.isReferenceTo(element))); } processor.findCollisions(element, newName, allRenames, result); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/MethodLateBoundReferencesSearcher.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/MethodLateBoundReferencesSearcher.java index ce8a5b9c53b8..498bc9fcc3b0 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/MethodLateBoundReferencesSearcher.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/MethodLateBoundReferencesSearcher.java @@ -18,11 +18,11 @@ package org.jetbrains.plugins.groovy.findUsages; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.Computable; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiManager; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.PsiReference; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.*; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.SearchScope; import com.intellij.psi.search.TextOccurenceProcessor; import com.intellij.psi.search.UsageSearchContext; @@ -30,8 +30,10 @@ import com.intellij.psi.search.searches.MethodReferencesSearch; import com.intellij.psi.util.PropertyUtil; import com.intellij.util.Processor; import com.intellij.util.QueryExecutor; +import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; +import org.jetbrains.plugins.groovy.lang.psi.impl.search.GrSourceFilterScope; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; /** @@ -61,23 +63,33 @@ public class MethodLateBoundReferencesSearcher implements QueryExecutor() { public SearchScope compute() { - return method.getUseScope(); + final SearchScope scope = method.getUseScope(); + final PsiFile file = method.getContainingFile(); + if (file != null && scope instanceof GlobalSearchScope) { + final VirtualFile vfile = file.getOriginalFile().getVirtualFile(); + final Project project = method.getProject(); + if (vfile != null && ProjectRootManager.getInstance(project).getFileIndex().isInSource(vfile)) { + return new GrSourceFilterScope((GlobalSearchScope)scope, project); + } + } + return scope; } }); } - private String getPropertyName(final PsiMethod method) { + private static String getPropertyName(final PsiMethod method) { return ApplicationManager.getApplication().runReadAction(new Computable(){ + @Nullable public String compute() { return PropertyUtil.getPropertyName(method); } }); } - private boolean processTextOccurrences(SearchScope searchScope, final String name, final Processor consumer, Project project) { + private static boolean processTextOccurrences(SearchScope searchScope, final String name, final Processor consumer, Project project) { final TextOccurenceProcessor processor = new TextOccurenceProcessor() { public boolean execute(PsiElement element, int offsetInElement) { PsiReference ref = element.getReference();