From 58fbaf7822c693963ffafa8e343b00c9a866aa12 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 21 May 2012 14:03:25 +0400 Subject: [PATCH] change signature detection: do not detect signature change too aggressive (IDEA-86319) --- .../changeSignatureGesture/OnAnotherMethod.java | 5 +++++ .../refactoring/ChangeSignatureGestureTest.java | 16 ++++++++++++---- .../ChangeSignatureGestureDetector.java | 8 +++++++- 3 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/refactoring/changeSignatureGesture/OnAnotherMethod.java diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/OnAnotherMethod.java b/java/java-tests/testData/refactoring/changeSignatureGesture/OnAnotherMethod.java new file mode 100644 index 000000000000..b863a3650ee6 --- /dev/null +++ b/java/java-tests/testData/refactoring/changeSignatureGesture/OnAnotherMethod.java @@ -0,0 +1,5 @@ +class Test { + void foo() { + } + void bar(){foo();} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureGestureTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureGestureTest.java index 219e117e1d8e..79db612ff419 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureGestureTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ChangeSignatureGestureTest.java @@ -25,10 +25,7 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.actions.EditorActionUtil; import com.intellij.openapi.editor.ex.EditorEx; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiManager; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.PsiTypeElement; +import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.changeSignature.ChangeSignatureDetectorAction; import com.intellij.refactoring.changeSignature.ChangeSignatureGestureDetector; @@ -100,6 +97,17 @@ public class ChangeSignatureGestureTest extends LightCodeInsightFixtureTestCase doTypingNoBorderTest("int param"); } + public void testOnAnotherMethod() { + doTest(new Runnable() { + @Override + public void run() { + myFixture.type("int param"); + final int nextMethodOffset = ((PsiJavaFile)myFixture.getFile()).getClasses()[0].getMethods()[1].getTextOffset(); + myFixture.getEditor().getCaretModel().moveToOffset(nextMethodOffset); + } + }, false, ChangeSignatureDetectorAction.CHANGE_SIGNATURE); + } + public void testAddParamChangeReturnType() { doTest(new Runnable() { @Override diff --git a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetector.java b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetector.java index 7bf96c500769..27bd0af64b5b 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetector.java +++ b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetector.java @@ -85,7 +85,13 @@ public class ChangeSignatureGestureDetector extends PsiTreeChangeAdapter impleme public boolean isChangeSignatureAvailable(@NotNull PsiElement element) { final MyDocumentChangeAdapter adapter = myListenerMap.get(PsiUtilCore.getVirtualFile(element)); - return adapter != null && adapter.getCurrentInfo() != null; + if (adapter != null) { + final ChangeInfo currentInfo = adapter.getCurrentInfo(); + if (currentInfo != null && element.equals(adapter.getInitialChangeInfo().getMethod())) { + return true; + } + } + return false; } public void dismissForElement(PsiElement method) {