package moe.nea.pcj; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; public abstract class JsonLikeError> implements AppendableError> { private final List> suppressed = new ArrayList<>(); protected abstract Self copySelfWithoutSuppressions(); @Override public List> getSuppressed() { return Collections.unmodifiableList(suppressed); } @Override public Optional> appendError(Object other) { if (other instanceof JsonLikeError jsonLikeOther) { var newSelf = (JsonLikeError) copySelfWithoutSuppressions(); newSelf.suppressed.add(jsonLikeOther.copySelfWithoutSuppressions()); newSelf.suppressed.addAll(jsonLikeOther.getSuppressed()); return Optional.of(newSelf); } else { return Optional.empty(); } } }