diff --git a/dumpAst/src/main/jastadd/GenerationBackend.jadd b/dumpAst/src/main/jastadd/GenerationBackend.jadd index 06be2080f4539fbdcecbcd1762c79ce28f93d73f..ce550ca7fc0cdc85e7326a649635b7cba8a1698f 100644 --- a/dumpAst/src/main/jastadd/GenerationBackend.jadd +++ b/dumpAst/src/main/jastadd/GenerationBackend.jadd @@ -413,12 +413,9 @@ aspect GenerationBackend { // --- isAstNode --- syn boolean DumpNode.isAstNode() { Class<?> clazz = getObject().getClass(); - for (java.lang.reflect.Constructor<?> constructor : clazz.getConstructors()) { - for (java.lang.annotation.Annotation annotation : constructor.getAnnotations()) { - if (annotation.annotationType().getCanonicalName().startsWith(astNodeAnnotationPrefix()) && - annotation.annotationType().getSimpleName().equals("Constructor")) { - return true; - } + for (java.lang.reflect.Method method : clazz.getMethods()) { + if ("init$Children".equals(method.getName()) && method.getParameterCount() == 0) { + return true; } } return false; @@ -554,9 +551,11 @@ aspect GenerationBackend { } @Override - public void flush() {} + public void flush() { + } @Override - public void close() {} + public void close() { + } } } diff --git a/testDumper/src/main/jastadd/testDumper.relast b/testDumper/src/main/jastadd/testDumper.relast index cd7321f17afb9ef78770946df842bf1ce12072d0..7b66cc96e3e0af88dd7c124928fca2ae86fa5e53 100644 --- a/testDumper/src/main/jastadd/testDumper.relast +++ b/testDumper/src/main/jastadd/testDumper.relast @@ -1,10 +1,11 @@ // testcases with global inclusion/exclusion Nameable ::= <Name> ; -Root : Nameable ::= A B* [C] ; -A : Nameable ::= B MyC:C ; +Root : Nameable ::= A B* [C]; +A : Nameable ::= B MyC:C D; B : Nameable ::= <OtherValue> ; C : Nameable ::= [A] <Unwanted:int> <RawReference:A> /Calculated:A/ /AlsoCalculated:B*/ ; SubC : C ::= <RawReference:A> <Unwanted:int> [A] /Calculated:A/ /AlsoCalculated:B*/ ; +D; rel B.oneA -> A ; rel B.maybeC? -> C ; diff --git a/testDumper/src/test/java/de/tudresden/inf/st/jastadd/testDumper/TestSimple.java b/testDumper/src/test/java/de/tudresden/inf/st/jastadd/testDumper/TestSimple.java index f4742747a7040dddd5b775c5a889dabaf4effdad..507250f1e1dc2b74c794f8b1980a550d105913d5 100644 --- a/testDumper/src/test/java/de/tudresden/inf/st/jastadd/testDumper/TestSimple.java +++ b/testDumper/src/test/java/de/tudresden/inf/st/jastadd/testDumper/TestSimple.java @@ -2,15 +2,18 @@ package de.tudresden.inf.st.jastadd.testDumper; import de.tudresden.inf.st.jastadd.dumpAst.ast.DumpNode; import org.jastadd.testDumper.ast.C; +import org.jastadd.testDumper.ast.D; import org.jastadd.testDumper.ast.Root; import org.jastadd.testDumper.ast.SubC; import org.junit.jupiter.api.Test; import java.util.List; +import java.util.Optional; import static de.tudresden.inf.st.jastadd.testDumper.TestUtils.*; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; public class TestSimple { @@ -26,6 +29,14 @@ public class TestSimple { assertEquals(0, actualRoot.getNumDumpRelation()); } + @Test void testChildlessNonterminal() { + Root root = createRoot(createA(A_NAME, a -> a.setD(new D())), null); + List<DumpNode> nodes = TestUtils.dumpModel(root); + Optional<DumpNode> optionalCDumpNode = nodes.stream().filter(n -> n.getObject() instanceof D).findFirst(); + assertTrue(optionalCDumpNode.isPresent()); + assertTrue(optionalCDumpNode.get().isAstNode()); + } + @Test public void testOneNormalChild() { Root root = createRoot(createA(A_NAME), null);