Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
1.7.7
-
None
-
None
Description
Here is a unit test to reproduce:
package org.apache.avro.io.parsing; import java.io.IOException; import java.util.HashMap; import java.util.HashSet; import java.util.Set; import junit.framework.Assert; import org.apache.avro.Schema; import org.junit.Test; public class SymbolTest { private static final String SCHEMA = "{\"type\":\"record\",\"name\":\"SampleNode\"," + "\"namespace\":\"org.spf4j.ssdump2.avro\",\n" + " \"fields\":[\n" + " {\"name\":\"count\",\"type\":\"int\",\"default\":0},\n" + " {\"name\":\"subNodes\",\"type\":\n" + " {\"type\":\"array\",\"items\":{\n" + " \"type\":\"record\",\"name\":\"SamplePair\",\n" + " \"fields\":[\n" + " {\"name\":\"method\",\"type\":\n" + " {\"type\":\"record\",\"name\":\"Method\",\n" + " \"fields\":[\n" + " {\"name\":\"declaringClass\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}},\n" + " {\"name\":\"methodName\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}\n" + " ]}},\n" + " {\"name\":\"node\",\"type\":\"SampleNode\"}]}}}]}"; @Test public void testSomeMethod() throws IOException { Schema schema = new Schema.Parser().parse(SCHEMA); Symbol root = Symbol.root(new ResolvingGrammarGenerator() .generate(schema, schema, new HashMap<ValidatingGrammarGenerator.LitS, Symbol>())); validateNonNull(root, new HashSet<Symbol>()); } private static void validateNonNull(final Symbol symb, Set<Symbol> seen) { if (seen.contains(symb)) { return; } else { seen.add(symb); } if (symb.production != null) { for (Symbol s : symb.production) { if (s == null) { Assert.fail("invalid parsing tree should not contain nulls"); } if (s.kind != Symbol.Kind.ROOT) { validateNonNull(s, seen);; } } } } }