From 5cf4f5c155400a68c9fd399cd83b55d408e1f0f4 Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 14 Oct 2011 15:42:04 +0200 Subject: [PATCH] introduce array from varargs expression: preserve the method call (IDEA-75519) --- .../introduceField/BaseExpressionToFieldHandler.java | 2 +- .../introduceConstant/ArrayFromVarargs.java | 8 ++++++++ .../introduceConstant/ArrayFromVarargs_after.java | 10 ++++++++++ .../intellij/refactoring/IntroduceConstantTest.java | 8 ++++++-- 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs.java create mode 100644 java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs_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 23867cf64172..c1d80959ea01 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java @@ -674,7 +674,7 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase myOutOfCodeBlockExtraction = selectedExpr.getUserData(ElementToWorkOn.OUT_OF_CODE_BLOCK); myDeleteSelf = myOutOfCodeBlockExtraction != null; myElement = getPhysicalElement(selectedExpr); - if (myElement.getParent() instanceof PsiExpressionStatement && getNormalizedAnchor(myAnchorElement).equals(myAnchorElement)) { + if (myElement.getParent() instanceof PsiExpressionStatement && getNormalizedAnchor(myAnchorElement).equals(myAnchorElement) && selectedExpr.isPhysical()) { PsiStatement statement = (PsiStatement)myElement.getParent(); if (statement.getParent() instanceof PsiCodeBlock) { myDeleteSelf = true; diff --git a/java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs.java b/java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs.java new file mode 100644 index 000000000000..ae6ba8ebeb16 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs.java @@ -0,0 +1,8 @@ +class B1 { + public B1(int i, String... s) {} +} +class A1 extends B1 { + A1() { + super(1, "a", "b"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs_after.java b/java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs_after.java new file mode 100644 index 000000000000..3e28acac4964 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceConstant/ArrayFromVarargs_after.java @@ -0,0 +1,10 @@ +class B1 { + public B1(int i, String... s) {} +} +class A1 extends B1 { + public static final String[] xxx = new String[]{"a", "b"}; + + A1() { + super(1, xxx); + } +} \ 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 7c9ea8ceb395..0cc2982aa0be 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceConstantTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceConstantTest.java @@ -3,8 +3,6 @@ package com.intellij.refactoring; import com.intellij.JavaTestUtil; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.ui.TypeSelectorManagerImpl; @@ -85,6 +83,12 @@ public class IntroduceConstantTest extends LightCodeInsightTestCase { checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); } + public void testArrayFromVarargs() 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 testEscalateVisibility() throws Exception { configureByFile(BASE_PATH + getTestName(false) + ".java");