Allow derived context to be reused
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / BaseImplicitStatementSupport.java
index 34d9bce92365d34ff0c3b8d0a8e7945dd2cfb2bf..9410bd93bfb2a689808da405f81b62afd75090f0 100644 (file)
@@ -33,6 +33,19 @@ public abstract class BaseImplicitStatementSupport<D extends DeclaredStatement<Q
         super(publicDefinition, policy);
     }
 
+    @Override
+    public final E copyEffective(final Current<QName, D> stmt, final E original) {
+        final StatementSource source = stmt.source();
+        switch (source) {
+            case CONTEXT:
+                return copyUndeclaredEffective(stmt, original);
+            case DECLARATION:
+                return copyDeclaredEffective(stmt, original);
+            default:
+                throw new IllegalStateException("Unhandled statement source " + source);
+        }
+    }
+
     @Override
     protected E createEffective(final Current<QName, D> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
@@ -47,6 +60,10 @@ public abstract class BaseImplicitStatementSupport<D extends DeclaredStatement<Q
         }
     }
 
+    protected abstract @NonNull E copyDeclaredEffective(@NonNull Current<QName, D> stmt, @NonNull E original);
+
+    protected abstract @NonNull E copyUndeclaredEffective(@NonNull Current<QName, D> stmt, @NonNull E original);
+
     protected abstract @NonNull E createDeclaredEffective(@NonNull Current<QName, D> stmt,
             @NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements);