in src/main/java/com/epam/eco/commons/avro/io/parsing/GrammarErrorParser.java [56:89]
private static void parse(LinkedList<Symbol> productionStack, Path path, List<GrammarError> errors) {
Symbol symbol = productionStack.pollLast();
if (symbol == null) {
return;
}
if (symbol.kind == Kind.IMPLICIT_ACTION) {
if (symbol instanceof FieldOrderAction) {
for (Schema.Field field : ((FieldOrderAction)symbol).fields) {
path.append(field.name());
parse(productionStack, path, errors);
path.subtract();
}
} else if (symbol instanceof ErrorAction) {
errors.add(new GrammarError(path.getPathString(), ((ErrorAction)symbol).msg));
} else {
parse(productionStack, path, errors);
}
} else if (symbol.kind == Kind.TERMINAL) {
if (ARRAY_START_TERMINAL.equals(symbol.toString())) {
parse(productionStack, path, errors);
}
} else if (
symbol.kind == Kind.REPEATER ||
symbol.kind == Kind.SEQUENCE) {
parse(new LinkedList<>(Arrays.asList(symbol.production)), path, errors);
} else if (symbol.kind == Kind.ALTERNATIVE) {
parse(new LinkedList<>(Arrays.asList(((Alternative)symbol).symbols)), path, errors);
} else if (symbol.kind == Kind.EXPLICIT_ACTION) {
// nothing to do
} else {
throw new RuntimeException("Unknown symbol kind: " + symbol.kind);
}
}