X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Frfc6020%2FGroupingUtils.java;h=0273150679d206076ac213532c5a1747781eb053;hb=660b3a15a0da5e2212e64f35edfdd3444d145050;hp=7f92ae4a7414928805b306c23105ccbfb396b443;hpb=c652590993b1e4660d5d557868665dbfa634ed27;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/GroupingUtils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/GroupingUtils.java index 7f92ae4a74..0273150679 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/GroupingUtils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/GroupingUtils.java @@ -28,9 +28,13 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace; import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType; import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public final class GroupingUtils { + private static final Logger LOG = LoggerFactory.getLogger(GroupingUtils.class); + private GroupingUtils() { throw new UnsupportedOperationException(); } @@ -113,14 +117,14 @@ public final class GroupingUtils { return true; } - private static final Set NOCOPY_DEF_SET = ImmutableSet.of( - Rfc6020Mapping.USES, Rfc6020Mapping.TYPEDEF, Rfc6020Mapping.TYPE); - private static final Set NOCOPY_FROM_GROUPING_SET = ImmutableSet.of( - Rfc6020Mapping.DESCRIPTION, Rfc6020Mapping.REFERENCE); - private static final Set REUSED_DEF_SET = ImmutableSet.of( - Rfc6020Mapping.TYPEDEF, Rfc6020Mapping.TYPE, Rfc6020Mapping.USES); - private static final Set TOP_REUSED_DEF_SET = ImmutableSet.of( - Rfc6020Mapping.TYPEDEF, Rfc6020Mapping.TYPE); + private static final Set NOCOPY_DEF_SET = ImmutableSet.of(Rfc6020Mapping.USES, + Rfc6020Mapping.TYPEDEF, Rfc6020Mapping.TYPE); + private static final Set NOCOPY_FROM_GROUPING_SET = ImmutableSet.of(Rfc6020Mapping.DESCRIPTION, + Rfc6020Mapping.REFERENCE, Rfc6020Mapping.STATUS); + private static final Set REUSED_DEF_SET = ImmutableSet.of(Rfc6020Mapping.TYPEDEF, + Rfc6020Mapping.TYPE, Rfc6020Mapping.USES); + private static final Set TOP_REUSED_DEF_SET = ImmutableSet.of(Rfc6020Mapping.TYPEDEF, + Rfc6020Mapping.TYPE); public static boolean needToCopyByUses(final StmtContext stmtContext) { final StatementDefinition def = stmtContext.getPublicDefinition(); @@ -159,6 +163,13 @@ public final class GroupingUtils { StatementContextBase refineTargetNodeCtx = Utils.findNode(usesParentCtx, refineTargetNodeIdentifier); Preconditions.checkArgument(refineTargetNodeCtx != null, "Refine target node %s not found. At %s", refineTargetNodeIdentifier, refineCtx.getStatementSourceReference()); + if (StmtContextUtils.isUnknownStatement(refineTargetNodeCtx)) { + LOG.warn("Refine node '{}' in uses '{}' has target node unknown statement '{}'. Refine has been skipped. At line: {}", + refineCtx.getStatementArgument(), refineCtx.getParentContext().getStatementArgument(), refineTargetNodeCtx.getStatementArgument(), + refineCtx.getStatementSourceReference()); + refineCtx.addAsEffectOfStatement(refineTargetNodeCtx); + return; + } addOrReplaceNodes(refineCtx, refineTargetNodeCtx); refineCtx.addAsEffectOfStatement(refineTargetNodeCtx); @@ -177,7 +188,6 @@ public final class GroupingUtils { final StatementContextBase refineTargetNodeCtx) { StatementDefinition refineSubstatementDef = refineSubstatementCtx.getPublicDefinition(); - StatementDefinition refineTargetNodeDef = refineTargetNodeCtx.getPublicDefinition(); SourceException.throwIf(!isSupportedRefineTarget(refineSubstatementCtx, refineTargetNodeCtx), refineSubstatementCtx.getStatementSourceReference(),