From c01cdc6f1cf750522fe2d4958ba81285f229d736 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 16 May 2017 13:22:55 +0300 Subject: [PATCH] varargs for java < 1.8 (IDEA-CR-21051) --- .../src/com/intellij/psi/infos/MethodCandidateInfo.java | 5 +++++ .../src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java b/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java index a0632e65281f..bb6f54641480 100644 --- a/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java +++ b/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java @@ -80,6 +80,11 @@ public class MethodCandidateInfo extends CandidateInfo{ myLanguageLevel = languageLevel; } + /** + * To use during overload resolution to choose if method can be applicable by strong/loose invocation. + * + * @return true only for java 8+ varargs methods. + */ public boolean isVarargs() { return false; } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java index 25c99c6387eb..1c8e6fadbdc7 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java @@ -18,6 +18,7 @@ package com.siyeh.ig.psiutils; import com.intellij.codeInsight.ExceptionUtil; import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.psi.infos.MethodCandidateInfo; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTypesUtil; import com.intellij.psi.util.TypeConversionUtil; @@ -620,7 +621,8 @@ public class ExpectedTypeUtils { if (parameters.length == 0) { return null; } - final boolean isVarargs = method.isVarArgs(); + final boolean isVarargs = result instanceof MethodCandidateInfo && + ((MethodCandidateInfo)result).getApplicabilityLevel() == MethodCandidateInfo.ApplicabilityLevel.VARARGS; final PsiType parameterType = PsiTypesUtil.getParameterType(parameters, parameterPosition, isVarargs); final PsiSubstitutor substitutor = result.getSubstitutor(); final PsiType type = GenericsUtil.getVariableTypeByExpressionType(substitutor.substitute(parameterType));