| 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(); |
| } |
| |
| @Override |
| public void tearDown() throws Exception { |
| myFactory = null; |
| |
| super.tearDown(); |
| } |
| |
| 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<java.lang.Integer>", null), |
| myFactory.createTypeFromText("java.util.List<java.lang.String>", null)); |
| } |
| |
| public void testT11() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.Map<java.lang.Integer, java.lang.Integer>", null), |
| myFactory.createTypeFromText("java.util.Map<java.lang.String, java.lang.Integer>", null)); |
| } |
| |
| public void testT12() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.List<java.lang.Integer>", null), |
| myFactory.createTypeFromText("java.util.List<java.lang.String>", null)); |
| } |
| |
| public void testT13() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.List<java.lang.String>", null), |
| myFactory.createTypeFromText("java.util.List<java.lang.Integer>", 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<java.lang.String, java.lang.String>", null), |
| myFactory.createTypeFromText("java.util.HashMap<java.lang.Integer, java.lang.Integer>", null)); |
| } |
| |
| public void testT20() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.HashMap<java.lang.Integer, java.lang.Integer>", null), |
| myFactory.createTypeFromText("java.util.Map<java.lang.String, java.lang.String>", null)); |
| } |
| |
| public void testT21() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.Map<java.lang.String, java.util.List<java.lang.String>>", |
| null), |
| myFactory.createTypeFromText("java.util.Map<java.lang.String, java.util.Set<java.lang.String>>", |
| 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<java.lang.String, java.util.Set<java.lang.String>>", null), |
| myFactory.createTypeFromText("HashMap<java.lang.String, java.util.List<java.lang.String>>", 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<java.lang.String>", 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<java.lang.String>", null)); |
| } |
| |
| public void testT30() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.List<java.lang.String>", 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<String>() -> l = new ArrayList<Integer>() |
| public void testT33() { |
| doTestFieldType("l", |
| myFactory.createTypeFromText("java.util.List<java.lang.String>", null), |
| myFactory.createTypeFromText("java.util.List<java.lang.Integer>", null)); |
| } |
| |
| //new expression new ArrayList<String>() should be left without modifications |
| public void testT34() { |
| doTestFieldType("l", |
| myFactory.createTypeFromText("java.util.List<java.lang.String>", null), |
| myFactory.createTypeFromText("java.util.AbstractList<java.lang.String>", 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<String>() -> HashSet s = new HashSet<String>(); |
| public void testT41() { |
| doTestFieldType("l", |
| myFactory.createTypeFromText(CommonClassNames.JAVA_UTIL_LIST, null), |
| myFactory.createTypeFromText("java.util.ArrayList", null)); |
| } |
| |
| //Set s = new HashSet() -> HashSet<String> s = new HashSet(); |
| public void testT42() { |
| doTestFieldType("l", |
| myFactory.createTypeFromText(CommonClassNames.JAVA_UTIL_LIST, null), |
| myFactory.createTypeFromText("java.util.ArrayList<java.lang.String>", 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<String> s){Set<String> ss = s} -> foo(AbstractSet<Integer> s){Set<Integer> ss = s} |
| public void testT48() { |
| doTestFirstParamType("foo", |
| myFactory.createTypeFromText("java.util.AbstractSet<A>", null), |
| myFactory.createTypeFromText("java.util.AbstractSet<B>", null)); |
| } |
| |
| // Set<String> f; foo(AbstractSet<String> s){f = s} -> Set<Integer>f; foo(AbstractSet<Integer> s){f = s} |
| public void testT49() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.Set<A>", null), |
| myFactory.createTypeFromText("java.util.Set<B>", null)); |
| } |
| |
| //captured wildcard: Set<? extends JComponent> s; Set<? extends JComponent> c1 = s; -> |
| // Set<? extends JButton> s; Set<? extends JButton> c1 = s; |
| public void testT50() { |
| doTestFieldType("c1", |
| myFactory.createTypeFromText("java.util.Set<? extends JComponent>", null), |
| myFactory.createTypeFromText("java.util.Set<? extends JButton>", 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<java.lang.String>", null).createArrayType()); |
| } |
| |
| //wildcard type promotion to expressions 54-55 |
| public void testT54() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.Set<java.lang.Object>", null), |
| myFactory.createTypeFromText("java.util.Set<? extends java.lang.Integer>", null)); |
| } |
| |
| public void testT55() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.Set<java.lang.Object>", 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<? extends java.lang.Number>", null)); |
| } |
| |
| public void testT72() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText(CommonClassNames.JAVA_LANG_CLASS, null), |
| myFactory.createTypeFromText("java.lang.Class<java.lang.Integer>", null)); |
| } |
| |
| public void testT73() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.Set<javax.swing.JComponent>", null).createArrayType().createArrayType(), |
| myFactory.createTypeFromText("java.util.Set<java.awt.Component>", 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<? extends 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<java.lang.String>", null)); |
| } |
| |
| public void testT87() { |
| doTestMethodType("getArray", |
| myFactory.createTypeFromText("java.util.List<java.lang.String>", 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<java.lang.String>", null)); |
| } |
| |
| public void testT89() { |
| doTestMethodType("getArray", |
| myFactory.createTypeFromText("java.util.List<java.lang.String>", null), |
| myFactory.createTypeFromText("java.lang.String", null).createArrayType()); |
| } |
| |
| public void testT94() { |
| doTestMethodType("getArray", |
| myFactory.createTypeFromText("java.util.List<java.lang.String>", 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<java.lang.String>", null)); |
| } |
| |
| |
| public void testT90() { |
| doTestFieldType("l", |
| myFactory.createTypeFromText("java.util.List<B>", null), |
| myFactory.createTypeFromText("java.util.List<A>", 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<S>=new ArrayList<S>{}; -> List<I>=new ArrayList<I>{}; anonymous |
| public void testT92() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.List<java.lang.String>", null), |
| myFactory.createTypeFromText("java.util.List<java.lang.Integer>", null)); |
| } |
| |
| //generics signature do not support primitives: Map<Boolean, String> - Map<boolean, String> |
| 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<java.lang.String>", null)); |
| } |
| |
| //escape pattern from [] |
| public void testT99() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.Set<java.util.List<char[]>>", null), |
| myFactory.createTypeFromText("java.util.Set<java.util.List<int[]>>", null)); |
| } |
| |
| //non formatted type |
| public void testT100() { |
| doTestFieldType("f", |
| myFactory.createTypeFromText("java.util.Map<java.lang.String,java.lang.String>", null), |
| myFactory.createTypeFromText("java.util.Map<java.lang.String,java.lang.Integer>", null)); |
| } |
| |
| //param List -> Array[] |
| public void testT101() { |
| doTestFirstParamType("meth", |
| myFactory.createTypeFromText("java.util.List<java.util.ArrayList<java.lang.Integer>>", null), |
| myFactory.createTypeFromText("java.util.ArrayList<java.lang.Integer>[]", null)); |
| } |
| |
| //param Set.add() -> Array[] with conflict |
| public void testT102() { |
| doTestFirstParamType("method", |
| myFactory.createTypeFromText("java.util.Set<? extends java.lang.Object>", 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<java.lang.String>", 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<java.lang.Integer>", null), |
| myFactory.createTypeFromText("java.util.List<? extends java.lang.Number>", null)); |
| } |
| |
| public void testT109() { |
| doTestFirstParamType("method", |
| myFactory.createTypeFromText("java.util.List<java.lang.Integer>", null), |
| myFactory.createTypeFromText("java.util.List<? super java.lang.Number>", null)); |
| } |
| |
| public void testT110() { |
| doTestFirstParamType("method", |
| myFactory.createTypeFromText("java.util.List<java.lang.Integer>", null), |
| myFactory.createTypeFromText("java.util.List<? extends java.lang.String>", 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<java.lang.Number>", null), |
| myFactory.createTypeFromText("java.util.ArrayList<java.lang.Float>", null)); |
| } |
| |
| public void testT122() { |
| doTestFirstParamType("method", |
| myFactory.createTypeFromText("java.util.List<java.util.ArrayList<java.lang.Integer>>", null), |
| myFactory.createTypeFromText("java.util.List<java.lang.Integer>", 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<java.lang.String>", null), |
| myFactory.createTypeFromText("java.util.Collection<java.lang.String>", 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<java.lang.@TA Integer>", null), |
| myFactory.createTypeFromText("java.util.Collection<java.lang.@TA Integer>", null)); |
| } |
| } |