mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
extract inference errors from parent calls when applicable
This commit is contained in:
+2
-21
@@ -807,7 +807,7 @@ public class HighlightMethodUtil {
|
||||
|
||||
@Language("HTML")
|
||||
@NonNls String parensizedName = methodName + (parameters.length == 0 ? "( ) " : "");
|
||||
String errorMessage = getErrorMessage(list, info);
|
||||
String errorMessage = info != null ? info.getParentInferenceErrorMessage(list) : null;
|
||||
return JavaErrorMessages.message(
|
||||
"argument.mismatch.html.tooltip",
|
||||
Integer.valueOf(cols - parameters.length + 1), parensizedName,
|
||||
@@ -818,25 +818,6 @@ public class HighlightMethodUtil {
|
||||
);
|
||||
}
|
||||
|
||||
private static String getErrorMessage(PsiExpressionList list, @Nullable MethodCandidateInfo info) {
|
||||
String errorMessage = info != null ? info.getInferenceErrorMessage() : null;
|
||||
while (errorMessage == null) {
|
||||
list = PsiTreeUtil.getParentOfType(list, PsiExpressionList.class, true);
|
||||
if (list == null) {
|
||||
break;
|
||||
}
|
||||
final PsiElement parent = list.getParent();
|
||||
if (!(parent instanceof PsiCallExpression)) {
|
||||
break;
|
||||
}
|
||||
final JavaResolveResult resolveResult = ((PsiCallExpression)parent).resolveMethodGenerics();
|
||||
if (resolveResult instanceof MethodCandidateInfo) {
|
||||
errorMessage = ((MethodCandidateInfo)resolveResult).getInferenceErrorMessage();
|
||||
}
|
||||
}
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
private static String esctrim(@NotNull String s) {
|
||||
return XmlStringUtil.escapeString(trimNicely(s));
|
||||
}
|
||||
@@ -938,7 +919,7 @@ public class HighlightMethodUtil {
|
||||
}
|
||||
|
||||
s+= "</table>";
|
||||
final String errorMessage = getErrorMessage(list, info);
|
||||
final String errorMessage = info != null ? info.getParentInferenceErrorMessage(list) : null;
|
||||
if (errorMessage != null) {
|
||||
s+= "reason: ";
|
||||
s += XmlStringUtil.escapeString(errorMessage).replaceAll("\n", "<br/>");
|
||||
|
||||
+7
-2
@@ -325,8 +325,13 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
|
||||
final PsiCallExpression callExpression = parent instanceof PsiExpressionList && parent.getParent() instanceof PsiCallExpression ?
|
||||
(PsiCallExpression)parent.getParent() : null;
|
||||
final JavaResolveResult containingCallResolveResult = callExpression != null ? callExpression.resolveMethodGenerics() : null;
|
||||
final String errorMessage = containingCallResolveResult instanceof MethodCandidateInfo ?
|
||||
((MethodCandidateInfo)containingCallResolveResult).getInferenceErrorMessage() : null;
|
||||
final String errorMessage;
|
||||
if (containingCallResolveResult instanceof MethodCandidateInfo) {
|
||||
errorMessage = ((MethodCandidateInfo)containingCallResolveResult).getParentInferenceErrorMessage((PsiExpressionList)parent);
|
||||
}
|
||||
else {
|
||||
errorMessage = null;
|
||||
}
|
||||
if (errorMessage != null) {
|
||||
HighlightInfo result = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR)
|
||||
.range(expression).descriptionAndTooltip(errorMessage).create();
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.resolve.DefaultParameterTypeInferencePolicy;
|
||||
import com.intellij.psi.impl.source.resolve.ParameterTypeInferencePolicy;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.intellij.lang.annotations.MagicConstant;
|
||||
@@ -448,6 +449,25 @@ public class MethodCandidateInfo extends CandidateInfo{
|
||||
return myInferenceError;
|
||||
}
|
||||
|
||||
public String getParentInferenceErrorMessage(PsiExpressionList list) {
|
||||
String errorMessage = getInferenceErrorMessage();
|
||||
while (errorMessage == null) {
|
||||
list = PsiTreeUtil.getParentOfType(list, PsiExpressionList.class, true);
|
||||
if (list == null) {
|
||||
break;
|
||||
}
|
||||
final PsiElement parent = list.getParent();
|
||||
if (!(parent instanceof PsiCallExpression)) {
|
||||
break;
|
||||
}
|
||||
final JavaResolveResult resolveResult = ((PsiCallExpression)parent).resolveMethodGenerics();
|
||||
if (resolveResult instanceof MethodCandidateInfo) {
|
||||
errorMessage = ((MethodCandidateInfo)resolveResult).getInferenceErrorMessage();
|
||||
}
|
||||
}
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
public CurrentCandidateProperties createProperties() {
|
||||
return new CurrentCandidateProperties(this, getSiteSubstitutor(), isVarargs(), false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user