From 728e52c158fca28a964894a21d281329bc2e1b11 Mon Sep 17 00:00:00 2001 From: Peter Kajsa Date: Mon, 26 Jun 2017 11:09:27 +0200 Subject: [PATCH] Bug 2444 - add missing API of some declared statements Fix of missing API of some declared statements according to RFC7950. This API is necessary to proper export of declared statements to Yin. Change-Id: Icc0209656751b00c5cc7401f7b95d8979af0fa0d Signed-off-by: Peter Kajsa --- .../yang/model/api/stmt/ActionStatement.java | 2 +- .../yang/model/api/stmt/AugmentStatement.java | 12 +++-- .../model/api/stmt/DeviationStatement.java | 5 +- .../yang/model/api/stmt/IncludeStatement.java | 2 - .../model/api/stmt/NotificationStatement.java | 2 +- .../yang/model/api/stmt/OperationGroup.java | 9 ++-- .../yang/model/api/stmt/RefineStatement.java | 32 ++++++------ .../yang/model/api/stmt/RpcStatement.java | 2 +- .../yang/model/api/stmt/TypedefStatement.java | 3 ++ .../stmt/rfc6020/AugmentStatementImpl.java | 43 ++++++++++++++++ .../stmt/rfc6020/DeviationStatementImpl.java | 23 +++++++++ .../stmt/rfc6020/IncludeStatementImpl.java | 7 --- .../rfc6020/NotificationStatementImpl.java | 7 +++ .../stmt/rfc6020/RefineStatementImpl.java | 49 +++++++++++++++++++ .../stmt/rfc6020/TypedefStatementImpl.java | 6 +++ .../spi/meta/AbstractDeclaredStatement.java | 5 +- 16 files changed, 172 insertions(+), 37 deletions(-) diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ActionStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ActionStatement.java index 916539b351..c1bb951b6c 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ActionStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ActionStatement.java @@ -22,6 +22,6 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; * detailed action information. The argument is the name of the action. */ @Beta -public interface ActionStatement extends DeclaredStatement, OperationGroup, ConditionalFeature { +public interface ActionStatement extends DeclaredStatement, OperationGroup { } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/AugmentStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/AugmentStatement.java index f611578f0a..a3c17c5613 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/AugmentStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/AugmentStatement.java @@ -7,11 +7,17 @@ */ package org.opendaylight.yangtools.yang.model.api.stmt; +import java.util.Collection; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; -public interface AugmentStatement extends DeclaredStatement, DataDefinitionContainer, - NotificationStatementContainer, ActionStatementContainer { +public interface AugmentStatement + extends DeclaredStatement, DataDefinitionContainer, NotificationStatementContainer, + ActionStatementContainer, DocumentationGroup.WithStatus, ConditionalDataDefinition, ConditionalFeature { - @Nonnull SchemaNodeIdentifier getTargetNode(); + @Nonnull + SchemaNodeIdentifier getTargetNode(); + + @Nonnull + Collection getCases(); } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DeviationStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DeviationStatement.java index d52aadbc4f..0434afbca1 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DeviationStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DeviationStatement.java @@ -7,10 +7,13 @@ */ package org.opendaylight.yangtools.yang.model.api.stmt; +import java.util.Collection; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; -public interface DeviationStatement extends DeclaredStatement { +public interface DeviationStatement extends DeclaredStatement, DocumentationGroup { @Nonnull SchemaNodeIdentifier getTargetNode(); + + @Nonnull Collection getDeviateStatements(); } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java index 2a5bda1b29..efbfa36ac9 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java @@ -15,8 +15,6 @@ public interface IncludeStatement extends DeclaredStatement, Documentati @Nonnull String getModule(); - @Nonnull PrefixStatement getPrefix(); - @Nullable RevisionDateStatement getRevisionDate(); } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/NotificationStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/NotificationStatement.java index c27342e4f9..4632f3855c 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/NotificationStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/NotificationStatement.java @@ -14,7 +14,7 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; public interface NotificationStatement extends DeclaredStatement, - DataDefinitionContainer.WithReusableDefinitions, DocumentationGroup.WithStatus { + DataDefinitionContainer.WithReusableDefinitions, DocumentationGroup.WithStatus, ConditionalFeature { @Nonnull QName getName(); diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/OperationGroup.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/OperationGroup.java index a17004f246..3a6f4bbfb5 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/OperationGroup.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/OperationGroup.java @@ -11,21 +11,22 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import com.google.common.annotations.Beta; import java.util.Collection; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; /** * Common interface for action and rpc statements. */ @Beta -public interface OperationGroup extends DocumentationGroup.WithStatus { +public interface OperationGroup extends DocumentationGroup.WithStatus, ConditionalFeature { - QName getName(); + @Nonnull QName getName(); @Nonnull Collection getTypedefs(); @Nonnull Collection getGroupings(); - InputStatement getInput(); + @Nullable InputStatement getInput(); - OutputStatement getOutput(); + @Nullable OutputStatement getOutput(); } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RefineStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RefineStatement.java index da8be7f714..61d646c028 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RefineStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RefineStatement.java @@ -12,28 +12,28 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; -public interface RefineStatement extends DeclaredStatement, DocumentationGroup, - ConditionalFeature { +public interface RefineStatement + extends DeclaredStatement, DocumentationGroup, ConditionalFeature { String getTargetNode(); - interface RefineContainerStatement extends RefineStatement { + @Nonnull + Collection getMusts(); - @Nonnull Collection getMusts(); + @Nonnull + Collection getDefaults(); - @Nullable ConfigStatement getConfig(); + @Nullable + ConfigStatement getConfig(); - @Nullable PresenceStatement getPresence(); - } + @Nullable + PresenceStatement getPresence(); - interface RefineLeafStatement extends RefineStatement { + @Nullable + MandatoryStatement getMandatory(); - @Nonnull Collection getMusts(); + @Nullable + MinElementsStatement getMinElements(); - @Nullable DefaultStatement getDefault(); - - @Nullable ConfigStatement getConfig(); - - @Nullable PresenceStatement getPresence(); - } + @Nullable + MaxElementsStatement getMaxElements(); } - diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RpcStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RpcStatement.java index 33c9d5c086..1300ed32d5 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RpcStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RpcStatement.java @@ -10,6 +10,6 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; -public interface RpcStatement extends DeclaredStatement, OperationGroup, ConditionalFeature { +public interface RpcStatement extends DeclaredStatement, OperationGroup { } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypedefStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypedefStatement.java index b4d9ca2a0f..55ef0019c6 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypedefStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypedefStatement.java @@ -8,11 +8,14 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; public interface TypedefStatement extends DeclaredStatement,DocumentationGroup.WithStatus, TypeGroup { @Nonnull QName getName(); + + @Nullable DefaultStatement getDefault(); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentStatementImpl.java index 9bceed925a..7ecd95cbe0 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentStatementImpl.java @@ -15,15 +15,21 @@ import java.util.Objects; import java.util.Set; import java.util.regex.Pattern; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; @@ -400,8 +406,45 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement getNotifications() { return allDeclared(NotificationStatement.class); } + + @Nullable + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Nullable + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nullable + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Nullable + @Override + public WhenStatement getWhenStatement() { + return firstDeclared(WhenStatement.class); + } + + @Nonnull + @Override + public Collection getCases() { + return allDeclared(CaseStatement.class); + } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviationStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviationStatementImpl.java index 7b819af886..65846e401f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviationStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviationStatementImpl.java @@ -7,11 +7,16 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import java.util.Collection; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -82,4 +87,22 @@ public class DeviationStatementImpl extends AbstractDeclaredStatement getDeviateStatements() { + return allDeclared(DeviateStatement.class); + } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java index 3e411257b4..f698d23590 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java @@ -20,7 +20,6 @@ import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; import org.opendaylight.yangtools.yang.model.util.ModuleIdentifierImpl; @@ -129,12 +128,6 @@ public class IncludeStatementImpl extends AbstractDeclaredStatement impl return argument(); } - @Nonnull - @Override - public PrefixStatement getPrefix() { - return firstDeclared(PrefixStatement.class); - } - @Override public RevisionDateStatement getRevisionDate() { return firstDeclared(RevisionDateStatement.class); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NotificationStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NotificationStatementImpl.java index d356328270..a18a528fe9 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NotificationStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NotificationStatementImpl.java @@ -16,6 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; @@ -137,4 +138,10 @@ public class NotificationStatementImpl extends AbstractDeclaredStatement public ReferenceStatement getReference() { return firstDeclared(ReferenceStatement.class); } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RefineStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RefineStatementImpl.java index 12cc40e91d..336fb2636a 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RefineStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RefineStatementImpl.java @@ -13,8 +13,15 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; @@ -94,4 +101,46 @@ public class RefineStatementImpl extends AbstractDeclaredStatement getMusts() { + return allDeclared(MustStatement.class); + } + + @Nonnull + @Override + public Collection getDefaults() { + return allDeclared(DefaultStatement.class); + } + + @Nullable + @Override + public ConfigStatement getConfig() { + return firstDeclared(ConfigStatement.class); + } + + @Nullable + @Override + public PresenceStatement getPresence() { + return firstDeclared(PresenceStatement.class); + } + + @Nullable + @Override + public MandatoryStatement getMandatory() { + return firstDeclared(MandatoryStatement.class); + } + + @Nullable + @Override + public MinElementsStatement getMinElements() { + return firstDeclared(MinElementsStatement.class); + } + + @Nullable + @Override + public MaxElementsStatement getMaxElements() { + return firstDeclared(MaxElementsStatement.class); + } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypedefStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypedefStatementImpl.java index 7b62514244..e149b628cf 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypedefStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypedefStatementImpl.java @@ -12,6 +12,7 @@ import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; @@ -122,4 +123,9 @@ public class TypedefStatementImpl extends AbstractDeclaredStatement imple return argument(); } + @Nullable + @Override + public DefaultStatement getDefault() { + return firstDeclared(DefaultStatement.class); + } } diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractDeclaredStatement.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractDeclaredStatement.java index 081ed56967..db066080df 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractDeclaredStatement.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractDeclaredStatement.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.parser.spi.meta; +import com.google.common.base.Optional; import com.google.common.base.Predicates; import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableList; @@ -44,7 +45,9 @@ public abstract class AbstractDeclaredStatement implements DeclaredStatement< } protected final > S firstDeclared(final Class type) { - return type.cast(Iterables.find(substatements, Predicates.instanceOf(type))); + final Optional> declaredSubstmt = Iterables.tryFind(substatements, + Predicates.instanceOf(type)); + return declaredSubstmt.isPresent() ? type.cast(declaredSubstmt.get()) : null; } @Override -- 2.36.6