diff --git a/java/java-impl/src/com/intellij/refactoring/typeMigration/rules/RootTypeConversionRule.java b/java/java-impl/src/com/intellij/refactoring/typeMigration/rules/RootTypeConversionRule.java index df5234d34a9c..c0b3b745be70 100644 --- a/java/java-impl/src/com/intellij/refactoring/typeMigration/rules/RootTypeConversionRule.java +++ b/java/java-impl/src/com/intellij/refactoring/typeMigration/rules/RootTypeConversionRule.java @@ -166,6 +166,7 @@ public class RootTypeConversionRule extends TypeConversionRule { } throw new AssertionError(" migrationType: " + migrationType + ", paramId: " + paramId + ", actualParameters: " + Arrays.toString(actualParams)); } else { + if (paramId >= actualParams.length) return true; return TypeConversionUtil.areTypesAssignmentCompatible(migrationType, actualParams[paramId]); } } diff --git a/java/typeMigration/test/com/intellij/refactoring/TypeMigrationTest.java b/java/typeMigration/test/com/intellij/refactoring/TypeMigrationTest.java index fb8e00324608..a7c62f254d75 100644 --- a/java/typeMigration/test/com/intellij/refactoring/TypeMigrationTest.java +++ b/java/typeMigration/test/com/intellij/refactoring/TypeMigrationTest.java @@ -870,6 +870,10 @@ public class TypeMigrationTest extends TypeMigrationTestBase { doTestFieldType("migrationField", myJavaFacade.getElementFactory().createTypeFromText("Test", null)); } + public void testTypeParameterMigrationInInvalidCode() { + doTestFieldType("migrationField", myJavaFacade.getElementFactory().createTypeFromText("Test", null)); + } + private void doTestReturnType(final String methodName, final String migrationType) { start(new RulesProvider() { @Override diff --git a/java/typeMigration/testData/refactoring/typeMigration/typeParameterMigrationInInvalidCode/after/Test.items b/java/typeMigration/testData/refactoring/typeMigration/typeParameterMigrationInInvalidCode/after/Test.items new file mode 100644 index 000000000000..a00e0a47d582 --- /dev/null +++ b/java/typeMigration/testData/refactoring/typeMigration/typeParameterMigrationInInvalidCode/after/Test.items @@ -0,0 +1,10 @@ +Types: +PsiField:migrationField : Test +PsiMethodCallExpression:migrationField.method() : void +PsiReferenceExpression:migrationField : Test + +Conversions: +migrationField.method() -> $ + +New expression type changes: +Fails: diff --git a/java/typeMigration/testData/refactoring/typeMigration/typeParameterMigrationInInvalidCode/after/test.java b/java/typeMigration/testData/refactoring/typeMigration/typeParameterMigrationInInvalidCode/after/test.java new file mode 100644 index 000000000000..313d41ea7302 --- /dev/null +++ b/java/typeMigration/testData/refactoring/typeMigration/typeParameterMigrationInInvalidCode/after/test.java @@ -0,0 +1,11 @@ +class Test { + private static Test migrationField; + + private static void m(Short x1, Short x2) { + migrationField.method(); + } + + void method(X[] xes) { + + } +} \ No newline at end of file diff --git a/java/typeMigration/testData/refactoring/typeMigration/typeParameterMigrationInInvalidCode/before/test.java b/java/typeMigration/testData/refactoring/typeMigration/typeParameterMigrationInInvalidCode/before/test.java new file mode 100644 index 000000000000..1bb286612849 --- /dev/null +++ b/java/typeMigration/testData/refactoring/typeMigration/typeParameterMigrationInInvalidCode/before/test.java @@ -0,0 +1,11 @@ +class Test { + private static Test migrationField; + + private static void m(Short x1, Short x2) { + migrationField.method(); + } + + void method(X[] xes) { + + } +} \ No newline at end of file