From 15dbccb971aa5a7d7aa5f36d97a1baa597be821e Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Tue, 10 Jan 2017 18:23:08 +0100 Subject: [PATCH] inline constant: ensure initial initializer is not changed EA-93434 - IOE: CheckUtil.checkWritable --- .../inline/InlineConstantFieldProcessor.java | 1 + .../inlineConstantField/QualifiedExpressionInLib.java | 10 ++++++++++ .../QualifiedExpressionInLib.java.after | 10 ++++++++++ .../refactoring/inline/InlineConstantFieldTest.java | 10 +++++++++- 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpressionInLib.java create mode 100644 java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpressionInLib.java.after diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldProcessor.java index 18c2f329fde7..6fad88993db3 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldProcessor.java @@ -211,6 +211,7 @@ public class InlineConstantFieldProcessor extends BaseRefactoringProcessor { if (expr instanceof PsiReferenceExpression) { PsiExpression qExpression = ((PsiReferenceExpression)expr).getQualifierExpression(); if (qExpression != null) { + initializer1 = (PsiExpression)initializer1.copy(); PsiReferenceExpression referenceExpression = null; if (initializer1 instanceof PsiReferenceExpression) { referenceExpression = (PsiReferenceExpression)initializer1; diff --git a/java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpressionInLib.java b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpressionInLib.java new file mode 100644 index 000000000000..02fd14e9a433 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpressionInLib.java @@ -0,0 +1,10 @@ +class QTest { + { + System.out.println(Foo.BAR); + } +} + +class Foo { + public static final String FOO = "FOO"; + public static final String BAR = FOO; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpressionInLib.java.after b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpressionInLib.java.after new file mode 100644 index 000000000000..5ee438c66ea0 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineConstantField/QualifiedExpressionInLib.java.after @@ -0,0 +1,10 @@ +class QTest { + { + System.out.println(Foo.FOO); + } +} + +class Foo { + public static final String FOO = "FOO"; + public static final String BAR = FOO; +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineConstantFieldTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineConstantFieldTest.java index f2bc5e06286a..cfd5d88b130f 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineConstantFieldTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineConstantFieldTest.java @@ -25,6 +25,10 @@ public class InlineConstantFieldTest extends LightRefactoringTestCase { doTest(); } + public void testQualifiedExpressionInLib() throws Exception { + doTest(true); + } + public void testQualifiedConstantExpression() throws Exception { doTest(); } @@ -62,6 +66,10 @@ public class InlineConstantFieldTest extends LightRefactoringTestCase { } private void doTest() throws Exception { + doTest(false); + } + + private void doTest(boolean inlineThisOnly) throws Exception { String name = getTestName(false); @NonNls String fileName = "/refactoring/inlineConstantField/" + name + ".java"; configureByFile(fileName); @@ -71,7 +79,7 @@ public class InlineConstantFieldTest extends LightRefactoringTestCase { PsiReferenceExpression refExpr = ref instanceof PsiReferenceExpression ? (PsiReferenceExpression)ref : null; assertTrue(element instanceof PsiField); PsiField field = (PsiField)element.getNavigationElement(); - new InlineConstantFieldProcessor(field, getProject(), refExpr, element instanceof PsiCompiledElement).run(); + new InlineConstantFieldProcessor(field, getProject(), refExpr, inlineThisOnly || element instanceof PsiCompiledElement).run(); checkResultByFile(fileName + ".after"); } } \ No newline at end of file