From 305d5c79b6dba17b6239961b4ce8440c89d21015 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 30 Jun 2020 22:32:30 +0200 Subject: [PATCH] Convert AbstractEnumStatementSupport Convert the mostly trivial case of enum statement, which can be easily minimized. Also addresses a FIXME for hiding the implementation class. JIRA: YANGTOOLS-1065 Change-Id: I04d5d87b8ef59f89b41cd46e78761025ac967d78 Signed-off-by: Robert Varga --- .../api/stmt/EnumEffectiveStatement.java | 7 ++- .../yang/model/api/stmt/EnumStatement.java | 7 +++ .../enum_/AbstractEnumStatementSupport.java | 30 ++++++++++--- .../enum_/EmptyEnumEffectiveStatement.java | 27 +++++++++++ ...ementImpl.java => EmptyEnumStatement.java} | 8 ++-- .../enum_/EnumEffectiveStatementImpl.java | 45 ------------------- .../enum_/RegularEnumEffectiveStatement.java | 31 +++++++++++++ .../stmt/enum_/RegularEnumStatement.java | 21 +++++++++ .../rfc7950/stmt/type/EffectiveTypeUtil.java | 20 +++++---- .../EnumSpecificationEffectiveStatement.java | 14 +++--- .../type/EnumTypeEffectiveStatementImpl.java | 17 ++++--- 11 files changed, 149 insertions(+), 78 deletions(-) create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EmptyEnumEffectiveStatement.java rename yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/{EnumStatementImpl.java => EmptyEnumStatement.java} (58%) delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumEffectiveStatementImpl.java create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/RegularEnumEffectiveStatement.java create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/RegularEnumStatement.java diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/EnumEffectiveStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/EnumEffectiveStatement.java index 3d172b5d1b..841bd674d1 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/EnumEffectiveStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/EnumEffectiveStatement.java @@ -8,9 +8,14 @@ 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; @Beta public interface EnumEffectiveStatement extends EffectiveStatement { - + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.ENUM; + } } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/EnumStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/EnumStatement.java index 1d21bdb57a..08547d3331 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/EnumStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/EnumStatement.java @@ -12,9 +12,16 @@ import static com.google.common.base.Verify.verifyNotNull; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; public interface EnumStatement extends DocumentedDeclaredStatement.WithStatus, IfFeatureAwareDeclaredStatement { + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.ENUM; + } + default @NonNull String getName() { // 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/enum_/AbstractEnumStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/AbstractEnumStatementSupport.java index f087fdd903..0adf06f35c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/AbstractEnumStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/AbstractEnumStatementSupport.java @@ -7,14 +7,17 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.enum_; +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.EnumEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; -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; abstract class AbstractEnumStatementSupport - extends AbstractStatementSupport { + extends BaseStatementSupport { AbstractEnumStatementSupport() { super(YangStmtMapping.ENUM); } @@ -26,13 +29,26 @@ abstract class AbstractEnumStatementSupport } @Override - public final EnumStatement createDeclared(final StmtContext ctx) { - return new EnumStatementImpl(ctx); + protected final EnumStatement createDeclared(final StmtContext ctx, + final ImmutableList> substatements) { + return new RegularEnumStatement(ctx, substatements); } @Override - public final EnumEffectiveStatement createEffective( - final StmtContext ctx) { - return new EnumEffectiveStatementImpl(ctx); + protected final EnumStatement createEmptyDeclared(final StmtContext ctx) { + return new EmptyEnumStatement(ctx); + } + + @Override + protected final EnumEffectiveStatement createEffective( + final StmtContext ctx, final EnumStatement declared, + final ImmutableList> substatements) { + return new RegularEnumEffectiveStatement(declared, substatements); + } + + @Override + protected final EnumEffectiveStatement createEmptyEffective( + final StmtContext ctx, final EnumStatement declared) { + return new EmptyEnumEffectiveStatement(declared); } } \ No newline at end of file diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EmptyEnumEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EmptyEnumEffectiveStatement.java new file mode 100644 index 0000000000..0408171cd1 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EmptyEnumEffectiveStatement.java @@ -0,0 +1,27 @@ +/* + * 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.enum_; + +import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus; +import org.opendaylight.yangtools.yang.model.api.Status; +import org.opendaylight.yangtools.yang.model.api.stmt.EnumEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DocumentedNodeMixin; + +final class EmptyEnumEffectiveStatement extends DefaultArgument + implements EnumEffectiveStatement, DocumentedNodeMixin, WithStatus { + EmptyEnumEffectiveStatement(final EnumStatement declared) { + super(declared); + } + + @Override + public Status getStatus() { + return Status.CURRENT; + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EmptyEnumStatement.java similarity index 58% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementImpl.java rename to yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EmptyEnumStatement.java index b2867ada57..34128033bb 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EmptyEnumStatement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 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, @@ -8,11 +8,11 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.enum_; import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; -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; -final class EnumStatementImpl extends AbstractDeclaredStatement implements EnumStatement { - EnumStatementImpl(final StmtContext context) { +final class EmptyEnumStatement extends WithArgument implements EnumStatement { + EmptyEnumStatement(final StmtContext context) { super(context); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumEffectiveStatementImpl.java deleted file mode 100644 index aa0a2151f6..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumEffectiveStatementImpl.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2015 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.enum_; - -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.EnumEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ValueEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedNodeWithStatus; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; - -// FIXME: 6.0.0: hide this class -public final class EnumEffectiveStatementImpl extends AbstractEffectiveDocumentedNodeWithStatus - implements EnumEffectiveStatement { - private final String name; - private final Integer declaredValue; - - EnumEffectiveStatementImpl(final StmtContext ctx) { - super(ctx); - - name = ctx.rawStatementArgument(); - - Integer declaredValueInit = null; - for (final EffectiveStatement effectiveStatement : effectiveSubstatements()) { - if (effectiveStatement instanceof ValueEffectiveStatement) { - declaredValueInit = ((ValueEffectiveStatement) effectiveStatement).argument(); - } - } - - declaredValue = declaredValueInit; - } - - public String getName() { - return name; - } - - public Integer getDeclaredValue() { - return declaredValue; - } -} \ No newline at end of file diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/RegularEnumEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/RegularEnumEffectiveStatement.java new file mode 100644 index 0000000000..eb2999b0a7 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/RegularEnumEffectiveStatement.java @@ -0,0 +1,31 @@ +/* + * 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.enum_; + +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus; +import org.opendaylight.yangtools.yang.model.api.Status; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.EnumEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DocumentedNodeMixin; + +final class RegularEnumEffectiveStatement extends WithSubstatements + implements EnumEffectiveStatement, DocumentedNodeMixin, WithStatus { + RegularEnumEffectiveStatement(final EnumStatement declared, + final ImmutableList> substatements) { + super(declared, substatements); + } + + @Override + public Status getStatus() { + return findFirstEffectiveSubstatementArgument(StatusEffectiveStatement.class).orElse(Status.CURRENT); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/RegularEnumStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/RegularEnumStatement.java new file mode 100644 index 0000000000..5e87f29331 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/RegularEnumStatement.java @@ -0,0 +1,21 @@ +/* + * 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.enum_; + +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class RegularEnumStatement extends WithSubstatements implements EnumStatement { + RegularEnumStatement(final StmtContext context, + final ImmutableList> substatements) { + super(context, substatements); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EffectiveTypeUtil.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EffectiveTypeUtil.java index 1eba0f8452..ed74ade308 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EffectiveTypeUtil.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EffectiveTypeUtil.java @@ -12,14 +12,13 @@ import static com.google.common.base.Verify.verify; import com.google.common.annotations.Beta; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.Uint32; -import org.opendaylight.yangtools.yang.model.api.DocumentedNode; import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus; import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.EnumEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; import org.opendaylight.yangtools.yang.model.util.type.BitBuilder; import org.opendaylight.yangtools.yang.model.util.type.EnumPairBuilder; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.enum_.EnumEffectiveStatementImpl; @Beta final class EffectiveTypeUtil { @@ -28,8 +27,8 @@ final class EffectiveTypeUtil { } static @NonNull Bit buildBit(final @NonNull BitEffectiveStatement stmt, final Uint32 effectivePos) { - verify(stmt instanceof DocumentedNode.WithStatus); - final DocumentedNode.WithStatus bit = (WithStatus) stmt; + verify(stmt instanceof WithStatus); + final WithStatus bit = (WithStatus) stmt; // TODO: code duplication with EnumPairBuilder is indicating we could use a common Builder interface final BitBuilder builder = BitBuilder.create(stmt.argument(), effectivePos).setStatus(bit.getStatus()); @@ -39,11 +38,14 @@ final class EffectiveTypeUtil { return builder.build(); } - static @NonNull EnumPair buildEnumPair(final @NonNull EnumEffectiveStatementImpl stmt, final int effectiveValue) { - final EnumPairBuilder builder = EnumPairBuilder.create(stmt.getName(), effectiveValue) - .setStatus(stmt.getStatus()).setUnknownSchemaNodes(stmt.getUnknownSchemaNodes()); - stmt.getDescription().ifPresent(builder::setDescription); - stmt.getReference().ifPresent(builder::setReference); + static @NonNull EnumPair buildEnumPair(final @NonNull EnumEffectiveStatement stmt, final int effectiveValue) { + verify(stmt instanceof WithStatus); + final WithStatus node = (WithStatus) stmt; + + final EnumPairBuilder builder = EnumPairBuilder.create(stmt.getDeclared().rawArgument(), effectiveValue) + .setStatus(node.getStatus()).setUnknownSchemaNodes(node.getUnknownSchemaNodes()); + node.getDescription().ifPresent(builder::setDescription); + node.getReference().ifPresent(builder::setReference); return builder.build(); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationEffectiveStatement.java index f645b70d21..47e78b9165 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationEffectiveStatement.java @@ -7,17 +7,19 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; +import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.EnumEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.EnumSpecification; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; import org.opendaylight.yangtools.yang.model.util.type.EnumerationTypeBuilder; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.enum_.EnumEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @@ -33,11 +35,13 @@ final class EnumSpecificationEffectiveStatement extends DeclaredEffectiveStateme final EnumerationTypeBuilder builder = BaseTypes.enumerationTypeBuilder(ctx.getSchemaPath().get()); Integer highestValue = null; for (final EffectiveStatement stmt : effectiveSubstatements()) { - if (stmt instanceof EnumEffectiveStatementImpl) { - final EnumEffectiveStatementImpl enumSubStmt = (EnumEffectiveStatementImpl) stmt; + if (stmt instanceof EnumEffectiveStatement) { + final EnumEffectiveStatement enumSubStmt = (EnumEffectiveStatement) stmt; + final Optional declaredValue = + enumSubStmt.findFirstEffectiveSubstatementArgument(ValueEffectiveStatement.class); final int effectiveValue; - if (enumSubStmt.getDeclaredValue() == null) { + if (declaredValue.isEmpty()) { if (highestValue != null) { SourceException.throwIf(highestValue == 2147483647, ctx.getStatementSourceReference(), "Enum '%s' must have a value statement", enumSubStmt); @@ -46,7 +50,7 @@ final class EnumSpecificationEffectiveStatement extends DeclaredEffectiveStateme effectiveValue = 0; } } else { - effectiveValue = enumSubStmt.getDeclaredValue(); + effectiveValue = declaredValue.orElseThrow(); } final EnumPair pair = EffectiveTypeUtil.buildEnumPair(enumSubStmt, effectiveValue); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumTypeEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumTypeEffectiveStatementImpl.java index 8c8e9304fa..2134e1b18f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumTypeEffectiveStatementImpl.java @@ -8,18 +8,20 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; +import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.EnumEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; import org.opendaylight.yangtools.yang.model.util.type.EnumerationTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.enum_.EnumEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @@ -38,17 +40,18 @@ final class EnumTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBas final YangVersion yangVersion = ctx.getRootVersion(); for (final EffectiveStatement stmt : effectiveSubstatements()) { - if (stmt instanceof EnumEffectiveStatementImpl) { + if (stmt instanceof EnumEffectiveStatement) { SourceException.throwIf(yangVersion != YangVersion.VERSION_1_1, ctx.getStatementSourceReference(), "Restricted enumeration type is allowed only in YANG 1.1 version."); - final EnumEffectiveStatementImpl enumSubStmt = (EnumEffectiveStatementImpl) stmt; - + final EnumEffectiveStatement enumSubStmt = (EnumEffectiveStatement) stmt; + final Optional declaredValue = + enumSubStmt.findFirstEffectiveSubstatementArgument(ValueEffectiveStatement.class); final int effectiveValue; - if (enumSubStmt.getDeclaredValue() == null) { - effectiveValue = getBaseTypeEnumValue(enumSubStmt.getName(), baseType, ctx); + if (declaredValue.isEmpty()) { + effectiveValue = getBaseTypeEnumValue(enumSubStmt.getDeclared().rawArgument(), baseType, ctx); } else { - effectiveValue = enumSubStmt.getDeclaredValue(); + effectiveValue = declaredValue.orElseThrow(); } builder.addEnum(EffectiveTypeUtil.buildEnumPair(enumSubStmt, effectiveValue)); -- 2.36.6