tomokinakamaru/silverchain

View on GitHub
src/test/java/generator/Utility.java

Summary

Maintainability
A
55 mins
Test Coverage
package generator;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
import java.util.List;
import org.antlr.v4.runtime.RecognitionException;
import silverchain.diagram.Diagram;
import silverchain.diagram.Diagrams;
import silverchain.generator.File;
import silverchain.generator.Generator;
import silverchain.javadoc.Javadocs;
import silverchain.parser.AgParser;
import silverchain.parser.Grammar;
import silverchain.parser.Input;
import silverchain.parser.adapter.Parser;

final class Utility {

  static List<File> generateJava(InputStream stream, String javadocPath) {
    return new Generator(
            compile(stream), new Javadocs(javadocPath, s -> System.err.println("WARNING: " + s)))
        .generate();
  }

  static InputStream read(Path path) {
    try {
      return new FileInputStream(path.toString());
    } catch (FileNotFoundException e) {
      throw new RuntimeException(e);
    }
  }

  private static Diagrams compile(InputStream stream) {
    Diagrams diagrams = new Diagrams();
    Input input = parse(stream);
    for (Grammar grammar : input.grammars()) {
      Diagram diagram = grammar.diagram(input.importMap());
      diagram.compile();
      diagrams.add(diagram);
    }
    return diagrams;
  }

  private static Input parse(InputStream stream) {
    try {
      return (Input) new Parser(stream).parse(AgParser::input);
    } catch (RecognitionException | IOException e) {
      throw new RuntimeException(e);
    }
  }
}