From 07a45d1e55d1f88c59a56c7b47fbaee8d51dc1b6 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Tue, 5 Sep 2017 15:02:39 +0700 Subject: [PATCH] PsiMethodReferenceUtil: do not pass JavaResolveResult if can be calculated in-place --- .../impl/analysis/HighlightVisitorImpl.java | 2 +- .../quickfix/AdjustFunctionContextFix.java | 2 +- .../intellij/psi/PsiMethodReferenceUtil.java | 19 +++++++------------ .../PsiMethodReferenceExpressionImpl.java | 2 +- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index 4ee5a678b85e..dbb5964d50fd 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -1432,7 +1432,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh } if (!myHolder.hasErrorResults()) { - final String badReturnTypeMessage = PsiMethodReferenceUtil.checkReturnType(expression, result, functionalInterfaceType); + final String badReturnTypeMessage = PsiMethodReferenceUtil.checkReturnType(expression, functionalInterfaceType); if (badReturnTypeMessage != null) { HighlightInfo info = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(badReturnTypeMessage).create(); diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AdjustFunctionContextFix.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AdjustFunctionContextFix.java index 071c95001fc1..1eb6ab4737be 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AdjustFunctionContextFix.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AdjustFunctionContextFix.java @@ -114,7 +114,7 @@ public class AdjustFunctionContextFix extends LocalQuickFixAndIntentionActionOnP PsiType actualReturnType; if(expression instanceof PsiMethodReferenceExpression) { PsiMethodReferenceExpression methodRef = (PsiMethodReferenceExpression)expression; - actualReturnType = PsiMethodReferenceUtil.getMethodReferenceReturnType(methodRef, methodRef.advancedResolve(true)); + actualReturnType = PsiMethodReferenceUtil.getMethodReferenceReturnType(methodRef); } else { actualReturnType = PsiResolveHelper.ourGraphGuard.doPreventingRecursion(expression, true, () -> expression.getType()); } diff --git a/java/java-psi-api/src/com/intellij/psi/PsiMethodReferenceUtil.java b/java/java-psi-api/src/com/intellij/psi/PsiMethodReferenceUtil.java index 362fc8b3258a..ef35ebec7cd9 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiMethodReferenceUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiMethodReferenceUtil.java @@ -16,14 +16,12 @@ package com.intellij.psi; import com.intellij.codeInsight.PsiEquivalenceUtil; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Ref; import com.intellij.psi.util.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class PsiMethodReferenceUtil { - private static final Logger LOG = Logger.getInstance(PsiMethodReferenceUtil.class); public static boolean isSecondSearchPossible(PsiType[] parameterTypes, QualifierResolveResult qualifierResolveResult, @@ -71,20 +69,18 @@ public class PsiMethodReferenceUtil { } } - public static boolean isReturnTypeCompatible(PsiMethodReferenceExpression expression, - JavaResolveResult result, - PsiType functionalInterfaceType) { - return isReturnTypeCompatible(expression, result, functionalInterfaceType, null); + public static boolean isReturnTypeCompatible(PsiMethodReferenceExpression expression, PsiType functionalInterfaceType) { + return isReturnTypeCompatible(expression, functionalInterfaceType, null); } /** * Returns actual return type of method reference (not the expected one) * * @param expression a method reference to get the return type of - * @param result the result of method reference resolution * @return an actual method reference return type */ - public static PsiType getMethodReferenceReturnType(PsiMethodReferenceExpression expression, JavaResolveResult result) { + public static PsiType getMethodReferenceReturnType(PsiMethodReferenceExpression expression) { + JavaResolveResult result = expression.advancedResolve(false); PsiSubstitutor subst = result.getSubstitutor(); PsiType methodReturnType = null; @@ -127,7 +123,6 @@ public class PsiMethodReferenceUtil { } private static boolean isReturnTypeCompatible(PsiMethodReferenceExpression expression, - JavaResolveResult result, PsiType functionalInterfaceType, Ref errorMessage) { final PsiClassType.ClassResolveResult resolveResult = PsiUtil.resolveGenericsClassInType(functionalInterfaceType); @@ -139,7 +134,7 @@ public class PsiMethodReferenceUtil { return true; } - PsiType methodReturnType = getMethodReferenceReturnType(expression, result); + PsiType methodReturnType = getMethodReferenceReturnType(expression); if (methodReturnType == null || PsiType.VOID.equals(methodReturnType)) { return false; } @@ -362,9 +357,9 @@ public class PsiMethodReferenceUtil { return null; } - public static String checkReturnType(PsiMethodReferenceExpression expression, JavaResolveResult result, PsiType functionalInterfaceType) { + public static String checkReturnType(PsiMethodReferenceExpression expression, PsiType functionalInterfaceType) { final Ref errorMessage = Ref.create(); - if (!isReturnTypeCompatible(expression, result, functionalInterfaceType, errorMessage)) { + if (!isReturnTypeCompatible(expression, functionalInterfaceType, errorMessage)) { return errorMessage.get(); } return null; diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java index 1af0b34d9b41..30280883427d 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java @@ -430,7 +430,7 @@ public class PsiMethodReferenceExpressionImpl extends JavaStubPsiElement