下面列出了怎么用com.intellij.psi.JavaResolveResult的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Tries to guess if the given methodCall requires event handler.
*
* @return Qualified name of the handled Event or null, if methodCall neither accepts event
* handler, nor require fix.
*/
@Nullable
private static String resolveEventName(PsiMethodCallExpression methodCall) {
return Optional.of(methodCall.getMethodExpression().multiResolve(true))
.map(results -> results.length == 1 ? results[0] : JavaResolveResult.EMPTY)
.filter(MethodCandidateInfo.class::isInstance)
.map(MethodCandidateInfo.class::cast)
.filter(MethodCandidateInfo::isTypeArgumentsApplicable)
.filter(info -> !info.isApplicable() && !info.isValidResult())
.map(info -> info.getElement().getParameterList().getParameters())
.filter(parameters -> parameters.length > 0) // method(EventHandler<T> e)
.map(parameters -> parameters[0].getType())
.filter(PsiClassType.class::isInstance)
.filter(
parameterType -> {
String fullName = parameterType.getCanonicalText();
int genericIndex = fullName.indexOf('<');
if (genericIndex <= 0) {
return false;
}
String className = fullName.substring(0, genericIndex);
return LithoClassNames.EVENT_HANDLER_CLASS_NAME.equals(className);
})
.map(parameterType -> ((PsiClassType) parameterType).getParameters())
.filter(generics -> generics.length == 1) // <T>
.map(generics -> generics[0].getCanonicalText())
.orElse(null);
}
public JavaResolveResult toJavaResolveResult() {
return new JavaResult(this);
}
@NotNull
@Override
public JavaResolveResult resolveMethodGenerics() {
return JavaResolveResult.EMPTY;
}