public void generate()

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();
        }
      }
    }
  }