From 281a692bfff79411d66162564688004a0664ed2a Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 14 Feb 2012 13:34:42 +0100 Subject: [PATCH] EA-33665 - AIOOBE: IntroduceVariableBase.createArrayCreationExpression --- .../introduceVariable/IntroduceVariableBase.java | 8 ++++++-- .../introduceVariable/ArrayFromVarargs1.after.java | 9 +++++++++ .../refactoring/introduceVariable/ArrayFromVarargs1.java | 8 ++++++++ .../com/intellij/refactoring/IntroduceVariableTest.java | 4 ++++ 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.after.java create mode 100644 java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.java diff --git a/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java b/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java index dfa8c7417307..1c6ab5f84161 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java @@ -369,7 +369,11 @@ public abstract class IntroduceVariableBase extends IntroduceHandlerBase { } } catch (IncorrectOperationException e) { - return createArrayCreationExpression(text, startOffset, endOffset, PsiTreeUtil.getParentOfType(elementAt, PsiMethodCallExpression.class)); + if (elementAt instanceof PsiExpressionList) { + final PsiElement parent = elementAt.getParent(); + return parent instanceof PsiCallExpression ? createArrayCreationExpression(text, startOffset, endOffset, (PsiCallExpression)parent) : null; + } + return null; } return tempExpr; @@ -384,7 +388,7 @@ public abstract class IntroduceVariableBase extends IntroduceHandlerBase { return null; } - private static PsiExpression createArrayCreationExpression(String text, int startOffset, int endOffset, PsiMethodCallExpression parent) { + private static PsiExpression createArrayCreationExpression(String text, int startOffset, int endOffset, PsiCallExpression parent) { if (text == null || parent == null) return null; final String[] varargsExpressions = text.split("s*,s*"); if (varargsExpressions.length > 1) { diff --git a/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.after.java b/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.after.java new file mode 100644 index 000000000000..cb85bbd8d728 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.after.java @@ -0,0 +1,9 @@ +public class Foo { + public Foo(String ... strs) {} + + public void test1(Foo o, String... foo) {} + void bar() { + String[] strs = {"", ""}; + test1(new Foo(strs)); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.java b/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.java new file mode 100644 index 000000000000..dbdd977c7548 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/ArrayFromVarargs1.java @@ -0,0 +1,8 @@ +public class Foo { + public Foo(String ... strs) {} + + public void test1(Foo o, String... foo) {} + void bar() { + test1(new Foo( "", "")); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java index a6557e69da3d..aad754cc357f 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java @@ -197,6 +197,10 @@ public class IntroduceVariableTest extends LightCodeInsightTestCase { public void testArrayFromVarargs() throws Exception { doTest(new MockIntroduceVariableHandler("strs", false, false, false, "java.lang.String[]")); } + + public void testArrayFromVarargs1() throws Exception { + doTest(new MockIntroduceVariableHandler("strs", false, false, false, "java.lang.String[]")); + } public void testFromFinalFieldOnAssignment() throws Exception { doTest(new MockIntroduceVariableHandler("strs", false, false, false, "java.lang.String"));