From 0d7a9088b5fe17d76920d502443d0757d1d25d9d Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 16 Dec 2013 15:33:08 +0400 Subject: [PATCH] introduce constant from literal: ignore null anchors for non-physical elements (IDEA-118166) --- .../refactoring/util/RefactoringUtil.java | 7 ++++++- ...PartialStringLiteralAnchorFromAnnotation.java | 14 ++++++++++++++ ...lStringLiteralAnchorFromAnnotation_after.java | 16 ++++++++++++++++ .../refactoring/IntroduceConstantTest.java | 6 ++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchorFromAnnotation.java create mode 100644 java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchorFromAnnotation_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java index 7f637234100c..60242005694c 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java @@ -516,7 +516,11 @@ public class RefactoringUtil { continue; } PsiElement anchor1 = getParentExpressionAnchorElement(occurrence); - if (anchor1 == null) return null; + + if (anchor1 == null) { + if (occurrence.isPhysical()) return null; + continue; + } if (anchor == null) { anchor = anchor1; @@ -549,6 +553,7 @@ public class RefactoringUtil { } } + if (anchor == null) return null; if (occurrences.length > 1 && anchor.getParent().getParent() instanceof PsiSwitchStatement) { PsiSwitchStatement switchStatement = (PsiSwitchStatement)anchor.getParent().getParent(); if (switchStatement.getBody().equals(anchor.getParent())) { diff --git a/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchorFromAnnotation.java b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchorFromAnnotation.java new file mode 100644 index 000000000000..76b402c2118b --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchorFromAnnotation.java @@ -0,0 +1,14 @@ +@Model(usages = @Usage("${__REQUEST_PARAMETERS}")) +public class SomeClass { + + public String getModelName() { + return "__REQUEST_PARAMETERS"; + } +} + +@interface Model { + Usage usages(); +} +@interface Usage { + String value(); +} diff --git a/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchorFromAnnotation_after.java b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchorFromAnnotation_after.java new file mode 100644 index 000000000000..983e0c3f52fd --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceConstant/PartialStringLiteralAnchorFromAnnotation_after.java @@ -0,0 +1,16 @@ +@Model(usages = @Usage("${" + SomeClass.xxx + "}")) +public class SomeClass { + + public static final String xxx = "__REQUEST_PARAMETERS"; + + public String getModelName() { + return xxx; + } +} + +@interface Model { + Usage usages(); +} +@interface Usage { + String value(); +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceConstantTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceConstantTest.java index 370435173444..3308baa4c78b 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceConstantTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceConstantTest.java @@ -91,6 +91,12 @@ public class IntroduceConstantTest extends LightCodeInsightTestCase { checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); } + public void testPartialStringLiteralAnchorFromAnnotation() 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 testIntroduceConstantFromThisCall() throws Exception { configureByFile(BASE_PATH + getTestName(false) + ".java"); new MockIntroduceConstantHandler(null).invoke(getProject(), getEditor(), getFile(), null);