Migrate coerceStatementArgument() callers
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / augment / AugmentEffectiveStatementImpl.java
index e0067589f476515b7881037c80237512e0d1664b..159b69e5b501a7a6efb933777964a4bf3aa88779 100644 (file)
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment;
 
-import static com.google.common.base.Verify.verify;
+import static java.util.Objects.requireNonNull;
 
-import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import java.net.URI;
-import java.util.Collection;
-import java.util.Objects;
 import java.util.Optional;
-import java.util.Set;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QNameModule;
-import org.opendaylight.yangtools.yang.common.Revision;
-import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.NamespaceRevisionAware;
-import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.QNameModuleAware;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.compat.ActionNodeContainerCompat;
-import org.opendaylight.yangtools.yang.model.api.stmt.compat.NotificationNodeContainerCompat;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedDataNodeContainer;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
-import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase;
-
-final class AugmentEffectiveStatementImpl
-        extends AbstractEffectiveDocumentedDataNodeContainer<SchemaNodeIdentifier, AugmentStatement>
-        implements AugmentEffectiveStatement, AugmentationSchemaNode, NamespaceRevisionAware,
-            ActionNodeContainerCompat<SchemaNodeIdentifier, AugmentStatement>,
-            NotificationNodeContainerCompat<SchemaNodeIdentifier, AugmentStatement> {
-    private final SchemaPath targetPath;
-    private final URI namespace;
-    private final Revision revision;
-    private final @NonNull ImmutableSet<ActionDefinition> actions;
-    private final @NonNull ImmutableSet<NotificationDefinition> notifications;
-    private final RevisionAwareXPath whenCondition;
-    private final AugmentationSchemaNode copyOf;
-
-    AugmentEffectiveStatementImpl(final StmtContext<SchemaNodeIdentifier, AugmentStatement,
-            EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> ctx) {
-        super(ctx);
-
-        this.targetPath = ctx.coerceStatementArgument().asSchemaPath();
-
-        final QNameModule rootModuleQName = StmtContextUtils.getRootModuleQName(ctx);
-        this.namespace = rootModuleQName.getNamespace();
-        this.revision = rootModuleQName.getRevision().orElse(null);
-
-        this.copyOf = (AugmentationSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
-        whenCondition = findFirstEffectiveSubstatementArgument(WhenEffectiveStatement.class).orElse(null);
-
-        // initSubstatementCollections
-        final ImmutableSet.Builder<ActionDefinition> actionsBuilder = ImmutableSet.builder();
-        final ImmutableSet.Builder<NotificationDefinition> notificationsBuilder = ImmutableSet.builder();
-        final ImmutableList.Builder<UnknownSchemaNode> listBuilder = new ImmutableList.Builder<>();
-        for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
-            if (effectiveStatement instanceof ActionDefinition) {
-                actionsBuilder.add((ActionDefinition) effectiveStatement);
-            } else if (effectiveStatement instanceof NotificationDefinition) {
-                notificationsBuilder.add((NotificationDefinition) effectiveStatement);
-            }
-        }
-
-        this.actions = actionsBuilder.build();
-        this.notifications = notificationsBuilder.build();
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultDataNodeContainer;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ActionNodeContainerMixin;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DocumentedNodeMixin;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.NotificationNodeContainerMixin;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.WhenConditionMixin;
+import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
+
+final class AugmentEffectiveStatementImpl extends DefaultDataNodeContainer<SchemaNodeIdentifier, AugmentStatement>
+        implements AugmentEffectiveStatement, AugmentationSchemaNode, QNameModuleAware,
+            DocumentedNodeMixin.WithStatus<SchemaNodeIdentifier, AugmentStatement>,
+            ActionNodeContainerMixin<SchemaNodeIdentifier, AugmentStatement>,
+            NotificationNodeContainerMixin<SchemaNodeIdentifier, AugmentStatement>,
+            WhenConditionMixin<SchemaNodeIdentifier, AugmentStatement> {
+    private final @Nullable AugmentationSchemaNode original;
+    private final @NonNull SchemaNodeIdentifier argument;
+    private final @NonNull QNameModule rootModuleQName;
+    private final int flags;
+
+    AugmentEffectiveStatementImpl(final AugmentStatement declared, final SchemaNodeIdentifier argument, final int flags,
+            final QNameModule rootModuleQName, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
+            final StatementSourceReference ref, final @Nullable AugmentationSchemaNode original) {
+        super(declared, ref, substatements);
+        this.argument = requireNonNull(argument);
+        this.rootModuleQName = requireNonNull(rootModuleQName);
+        this.flags = flags;
+        this.original = original;
     }
 
     @Override
-    protected Collection<? extends EffectiveStatement<?, ?>> initSubstatements(
-            final StmtContext<SchemaNodeIdentifier, AugmentStatement, ?> ctx,
-            final Collection<? extends StmtContext<?, ?, ?>> substatementsInit) {
-        final StatementContextBase<?, ?, ?> implicitDef = ctx.getFromNamespace(AugmentImplicitHandlingNamespace.class,
-            ctx);
-        return implicitDef == null ? super.initSubstatements(ctx, substatementsInit)
-                : Collections2.transform(Collections2.filter(substatementsInit,
-                    StmtContext::isSupportedToBuildEffective),
-                    subCtx -> {
-                        verify(subCtx instanceof StatementContextBase);
-                        return implicitDef.wrapWithImplicit((StatementContextBase<?, ?, ?>) subCtx).buildEffective();
-                    });
+    public @NonNull SchemaNodeIdentifier argument() {
+        return argument;
     }
 
     @Override
     public Optional<AugmentationSchemaNode> getOriginalDefinition() {
-        return Optional.ofNullable(this.copyOf);
-    }
-
-    @Override
-    public SchemaPath getTargetPath() {
-        return targetPath;
-    }
-
-    @Override
-    public Optional<RevisionAwareXPath> getWhenCondition() {
-        return Optional.ofNullable(whenCondition);
-    }
-
-    @Override
-    public URI getNamespace() {
-        return namespace;
-    }
-
-    @Override
-    public Set<ActionDefinition> getActions() {
-        return actions;
-    }
-
-    @Override
-    public Set<NotificationDefinition> getNotifications() {
-        return notifications;
+        return Optional.ofNullable(this.original);
     }
 
     @Override
-    public Optional<Revision> getRevision() {
-        return Optional.ofNullable(revision);
+    public int flags() {
+        return flags;
     }
 
     @Override
-    public int hashCode() {
-        final int prime = 17;
-        int result = 1;
-        result = prime * result + Objects.hashCode(targetPath);
-        result = prime * result + Objects.hashCode(whenCondition);
-        result = prime * result + getChildNodes().hashCode();
-        return result;
+    public QNameModule getQNameModule() {
+        return rootModuleQName;
     }
 
     @Override
-    public boolean equals(final Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (!(obj instanceof AugmentEffectiveStatementImpl)) {
-            return false;
-        }
-        final AugmentEffectiveStatementImpl other = (AugmentEffectiveStatementImpl) obj;
-        return Objects.equals(targetPath, other.targetPath) && Objects.equals(whenCondition, other.whenCondition)
-                && getChildNodes().equals(other.getChildNodes());
+    public AugmentEffectiveStatement asEffectiveStatement() {
+        return this;
     }
 
     @Override
     public String toString() {
-        return AugmentEffectiveStatementImpl.class.getSimpleName() + "[" + "targetPath=" + targetPath + ", when="
-                + whenCondition + "]";
+        return AugmentEffectiveStatementImpl.class.getSimpleName() + "[" + "targetPath=" + getTargetPath() + ", when="
+                + getWhenCondition() + "]";
     }
 }