in src/org/intellij/grammar/generator/ParserGenerator.java [277:341]
public void generate() throws IOException {
{
generateParser();
}
Map<String, BnfRule> sortedCompositeTypes = new TreeMap<>();
Map<String, BnfRule> sortedPsiRules = new TreeMap<>();
for (BnfRule rule : myFile.getRules()) {
RuleInfo info = ruleInfo(rule);
if (info.intfPackage == null) continue;
String elementType = info.elementType;
if (StringUtil.isEmpty(elementType)) continue;
if (sortedCompositeTypes.containsKey(elementType)) continue;
if (!info.isFake || info.isInElementType) {
sortedCompositeTypes.put(elementType, rule);
}
sortedPsiRules.put(rule.getName(), rule);
info.superInterfaces = new LinkedHashSet<>(getSuperInterfaceNames(myFile, rule, myIntfClassFormat));
}
if (G.generatePsi) {
calcRealSuperClasses(sortedPsiRules);
}
if (myGrammarRoot != null && (G.generateTokenTypes || G.generateElementTypes || G.generatePsi && G.generatePsiFactory)) {
openOutput(myTypeHolderClass);
try {
generateElementTypesHolder(myTypeHolderClass, sortedCompositeTypes);
}
finally {
closeOutput();
}
}
if (G.generatePsi) {
checkClassAvailability(myPsiImplUtilClass, "PSI method signatures will not be detected");
myRulesMethodsHelper.buildMaps(sortedPsiRules.values());
for (BnfRule rule : sortedPsiRules.values()) {
RuleInfo info = ruleInfo(rule);
openOutput(info.intfClass);
try {
generatePsiIntf(rule, info);
}
finally {
closeOutput();
}
}
for (BnfRule rule : sortedPsiRules.values()) {
RuleInfo info = ruleInfo(rule);
openOutput(info.implClass);
try {
generatePsiImpl(rule, info);
}
finally {
closeOutput();
}
}
if (myVisitorClassName != null && myGrammarRoot != null) {
openOutput(myVisitorClassName);
try {
generateVisitor(myVisitorClassName, sortedPsiRules);
}
finally {
closeOutput();
}
}
}
}