diff --git a/java/java-impl/src/com/intellij/psi/impl/search/MethodUsagesSearcher.java b/java/java-impl/src/com/intellij/psi/impl/search/MethodUsagesSearcher.java index 4af1ae2e185e..e71cbe46e173 100644 --- a/java/java-impl/src/com/intellij/psi/impl/search/MethodUsagesSearcher.java +++ b/java/java-impl/src/com/intellij/psi/impl/search/MethodUsagesSearcher.java @@ -19,7 +19,7 @@ public class MethodUsagesSearcher extends QueryExecutorBase consumer) { + public void processQuery(@NotNull MethodReferencesSearch.SearchParameters p, @NotNull final Processor consumer) { final PsiMethod method = p.getMethod(); final SearchRequestCollector collector = p.getOptimizer(); @@ -37,6 +37,13 @@ public class MethodUsagesSearcher extends QueryExecutorBase query = ReferencesSearch.search(method.getContainingClass(), p.getScope(), p.isIgnoreAccessScope()); - return query.forEach(new ReadActionProcessor() { - public boolean processInReadAction(final PsiReference reference) { - if (reference instanceof PsiJavaCodeReferenceElement) { - PsiJavaCodeReferenceElement javaReference = (PsiJavaCodeReferenceElement)reference; - if (javaReference.getParent() instanceof PsiAnnotation) { - PsiNameValuePair[] members = ((PsiAnnotation)javaReference.getParent()).getParameterList().getAttributes(); - if (members.length == 1 && members[0].getNameIdentifier() == null) { - PsiReference t = members[0].getReference(); - if (t != null && !consumer.process(t)) return false; - } - } - } - return true; - } - }); + return query.forEach(createImplicitDefaultAnnotationMethodConsumer(consumer)); } } return true; } + + public static ReadActionProcessor createImplicitDefaultAnnotationMethodConsumer(final Processor consumer) { + return new ReadActionProcessor() { + public boolean processInReadAction(final PsiReference reference) { + if (reference instanceof PsiJavaCodeReferenceElement) { + PsiJavaCodeReferenceElement javaReference = (PsiJavaCodeReferenceElement)reference; + if (javaReference.getParent() instanceof PsiAnnotation) { + PsiNameValuePair[] members = ((PsiAnnotation)javaReference.getParent()).getParameterList().getAttributes(); + if (members.length == 1 && members[0].getNameIdentifier() == null) { + PsiReference t = members[0].getReference(); + if (t != null && !consumer.process(t)) return false; + } + } + } + return true; + } + }; + } } diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/after/pack1/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/after/pack1/A.java new file mode 100644 index 000000000000..a877c4fb10db --- /dev/null +++ b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/after/pack1/A.java @@ -0,0 +1,5 @@ +package pack1; + +public @interface A { + int intValue(); +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/after/pack1/Usage.java b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/after/pack1/Usage.java new file mode 100644 index 000000000000..2a24f0a20345 --- /dev/null +++ b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/after/pack1/Usage.java @@ -0,0 +1,11 @@ +package pack1; + +class Usage { + @A(intValue = 11) + void foo() { + } + + @A(intValue = 42) + void bar() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/before/pack1/A.java b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/before/pack1/A.java new file mode 100644 index 000000000000..5777614186c5 --- /dev/null +++ b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/before/pack1/A.java @@ -0,0 +1,5 @@ +package pack1; + +public @interface A { + int value(); +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/before/pack1/Usage.java b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/before/pack1/Usage.java new file mode 100644 index 000000000000..5188eebf13f5 --- /dev/null +++ b/java/java-tests/testData/refactoring/renameMethod/multi/defaultAnnotationMethod/before/pack1/Usage.java @@ -0,0 +1,11 @@ +package pack1; + +class Usage { + @A(11) + void foo() { + } + + @A(value = 42) + void bar() { + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/RenameMethodMultiTest.java b/java/java-tests/testSrc/com/intellij/refactoring/RenameMethodMultiTest.java index 1187871b6845..82b3324cc559 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/RenameMethodMultiTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/RenameMethodMultiTest.java @@ -40,6 +40,10 @@ public class RenameMethodMultiTest extends MultiFileTestCase { doTest("pack1.A", "void staticMethod(int i)", "renamedStaticMethod"); } + public void testDefaultAnnotationMethod() throws Exception { + doTest("pack1.A", "int value()", "intValue"); + } + public void testRename2OverrideFinal() throws Exception { try { doTest("p.B", "void method()", "finalMethod");