From 56f5c963467eded939e5603e4d8a58dbedc736a4 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 17 Mar 2020 22:17:20 +0100 Subject: [PATCH] introduce constant: resolve name conflict caused by static import (IDEA-235318) GitOrigin-RevId: 3da9946d105c483e95b26cf46a6a23bfce97322e --- .../introduceField/IntroduceConstantDialog.java | 3 ++- .../conflictingConstantNameStaticallyImported.java | 10 ++++++++++ ...flictingConstantNameStaticallyImported_after.java | 12 ++++++++++++ .../refactoring/InplaceIntroduceConstantTest.java | 4 ++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantNameStaticallyImported.java create mode 100644 java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantNameStaticallyImported_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceConstantDialog.java b/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceConstantDialog.java index 32b5246d8401..af72a560088c 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceConstantDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceConstantDialog.java @@ -296,9 +296,10 @@ class IntroduceConstantDialog extends DialogWrapper { codeStyleManager.suggestVariableName(VariableKind.STATIC_FINAL_FIELD, propertyName, psiExpression, type); if (psiExpression != null) { String[] names = nameInfo.names; + PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(psiExpression.getProject()).getResolveHelper(); for (int i = 0, namesLength = names.length; i < namesLength; i++) { String name = names[i]; - if (parentClass.findFieldByName(name, false) != null) { + if (resolveHelper.resolveAccessibleReferencedVariable(name, parentClass) != null) { names[i] = codeStyleManager.suggestUniqueVariableName(name, psiExpression, true); } } diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantNameStaticallyImported.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantNameStaticallyImported.java new file mode 100644 index 000000000000..2f714aa17b8f --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantNameStaticallyImported.java @@ -0,0 +1,10 @@ +package p; +import static p.Foo.FOO; +class Foo { + public static final String FOO = "foo"; +} +class Test { + public void method() { + String foo = new String(FOO); + } +} diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantNameStaticallyImported_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantNameStaticallyImported_after.java new file mode 100644 index 000000000000..abd4ee5cf828 --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceConstant/conflictingConstantNameStaticallyImported_after.java @@ -0,0 +1,12 @@ +package p; +import static p.Foo.FOO; +class Foo { + public static final String FOO = "foo"; +} +class Test { + + public static final String FOO1 = new String(FOO); + + public void method() { + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/InplaceIntroduceConstantTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/InplaceIntroduceConstantTest.java index fe8fc3cb9afa..edc8d9415eb3 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/InplaceIntroduceConstantTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/InplaceIntroduceConstantTest.java @@ -70,6 +70,10 @@ public class InplaceIntroduceConstantTest extends AbstractJavaInplaceIntroduceTe doTest(null); } + public void testConflictingConstantNameStaticallyImported() { + doTest(null); + } + public void testNoConflictingConstantName() { doTest(null); }