mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
change var type: ensure target type is denotable (IDEA-150867)
This commit is contained in:
+9
-4
@@ -25,7 +25,7 @@ public class VariableTypeFromCallFix implements IntentionAction {
|
||||
private final PsiType myExpressionType;
|
||||
private final PsiVariable myVar;
|
||||
|
||||
private VariableTypeFromCallFix(@NotNull PsiClassType type, @NotNull PsiVariable var) {
|
||||
private VariableTypeFromCallFix(@NotNull PsiType type, @NotNull PsiVariable var) {
|
||||
myExpressionType = type;
|
||||
myVar = var;
|
||||
}
|
||||
@@ -94,13 +94,15 @@ public class VariableTypeFromCallFix implements IntentionAction {
|
||||
if (resolved instanceof PsiVariable) {
|
||||
final PsiType varType = ((PsiVariable)resolved).getType();
|
||||
final PsiClass varClass = PsiUtil.resolveClassInType(varType);
|
||||
final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(expression.getProject()).getResolveHelper();
|
||||
final Project project = expression.getProject();
|
||||
final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(project).getResolveHelper();
|
||||
if (varClass != null) {
|
||||
final PsiSubstitutor psiSubstitutor = resolveHelper.inferTypeArguments(varClass.getTypeParameters(),
|
||||
parameters,
|
||||
expressions, PsiSubstitutor.EMPTY, resolved,
|
||||
DefaultParameterTypeInferencePolicy.INSTANCE);
|
||||
final PsiClassType appropriateVarType = JavaPsiFacade.getElementFactory(expression.getProject()).createType(varClass, psiSubstitutor);
|
||||
final PsiType appropriateVarType = GenericsUtil.getVariableTypeByExpressionType(JavaPsiFacade.getElementFactory(
|
||||
project).createType(varClass, psiSubstitutor));
|
||||
if (!varType.equals(appropriateVarType)) {
|
||||
actions.add(new VariableTypeFromCallFix(appropriateVarType, (PsiVariable)resolved));
|
||||
break;
|
||||
@@ -128,7 +130,10 @@ public class VariableTypeFromCallFix implements IntentionAction {
|
||||
}
|
||||
final PsiElement resolve = ((PsiReferenceExpression)expression).resolve();
|
||||
if (resolve instanceof PsiVariable) {
|
||||
result.addAll(HighlightFixUtil.getChangeVariableTypeFixes((PsiVariable)resolve, parameterType));
|
||||
PsiType varType = ((PsiVariable)resolve).getType();
|
||||
if (!varType.equals(GenericsUtil.getVariableTypeByExpressionType(parameterType))) {
|
||||
result.addAll(HighlightFixUtil.getChangeVariableTypeFixes((PsiVariable)resolve, parameterType));
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user