Enable spotbugs in yang-parser-rfc7950
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / augment / AugmentEffectiveStatementImpl.java
index 18397a9fd4f7060abef093dbec27bdb5f40852b9..4b2993d2e7a92b2ec6e9bee268e01d880bcc94c6 100644 (file)
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 import java.net.URI;
-import java.util.List;
-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.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.parser.rfc7950.stmt.AbstractEffectiveDocumentedDataNodeContainer;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
-
-final class AugmentEffectiveStatementImpl
-        extends AbstractEffectiveDocumentedDataNodeContainer<SchemaNodeIdentifier, AugmentStatement>
-        implements AugmentEffectiveStatement, AugmentationSchemaNode, NamespaceRevisionAware {
-    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 @NonNull ImmutableList<UnknownSchemaNode> unknownNodes;
-    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);
-            } else if (effectiveStatement instanceof UnknownSchemaNode) {
-                listBuilder.add((UnknownSchemaNode) effectiveStatement);
-            }
-        }
-
-        this.actions = actionsBuilder.build();
-        this.notifications = notificationsBuilder.build();
-        this.unknownNodes = listBuilder.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, NamespaceRevisionAware,
+            DocumentedNodeMixin.WithStatus<SchemaNodeIdentifier, AugmentStatement>,
+            ActionNodeContainerMixin<SchemaNodeIdentifier, AugmentStatement>,
+            NotificationNodeContainerMixin<SchemaNodeIdentifier, AugmentStatement>,
+            WhenConditionMixin<SchemaNodeIdentifier, AugmentStatement> {
+    private final @Nullable AugmentationSchemaNode original;
+    private final @NonNull QNameModule rootModuleQName;
+    private final int flags;
+
+    AugmentEffectiveStatementImpl(final AugmentStatement declared, final int flags, final QNameModule rootModuleQName,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final StatementSourceReference ref,
+            final @Nullable AugmentationSchemaNode original) {
+        super(declared, ref, substatements);
+        this.rootModuleQName = requireNonNull(rootModuleQName);
+        this.flags = flags;
+        this.original = original;
     }
 
     @Override
-    public Optional<AugmentationSchemaNode> getOriginalDefinition() {
-        return Optional.ofNullable(this.copyOf);
+    public SchemaNodeIdentifier argument() {
+        return getDeclared().argument();
     }
 
     @Override
-    public SchemaPath getTargetPath() {
-        return targetPath;
+    public Optional<AugmentationSchemaNode> getOriginalDefinition() {
+        return Optional.ofNullable(this.original);
     }
 
     @Override
-    public Optional<RevisionAwareXPath> getWhenCondition() {
-        return Optional.ofNullable(whenCondition);
+    public SchemaPath getTargetPath() {
+        return argument().asSchemaPath();
     }
 
     @Override
-    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return unknownNodes;
+    public int flags() {
+        return flags;
     }
 
     @Override
     public URI getNamespace() {
-        return namespace;
-    }
-
-    @Override
-    public Set<ActionDefinition> getActions() {
-        return actions;
-    }
-
-    @Override
-    public Set<NotificationDefinition> getNotifications() {
-        return notifications;
+        return rootModuleQName.getNamespace();
     }
 
     @Override
     public Optional<Revision> getRevision() {
-        return Optional.ofNullable(revision);
-    }
-
-    @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;
-    }
-
-    @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());
+        return rootModuleQName.getRevision();
     }
 
     @Override
     public String toString() {
-        return AugmentEffectiveStatementImpl.class.getSimpleName() + "[" + "targetPath=" + targetPath + ", when="
-                + whenCondition + "]";
+        return AugmentEffectiveStatementImpl.class.getSimpleName() + "[" + "targetPath=" + getTargetPath() + ", when="
+                + getWhenCondition() + "]";
     }
+
 }