type migration: do not propagate formal types (IDEA-54117; IDEA-54112)

This commit is contained in:
anna
2010-07-07 21:59:30 +04:00
parent 733fc448db
commit f925294d4e
2 changed files with 17 additions and 10 deletions
@@ -362,15 +362,7 @@ public class TypeMigrationLabeler {
type = userDefinedType ? type : TypeEvaluator.substituteType(type, originalType, isContraVariantPosition);
if (!userDefinedType) {
if (originalType instanceof PsiClassType) {
final PsiClassType psiClassType = (PsiClassType)originalType;
if (psiClassType.resolve() instanceof PsiTypeParameter) {
return false;
}
for (PsiType paramType : psiClassType.getParameters()) {
if (paramType instanceof PsiClassType && ((PsiClassType)paramType).resolve() instanceof PsiTypeParameter) return false;
}
}
if (typeContainsTypeParameters(originalType)) return false;
}
if (type instanceof PsiCapturedWildcardType) {
@@ -433,6 +425,18 @@ public class TypeMigrationLabeler {
}
}
static boolean typeContainsTypeParameters(PsiType originalType) {
if (originalType instanceof PsiClassType) {
final PsiClassType psiClassType = (PsiClassType)originalType;
if (psiClassType.resolve() instanceof PsiTypeParameter) {
return true;
}
for (PsiType paramType : psiClassType.getParameters()) {
if (paramType instanceof PsiClassType && ((PsiClassType)paramType).resolve() instanceof PsiTypeParameter) return true;
}
}
return false;
}
@Nullable
@@ -168,7 +168,10 @@ class TypeMigrationStatementProcessor extends JavaRecursiveElementVisitor {
final PsiType valueType = myTypeEvaluator.evaluateType(value);
if (returnType != null && valueType != null) {
myLabeler.addMigrationRoot(method, valueType, myStatement, TypeConversionUtil.isAssignable(returnType, valueType), true);
if (!myLabeler.addMigrationRoot(method, valueType, myStatement, TypeConversionUtil.isAssignable(returnType, valueType), true)
&& TypeMigrationLabeler.typeContainsTypeParameters(returnType)) {
myLabeler.markFailedConversion(new Pair<PsiType, PsiType>(returnType, valueType), value);
}
}
}
}