yang.data.impl.schema.tree clean-up 89/33489/3
authorStephen Kitt <skitt@redhat.com>
Mon, 25 Jan 2016 16:32:41 +0000 (17:32 +0100)
committerGerrit Code Review <gerrit@opendaylight.org>
Sat, 30 Jan 2016 11:43:31 +0000 (11:43 +0000)
* Propagate @Nonnull and @Nullable declarations.
* Suppress unused warnings for AbstractCursor's closed field.
* Remove redundant generic type declarations.
* In AbstractDataTreeCandidateNode, make sure that either newData or
  oldData is not null (or both).
* Remove CaseEnforcer::enforceOnTreeNode() which is unused.
* Remove unnecessary semi-colons in MandatoryLeafEnforcer.
* Remove MinMaxElementsValidation::checkOriginalPresent() which is
  unused.
* SchemaAwareApplyOperation::checkConflicting indicates its result
  using an exception, so drop the return value which is always true
  (this method isn't used anywhere else in Boron).
* SchemaAwareApplyOperation::checkNotConflicting is static, so its
  final modifier is redundant.

Change-Id: I7f1ebe53753edd0b0ec5c333ac0cc2850c959f15
Signed-off-by: Stephen Kitt <skitt@redhat.com>
28 files changed:
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractCursor.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractDataNodeContainerModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractDataTreeCandidateNode.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractDataTreeTip.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractLeafCandidateNode.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractModifiedNodeBasedCandidateNode.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractWriteCandidate.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/CaseEnforcer.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/DeleteLeafCandidateNode.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTree.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeCandidate.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeModification.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeModificationCursor.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeSnapshot.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeSnapshotCursor.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MandatoryLeafEnforcer.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MinMaxElementsValidation.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ModificationApplyOperation.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ModifiedNode.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/NoopDataTreeCandidate.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/RecursiveDeleteCandidateNode.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/RecursiveReplaceCandidateNode.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/RecursiveUnmodifiedCandidateNode.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/RecursiveWriteCandidateNode.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/SchemaAwareApplyOperation.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/StructuralContainerModificationStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/UnmodifiedLeafCandidateNode.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/WriteLeafCandidateNode.java

index 0eb71bd2ad2688be52e3890be78712831961e4e9..cf57f4051e013d03f096086b9e79a8ba317bd58f 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 import com.google.common.base.Preconditions;
 import java.util.Arrays;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshotCursor;
@@ -20,6 +21,8 @@ abstract class AbstractCursor<T extends AbstractCursorAware> implements DataTree
             AtomicIntegerFieldUpdater.newUpdater(AbstractCursor.class, "closed");
     private final YangInstanceIdentifier rootPath;
     private final T parent;
+    // closed isn't unused, it's updated by CLOSED_UPDATER but data-flow analysers can't see that
+    @SuppressWarnings("unused")
     private volatile int closed;
 
     AbstractCursor(final T parent, final YangInstanceIdentifier rootPath) {
@@ -41,7 +44,7 @@ abstract class AbstractCursor<T extends AbstractCursorAware> implements DataTree
     }
 
     @Override
-    public final void enter(final PathArgument... path) {
+    public final void enter(@Nonnull final PathArgument... path) {
         enter(Arrays.asList(path));
     }
 
index f27477b78b1e2de1347cbdfeef03e59109cfdd65..84a7b23c27da6da9d64eb527974dfdf9f301014f 100644 (file)
@@ -14,6 +14,7 @@ import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 import com.google.common.util.concurrent.UncheckedExecutionException;
 import java.util.concurrent.ExecutionException;
+import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -36,7 +37,7 @@ abstract class AbstractDataNodeContainerModificationStrategy<T extends DataNodeC
     private final LoadingCache<PathArgument, ModificationApplyOperation> childCache = CacheBuilder.newBuilder()
             .build(new CacheLoader<PathArgument, ModificationApplyOperation>() {
                 @Override
-                public ModificationApplyOperation load(final PathArgument key) {
+                public ModificationApplyOperation load(@Nonnull final PathArgument key) {
                     if (key instanceof AugmentationIdentifier && schema instanceof AugmentationTarget) {
                         return SchemaAwareApplyOperation.from(schema, (AugmentationTarget) schema, (AugmentationIdentifier) key, treeType);
                     }
@@ -62,7 +63,7 @@ abstract class AbstractDataNodeContainerModificationStrategy<T extends DataNodeC
     @Override
     public final Optional<ModificationApplyOperation> getChild(final PathArgument identifier) {
         try {
-            return Optional.<ModificationApplyOperation> fromNullable(childCache.get(identifier));
+            return Optional.fromNullable(childCache.get(identifier));
         } catch (ExecutionException | UncheckedExecutionException e) {
             LOG.trace("Child {} not present in container schema {} children {}", identifier, this, schema.getChildNodes(), e.getCause());
             return Optional.absent();
index 57c18968ad8f410ae8b41785376daa116870d388..10f12cf359a74d4502afa13e8794a20046725168 100644 (file)
@@ -13,6 +13,8 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.Collections2;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -65,6 +67,8 @@ abstract class AbstractDataTreeCandidateNode implements DataTreeCandidateNode {
 
     static Collection<DataTreeCandidateNode> deltaChildren(@Nullable final NormalizedNodeContainer<?, PathArgument, NormalizedNode<?, ?>> oldData,
             @Nullable final NormalizedNodeContainer<?, PathArgument, NormalizedNode<?, ?>> newData) {
+        Preconditions.checkArgument(newData != null || oldData != null,
+                "No old or new data, modification type should be NONE and deltaChildren() mustn't be called.");
         if (newData == null) {
             return Collections2.transform(oldData.getValue(), TO_DELETED_NODE);
         }
@@ -117,6 +121,7 @@ abstract class AbstractDataTreeCandidateNode implements DataTreeCandidateNode {
     }
 
     @Override
+    @Nonnull
     public final PathArgument getIdentifier() {
         return data.getIdentifier();
     }
index 76e41886ebd062324799086762e8f2c11bc7be93..973c6fa0b072bb4488c83d6b3f494470f3a59152 100644 (file)
@@ -52,7 +52,7 @@ abstract class AbstractDataTreeTip implements DataTreeTip {
         }
 
         final Optional<TreeNode> newRoot = m.getStrategy().apply(m.getRootModification(),
-            Optional.<TreeNode>of(currentRoot), m.getVersion());
+            Optional.of(currentRoot), m.getVersion());
         Preconditions.checkState(newRoot.isPresent(), "Apply strategy failed to produce root node for modification %s", modification);
         return new InMemoryDataTreeCandidate(PUBLIC_ROOT_PATH, root, currentRoot, newRoot.get());
     }
index 18076396165029ec0aa1d9a6a7a6351dc8705cd5..5e9a6766c73e4e5ee705a4c05c3ce879907d71f9 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import java.util.Collection;
 import java.util.Collections;
+import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
@@ -32,6 +33,7 @@ abstract class AbstractLeafCandidateNode implements DataTreeCandidateNode {
     }
 
     @Override
+    @Nonnull
     public final PathArgument getIdentifier() {
         return data.getIdentifier();
     }
index 876b2855a334456065121cda9d3fcab55363aa98..79575f88e707d6ae26a20bfd8b91e947b1d7ed03 100644 (file)
@@ -13,6 +13,7 @@ import com.google.common.base.Verify;
 import com.google.common.collect.Collections2;
 import java.util.Collection;
 import java.util.Collections;
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -82,6 +83,7 @@ abstract class AbstractModifiedNodeBasedCandidateNode implements DataTreeCandida
     }
 
     @Override
+    @Nonnull
     public Collection<DataTreeCandidateNode> getChildNodes() {
         switch (mod.getModificationType()) {
         case APPEARED:
@@ -116,6 +118,7 @@ abstract class AbstractModifiedNodeBasedCandidateNode implements DataTreeCandida
     }
 
     @Override
+    @Nonnull
     public ModificationType getModificationType() {
         return Verify.verifyNotNull(mod.getModificationType(), "Node %s does not have resolved modification type", mod);
     }
@@ -129,11 +132,13 @@ abstract class AbstractModifiedNodeBasedCandidateNode implements DataTreeCandida
     }
 
     @Override
+    @Nonnull
     public final Optional<NormalizedNode<?, ?>> getDataAfter() {
         return optionalData(newMeta);
     }
 
     @Override
+    @Nonnull
     public final Optional<NormalizedNode<?, ?>> getDataBefore() {
         return optionalData(oldMeta);
     }
@@ -178,6 +183,7 @@ abstract class AbstractModifiedNodeBasedCandidateNode implements DataTreeCandida
         }
 
         @Override
+        @Nonnull
         public PathArgument getIdentifier() {
             return getMod().getIdentifier();
         }
index f2f5f82e308285a584006ef8f63d20a5c212b5c6..59a4caabab4e4c1221c53a247e925c48dbeb3b0d 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
+import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType;
 
@@ -16,6 +17,7 @@ abstract class AbstractWriteCandidate extends AbstractAvailableLeafCandidateNode
     }
 
     @Override
+    @Nonnull
     public final ModificationType getModificationType() {
         return ModificationType.WRITE;
     }
index 87a7f786f27905b84b5b2bc0f32f0401c5bf6937..e0e3b6443660b5fad65ec0aa566fd28cdb9110ea 100644 (file)
@@ -17,7 +17,6 @@ import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 
@@ -52,10 +51,6 @@ final class CaseEnforcer implements Immutable {
         return children.keySet();
     }
 
-    void enforceOnTreeNode(final TreeNode tree) {
-        enforcer.enforceOnTreeNode(tree);
-    }
-
     void enforceOnTreeNode(final NormalizedNode<?, ?> normalizedNode) {
         enforcer.enforceOnTreeNode(normalizedNode);
     }
index 2fe014caef52bbc4538263425640379fde97ca99..4636464600b44cedae8b85f41c834adfaff099b6 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
+import javax.annotation.Nonnull;
 import com.google.common.base.Optional;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType;
@@ -17,16 +18,19 @@ final class DeleteLeafCandidateNode extends AbstractLeafCandidateNode {
     }
 
     @Override
+    @Nonnull
     public ModificationType getModificationType() {
         return ModificationType.DELETE;
     }
 
     @Override
+    @Nonnull
     public Optional<NormalizedNode<?, ?>> getDataAfter() {
         return Optional.absent();
     }
 
     @Override
+    @Nonnull
     public Optional<NormalizedNode<?, ?>> getDataBefore() {
         return dataOptional();
     }
index 13070428ec896c1722f01454bdd2841a4b25fcab..95165371c32c4491838da01c2d25cf51ce54277d 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
+import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
@@ -135,6 +136,7 @@ final class InMemoryDataTree extends AbstractDataTreeTip implements TipProducing
     }
 
     @Override
+    @Nonnull
     protected TreeNode getTipRoot() {
         return state.getRoot();
     }
index c52c4e9cf9c04743c4b1e6544b6ebc57bd4c7473..ccb6cf3c101a4c6ed102a7140771b0b17b5f12c2 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
+import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
@@ -20,6 +21,7 @@ final class InMemoryDataTreeCandidate extends AbstractDataTreeCandidate {
         }
 
         @Override
+        @Nonnull
         public PathArgument getIdentifier() {
             throw new IllegalStateException("Attempted to get identifier of the root node");
         }
@@ -34,6 +36,7 @@ final class InMemoryDataTreeCandidate extends AbstractDataTreeCandidate {
     }
 
     @Override
+    @Nonnull
     protected TreeNode getTipRoot() {
         return root.getNewMeta();
     }
index cf9b2c3377c92f46daf21b8361bccd345e603335..0a137ab3b15eec6f97d7a2ea5dee0c22266c9088 100644 (file)
@@ -12,6 +12,7 @@ import com.google.common.base.Preconditions;
 import java.util.Collection;
 import java.util.Map.Entry;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
@@ -242,7 +243,7 @@ final class InMemoryDataTreeModification extends AbstractCursorAware implements
     }
 
     @Override
-    public void applyToCursor(final DataTreeModificationCursor cursor) {
+    public void applyToCursor(@Nonnull final DataTreeModificationCursor cursor) {
         for (final ModifiedNode child : rootNode.getChildren()) {
             applyNode(cursor, child);
         }
@@ -265,7 +266,7 @@ final class InMemoryDataTreeModification extends AbstractCursorAware implements
     }
 
     @Override
-    public DataTreeModificationCursor createCursor(final YangInstanceIdentifier path) {
+    public DataTreeModificationCursor createCursor(@Nonnull final YangInstanceIdentifier path) {
         final OperationWithModification op = resolveModificationFor(path);
         return openCursor(new InMemoryDataTreeModificationCursor(this, path, op));
     }
index f837ac8d5148f3dabbbe754222cbe2b545177996..26b484cd43a8d10ece6b04ea36f649c66afc3550 100644 (file)
@@ -14,6 +14,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Deque;
 import java.util.Iterator;
+import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -56,12 +57,12 @@ final class InMemoryDataTreeModificationCursor extends AbstractCursor<InMemoryDa
     }
 
     @Override
-    public void enter(final PathArgument child) {
+    public void enter(@Nonnull final PathArgument child) {
         stack.push(resolveChildModification(child));
     }
 
     @Override
-    public void enter(final Iterable<PathArgument> path) {
+    public void enter(@Nonnull final Iterable<PathArgument> path) {
         int depth = 0;
         for (PathArgument child : path) {
             try {
@@ -88,7 +89,7 @@ final class InMemoryDataTreeModificationCursor extends AbstractCursor<InMemoryDa
     }
 
     @Override
-    public Optional<NormalizedNode<?, ?>> readNode(final PathArgument child) {
+    public Optional<NormalizedNode<?, ?>> readNode(@Nonnull final PathArgument child) {
         return stack.peek().read(child, getParent().getVersion());
     }
 
index c4cec22944fd0a4fd8bb2c28d12f06b9b4505d4b..cb0c316bb375341955f80545f65daf98db6614dd 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
+import javax.annotation.Nonnull;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -49,7 +50,7 @@ final class InMemoryDataTreeSnapshot extends AbstractCursorAware implements Curs
     }
 
     @Override
-    public DataTreeSnapshotCursor createCursor(final YangInstanceIdentifier path) {
+    public DataTreeSnapshotCursor createCursor(@Nonnull final YangInstanceIdentifier path) {
         final Optional<NormalizedNode<?, ?>> maybeRoot = NormalizedNodes.findNode(rootNode.getData(), path);
         if (!maybeRoot.isPresent()) {
             return null;
index cb1faa3048d96c2ab62b2f7c91ff8cf9ba3fc4c5..2800a5de402e0c150f822fb0c3891bcd2d4c1834 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import java.util.ArrayDeque;
 import java.util.Deque;
+import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -26,7 +27,7 @@ final class InMemoryDataTreeSnapshotCursor extends AbstractCursor<InMemoryDataTr
     }
 
     @Override
-    public void enter(final PathArgument child) {
+    public void enter(@Nonnull final PathArgument child) {
         final Optional<NormalizedNode<?, ?>> maybeChildNode = NormalizedNodes.getDirectChild(stack.peek(), child);
         Preconditions.checkArgument(maybeChildNode.isPresent(), "Child %s not found", child);
 
@@ -36,7 +37,7 @@ final class InMemoryDataTreeSnapshotCursor extends AbstractCursor<InMemoryDataTr
     }
 
     @Override
-    public void enter(final Iterable<PathArgument> path) {
+    public void enter(@Nonnull final Iterable<PathArgument> path) {
         final Optional<NormalizedNode<?, ?>> maybeChildNode = NormalizedNodes.findNode(stack.peek(), path);
         Preconditions.checkArgument(maybeChildNode.isPresent(), "Child %s not found", path);
 
@@ -69,7 +70,7 @@ final class InMemoryDataTreeSnapshotCursor extends AbstractCursor<InMemoryDataTr
     }
 
     @Override
-    public Optional<NormalizedNode<?, ?>> readNode(final PathArgument child) {
+    public Optional<NormalizedNode<?, ?>> readNode(@Nonnull final PathArgument child) {
         return NormalizedNodes.findNode(stack.peek(), child);
     }
 }
index 94af9b3507ab4d9a5f9a9f9c478bdb81aabf5bf3..5bce99c4cb2f892aa393d50c6a6626aab8b1e59d 100644 (file)
@@ -38,7 +38,8 @@ abstract class MandatoryLeafEnforcer implements Immutable {
         protected void enforceOnTreeNode(final NormalizedNode<?, ?> normalizedNode) {
             // Intentional no-op
         }
-    };
+    }
+
     private static final class Strict extends MandatoryLeafEnforcer {
         private final Collection<YangInstanceIdentifier> mandatoryNodes;
 
@@ -59,7 +60,7 @@ abstract class MandatoryLeafEnforcer implements Immutable {
                         data.getIdentifier(), id);
             }
         }
-    };
+    }
 
     private static final Logger LOG = LoggerFactory.getLogger(MandatoryLeafEnforcer.class);
     private static final MandatoryLeafEnforcer NOOP_ENFORCER = new NoOp();
index 032e1d8f450ca4d171bde31e603a11e7f24b2a11..14c08f0be9e96dc84cb48ca020eeeeae4ddddf5a 100644 (file)
@@ -100,10 +100,6 @@ final class MinMaxElementsValidation extends SchemaAwareApplyOperation {
                 value.getClass()));
     }
 
-    private static boolean checkOriginalPresent(ModifiedNode child) {
-        return child.getOriginal().isPresent();
-    }
-
     @Override
     protected void checkTouchApplicable(final YangInstanceIdentifier path, final NodeModification modification,
             final Optional<TreeNode> current, final Version version) throws DataValidationFailedException {
index 83c9b6d0411c5146ba156a03a9f7376e9ebebffa..a960d284be981d9a962aa4dea018a71487b1b799 100644 (file)
@@ -29,7 +29,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version;
  * Implementations MUST expose all nested suboperations which operates on child
  * nodes expose via {@link #getChild(PathArgument)} method.
  * <li>Same suboperations SHOULD be used when invoked via
- * {@link #apply(ModifiedNode, Optional)} if applicable.
+ * {@link #apply(ModifiedNode, Optional, Version)} if applicable.
  *
  *
  * Hierarchical composite operation which is responsible for applying
@@ -50,22 +50,19 @@ abstract class ModificationApplyOperation implements StoreTreeNode<ModificationA
      * @throws IllegalArgumentException
      *             If it is not possible to apply Operation on provided Metadata
      *             node
-     * @return new {@link StoreMetadataNode} if operation resulted in updating
+     * @return new {@link TreeNode} if operation resulted in updating
      *         node, {@link Optional#absent()} if {@link ModifiedNode}
      *         resulted in deletion of this node.
      */
     abstract Optional<TreeNode> apply(ModifiedNode modification, Optional<TreeNode> storeMeta, Version version);
 
     /**
-     *
      * Checks if provided node modification could be applied to current metadata node.
      *
      * @param modification Modification
      * @param current Metadata Node to which modification should be applied
      * @param version
-     * @return true if modification is applicable
-     *         false if modification is no applicable
-     * @throws DataValidationFailedException
+     * @throws DataValidationFailedException if the modification is not applicable
      */
    abstract void checkApplicable(YangInstanceIdentifier path, NodeModification modification, Optional<TreeNode> current, Version version) throws DataValidationFailedException;
 
index 49a7873ac7b27e3290b20b0bdb82b5abf8b81b65..26261bdfba9a0913622a73dfc7f28550cd5b32ca 100644 (file)
@@ -13,6 +13,7 @@ import com.google.common.base.Predicate;
 import java.util.Collection;
 import java.util.Map;
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.annotation.concurrent.NotThreadSafe;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -27,8 +28,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version;
  * Node Modification Node and Tree
  *
  * Tree which structurally resembles data tree and captures client modifications to the data store tree. This tree is
- * lazily created and populated via {@link #modifyChild(PathArgument)} and {@link TreeNode} which represents original
- * state as tracked by {@link #getOriginal()}.
+ * lazily created and populated via {@link #modifyChild(PathArgument, ModificationApplyOperation, Version)} and
+ * {@link TreeNode} which represents original state as tracked by {@link #getOriginal()}.
  *
  * The contract is that the state information exposed here preserves the temporal ordering of whatever modifications
  * were executed. A child's effects pertain to data node as modified by its ancestors. This means that in order to
@@ -39,7 +40,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version;
 final class ModifiedNode extends NodeModification implements StoreTreeNode<ModifiedNode> {
     static final Predicate<ModifiedNode> IS_TERMINAL_PREDICATE = new Predicate<ModifiedNode>() {
         @Override
-        public boolean apply(@Nonnull final ModifiedNode input) {
+        public boolean apply(@Nullable final ModifiedNode input) {
             Preconditions.checkNotNull(input);
             switch (input.getOperation()) {
             case DELETE:
@@ -114,7 +115,7 @@ final class ModifiedNode extends NodeModification implements StoreTreeNode<Modif
      */
     @Override
     public Optional<ModifiedNode> getChild(final PathArgument child) {
-        return Optional.<ModifiedNode> fromNullable(children.get(child));
+        return Optional.fromNullable(children.get(child));
     }
 
     private Optional<TreeNode> metadataFromSnapshot(@Nonnull final PathArgument child) {
index 6931d11fb885c7184d7d43e09096720822bd0f98..608d1d9273b271c9b97d4e3cfd1039746fda6ce0 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import java.util.Collection;
 import java.util.Collections;
+import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -26,6 +27,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode;
 final class NoopDataTreeCandidate extends AbstractDataTreeCandidate {
     private static final DataTreeCandidateNode ROOT = new DataTreeCandidateNode() {
         @Override
+        @Nonnull
         public ModificationType getModificationType() {
             return ModificationType.UNMODIFIED;
         }
@@ -36,16 +38,19 @@ final class NoopDataTreeCandidate extends AbstractDataTreeCandidate {
         }
 
         @Override
+        @Nonnull
         public PathArgument getIdentifier() {
             throw new IllegalStateException("Attempted to read identifier of the no-operation change");
         }
 
         @Override
+        @Nonnull
         public Optional<NormalizedNode<?, ?>> getDataAfter() {
             return Optional.absent();
         }
 
         @Override
+        @Nonnull
         public Optional<NormalizedNode<?, ?>> getDataBefore() {
             return Optional.absent();
         }
@@ -69,6 +74,7 @@ final class NoopDataTreeCandidate extends AbstractDataTreeCandidate {
     }
 
     @Override
+    @Nonnull
     protected TreeNode getTipRoot() {
         return afterRoot;
     }
index 134f5650fcb20a079332056b3f98f3a354b474cb..df8010bdc6b56679026ab0f45cd8b195ea7403ea 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
+import javax.annotation.Nonnull;
 import com.google.common.base.Optional;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -20,6 +21,7 @@ final class RecursiveDeleteCandidateNode extends AbstractRecursiveCandidateNode
     }
 
     @Override
+    @Nonnull
     public ModificationType getModificationType() {
         return ModificationType.DELETE;
     }
@@ -31,6 +33,7 @@ final class RecursiveDeleteCandidateNode extends AbstractRecursiveCandidateNode
     }
 
     @Override
+    @Nonnull
     public Optional<NormalizedNode<?, ?>> getDataAfter() {
         return Optional.absent();
     }
index 1aff42b0a0b2ebbf496153453b43eb6c2ba34639..6538c0a1cee24132fc48597ccc42126be7bd500a 100644 (file)
@@ -11,6 +11,7 @@ package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import java.util.Collection;
+import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer;
@@ -27,6 +28,7 @@ final class RecursiveReplaceCandidateNode extends AbstractDataTreeCandidateNode
     }
 
     @Override
+    @Nonnull
     public ModificationType getModificationType() {
         return ModificationType.WRITE;
     }
@@ -47,6 +49,7 @@ final class RecursiveReplaceCandidateNode extends AbstractDataTreeCandidateNode
     }
 
     @Override
+    @Nonnull
     public Collection<DataTreeCandidateNode> getChildNodes() {
         return deltaChildren(oldData, getData());
     }
index 70fe9c447dc0b5278db124f469e05587c09c2b47..be663089968fdfe6a689df3fab717984f40e09f7 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
+import javax.annotation.Nonnull;
 import com.google.common.base.Optional;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -20,6 +21,7 @@ final class RecursiveUnmodifiedCandidateNode extends AbstractRecursiveCandidateN
     }
 
     @Override
+    @Nonnull
     public ModificationType getModificationType() {
         return ModificationType.UNMODIFIED;
     }
index 1d9d56e54acb1c20a82bfe23b46b0db2c640d647..4e6b421e8b36231e3940345f23c6136bb8692c9d 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
+import javax.annotation.Nonnull;
 import com.google.common.base.Optional;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -21,6 +22,7 @@ final class RecursiveWriteCandidateNode extends AbstractRecursiveCandidateNode {
     }
 
     @Override
+    @Nonnull
     public ModificationType getModificationType() {
         return ModificationType.WRITE;
     }
@@ -42,6 +44,7 @@ final class RecursiveWriteCandidateNode extends AbstractRecursiveCandidateNode {
     }
 
     @Override
+    @Nonnull
     public Optional<NormalizedNode<?, ?>> getDataBefore() {
         return Optional.absent();
     }
index 22a056fca3c0fa4f33854103864cf76135a82891..ea40848084745f448bb5a739b10edbb36170050f 100644 (file)
@@ -71,11 +71,11 @@ abstract class SchemaAwareApplyOperation extends ModificationApplyOperation {
         return null;
     }
 
-    public static boolean checkConflicting(final YangInstanceIdentifier path, final boolean condition, final String message) throws ConflictingModificationAppliedException {
-        if(!condition) {
+    public static void checkConflicting(final YangInstanceIdentifier path, final boolean condition,
+                                        final String message) throws ConflictingModificationAppliedException {
+        if (!condition) {
             throw new ConflictingModificationAppliedException(path, message);
         }
-        return condition;
     }
 
     private static SchemaAwareApplyOperation fromListSchemaNode(final ListSchemaNode schemaNode, final TreeType treeType) {
@@ -101,7 +101,7 @@ abstract class SchemaAwareApplyOperation extends ModificationApplyOperation {
         return MinMaxElementsValidation.from(op, schemaNode);
     }
 
-    protected static final void checkNotConflicting(final YangInstanceIdentifier path, final TreeNode original, final TreeNode current) throws ConflictingModificationAppliedException {
+    protected static void checkNotConflicting(final YangInstanceIdentifier path, final TreeNode original, final TreeNode current) throws ConflictingModificationAppliedException {
         checkConflicting(path, original.getVersion().equals(current.getVersion()),
                 "Node was replaced by other transaction.");
         checkConflicting(path, original.getSubtreeVersion().equals(current.getSubtreeVersion()),
@@ -255,7 +255,8 @@ abstract class SchemaAwareApplyOperation extends ModificationApplyOperation {
      * @param modification Node modification which should be applied.
      * @param current Current state of data tree
      * @throws ConflictingModificationAppliedException If subtree was changed in conflicting way
-     * @throws IncorrectDataStructureException If subtree modification is not applicable (e.g. leaf node).
+     * @throws org.opendaylight.yangtools.yang.data.api.schema.tree.IncorrectDataStructureException If subtree
+     * modification is not applicable (e.g. leaf node).
      */
     protected abstract void checkTouchApplicable(YangInstanceIdentifier path, NodeModification modification,
             Optional<TreeNode> current, Version version) throws DataValidationFailedException;
@@ -266,7 +267,7 @@ abstract class SchemaAwareApplyOperation extends ModificationApplyOperation {
      *
      * @param treeType Tree Type
      * @param node Schema node
-     * @return
+     * @return {@code true} if the node matches the tree type, {@code false} otherwise.
      */
     static boolean belongsToTree(final TreeType treeType, final DataSchemaNode node) {
         return treeType == TreeType.OPERATIONAL || node.isConfiguration();
index 55784e06b4577144d873f446cb6d48accfa5df5e..f13c25b7cf0137f162a48ccaa9181a7360679e1a 100644 (file)
@@ -32,7 +32,8 @@ import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
  */
 final class StructuralContainerModificationStrategy extends ModificationApplyOperation {
     /**
-     * Fake TreeNode version used in {@link #checkApplicable(YangInstanceIdentifier, NodeModification, Optional)}.
+     * Fake TreeNode version used in
+     * {@link #checkApplicable(YangInstanceIdentifier, NodeModification, Optional, Version)}.
      * It is okay to use a global constant, as the delegate will ignore it anyway. For
      * {@link #apply(ModifiedNode, Optional, Version)} we will use the appropriate version as provided to us.
      */
index fb07d02df8f9e3aef4947e5574ce94888ea15ba3..d845f5fb4dcac033a855b06d5fc7756dd5a35b22 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
+import javax.annotation.Nonnull;
 import com.google.common.base.Optional;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType;
@@ -17,6 +18,7 @@ final class UnmodifiedLeafCandidateNode extends AbstractAvailableLeafCandidateNo
     }
 
     @Override
+    @Nonnull
     public ModificationType getModificationType() {
         return ModificationType.UNMODIFIED;
     }
index 137a292af02a4f9ac69ef28688aa522253e08c6a..57f2056f943c37a4956564ccc73a6834708a34b5 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
+import javax.annotation.Nonnull;
 import com.google.common.base.Optional;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
@@ -16,6 +17,7 @@ final class WriteLeafCandidateNode extends AbstractWriteCandidate {
     }
 
     @Override
+    @Nonnull
     public Optional<NormalizedNode<?, ?>> getDataBefore() {
         return Optional.absent();
     }