Further StmtContext/CommonStmtCtx merge
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / AbstractDeclaredStatement.java
index 9788d4417cb1d0f7f3a311ebf8dbc99bf9e3fb41..1b149836b4c26b966987dd9d10d7c405a1ac061f 100644 (file)
@@ -16,7 +16,6 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
 /**
  * An abstract base class for {@link DeclaredStatement} implementations. This is a direct competition to
@@ -24,12 +23,13 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
  * implementations.
  */
 @Beta
+// FIXME: 7.0.0: we should be able to promote this to model.spi.meta package.
 public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatement<A> implements DeclaredStatement<A> {
     protected AbstractDeclaredStatement() {
     }
 
     @Override
-    public final StatementSource getStatementSource() {
+    public StatementSource getStatementSource() {
         return StatementSource.DECLARATION;
     }
 
@@ -56,8 +56,8 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
     public abstract static class WithRawArgument<A> extends AbstractDeclaredStatement<A> {
         private final String rawArgument;
 
-        protected WithRawArgument(final StmtContext<A, ?, ?> context) {
-            rawArgument = context.rawStatementArgument();
+        protected WithRawArgument(final String rawArgument) {
+            this.rawArgument = rawArgument;
         }
 
         @Override
@@ -82,7 +82,7 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
             }
         }
 
-        private final QName argument;
+        private final @NonNull QName argument;
 
         protected WithQNameArgument(final QName argument) {
             this.argument = requireNonNull(argument);
@@ -103,9 +103,9 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
         public abstract static class WithSubstatements extends WithRawStringArgument {
             private final @NonNull Object substatements;
 
-            protected WithSubstatements(final StmtContext<String, ?, ?> context,
+            protected WithSubstatements(final String rawArgument,
                     final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-                super(context);
+                super(rawArgument);
                 this.substatements = maskList(substatements);
             }
 
@@ -115,8 +115,8 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
             }
         }
 
-        protected WithRawStringArgument(final StmtContext<String, ?, ?> context) {
-            super(context);
+        protected WithRawStringArgument(final String rawArgument) {
+            super(rawArgument);
         }
 
         @Override
@@ -129,9 +129,9 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
         public abstract static class WithSubstatements<A> extends WithArgument<A> {
             private final @NonNull Object substatements;
 
-            protected WithSubstatements(final StmtContext<A, ?, ?> context,
+            protected WithSubstatements(final String rawArgument, final A argument,
                     final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-                super(context);
+                super(rawArgument, argument);
                 this.substatements = maskList(substatements);
             }
 
@@ -143,9 +143,9 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
 
         private final A argument;
 
-        protected WithArgument(final StmtContext<A, ?, ?> context) {
-            super(context);
-            argument = context.getStatementArgument();
+        protected WithArgument(final String rawArgument, final A argument) {
+            super(rawArgument);
+            this.argument = argument;
         }
 
         @Override
@@ -186,4 +186,29 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
             return argument.toString();
         }
     }
+
+    public abstract static class WithoutArgument extends AbstractDeclaredStatement<Void> {
+        public abstract static class WithSubstatements extends WithoutArgument {
+            private final @NonNull Object substatements;
+
+            protected WithSubstatements(final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+                this.substatements = maskList(substatements);
+            }
+
+            @Override
+            public final Collection<? extends DeclaredStatement<?>> declaredSubstatements() {
+                return unmaskList(substatements);
+            }
+        }
+
+        @Override
+        public final Void argument() {
+            return null;
+        }
+
+        @Override
+        public final String rawArgument() {
+            return null;
+        }
+    }
 }