varargs for java < 1.8 (IDEA-CR-21051)

This commit is contained in:
Anna Kozlova
2017-05-16 14:54:11 +03:00
parent c3890e42bc
commit c01cdc6f1c
2 changed files with 8 additions and 1 deletions
@@ -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;
}
@@ -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));