diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/JavaIntroduceParameterMethodUsagesProcessor.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/JavaIntroduceParameterMethodUsagesProcessor.java index cc66bbe8c778..0e23dc5a18e8 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/JavaIntroduceParameterMethodUsagesProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/JavaIntroduceParameterMethodUsagesProcessor.java @@ -116,7 +116,9 @@ public class JavaIntroduceParameterMethodUsagesProcessor implements IntroducePar parametersToRemove.forEachDescending(new TIntProcedure() { public boolean execute(final int paramNum) { try { - exprs[paramNum].delete(); + if (paramNum < exprs.length) { + exprs[paramNum].delete(); + } } catch (IncorrectOperationException e) { LOG.error(e); diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/OldReferenceResolver.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/OldReferenceResolver.java index 0e3d45b00729..e15651b92f66 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/OldReferenceResolver.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/OldReferenceResolver.java @@ -126,7 +126,7 @@ public class OldReferenceResolver { if (subj.getParent() != parameterList) return; int index = parameterList.getParameterIndex((PsiParameter)subj); if (index < 0) return; - if (index < parameters.length) { + if (index < myActualArgs.length) { PsiExpression actualArg = myActualArgs[index]; int copyingSafetyLevel = RefactoringUtil.verifySafeCopyExpression(actualArg); if (copyingSafetyLevel == RefactoringUtil.EXPR_COPY_PROHIBITED) { diff --git a/java/java-tests/testData/refactoring/introduceParameter/afterIncompleteEnumDefinition.java b/java/java-tests/testData/refactoring/introduceParameter/afterIncompleteEnumDefinition.java new file mode 100644 index 000000000000..7796b345973d --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceParameter/afterIncompleteEnumDefinition.java @@ -0,0 +1,10 @@ +enum Test { + Root(position + ""); + + public Test(String description, String anObject) { + System.out.println(description); + System.out.println(anObject); + } + +} + diff --git a/java/java-tests/testData/refactoring/introduceParameter/beforeIncompleteEnumDefinition.java b/java/java-tests/testData/refactoring/introduceParameter/beforeIncompleteEnumDefinition.java new file mode 100644 index 000000000000..21a3f7c1cf41 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceParameter/beforeIncompleteEnumDefinition.java @@ -0,0 +1,10 @@ +enum Test { + Root(); + + public Test(String description, int position) { + System.out.println(description); + System.out.println(position + ""); + } + +} + diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java index 9e4bec4898db..63950d0af0dc 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceParameterTest.java @@ -229,6 +229,10 @@ public class IntroduceParameterTest extends LightCodeInsightTestCase { doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, false, false, false, false); } + public void testIncompleteEnumDefinition() throws Exception { + doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, true, false, false, false); + } + private void doTestThroughHandler() throws Exception { configureByFile("/refactoring/introduceParameter/before" + getTestName(false) + ".java"); new IntroduceParameterHandler().invoke(getProject(), myEditor, myFile, new DataContext() {