From: Robert Varga Date: Tue, 4 Feb 2020 14:50:17 +0000 (+0100) Subject: Fixup input/output statements X-Git-Tag: v5.0.0~154 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=66fc8cc1619d23cb36c4f40b9677a11b06d70c78;p=yangtools.git Fixup input/output statements 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 --- diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredStatement.java index 9788d4417c..aa722d0dc5 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredStatement.java @@ -29,7 +29,7 @@ public abstract class AbstractDeclaredStatement extends AbstractModelStatemen } @Override - public final StatementSource getStatementSource() { + public StatementSource getStatementSource() { return StatementSource.DECLARATION; } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java index b8c63edb34..63bf9c1449 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseOperationContainerStatementSupport.java @@ -46,7 +46,7 @@ public abstract class BaseOperationContainerStatementSupport> 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: diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java index 34b04e7eec..d863235158 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java @@ -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 ctx, final ImmutableList> 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 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/EmptyInputStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/EmptyInputStatement.java index 685f3f9b0c..1b8d52d783 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/EmptyInputStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/EmptyInputStatement.java @@ -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 index 0000000000..4e21f2fb37 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/EmptyUndeclaredInputStatement.java @@ -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; + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/RegularInputStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/RegularInputStatement.java index b599a54bb2..23a0f0859c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/RegularInputStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/RegularInputStatement.java @@ -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> substatements) { +class RegularInputStatement extends WithSubstatements implements InputStatement { + RegularInputStatement(final QName argument, + final ImmutableList> 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 index 0000000000..949d073f00 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/RegularUndeclaredInputStatement.java @@ -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> substatements) { + super(argument, substatements); + } + + @Override + public StatementSource getStatementSource() { + return StatementSource.CONTEXT; + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java index 004ad1049c..aee7fc5fe1 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java @@ -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 ctx, final ImmutableList> 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 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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/EmptyOutputStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/EmptyOutputStatement.java index 0787c94e24..6fcaa82622 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/EmptyOutputStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/EmptyOutputStatement.java @@ -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 index 0000000000..de186b7beb --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/EmptyUndeclaredOutputStatement.java @@ -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; + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/RegularOutputStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/RegularOutputStatement.java index d5f125b83f..75d7861c0c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/RegularOutputStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/RegularOutputStatement.java @@ -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> 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 index 0000000000..c0b866b0a5 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/RegularUndeclaredOutputStatement.java @@ -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> substatements) { + super(argument, substatements); + } + + @Override + public StatementSource getStatementSource() { + return StatementSource.CONTEXT; + } +}