From 4ae4fcadb105220a164a1b4fc9a00d376636e9c5 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 30 Jun 2020 16:43:25 +0200 Subject: [PATCH] Convert ModifierStatementSupport Convert the trivial case of modifier statement, which can be easily minimized. JIRA: YANGTOOLS-1065 Change-Id: If2566654249f49ad63956cc062ae173c0cbbd5c8 Signed-off-by: Robert Varga --- .../api/stmt/ModifierEffectiveStatement.java | 7 +++- .../model/api/stmt/ModifierStatement.java | 7 ++++ .../EmptyModifierEffectiveStatement.java | 20 ++++++++++ ...tImpl.java => EmptyModifierStatement.java} | 13 ++----- .../ModifierEffectiveStatementImpl.java | 32 --------------- .../modifier/ModifierStatementSupport.java | 39 +++++++++++++------ .../RegularModifierEffectiveStatement.java | 23 +++++++++++ .../modifier/RegularModifierStatement.java | 22 +++++++++++ 8 files changed, 110 insertions(+), 53 deletions(-) create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/EmptyModifierEffectiveStatement.java rename yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/{ModifierStatementImpl.java => EmptyModifierStatement.java} (52%) delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierEffectiveStatementImpl.java create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierEffectiveStatement.java create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierStatement.java diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModifierEffectiveStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModifierEffectiveStatement.java index 6cc34180ac..5895abddeb 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModifierEffectiveStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModifierEffectiveStatement.java @@ -8,10 +8,15 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; @Beta public interface ModifierEffectiveStatement extends EffectiveStatement { - + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.MODIFIER; + } } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModifierStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModifierStatement.java index 0c9cda2c62..3941b55e58 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModifierStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModifierStatement.java @@ -12,7 +12,9 @@ import static com.google.common.base.Verify.verifyNotNull; import com.google.common.annotations.Beta; import org.eclipse.jdt.annotation.NonNull; +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.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; /** @@ -25,6 +27,11 @@ import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; */ @Beta public interface ModifierStatement extends DeclaredStatement { + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.MODIFIER; + } + default @NonNull ModifierKind getValue() { // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here return verifyNotNull(argument()); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/EmptyModifierEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/EmptyModifierEffectiveStatement.java new file mode 100644 index 0000000000..1307cee8e0 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/EmptyModifierEffectiveStatement.java @@ -0,0 +1,20 @@ +/* + * 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.modifier; + +import org.opendaylight.yangtools.yang.model.api.stmt.ModifierEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement; +import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument; + +final class EmptyModifierEffectiveStatement extends DefaultArgument + implements ModifierEffectiveStatement { + EmptyModifierEffectiveStatement(final ModifierStatement declared) { + super(declared); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/EmptyModifierStatement.java similarity index 52% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementImpl.java rename to yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/EmptyModifierStatement.java index 99e381a196..7a73e45c76 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/EmptyModifierStatement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * 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, @@ -7,18 +7,13 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.modifier; -import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement; import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -/** - * Class providing necessary support for processing YANG 1.1 Modifier statement. - */ -@Beta -final class ModifierStatementImpl extends AbstractDeclaredStatement implements ModifierStatement { - ModifierStatementImpl(final StmtContext context) { +final class EmptyModifierStatement extends WithArgument implements ModifierStatement { + EmptyModifierStatement(final StmtContext context) { super(context); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierEffectiveStatementImpl.java deleted file mode 100644 index b6f4200be4..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierEffectiveStatementImpl.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. 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.modifier; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import org.opendaylight.yangtools.yang.model.api.stmt.ModifierEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement; -import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; - -/** - * YANG 1.1 Modifier effective statement implementation. - */ -@Beta -final class ModifierEffectiveStatementImpl extends DeclaredEffectiveStatementBase - implements ModifierEffectiveStatement { - ModifierEffectiveStatementImpl(final StmtContext ctx) { - super(ctx); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this).add("argument", argument()).toString(); - } -} \ No newline at end of file diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementSupport.java index 2af16de950..b22de19014 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementSupport.java @@ -7,17 +7,20 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.modifier; +import com.google.common.collect.ImmutableList; 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.stmt.ModifierEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement; import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class ModifierStatementSupport - extends AbstractStatementSupport { + extends BaseStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.MODIFIER).build(); private static final ModifierStatementSupport INSTANCE = new ModifierStatementSupport(); @@ -37,23 +40,37 @@ public final class ModifierStatementSupport } @Override - public ModifierStatement createDeclared(final StmtContext ctx) { - return new ModifierStatementImpl(ctx); + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; } @Override - public ModifierEffectiveStatement createEffective( - final StmtContext ctx) { - return new ModifierEffectiveStatementImpl(ctx); + public String internArgument(final String rawArgument) { + return "invert-match".equals(rawArgument) ? "invert-match" : rawArgument; } @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; + protected ModifierStatement createDeclared(final StmtContext ctx, + final ImmutableList> substatements) { + return new RegularModifierStatement(ctx, substatements); } @Override - public String internArgument(final String rawArgument) { - return "invert-match".equals(rawArgument) ? "invert-match" : rawArgument; + protected ModifierStatement createEmptyDeclared(final StmtContext ctx) { + return new EmptyModifierStatement(ctx); + } + + @Override + protected ModifierEffectiveStatement createEffective( + final StmtContext ctx, + final ModifierStatement declared, final ImmutableList> substatements) { + return new RegularModifierEffectiveStatement(declared, substatements); + } + + @Override + protected ModifierEffectiveStatement createEmptyEffective( + final StmtContext ctx, + final ModifierStatement declared) { + return new EmptyModifierEffectiveStatement(declared); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierEffectiveStatement.java new file mode 100644 index 0000000000..dfbd0158fd --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierEffectiveStatement.java @@ -0,0 +1,23 @@ +/* + * 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.modifier; + +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ModifierEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement; +import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements; + +final class RegularModifierEffectiveStatement extends WithSubstatements + implements ModifierEffectiveStatement { + RegularModifierEffectiveStatement(final ModifierStatement declared, + final ImmutableList> substatements) { + super(declared, substatements); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierStatement.java new file mode 100644 index 0000000000..3ab2ff0c75 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/RegularModifierStatement.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.modifier; + +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement; +import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class RegularModifierStatement extends WithSubstatements implements ModifierStatement { + RegularModifierStatement(final StmtContext context, + final ImmutableList> substatements) { + super(context, substatements); + } +} -- 2.36.6