Migrate AbstractTypeStatementSupport
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / AbstractDeclaredStatement.java
index 39c34e14ebf0c3b4267b05f6ed73eb7b3f77e5f8..8a713abe4089cc5e91652c974e70e1b3bd0568c7 100644 (file)
@@ -7,10 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableList;
 import java.util.Collection;
 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;
@@ -26,7 +29,7 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
     }
 
     @Override
-    public final StatementSource getStatementSource() {
+    public StatementSource getStatementSource() {
         return StatementSource.DECLARATION;
     }
 
@@ -54,7 +57,11 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
         private final String rawArgument;
 
         protected WithRawArgument(final StmtContext<A, ?, ?> context) {
-            rawArgument = context.rawStatementArgument();
+            this(context.rawStatementArgument());
+        }
+
+        protected WithRawArgument(final String rawArgument) {
+            this.rawArgument = rawArgument;
         }
 
         @Override
@@ -63,11 +70,63 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
         }
     }
 
+    public abstract static class WithQNameArgument extends AbstractDeclaredStatement<QName> {
+        public abstract static class WithSubstatements extends WithQNameArgument {
+            private final @NonNull Object substatements;
+
+            protected WithSubstatements(final QName argument,
+                    final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+                super(argument);
+                this.substatements = maskList(substatements);
+            }
+
+            @Override
+            public final Collection<? extends DeclaredStatement<?>> declaredSubstatements() {
+                return unmaskList(substatements);
+            }
+        }
+
+        private final QName argument;
+
+        protected WithQNameArgument(final QName argument) {
+            this.argument = requireNonNull(argument);
+        }
+
+        @Override
+        public final @NonNull QName argument() {
+            return argument;
+        }
+
+        @Override
+        public final String rawArgument() {
+            return argument.getLocalName();
+        }
+    }
+
     public abstract static class WithRawStringArgument extends WithRawArgument<String> {
+        public abstract static class WithSubstatements extends WithRawStringArgument {
+            private final @NonNull Object substatements;
+
+            protected WithSubstatements(final StmtContext<String, ?, ?> context,
+                    final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+                super(context);
+                this.substatements = maskList(substatements);
+            }
+
+            @Override
+            public final Collection<? extends DeclaredStatement<?>> declaredSubstatements() {
+                return unmaskList(substatements);
+            }
+        }
+
         protected WithRawStringArgument(final StmtContext<String, ?, ?> context) {
             super(context);
         }
 
+        protected WithRawStringArgument(final String rawArgument) {
+            super(rawArgument);
+        }
+
         @Override
         public final String argument() {
             return rawArgument();
@@ -75,6 +134,21 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
     }
 
     public abstract static class WithArgument<A> extends WithRawArgument<A> {
+        public abstract static class WithSubstatements<A> extends WithArgument<A> {
+            private final @NonNull Object substatements;
+
+            protected WithSubstatements(final StmtContext<A, ?, ?> context,
+                    final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+                super(context);
+                this.substatements = maskList(substatements);
+            }
+
+            @Override
+            public final Collection<? extends DeclaredStatement<?>> declaredSubstatements() {
+                return unmaskList(substatements);
+            }
+        }
+
         private final A argument;
 
         protected WithArgument(final StmtContext<A, ?, ?> context) {
@@ -87,4 +161,37 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
             return argument;
         }
     }
+
+    public abstract static class ArgumentToString<A> extends AbstractDeclaredStatement<A> {
+        public abstract static class WithSubstatements<A> extends ArgumentToString<A> {
+            private final @NonNull Object substatements;
+
+            protected WithSubstatements(final A argument,
+                    final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+                super(argument);
+                this.substatements = maskList(substatements);
+            }
+
+            @Override
+            public final Collection<? extends DeclaredStatement<?>> declaredSubstatements() {
+                return unmaskList(substatements);
+            }
+        }
+
+        private final @NonNull A argument;
+
+        protected ArgumentToString(final A argument) {
+            this.argument = requireNonNull(argument);
+        }
+
+        @Override
+        public final @NonNull A argument() {
+            return argument;
+        }
+
+        @Override
+        public final String rawArgument() {
+            return argument.toString();
+        }
+    }
 }