From ca0109df460c1886166228ca8ae77c3b63e70bc3 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 14 Sep 2016 20:01:37 +0300 Subject: [PATCH] extract constant: allow class-constants to be used from enum constant initializer outside argument list (IDEA-161237) --- .../introduceField/BaseExpressionToFieldHandler.java | 3 ++- .../FromEnumConstantInitializer2.java | 9 +++++++++ .../FromEnumConstantInitializer2_after.java | 10 ++++++++++ .../intellij/refactoring/IntroduceConstantTest.java | 6 ++++++ 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer2.java create mode 100644 java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer2_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java index 8d8599cfbd13..00dd78459d44 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java @@ -737,7 +737,8 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase } PsiMember anchorMember = finalAnchorElement instanceof PsiMember ? (PsiMember)finalAnchorElement : null; - if (anchorMember instanceof PsiEnumConstant && destClass == anchorMember.getContainingClass()) { + if (anchorMember instanceof PsiEnumConstant && destClass == anchorMember.getContainingClass() && + PsiTreeUtil.isAncestor(((PsiEnumConstant)anchorMember).getArgumentList(), initializer, false)) { final String initialName = "Constants"; String constantsClassName = initialName; diff --git a/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer2.java b/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer2.java new file mode 100644 index 000000000000..ff6407f3e96c --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer2.java @@ -0,0 +1,9 @@ + +enum Foo { + + FOO1 { + public String bar() { + return "bar"; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer2_after.java b/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer2_after.java new file mode 100644 index 000000000000..bc8c7b8eb1b9 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceConstant/FromEnumConstantInitializer2_after.java @@ -0,0 +1,10 @@ + +enum Foo { + + FOO1 { + public String bar() { + return xxx; + } + }; + public static final String xxx = "bar"; +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceConstantTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceConstantTest.java index c2edd708904d..0849a773e2d8 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceConstantTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceConstantTest.java @@ -48,6 +48,12 @@ public class IntroduceConstantTest extends LightCodeInsightTestCase { checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); } + public void testFromEnumConstantInitializer2() throws Exception { + configureByFile(BASE_PATH + getTestName(false) + ".java"); + new MockIntroduceConstantHandler(null).invoke(getProject(), getEditor(), getFile(), null); + checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); + } + public void testEnumConstant() throws Exception { doTest(true); }