Fixup input/output statements 72/87472/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 4 Feb 2020 14:50:17 +0000 (15:50 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 6 Feb 2020 10:46:08 +0000 (11:46 +0100)
Declared statements need to reflect declaration source, as otherwise
we would end up exporting the declared subtree as if the statements
were really declared.

JIRA: YANGTOOLS-1065
Change-Id: I964da42219346dfa273b640fe8df93e5e0a44669
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 files changed:
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/EmptyInputStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/EmptyUndeclaredInputStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/RegularInputStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/RegularUndeclaredInputStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/EmptyOutputStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/EmptyUndeclaredOutputStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/RegularOutputStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/RegularUndeclaredOutputStatement.java [new file with mode: 0644]

index 9788d4417cb1d0f7f3a311ebf8dbc99bf9e3fb41..aa722d0dc5ee7db9eb465d858c6309ecf00c6f30 100644 (file)
@@ -29,7 +29,7 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
     }
 
     @Override
-    public final StatementSource getStatementSource() {
+    public StatementSource getStatementSource() {
         return StatementSource.DECLARATION;
     }
 
index b8c63edb345658a196aaf15b2d992432f6104b13..63bf9c1449c20c61d6f158e5ed6ae2a1baaeee51 100644 (file)
@@ -46,7 +46,7 @@ public abstract class BaseOperationContainerStatementSupport<D extends DeclaredS
             final D declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         final StatementSource source = ctx.getStatementSource();
         final int flags = computeFlags(ctx, substatements);
-        switch (ctx.getStatementSource()) {
+        switch (source) {
             case CONTEXT:
                 return createUndeclaredEffective(flags, ctx, substatements);
             case DECLARATION:
index 34b04e7eec8aa2265fa4f0d3112da9b297293257..d8632351587322f9e7c16f8bc76ef0c0f4200879 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.common.YangConstants;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseOperationContainerStatementSupport;
@@ -33,12 +34,28 @@ abstract class AbstractInputStatementSupport
     @Override
     protected final InputStatement createDeclared(final StmtContext<QName, InputStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return new RegularInputStatement(ctx.coerceStatementArgument(), substatements);
+        final StatementSource source = ctx.getStatementSource();
+        switch (ctx.getStatementSource()) {
+            case CONTEXT:
+                return new RegularUndeclaredInputStatement(ctx.coerceStatementArgument(), substatements);
+            case DECLARATION:
+                return new RegularInputStatement(ctx.coerceStatementArgument(), substatements);
+            default:
+                throw new IllegalStateException("Unhandled statement source " + source);
+        }
     }
 
     @Override
     protected final InputStatement createEmptyDeclared(final StmtContext<QName, InputStatement, ?> ctx) {
-        return new EmptyInputStatement(ctx.coerceStatementArgument());
+        final StatementSource source = ctx.getStatementSource();
+        switch (ctx.getStatementSource()) {
+            case CONTEXT:
+                return new EmptyUndeclaredInputStatement(ctx.coerceStatementArgument());
+            case DECLARATION:
+                return new EmptyInputStatement(ctx.coerceStatementArgument());
+            default:
+                throw new IllegalStateException("Unhandled statement source " + source);
+        }
     }
 
     @Override
index 685f3f9b0c30c143553f79b7072cc82f27b1f4d1..1b8d52d783076a16361897d4b819e314f9fb7fd9 100644 (file)
@@ -11,7 +11,7 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument;
 
-final class EmptyInputStatement extends WithQNameArgument implements InputStatement {
+class EmptyInputStatement extends WithQNameArgument implements InputStatement {
     EmptyInputStatement(final QName argument) {
         super(argument);
     }
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/EmptyUndeclaredInputStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/EmptyUndeclaredInputStatement.java
new file mode 100644 (file)
index 0000000..4e21f2f
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input;
+
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
+
+final class EmptyUndeclaredInputStatement extends EmptyInputStatement {
+    EmptyUndeclaredInputStatement(final QName argument) {
+        super(argument);
+    }
+
+    @Override
+    public StatementSource getStatementSource() {
+        return StatementSource.CONTEXT;
+    }
+}
index b599a54bb2bbe18c979988282d46a9a2563f9a0a..23a0f0859c3b76152ace5725c47b7f80d610f132 100644 (file)
@@ -13,8 +13,9 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements;
 
-final class RegularInputStatement extends WithSubstatements implements InputStatement {
-    RegularInputStatement(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+class RegularInputStatement extends WithSubstatements implements InputStatement {
+    RegularInputStatement(final QName argument,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
         super(argument, substatements);
     }
 }
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/RegularUndeclaredInputStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/RegularUndeclaredInputStatement.java
new file mode 100644 (file)
index 0000000..949d073
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input;
+
+import com.google.common.collect.ImmutableList;
+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;
+
+final class RegularUndeclaredInputStatement extends RegularInputStatement {
+    RegularUndeclaredInputStatement(final QName argument,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(argument, substatements);
+    }
+
+    @Override
+    public StatementSource getStatementSource() {
+        return StatementSource.CONTEXT;
+    }
+}
index 004ad1049c52223849ad0c875d8c59186e950666..aee7fc5fe18e350304e15ee4bcf9994efaf5159d 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.common.YangConstants;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
 import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseOperationContainerStatementSupport;
@@ -33,12 +34,28 @@ abstract class AbstractOutputStatementSupport
     @Override
     protected final OutputStatement createDeclared(final StmtContext<QName, OutputStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return new RegularOutputStatement(ctx.coerceStatementArgument(), substatements);
+        final StatementSource source = ctx.getStatementSource();
+        switch (ctx.getStatementSource()) {
+            case CONTEXT:
+                return new RegularUndeclaredOutputStatement(ctx.coerceStatementArgument(), substatements);
+            case DECLARATION:
+                return new RegularOutputStatement(ctx.coerceStatementArgument(), substatements);
+            default:
+                throw new IllegalStateException("Unhandled statement source " + source);
+        }
     }
 
     @Override
     protected final OutputStatement createEmptyDeclared(final StmtContext<QName, OutputStatement, ?> ctx) {
-        return new EmptyOutputStatement(ctx.coerceStatementArgument());
+        final StatementSource source = ctx.getStatementSource();
+        switch (ctx.getStatementSource()) {
+            case CONTEXT:
+                return new EmptyUndeclaredOutputStatement(ctx.coerceStatementArgument());
+            case DECLARATION:
+                return new EmptyOutputStatement(ctx.coerceStatementArgument());
+            default:
+                throw new IllegalStateException("Unhandled statement source " + source);
+        }
     }
 
     @Override
index 0787c94e24daaf8e3b67f6d944da06d446363b97..6fcaa82622207568e4253a517d725146b286cfa0 100644 (file)
@@ -11,7 +11,7 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument;
 
-final class EmptyOutputStatement extends WithQNameArgument implements OutputStatement {
+class EmptyOutputStatement extends WithQNameArgument implements OutputStatement {
     EmptyOutputStatement(final QName argument) {
         super(argument);
     }
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/EmptyUndeclaredOutputStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/EmptyUndeclaredOutputStatement.java
new file mode 100644 (file)
index 0000000..de186b7
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output;
+
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
+
+final class EmptyUndeclaredOutputStatement extends EmptyOutputStatement {
+    EmptyUndeclaredOutputStatement(final QName argument) {
+        super(argument);
+    }
+
+    @Override
+    public StatementSource getStatementSource() {
+        return StatementSource.CONTEXT;
+    }
+}
index d5f125b83fd565528df462669015c4543af60f24..75d7861c0c7d40ce966acfc1ebea16e1f5082bf4 100644 (file)
@@ -13,7 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements;
 
-final class RegularOutputStatement extends WithSubstatements implements OutputStatement {
+class RegularOutputStatement extends WithSubstatements implements OutputStatement {
     RegularOutputStatement(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
         super(argument, substatements);
     }
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/RegularUndeclaredOutputStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/RegularUndeclaredOutputStatement.java
new file mode 100644 (file)
index 0000000..c0b866b
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output;
+
+import com.google.common.collect.ImmutableList;
+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;
+
+final class RegularUndeclaredOutputStatement extends RegularOutputStatement {
+    RegularUndeclaredOutputStatement(final QName argument,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(argument, substatements);
+    }
+
+    @Override
+    public StatementSource getStatementSource() {
+        return StatementSource.CONTEXT;
+    }
+}