Update SchemaPath.getPath() implementation
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / feature / FeatureStatementSupport.java
index 5edccce1f2ffbcf7297e2737313ff567d487594e..b4561d42fd06198ae59332ac837bfa7f32b551f6 100644 (file)
@@ -17,16 +17,17 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
 import org.opendaylight.yangtools.yang.parser.spi.FeatureNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 
 public final class FeatureStatementSupport
-        extends BaseQNameStatementSupport<FeatureStatement, FeatureEffectiveStatement> {
+        extends AbstractQNameStatementSupport<FeatureStatement, FeatureEffectiveStatement> {
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
         YangStmtMapping.FEATURE)
         .addOptional(YangStmtMapping.DESCRIPTION)
@@ -38,7 +39,7 @@ public final class FeatureStatementSupport
     private static final int EMPTY_EFFECTIVE_FLAGS = new FlagsBuilder().setStatus(Status.CURRENT).toFlags();
 
     private FeatureStatementSupport() {
-        super(YangStmtMapping.FEATURE);
+        super(YangStmtMapping.FEATURE, StatementPolicy.reject());
     }
 
     public static FeatureStatementSupport getInstance() {
@@ -53,7 +54,7 @@ public final class FeatureStatementSupport
     @Override
     public void onFullDefinitionDeclared(final Mutable<QName, FeatureStatement, FeatureEffectiveStatement> stmt) {
         super.onFullDefinitionDeclared(stmt);
-        stmt.addContext(FeatureNamespace.class, stmt.coerceStatementArgument(), stmt);
+        stmt.addContext(FeatureNamespace.class, stmt.getArgument(), stmt);
     }
 
     @Override
@@ -64,27 +65,21 @@ public final class FeatureStatementSupport
     @Override
     protected FeatureStatement createDeclared(final StmtContext<QName, FeatureStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return new RegularFeatureStatement(ctx.coerceStatementArgument(), substatements);
+        return new RegularFeatureStatement(ctx.getArgument(), substatements);
     }
 
     @Override
     protected FeatureStatement createEmptyDeclared(@NonNull final StmtContext<QName, FeatureStatement, ?> ctx) {
-        return new EmptyFeatureStatement(ctx.coerceStatementArgument());
+        return new EmptyFeatureStatement(ctx.getArgument());
     }
 
     @Override
-    protected FeatureEffectiveStatement createEffective(
-            final StmtContext<QName, FeatureStatement, FeatureEffectiveStatement> ctx, final FeatureStatement declared,
+    protected FeatureEffectiveStatement createEffective(final Current<QName, FeatureStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new RegularFeatureEffectiveStatement(declared, ctx.getSchemaPath().get(), computeFlags(substatements),
-            substatements);
-    }
-
-    @Override
-    protected FeatureEffectiveStatement createEmptyEffective(
-            final StmtContext<QName, FeatureStatement, FeatureEffectiveStatement> ctx,
-            final FeatureStatement declared) {
-        return new EmptyFeatureEffectiveStatement(declared, ctx.getSchemaPath().get(), EMPTY_EFFECTIVE_FLAGS);
+        return substatements.isEmpty()
+            ? new EmptyFeatureEffectiveStatement(stmt.declared(), stmt.effectivePath(), EMPTY_EFFECTIVE_FLAGS)
+                : new RegularFeatureEffectiveStatement(stmt.declared(), stmt.effectivePath(),
+                    computeFlags(substatements), substatements);
     }
 
     private static int computeFlags(final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {