Reformulate StatementContextFactory.createEffective()
[yangtools.git] / yang / rfc8040-parser-support / src / main / java / org / opendaylight / yangtools / rfc8040 / parser / YangDataEffectiveStatementImpl.java
index 9d1cacbe26e01525897231a2148d79a7610fa0da..67ad368e4371e458d730394753c94236b65b9abb 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.yangtools.rfc8040.parser;
 import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Verify;
-import java.util.Objects;
+import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.rfc8040.model.api.YangDataEffectiveStatement;
 import org.opendaylight.yangtools.rfc8040.model.api.YangDataSchemaNode;
@@ -18,9 +18,10 @@ import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
 @Beta
@@ -31,18 +32,19 @@ final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatementBase
     private final @NonNull QName maybeQNameArgument;
     private final @NonNull ContainerEffectiveStatement container;
 
-    YangDataEffectiveStatementImpl(final StmtContext<String, YangDataStatement, ?> ctx) {
-        super(ctx);
+    YangDataEffectiveStatementImpl(final Current<String, YangDataStatement> stmt,
+             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        super(stmt, substatements);
 
         QName maybeQNameArgumentInit;
         try {
-            maybeQNameArgumentInit = StmtContextUtils.parseIdentifier(ctx, argument());
+            maybeQNameArgumentInit = StmtContextUtils.parseIdentifier(stmt.caerbannog(), argument());
         } catch (IllegalArgumentException e) {
             maybeQNameArgumentInit = getNodeType();
         }
         this.maybeQNameArgument = maybeQNameArgumentInit;
 
-        path = ctx.coerceParentContext().getSchemaPath().get().createChild(maybeQNameArgument);
+        path = stmt.getParent().getSchemaPath().createChild(maybeQNameArgument);
         container = findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).get();
 
         // TODO: this is strong binding of two API contracts. Unfortunately ContainerEffectiveStatement design is
@@ -56,7 +58,8 @@ final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatementBase
     }
 
     @Override
-    public @NonNull SchemaPath getPath() {
+    @Deprecated
+    public SchemaPath getPath() {
         return path;
     }
 
@@ -66,28 +69,14 @@ final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatementBase
     }
 
     @Override
-    public @NonNull ContainerSchemaNode getContainerSchemaNode() {
+    public ContainerSchemaNode getContainerSchemaNode() {
         // Verified in the constructor
         return (ContainerSchemaNode) container;
     }
 
     @Override
-    public int hashCode() {
-        return Objects.hash(maybeQNameArgument, path);
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (this == obj) {
-            return true;
-        }
-
-        if (!(obj instanceof YangDataEffectiveStatementImpl)) {
-            return false;
-        }
-
-        final YangDataEffectiveStatementImpl other = (YangDataEffectiveStatementImpl) obj;
-        return Objects.equals(maybeQNameArgument, other.maybeQNameArgument) && Objects.equals(path, other.path);
+    public YangDataEffectiveStatement asEffectiveStatement() {
+        return this;
     }
 
     @Override