in src/org/intellij/grammar/generator/ParserGenerator.java [2033:2072]
private void generateUtilMethod(String methodName,
NavigatablePsiElement method,
boolean intf,
boolean isInPsiUtil,
Set<String> visited) {
List<String> methodTypes = method == null ? Collections.emptyList() : myJavaHelper.getMethodTypes(method);
String returnType = methodTypes.isEmpty()? "void" : shorten(methodTypes.get(0));
int offset = methodTypes.isEmpty() || isInPsiUtil && methodTypes.size() < 3 ? 0 :
isInPsiUtil ? 3 : 1;
if (!visited.add(methodName + methodTypes.subList(offset, methodTypes.size()))) return;
if (intf && methodTypes.size() == offset && "toString".equals(methodName)) return;
List<JavaHelper.TypeParameterInfo> genericParameters = myJavaHelper.getGenericParameters(method);
List<String> exceptionList = myJavaHelper.getExceptionList(method);
if (!intf /*|| hasMethodInInfos*/) out(shorten(OVERRIDE_ANNO));
for (String s : myJavaHelper.getAnnotations(method)) {
if ("java.lang.Override".equals(s)) continue;
if (s.startsWith("kotlin.")) continue;
out("@" + shorten(s));
}
Function<Integer, List<String>> annoProvider = i -> myJavaHelper.getParameterAnnotations(method, (i - 1) / 2);
Function<String, String> substitutor = ParserGeneratorUtil::unwrapTypeArgumentForParamList;
out("%s%s%s %s(%s)%s%s",
intf ? "" : "public ",
getGenericClauseString(genericParameters, getShortener()),
returnType,
methodName,
getParametersString(methodTypes, offset, 3, substitutor, annoProvider, getShortener()),
getThrowsString(exceptionList, getShortener()),
intf ? ";" : " {");
if (!intf) {
String implUtilRef = shorten(StringUtil.notNullize(myPsiImplUtilClass, KnownAttribute.PSI_IMPL_UTIL_CLASS.getName()));
String string = getParametersString(methodTypes, offset, 2, substitutor, annoProvider, getShortener());
out("%s%s.%s(this%s);", "void".equals(returnType) ? "" : "return ", implUtilRef, methodName,
string.isEmpty() ? "" : ", " + string);
out("}");
}
newLine();
}