Clean up use of Augmentation generics
[yangtools.git] / parser / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / meta / CaseStatementSupport.java
index 4b79879697e98c6f76eda1eaa6e32dc5bdf45169..c623e5a14209aa39433db8151796b424f2ab40f2 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
 
+import static com.google.common.base.Verify.verify;
+
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableList;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -22,20 +24,22 @@ import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
 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.meta.StatementOrigin;
 import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
 import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
-import org.opendaylight.yangtools.yang.model.ri.stmt.ImplicitStatements;
+import org.opendaylight.yangtools.yang.model.ri.stmt.UndeclaredStatements;
 import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
 import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
+import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Parent.EffectiveConfig;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.UndeclaredCurrent;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
@@ -85,17 +89,9 @@ public final class CaseStatementSupport
     }
 
     @Override
-    protected CaseStatement createDeclared(final StmtContext<QName, CaseStatement, ?> ctx,
-            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        final StatementOrigin origin = ctx.origin();
-        switch (origin) {
-            case CONTEXT:
-                return ImplicitStatements.createCase(ctx.getArgument(), substatements);
-            case DECLARATION:
-                return DeclaredStatements.createCase(ctx.getArgument(), substatements);
-            default:
-                throw new IllegalStateException("Unhandled statement origin " + origin);
-        }
+    protected CaseStatement createDeclared(final BoundStmtCtx<QName> ctx,
+            final ImmutableList<DeclaredStatement<?>> substatements) {
+        return DeclaredStatements.createCase(ctx.getArgument(), substatements);
     }
 
     @Override
@@ -104,39 +100,43 @@ public final class CaseStatementSupport
     }
 
     @Override
-    protected CaseEffectiveStatement copyDeclaredEffective(final Current<QName, CaseStatement> stmt,
-            final CaseEffectiveStatement original) {
-        return EffectiveStatements.copyCase(original, stmt.getArgument(),
-            computeFlags(stmt, original.effectiveSubstatements()), stmt.original(CaseSchemaNode.class));
+    protected CaseEffectiveStatement createEffective(final Current<QName, CaseStatement> stmt,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        try {
+            return EffectiveStatements.createCase(stmt.declared(), stmt.getArgument(),
+                computeFlags(stmt, substatements), substatements);
+        } catch (SubstatementIndexingException e) {
+            throw new SourceException(e.getMessage(), stmt, e);
+        }
     }
 
     @Override
-    protected CaseEffectiveStatement copyUndeclaredEffective(final Current<QName, CaseStatement> stmt,
+    public CaseEffectiveStatement copyEffective(final Current<QName, CaseStatement> stmt,
             final CaseEffectiveStatement original) {
         return EffectiveStatements.copyCase(original, stmt.getArgument(),
-            computeFlags(stmt, original.effectiveSubstatements()), stmt.original(CaseSchemaNode.class));
+            computeFlags(stmt, original.effectiveSubstatements()));
     }
 
     @Override
-    protected CaseEffectiveStatement createDeclaredEffective(final Current<QName, CaseStatement> stmt,
+    protected CaseEffectiveStatement createUndeclaredEffective(final UndeclaredCurrent<QName, CaseStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         try {
-            return EffectiveStatements.createCase(stmt.declared(), stmt.getArgument(),
-                computeFlags(stmt, substatements), substatements, stmt.original(CaseSchemaNode.class));
+            return UndeclaredStatements.createCase(stmt.getArgument(), computeFlags(stmt, substatements),
+                substatements);
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt, e);
         }
     }
 
     @Override
-    protected CaseEffectiveStatement createUndeclaredEffective(final Current<QName, CaseStatement> stmt,
-            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        try {
-            return EffectiveStatements.createCase(stmt.getArgument(), computeFlags(stmt, substatements),
-                substatements, stmt.original(CaseSchemaNode.class));
-        } catch (SubstatementIndexingException e) {
-            throw new SourceException(e.getMessage(), stmt, e);
-        }
+    public EffectiveStatementState extractEffectiveState(final CaseEffectiveStatement stmt) {
+        verify(stmt instanceof CaseSchemaNode, "Unexpected statement %s", stmt);
+        final var schema = (CaseSchemaNode) stmt;
+        return new QNameWithFlagsEffectiveStatementState(stmt.argument(), new FlagsBuilder()
+            .setHistory(schema)
+            .setStatus(schema.getStatus())
+            .setConfiguration(schema.effectiveConfig().orElse(null))
+            .toFlags());
     }
 
     private static int computeFlags(final Current<?, ?> stmt,