From 399ca4050af874c0b57535c9aa27538c11532b24 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 19 Jun 2012 12:40:24 +0400 Subject: [PATCH] online change signature: preserve signature formatting (IDEA-77097) --- .../changeSignature/DetectedJavaChangeInfo.java | 11 ++++++++++- .../changeSignature/JavaChangeSignatureDetector.java | 2 +- .../DeleteParamInSuperUsed_after.java | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/DetectedJavaChangeInfo.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/DetectedJavaChangeInfo.java index 9755a46d10da..a2093af6fa23 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/DetectedJavaChangeInfo.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/DetectedJavaChangeInfo.java @@ -253,8 +253,12 @@ class DetectedJavaChangeInfo extends JavaChangeInfoImpl { final PsiMethod currentMethod = (PsiMethod)initialChangeInfo.getMethod(); if (silently || ApplicationManager.getApplication().isUnitTestMode()) { + final TextRange signatureRange = JavaChangeSignatureDetector.getSignatureRange(currentMethod); + final String currentSignature = currentMethod.getContainingFile().getText().substring(signatureRange.getStartOffset(), + signatureRange.getEndOffset()); temporallyRevertChanges(currentMethod, oldText); createChangeSignatureProcessor(method).run(); + temporallyRevertChanges(currentMethod, currentSignature, JavaChangeSignatureDetector.getSignatureRange(currentMethod)); return true; } final JavaMethodDescriptor descriptor = new JavaMethodDescriptor(currentMethod) { @@ -289,6 +293,12 @@ class DetectedJavaChangeInfo extends JavaChangeInfoImpl { } private static void temporallyRevertChanges(final PsiElement psiElement, final String oldText) { + temporallyRevertChanges(psiElement, oldText, psiElement.getTextRange()); + } + + private static void temporallyRevertChanges(final PsiElement psiElement, + final String oldText, + final TextRange textRange) { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { @@ -296,7 +306,6 @@ class DetectedJavaChangeInfo extends JavaChangeInfoImpl { final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(psiElement.getProject()); final Document document = documentManager.getDocument(file); if (document != null) { - final TextRange textRange = psiElement.getTextRange(); document.replaceString(textRange.getStartOffset(), textRange.getEndOffset(), oldText); documentManager.commitDocument(document); } diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDetector.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDetector.java index 291e1f286598..bb32a53612ba 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDetector.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDetector.java @@ -145,7 +145,7 @@ public class JavaChangeSignatureDetector implements LanguageChangeSignatureDetec textRange.getEndOffset() <= method.getTextRange().getEndOffset(); } - private static TextRange getSignatureRange(PsiMethod method) { + public static TextRange getSignatureRange(PsiMethod method) { final PsiCodeBlock body = method.getBody(); if (body != null) { return new TextRange(method.getTextRange().getStartOffset(), body.getTextOffset()); diff --git a/java/java-tests/testData/refactoring/changeSignatureGesture/DeleteParamInSuperUsed_after.java b/java/java-tests/testData/refactoring/changeSignatureGesture/DeleteParamInSuperUsed_after.java index 5355960a925d..81b93fe139a7 100644 --- a/java/java-tests/testData/refactoring/changeSignatureGesture/DeleteParamInSuperUsed_after.java +++ b/java/java-tests/testData/refactoring/changeSignatureGesture/DeleteParamInSuperUsed_after.java @@ -5,7 +5,7 @@ public class Parent { } class Child extends Parent { - public void foo(float j, String s) { + public void foo(float j, String s ) { } void bar() {