From e47dc7accbdc9e4edb717a0962c5264402834469 Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 31 Dec 2012 13:58:17 +0100 Subject: [PATCH] extract method object: do not make static when already static (IDEA-98290) --- .../ExtractMethodObjectProcessor.java | 3 ++- .../util/duplicates/DuplicatesImpl.java | 2 +- .../multipleExitPoints/FromStaticContext.java | 12 ++++++++++ .../FromStaticContext.java.after | 24 +++++++++++++++++++ ...ethodObjectWithMultipleExitPointsTest.java | 4 ++++ 5 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java create mode 100644 java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java.after diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java index f9c168dabcfc..284433f7c4f0 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java @@ -682,7 +682,8 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor { @Override public PsiElement processMatch(final Match match) throws IncorrectOperationException { final boolean makeStatic = myInnerMethod != null && - RefactoringUtil.isInStaticContext(match.getMatchStart(), getExtractedMethod().getContainingClass()); + RefactoringUtil.isInStaticContext(match.getMatchStart(), getExtractedMethod().getContainingClass()) && + !myInnerMethod.getContainingClass().hasModifierProperty(PsiModifier.STATIC); final PsiElement element = super.processMatch(match); if (makeStatic) { myMadeStatic = true; diff --git a/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesImpl.java b/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesImpl.java index be62ee4d9310..5c3b1646b5c5 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesImpl.java +++ b/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesImpl.java @@ -193,7 +193,7 @@ public class DuplicatesImpl { if (duplicates.size() == 1) { previewMatch(project, duplicates.get(0), editor); } - final int answer = Messages.showYesNoDialog(project, + final int answer = ApplicationManager.getApplication().isUnitTestMode() ? 0 : Messages.showYesNoDialog(project, RefactoringBundle.message("0.has.detected.1.code.fragments.in.this.file.that.can.be.replaced.with.a.call.to.extracted.method", ApplicationNamesInfo.getInstance().getProductName(), duplicates.size()), "Process Duplicates", Messages.getQuestionIcon()); diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java new file mode 100644 index 000000000000..b1ac463cdabf --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java @@ -0,0 +1,12 @@ +class Bag { + Integer x; + Integer y; +} + +class Foo { + public static void foo() { + Bag b = new Bag(); + System.out.println(b.x); + System.out.println(b.x); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java.after new file mode 100644 index 000000000000..cc2caec9936f --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/FromStaticContext.java.after @@ -0,0 +1,24 @@ +class Bag { + Integer x; + Integer y; +} + +class Foo { + public static void foo() { + Bag b = new Bag(); + System.out.println(new Inner(b).invoke().x); + System.out.println(new Inner(b).invoke().x); + } + + private static class Inner { + private Bag b; + + public Inner(Bag b) { + this.b = b; + } + + public Bag invoke() { + return b; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObjectWithMultipleExitPointsTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObjectWithMultipleExitPointsTest.java index f735fd29ac81..ea940e6691b0 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObjectWithMultipleExitPointsTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObjectWithMultipleExitPointsTest.java @@ -118,4 +118,8 @@ public class ExtractMethodObjectWithMultipleExitPointsTest extends LightRefactor public void testReturnExitStatement() throws Exception { doTest(); } + + public void testFromStaticContext() throws Exception { + doTest(); + } }