in src/org/intellij/grammar/generator/ParserGenerator.java [1828:1863]
private String generatePsiAccessorImplCall(@NotNull BnfRule rule, @NotNull RuleMethodsHelper.MethodInfo methodInfo, boolean mixedAST) {
boolean isToken = methodInfo.rule == null;
Cardinality type = methodInfo.cardinality;
boolean many = type.many();
boolean required = type == REQUIRED && !many;
boolean stubbed = !isToken &&
ruleInfo(rule).realStubClass != null &&
ruleInfo(methodInfo.rule).realStubClass != null;
String result;
// todo REMOVEME. Keep old generation logic for a while.
if (!mixedAST && myNoStubs) {
if (isToken) {
return (type == REQUIRED ? "findNotNullChildByType" : "findChildByType") +
"(" + getElementType(methodInfo.path) + ")";
}
else {
String className = shorten(getAccessorType(methodInfo.rule));
return many ? format("%s.getChildrenOfTypeAsList(this, %s.class)", shorten(myPsiTreeUtilClass), className) :
(type == REQUIRED ? "findNotNullChildByClass" : "findChildByClass") + "(" + className + ".class)";
}
}
// new logic
if (isToken) {
String getterName = mixedAST ? "findPsiChildByType" : "findChildByType";
result = getterName + "(" + getElementType(methodInfo.path) + ")";
}
else {
String className = shorten(getAccessorType(methodInfo.rule));
String getterName = stubbed && many ? "getStubChildrenOfTypeAsList" :
stubbed ? "getStubChildOfType" :
many ? "getChildrenOfTypeAsList" : "getChildOfType";
result = format("%s.%s(this, %s.class)", shorten(myPsiTreeUtilClass), getterName, className);
}
return required && !mixedAST ? "notNullChild(" + result + ")" : result;
}