DocumentAst.java
package com.taxonomy.dsl.ast;
import java.util.List;
import java.util.Objects;
/**
* Root node of a parsed DSL document.
*
* <p>A document consists of an optional {@link MetaAst} header followed by
* zero or more {@link BlockAst} entries. Unknown block types are preserved
* in the block list so that round-trips are lossless.
*/
public final class DocumentAst {
private final MetaAst meta;
private final List<BlockAst> blocks;
public DocumentAst(MetaAst meta, List<BlockAst> blocks) {
this.meta = meta;
this.blocks = List.copyOf(Objects.requireNonNull(blocks));
}
public MetaAst getMeta() { return meta; }
public List<BlockAst> getBlocks() { return blocks; }
/** Returns all blocks of a given kind (e.g. {@code "element"}, {@code "relation"}). */
public List<BlockAst> blocksOfKind(String kind) {
return blocks.stream().filter(b -> b.getKind().equals(kind)).toList();
}
}