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 9d2ed2cf0747..d93fd244576e 100644 --- a/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java +++ b/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java @@ -21,6 +21,7 @@ import com.intellij.ide.util.SuperMethodWarningUtil; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ReadActionProcessor; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.ui.DialogWrapper; @@ -28,6 +29,8 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.TextRange; +import com.intellij.pom.PomTarget; +import com.intellij.pom.references.PomService; import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.VariableKind; @@ -39,6 +42,8 @@ import com.intellij.psi.search.searches.ClassInheritorsSearch; import com.intellij.psi.search.searches.MethodReferencesSearch; import com.intellij.psi.search.searches.OverridingMethodsSearch; import com.intellij.psi.search.searches.ReferencesSearch; +import com.intellij.psi.targets.AliasingPsiTarget; +import com.intellij.psi.targets.AliasingPsiTargetMapper; import com.intellij.psi.util.MethodSignature; import com.intellij.psi.util.PropertyUtil; import com.intellij.psi.util.PsiUtil; @@ -334,12 +339,28 @@ public class JavaFindUsagesHandler extends FindUsagesHandler{ } } + if (element instanceof PomTarget) { + addAliasingUsages((PomTarget)element, processor, options); + } if (!ThrowSearchUtil.isSearchable(element) && options.isSearchForTextOccurrences && options.searchScope instanceof GlobalSearchScope) { // todo add to fastTrack processUsagesInText(element, processor, (GlobalSearchScope)options.searchScope); } } + private static void addAliasingUsages(PomTarget pomTarget, final Processor processor, final FindUsagesOptions options) { + for (AliasingPsiTargetMapper aliasingPsiTargetMapper : Extensions.getExtensions(AliasingPsiTargetMapper.EP_NAME)) { + for (AliasingPsiTarget psiTarget : aliasingPsiTargetMapper.getTargets(pomTarget)) { + ReferencesSearch.search(new ReferencesSearch.SearchParameters(PomService.convertToPsi(psiTarget), options.searchScope, false, options.fastTrack)).forEach(new ReadActionProcessor() { + public boolean processInReadAction(final PsiReference reference) { + addResult(processor, reference, options); + return true; + } + }); + } + } + } + private static void processOverridingMethods(PsiMethod psiMethod, final Processor processor, final JavaMethodFindUsagesOptions options) { OverridingMethodsSearch.search(psiMethod, options.searchScope, options.isCheckDeepInheritance).forEach(new PsiElementProcessorAdapter( new PsiElementProcessor() { diff --git a/java/java-impl/src/com/intellij/refactoring/rename/RenameAliasingPomTargetProcessor.java b/java/java-impl/src/com/intellij/refactoring/rename/RenameAliasingPomTargetProcessor.java new file mode 100644 index 000000000000..ce33e5db601d --- /dev/null +++ b/java/java-impl/src/com/intellij/refactoring/rename/RenameAliasingPomTargetProcessor.java @@ -0,0 +1,46 @@ +/* + * Copyright 2000-2010 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.refactoring.rename; + +import com.intellij.openapi.extensions.Extensions; +import com.intellij.pom.references.PomService; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiNamedElement; +import com.intellij.psi.PsiTarget; +import com.intellij.psi.targets.AliasingPsiTarget; +import com.intellij.psi.targets.AliasingPsiTargetMapper; +import org.jetbrains.annotations.Nullable; + +import java.util.Map; + +public class RenameAliasingPomTargetProcessor extends RenamePsiElementProcessor { + + @Override + public boolean canProcessElement(@Nullable PsiElement element) { + return element instanceof PsiNamedElement; + } + + @Override + public void prepareRenaming(PsiElement element, String newName, Map allRenames) { + if (element instanceof PsiTarget) { + for (AliasingPsiTargetMapper mapper : Extensions.getExtensions(AliasingPsiTargetMapper.EP_NAME)) { + for (AliasingPsiTarget psiTarget : mapper.getTargets((PsiTarget)element)) { + allRenames.put(PomService.convertToPsi(psiTarget), psiTarget.getNameAlias(newName)); + } + } + } + } +} diff --git a/platform/lang-api/src/com/intellij/psi/AliasingPsiTarget.java b/platform/lang-api/src/com/intellij/psi/targets/AliasingPsiTarget.java similarity index 94% rename from platform/lang-api/src/com/intellij/psi/AliasingPsiTarget.java rename to platform/lang-api/src/com/intellij/psi/targets/AliasingPsiTarget.java index 89286dc7071b..a80b76ba0f4e 100644 --- a/platform/lang-api/src/com/intellij/psi/AliasingPsiTarget.java +++ b/platform/lang-api/src/com/intellij/psi/targets/AliasingPsiTarget.java @@ -13,10 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.psi; +package com.intellij.psi.targets; import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.PomRenameableTarget; +import com.intellij.psi.DelegatePsiTarget; +import com.intellij.psi.PsiNamedElement; import com.intellij.refactoring.RefactoringFactory; import com.intellij.refactoring.RenameRefactoring; import org.jetbrains.annotations.NotNull; @@ -59,4 +61,4 @@ public class AliasingPsiTarget extends DelegatePsiTarget implements PomRenameabl } } -} \ No newline at end of file +} diff --git a/platform/lang-api/src/com/intellij/psi/targets/AliasingPsiTargetMapper.java b/platform/lang-api/src/com/intellij/psi/targets/AliasingPsiTargetMapper.java new file mode 100644 index 000000000000..a3bdd72841c9 --- /dev/null +++ b/platform/lang-api/src/com/intellij/psi/targets/AliasingPsiTargetMapper.java @@ -0,0 +1,14 @@ +package com.intellij.psi.targets; + +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.pom.PomTarget; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; + +public interface AliasingPsiTargetMapper { + ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.aliasingPsiTargetMapper"); + + @NotNull + Set getTargets(@NotNull PomTarget psiTarget); +} diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameProcessor.java b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameProcessor.java index f15f07ceb484..96bd5e80a979 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameProcessor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameProcessor.java @@ -267,7 +267,7 @@ public class RenameProcessor extends BaseRefactoringProcessor { } } UsageInfo[] usageInfos = result.toArray(new UsageInfo[result.size()]); - usageInfos = UsageViewUtil.removeDuplicatedUsages(usageInfos); + //usageInfos = UsageViewUtil.removeDuplicatedUsages(usageInfos); return usageInfos; } diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml index 87621291991c..40464eccfcfe 100644 --- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml @@ -457,4 +457,5 @@ + diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index 4d554b791bf4..b1d78c8362e0 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -1053,6 +1053,7 @@ +