diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ArgumentFixerActionFactory.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ArgumentFixerActionFactory.java index 340692f7ef4e..efe66e71b976 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ArgumentFixerActionFactory.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ArgumentFixerActionFactory.java @@ -8,6 +8,7 @@ import com.intellij.openapi.util.Comparing; import com.intellij.psi.*; import com.intellij.psi.infos.CandidateInfo; import com.intellij.psi.util.PsiTypesUtil; +import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.TypeConversionUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; @@ -67,7 +68,8 @@ public abstract class ArgumentFixerActionFactory { Map potentialCasts = new HashMap<>(); for (int i = 0; i < expressions.length; i++) { PsiExpression expression = expressions[i]; - PsiType exprType = expression.getType(); + PsiType exprType = PsiUtil.skipParenthesizedExprDown(expression) instanceof PsiFunctionalExpression fn ? + fn.getFunctionalInterfaceType() : expression.getType(); PsiType originalParameterType = PsiTypesUtil.getParameterType(parameters, i, true); PsiType parameterType = substitutor.substitute(originalParameterType); if (!PsiTypesUtil.isDenotableType(parameterType, call)) continue; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/beforeNoLambdaCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/beforeNoLambdaCast.java new file mode 100644 index 000000000000..1afb3ad2ca8d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/addTypeCast/beforeNoLambdaCast.java @@ -0,0 +1,15 @@ +// "Cast 1st argument to 'Consumer'" "false" +import java.util.function.Consumer; + +class Test { + void foo(Consumer cons, String a) { + } + + void foo(Consumer cons, Character a) { + } + + void test() { + foo(s -> + System.out.println(s.length()), 1); + } +} \ No newline at end of file