package com.intellij.refactoring; import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.typeMigration.TypeMigrationRules; import org.jetbrains.annotations.NotNull; /** * @author db * @since 22.07.2003 */ public class TypeMigrationTest extends TypeMigrationTestBase { private PsiElementFactory myFactory; @NotNull @Override public String getTestRoot() { return "/refactoring/typeMigration/"; } @Override public void setUp() throws Exception { super.setUp(); LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.HIGHEST); myFactory = myJavaFacade.getElementFactory(); } public void testT07() { doTestFieldType("f", PsiType.INT.createArrayType(), myFactory.createTypeFromText("java.lang.Integer", null).createArrayType()); } public void testT08() { doTestFieldType("f", myFactory.createTypeFromText("java.lang.Integer", null).createArrayType(), myFactory.createTypeFromText("java.lang.String", null).createArrayType()); } public void testT09() { doTestFieldType("f", myFactory.createTypeFromText("java.lang.Integer", null).createArrayType(), myFactory.createTypeFromText("java.lang.String", null).createArrayType()); } public void testT10() { doTestFieldType("f", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.util.List", null)); } public void testT11() { doTestFieldType("f", myFactory.createTypeFromText("java.util.Map", null), myFactory.createTypeFromText("java.util.Map", null)); } public void testT12() { doTestFieldType("f", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.util.List", null)); } public void testT13() { doTestFieldType("f", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.util.List", null)); } public void testT14() { doTestFieldType("f", myFactory.createTypeFromText("B", null), myFactory.createTypeFromText("A", null)); } //do not touch javadoc refs etc public void testT15() { doTestFieldType("f", myFactory.createTypeFromText("B", null), myFactory.createTypeFromText("A", null)); } //do not touch signature with method type parameters public void testT16() { doTestFieldType("f", myFactory.createTypeFromText("A", null), myFactory.createTypeFromText("B", null)); } //change method signature inspired by call on parameters public void testT17() { doTestFieldType("f", myFactory.createTypeFromText("A", null), myFactory.createTypeFromText("B", null)); } //extending iterable -> used in foreach statement public void testT18() { doTestFieldType("f", myFactory.createTypeFromText("A", null), myFactory.createTypeFromText("B", null)); } public void testT19() { doTestFieldType("f", myFactory.createTypeFromText("java.util.Map", null), myFactory.createTypeFromText("java.util.HashMap", null)); } public void testT20() { doTestFieldType("f", myFactory.createTypeFromText("java.util.HashMap", null), myFactory.createTypeFromText("java.util.Map", null)); } public void testT21() { doTestFieldType("f", myFactory.createTypeFromText("java.util.Map>", null), myFactory.createTypeFromText("java.util.Map>", null) ); } //varargs : removed after migration?! public void testT22() { doTestFieldType("f", myFactory.createTypeFromText("java.lang.String", null), myFactory.createTypeFromText("java.lang.Integer", null)); } //substitution from super class: type params substitution needed public void testT23() { doTestFieldType("f", myFactory.createTypeFromText("HashMap>", null), myFactory.createTypeFromText("HashMap>", null)); } //check return type unchanged when it is possible public void testT24() { doTestFieldType("f", myFactory.createTypeFromText("C", null), myFactory.createTypeFromText("D", null)); } public void testT25() { doTestFieldType("f", myFactory.createTypeFromText("C", null), myFactory.createTypeFromText("D", null)); } //check param type change public void testT26() { doTestFieldType("f", myFactory.createTypeFromText("C", null), myFactory.createTypeFromText("D", null)); } public void testT27() { doTestFieldType("f", myFactory.createTypeFromText("C", null), myFactory.createTypeFromText("D", null)); } //list --> array public void testT28() { doTestFieldType("f", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.lang.String", null).createArrayType()); } public void testT29() { doTestMethodType("get", myFactory.createTypeFromText("java.lang.String", null).createArrayType(), myFactory.createTypeFromText("java.util.List", null)); } public void testT30() { doTestFieldType("f", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.lang.String", null).createArrayType()); } public void testT31() { doTestFieldType("f", myFactory.createTypeFromText("Test", null), myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null)); } //non code usages public void testT32() { doTestFirstParamType("bar", myFactory.createTypeFromText("long", null), myFactory.createTypeFromText("int", null)); } //change type arguments for new expressions: l = new ArrayList() -> l = new ArrayList() public void testT33() { doTestFieldType("l", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.util.List", null)); } //new expression new ArrayList() should be left without modifications public void testT34() { doTestFieldType("l", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.util.AbstractList", null)); } public void testT35() { doTestFieldType("myParent", myFactory.createTypeFromText("Test", null), myFactory.createTypeFromText("TestImpl", null)); } //co-variant/contra-variant positions for primitive types 36-39 public void testT36() { doTestFirstParamType("foo", PsiType.INT, PsiType.BYTE); } public void testT37() { doTestFirstParamType("foo", PsiType.SHORT, PsiType.INT); } public void testT38() { doTestFirstParamType("foo", PsiType.SHORT, PsiType.LONG); } public void testT39() { doTestFirstParamType("foo", PsiType.SHORT, PsiType.BYTE); } //Set s = new HashSet() -> HashSet s = new HashSet(); public void testT40() { doTestFieldType("l", myFactory.createTypeFromText(CommonClassNames.JAVA_UTIL_LIST, null), myFactory.createTypeFromText("java.util.ArrayList", null)); } //Set s = new HashSet() -> HashSet s = new HashSet(); public void testT41() { doTestFieldType("l", myFactory.createTypeFromText(CommonClassNames.JAVA_UTIL_LIST, null), myFactory.createTypeFromText("java.util.ArrayList", null)); } //Set s = new HashSet() -> HashSet s = new HashSet(); public void testT42() { doTestFieldType("l", myFactory.createTypeFromText(CommonClassNames.JAVA_UTIL_LIST, null), myFactory.createTypeFromText("java.util.ArrayList", null)); } //long l; Object o = l -> long l; Long o = l; public void testT43() { doTestFieldType("o", myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null), myFactory.createTypeFromText("java.lang.Long", null)); } //long l; int i; l = i; -> long l; byte i; l = i; public void testT44() { doTestFieldType("i", PsiType.INT, PsiType.BYTE); } //long l; int i; l = i; -> byte l; -> byte i; l = i; public void testT45() { doTestFieldType("l", PsiType.LONG, PsiType.BYTE); } //byte i; long j = i; -> byte i; int j = i; public void testT46() { doTestFieldType("j", PsiType.LONG, PsiType.INT); } //o = null -? int o = null public void testT47() { doTestFieldType("o", myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null), PsiType.INT); } //co-variant/contra-variant assignments: leave types if possible change generics signature only 48-49 // foo(AbstractSet s){Set ss = s} -> foo(AbstractSet s){Set ss = s} public void testT48() { doTestFirstParamType("foo", myFactory.createTypeFromText("java.util.AbstractSet", null), myFactory.createTypeFromText("java.util.AbstractSet", null)); } // Set f; foo(AbstractSet s){f = s} -> Setf; foo(AbstractSet s){f = s} public void testT49() { doTestFieldType("f", myFactory.createTypeFromText("java.util.Set", null), myFactory.createTypeFromText("java.util.Set", null)); } //captured wildcard: Set s; Set c1 = s; -> // Set s; Set c1 = s; public void testT50() { doTestFieldType("c1", myFactory.createTypeFromText("java.util.Set", null), myFactory.createTypeFromText("java.util.Set", null)); } //array initialization: 51-52 public void testT51() { doTestFieldType("f", myFactory.createTypeFromText("java.lang.String", null).createArrayType(), myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null).createArrayType()); } public void testT52() { doTestFieldType("f", myFactory.createTypeFromText(CommonClassNames.JAVA_UTIL_SET, null).createArrayType(), myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null).createArrayType()); } //generic type promotion to array initializer public void testT53() { doTestFieldType("f", PsiType.DOUBLE.createArrayType(), myFactory.createTypeFromText("java.util.Set", null).createArrayType()); } //wildcard type promotion to expressions 54-55 public void testT54() { doTestFieldType("f", myFactory.createTypeFromText("java.util.Set", null), myFactory.createTypeFromText("java.util.Set", null)); } public void testT55() { doTestFieldType("f", myFactory.createTypeFromText("java.util.Set", null), myFactory.createTypeFromText("java.util.Set", null)); } //array index should be integer 56-57 public void testT56() { doTestFirstParamType("foo", PsiType.INT, PsiType.DOUBLE); } public void testT57() { doTestFirstParamType("foo", PsiType.INT, PsiType.BYTE); } //Arrays can be assignable to Object/Serializable/Cloneable 58-59; ~ 60 varargs public void testT58() { doTestFieldType("f", myFactory.createTypeFromText("java.lang.String", null).createArrayType(), myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null)); } public void testT59() { doTestFieldType("f", myFactory.createTypeFromText("java.lang.String", null).createArrayType(), myFactory.createTypeFromText("java.lang.Cloneable", null)); } public void testT60() { doTestFieldType("p", PsiType.INT.createArrayType(), myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null)); } //change parameter type -> vararg; assignment changed to array public void testT61() { doTestFirstParamType("foo", PsiType.INT, new PsiEllipsisType(PsiType.INT)); } //change field type -> change vararg parameter type due to assignment: 62-63 public void testT62() { doTestFieldType("p", PsiType.INT.createArrayType(), myFactory.createTypeFromText( CommonClassNames.JAVA_LANG_OBJECT, null)); } public void testT63() { doTestFieldType("p", PsiType.INT.createArrayType(), PsiType.DOUBLE.createArrayType()); } //remove vararg type: 64-66 public void testT64() { doTestFirstParamType("foo", new PsiEllipsisType(PsiType.INT), PsiType.INT); } public void testT65() { doTestFirstParamType("foo", new PsiEllipsisType(PsiType.INT), myFactory.createTypeFromText("java.lang.String", null)); } public void testT115() { doTestFirstParamType("foo", new PsiEllipsisType(myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null)), new PsiEllipsisType(myFactory.createTypeFromText("java.lang.String", null))); } public void testT66() { doTestFirstParamType("foo", new PsiEllipsisType(PsiType.INT), PsiType.INT); } public void testT67() { doTestFirstParamType("methMemAcc", myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null), myFactory.createTypeFromText("java.lang.String", null)); } public void testT68() { doTestFirstParamType("foo", PsiType.INT, PsiType.DOUBLE); } public void testT69() { doTestFirstParamType("foo", PsiType.INT, PsiType.BYTE); } public void testT70() { doTestFieldType("a", PsiType.INT.createArrayType().createArrayType(), PsiType.FLOAT.createArrayType().createArrayType()); } public void testT71() { doTestFieldType("f", myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_CLASS, null), myFactory.createTypeFromText("java.lang.Class", null)); } public void testT72() { doTestFieldType("f", myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_CLASS, null), myFactory.createTypeFromText("java.lang.Class", null)); } public void testT73() { doTestFieldType("f", myFactory.createTypeFromText("java.util.Set", null).createArrayType().createArrayType(), myFactory.createTypeFromText("java.util.Set", null).createArrayType().createArrayType()); } //prefix/postfix expression; binary expressions 74-76 public void testT74() { doTestFirstParamType("meth", PsiType.INT, PsiType.FLOAT); } public void testT75() { doTestFirstParamType("meth", PsiType.INT, myFactory.createTypeFromText("java.lang.String", null)); } public void testT76() { doTestFirstParamType("meth", PsiType.BYTE, PsiType.FLOAT); } //+= , etc 77-78 public void testT77() { doTestFirstParamType("meth", PsiType.INT, myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null)); } public void testT78() { doTestFirstParamType("meth", PsiType.INT, myFactory.createTypeFromText("java.lang.String", null)); } //casts 79-80,83 public void testT79() { doTestFirstParamType("meth", PsiType.INT, PsiType.BYTE); } public void testT80() { doTestFirstParamType("meth", PsiType.INT, PsiType.DOUBLE); } public void testT83() { doTestFirstParamType("meth", PsiType.INT, myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null)); } //instanceofs 81-82 public void testT81() { doTestFirstParamType("foo", myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null), myFactory.createTypeFromText("A", null)); } public void testT82() { doTestFirstParamType("foo", myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null), myFactory.createTypeFromText("C", null)); } public void testT84() { doTestFirstParamType("meth", myFactory.createTypeFromText(CommonClassNames.JAVA_UTIL_SET, null), myFactory.createTypeFromText("java.util.Set", null)); } public void testT85() { doTestFieldType("str", myFactory.createTypeFromText("java.lang.String", null), myFactory.createTypeFromText("java.lang.Integer", null)); } //array <-> list 86-89;94;95 public void testT86() { doTestMethodType("getArray", myFactory.createTypeFromText("java.lang.String", null).createArrayType(), myFactory.createTypeFromText("java.util.List", null)); } public void testT87() { doTestMethodType("getArray", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.lang.String", null).createArrayType()); } public void testT88() { doTestMethodType("getArray", myFactory.createTypeFromText("java.lang.String", null).createArrayType(), myFactory.createTypeFromText("java.util.List", null)); } public void testT89() { doTestMethodType("getArray", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.lang.String", null).createArrayType()); } public void testT94() { doTestMethodType("getArray", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.lang.String", null).createArrayType()); } public void testT95() { doTestMethodType("getArray", myFactory.createTypeFromText("java.lang.String", null).createArrayType(), myFactory.createTypeFromText("java.util.List", null)); } public void testT90() { doTestFieldType("l", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.util.List", null)); } //element type -> element type array public void testT91() { doTestMethodType("foo", myFactory.createTypeFromText("java.lang.String", null), myFactory.createTypeFromText("java.lang.String", null).createArrayType()); } //List=new ArrayList{}; -> List=new ArrayList{}; anonymous public void testT92() { doTestFieldType("f", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.util.List", null)); } //generics signature do not support primitives: Map - Map public void testT93() { doTestFirstParamType("foo", myFactory.createTypeFromText("java.lang.Boolean", null), PsiType.BOOLEAN); } //field initializers procession public void testT96() { doTestFieldType("f1", myFactory.createTypeFromText("java.lang.Integer", null), myFactory.createTypeFromText("java.lang.String", null)); } public void testT97() { doTestFieldType("f1", myFactory.createTypeFromText("java.lang.Integer", null).createArrayType(), PsiType.INT); } //list <-> array conversion in assignment statements public void testT98() { doTestMethodType("getArray", myFactory.createTypeFromText("java.lang.String", null).createArrayType(), myFactory.createTypeFromText("java.util.List", null)); } //escape pattern from [] public void testT99() { doTestFieldType("f", myFactory.createTypeFromText("java.util.Set>", null), myFactory.createTypeFromText("java.util.Set>", null)); } //non formatted type public void testT100() { doTestFieldType("f", myFactory.createTypeFromText("java.util.Map", null), myFactory.createTypeFromText("java.util.Map", null)); } //param List -> Array[] public void testT101() { doTestFirstParamType("meth", myFactory.createTypeFromText("java.util.List>", null), myFactory.createTypeFromText("java.util.ArrayList[]", null)); } //param Set.add() -> Array[] with conflict public void testT102() { doTestFirstParamType("method", myFactory.createTypeFromText("java.util.Set", null), myFactory.createTypeFromText("java.lang.Object[]", null)); } //set(1, "") should be assignment-checked over String public void testT103() { doTestFirstParamType("method", myFactory.createTypeFromText("java.util.ArrayList", null), myFactory.createTypeFromText("java.lang.Integer", null).createArrayType()); } //raw list type now should not be changed public void testT104() { doTestFirstParamType("method", myFactory.createTypeFromText("java.util.ArrayList", null), myFactory.createTypeFromText("java.lang.String", null).createArrayType()); } //implicit type parameter change 105-107 public void testT105() { doTestFieldType("t", myFactory.createTypeFromText("T", null), myFactory.createTypeFromText("java.lang.String", null)); } public void testT106() { doTestFieldType("t", myFactory.createTypeFromText("T", null), myFactory.createTypeFromText("java.lang.String", null)); } public void testT107() { doTestFieldType("t", myFactory.createTypeFromText("T", null), myFactory.createTypeFromText("java.lang.Integer", null)); } //foreach && wildcards: 108-110 public void testT108() { doTestFirstParamType("method", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.util.List", null)); } public void testT109() { doTestFirstParamType("method", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.util.List", null)); } public void testT110() { doTestFirstParamType("method", myFactory.createTypeFromText("java.util.List", null), myFactory.createTypeFromText("java.util.List", null)); } //wrap with array creation only literals and refs outside of binary/unary expressions public void testT111() { doTestFirstParamType("method", myFactory.createTypeFromText("java.lang.Integer", null), myFactory.createTypeFromText("java.lang.Integer", null).createArrayType()); } public void testT112() { doTestMethodType("method", myFactory.createTypeFromText("java.lang.Integer", null), myFactory.createTypeFromText("java.lang.Integer", null).createArrayType()); } //varargs public void testT113() { doTestFirstParamType("method", new PsiEllipsisType(myFactory.createTypeFromText("java.lang.Integer", null)), new PsiEllipsisType(myFactory.createTypeFromText("java.lang.Number", null))); } public void testT114() { doTestFirstParamType("method", new PsiEllipsisType(myFactory.createTypeFromText("java.lang.Integer", null)), new PsiEllipsisType(myFactory.createTypeFromText("java.lang.String", null))); } //varargs && ArrayList public void testT118() { doTestFirstParamType("method", myFactory.createTypeFromText("java.lang.Integer", null), new PsiEllipsisType(myFactory.createTypeFromText("java.lang.Integer", null))); } //varargs && arrays public void testT119() { doTestFirstParamType("method", myFactory.createTypeFromText("java.lang.Integer", null), new PsiEllipsisType(myFactory.createTypeFromText("java.lang.Integer", null))); } public void testT120() { doTestFirstParamType("method", myFactory.createTypeFromText("java.lang.Integer", null), new PsiEllipsisType(myFactory.createTypeFromText("java.lang.String", null))); } //change parameter type in foreach statement: 116 - array, 117 - list public void testT116() { doTestFieldType("str", myFactory.createTypeFromText("java.lang.Number", null), myFactory.createTypeFromText("java.lang.String", null)); } public void testT117() { doTestFieldType("str", myFactory.createTypeFromText("java.lang.Number", null), myFactory.createTypeFromText("java.lang.String", null)); } public void testT121() { doTestFirstParamType("method", myFactory.createTypeFromText("java.util.ArrayList", null), myFactory.createTypeFromText("java.util.ArrayList", null)); } public void testT122() { doTestFirstParamType("method", myFactory.createTypeFromText("java.util.List>", null), myFactory.createTypeFromText("java.util.List", null).createArrayType()); } public void testT123() { doTestFieldType("n", myFactory.createTypeFromText("java.lang.Number", null), myFactory.createTypeFromText("java.lang.Integer", null)); } //124,125 - do not change formal method return type public void testT124() { doTestFirstParamType("meth", myFactory.createTypeFromText("T", null), myFactory.createTypeFromText("java.lang.Integer", null)); } public void testT125() { doTestFirstParamType("meth", myFactory.createTypeFromText("T", null), myFactory.createTypeFromText("java.lang.Integer", null)); } public void testT126() { doTestMethodType("meth", myFactory.createTypeFromText("java.lang.String", null), myFactory.createTypeFromText("T", null)); } // Checking preserving method parameters alignment public void testT127() { getCurrentCodeStyleSettings().ALIGN_MULTILINE_PARAMETERS = true; getCurrentCodeStyleSettings().ALIGN_MULTILINE_PARAMETERS_IN_CALLS = true; doTestMethodType("test234", myFactory.createTypeFromText("int", null), myFactory.createTypeFromText("long", null)); } // test type migration from disjunction type public void testT128() { doTestCatchParameter(myFactory.createTypeFromText("Test.E1 | Test.E2", null), myFactory.createTypeFromText("Test.E", null)); } // test type migration to disjunction type public void testT129() { doTestCatchParameter(myFactory.createTypeFromText("Test.E", null), myFactory.createTypeFromText("Test.E1 | Test.E2", null)); } // test type migration from disjunction type with interfaces public void testT130() { doTestCatchParameter(myFactory.createTypeFromText("Test.E1 | Test.E2", null), myFactory.createTypeFromText("Test.E", null)); } // test type migration between disjunction types public void testT131() { doTestCatchParameter(myFactory.createTypeFromText("Test.E1 | Test.E2", null), myFactory.createTypeFromText("Test.E2 | Test.E1", null)); } private void doTestCatchParameter(final PsiType rootType, final PsiType migrationType) { start(new RulesProvider() { @Override public TypeMigrationRules provide() { final TypeMigrationRules rules = new TypeMigrationRules(rootType); rules.setMigrationRootType(migrationType); return rules; } @Override public PsiElement victims(final PsiClass aClass) { final PsiCatchSection catchSection = PsiTreeUtil.findChildOfType(aClass, PsiCatchSection.class); assert catchSection != null : aClass.getText(); final PsiParameter parameter = catchSection.getParameter(); assert parameter != null : catchSection.getText(); return parameter; } }); } // IDEA-72420 public void testT132() { doTestFirstParamType("h", "Test", myFactory.createTypeFromText("J", null), myFactory.createTypeFromText("I", null)); } public void testT133() { doTestFirstParamType("h", "Test", myFactory.createTypeFromText("J", null), myFactory.createTypeFromText("I", null)); } public void testT134() { doTestFirstParamType("buzz", "Test", PsiType.INT, myFactory.createTypeFromText("java.lang.String", null)); } public void testT135() { doTestFieldType("foo", "Test", PsiType.LONG, PsiType.INT); } public void testT136() { final GlobalSearchScope scope = GlobalSearchScope.allScope(myProject); doTestFirstParamType("foo", "Test", myFactory.createTypeByFQClassName(CommonClassNames.JAVA_LANG_INTEGER, scope), PsiType.getJavaLangString(myPsiManager, scope)); } public void testT137() { doTestFirstParamType("foo", "Test", PsiType.INT, myFactory.createTypeFromText("java.lang.String", null)); } public void testT138() { doTestFirstParamType("foo", "Test", myFactory.createTypeFromText("java.util.Set", null), myFactory.createTypeFromText("java.util.Collection", null)); } public void testT139() { doTestForeachParameter(myFactory.createTypeFromText("java.lang.String", null), myFactory.createTypeFromText("java.lang.Integer", null)); } private void doTestForeachParameter(final PsiType rootType, final PsiType migrationType) { start(new RulesProvider() { @Override public TypeMigrationRules provide() { final TypeMigrationRules rules = new TypeMigrationRules(rootType); rules.setMigrationRootType(migrationType); return rules; } @Override public PsiElement victims(final PsiClass aClass) { final PsiForeachStatement foreachStatement = PsiTreeUtil.findChildOfType(aClass, PsiForeachStatement.class); assert foreachStatement != null : aClass.getText(); return foreachStatement.getIterationParameter(); } }); } public void testTypeAnno() { doTestFieldType("list", "Test", myFactory.createTypeFromText("java.util.ArrayList", null), myFactory.createTypeFromText("java.util.Collection", null)); } }