Augments should get disabled if target is unsupported
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / augment / AbstractAugmentStatementSupport.java
index 5c85334c3cdaf196a7fe16bf0e9df12f60de89f7..36ea6f506ddbc9e6bfa9c97535ad5fbc4f0108c5 100644 (file)
@@ -97,6 +97,11 @@ abstract class AbstractAugmentStatementSupport
         augmentAction.apply(new InferenceAction() {
             @Override
             public void apply(final InferenceContext ctx) {
+                if (!augmentNode.isSupportedToBuildEffective()) {
+                    // We are not building effective model, hence we should not be performing any effects
+                    return;
+                }
+
                 final StatementContextBase<?, ?, ?> augmentTargetCtx =
                         (StatementContextBase<?, ?, ?>) target.resolve(ctx);
                 if (!isSupportedAugmentTarget(augmentTargetCtx)
@@ -144,6 +149,15 @@ abstract class AbstractAugmentStatementSupport
                 throw new InferenceException(augmentNode.getStatementSourceReference(),
                         "Augment target '%s' not found", augmentNode.getStatementArgument());
             }
+
+            @Override
+            public void prerequisiteUnavailable(final Prerequisite<?> unavail) {
+                if (target.equals(unavail)) {
+                    augmentNode.setIsSupportedToBuildEffective(false);
+                } else {
+                    prerequisiteFailed(List.of(unavail));
+                }
+            }
         });
     }