From 95679d8c53dc64b53314d0adeb613d972f463d60 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 28 Jun 2018 18:54:56 +0300 Subject: [PATCH] change var type: ensure target type is denotable (IDEA-150867) --- .../impl/quickfix/VariableTypeFromCallFix.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/VariableTypeFromCallFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/VariableTypeFromCallFix.java index fba57acb846e..0ed876a363cb 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/VariableTypeFromCallFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/VariableTypeFromCallFix.java @@ -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;