001package gudusoft.gsqlparser.lineage2.api;
002
003import gudusoft.gsqlparser.lineage2.contract.ContractDiagnostic;
004import gudusoft.gsqlparser.lineage2.contract.ContractEdge;
005import gudusoft.gsqlparser.lineage2.contract.ContractJsonExporter;
006import gudusoft.gsqlparser.lineage2.contract.ContractStatement;
007import gudusoft.gsqlparser.lineage2.contract.LineageDocument;
008
009import java.util.List;
010
011/**
012 * Result of one {@link LineageAnalyzer#analyze} call: the contract
013 * document for the analyzed unit plus its deterministic JSON form.
014 *
015 * <p>Internal API: not part of the public gsqlparser surface.
016 */
017public final class LineageResult {
018
019    private final LineageDocument document;
020
021    LineageResult(LineageDocument document) {
022        if (document == null) {
023            throw new IllegalArgumentException("document must not be null");
024        }
025        this.document = document;
026    }
027
028    /** The full contract document (lineage2-contract.md ยง2). */
029    public LineageDocument getDocument() {
030        return document;
031    }
032
033    /** Convenience โ€” {@code getDocument().getStatements()}. */
034    public List<ContractStatement> getStatements() {
035        return document.getStatements();
036    }
037
038    /** Convenience โ€” {@code getDocument().getEdges()}. */
039    public List<ContractEdge> getEdges() {
040        return document.getEdges();
041    }
042
043    /** Convenience โ€” document-level diagnostics only. */
044    public List<ContractDiagnostic> getDiagnostics() {
045        return document.getDiagnostics();
046    }
047
048    /**
049     * The deterministic contract JSON (no trailing newline). Same input +
050     * same engine version =&gt; byte-identical output.
051     */
052    public String toJson() {
053        return ContractJsonExporter.toJson(document);
054    }
055}