mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
type migration: do not propagate formal types (IDEA-54117; IDEA-54112)
This commit is contained in:
+13
-9
@@ -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
|
||||
|
||||
+4
-1
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user