From: Robert Varga Date: Wed, 18 Mar 2020 14:10:37 +0000 (+0100) Subject: Fix InstanceIdentifier.getAncestor() implementations X-Git-Tag: v8.0.0~26 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=yangtools.git;a=commitdiff_plain;h=ebaa7f6a56786abd8865b01acc56054d907dcb50 Fix InstanceIdentifier.getAncestor() implementations SpotBugs is touchy about nulls here, all of which are guaranteed to work out due to verification logic -- but that is not quite obvious. Fix this up by adding explicit verifies -- which do not hurn that much. Change-Id: I92a120c9f8d4fced2bf3e8a859772cf6d41798df Signed-off-by: Robert Varga --- diff --git a/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/FixedYangInstanceIdentifier.java b/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/FixedYangInstanceIdentifier.java index bf6ba5a413..3d4fd97755 100644 --- a/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/FixedYangInstanceIdentifier.java +++ b/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/FixedYangInstanceIdentifier.java @@ -78,7 +78,7 @@ final class FixedYangInstanceIdentifier extends YangInstanceIdentifier implement } if (depth == path.size() - 1) { // Use the parent cache - return getParent(); + return verifyNotNull(getParent()); } return YangInstanceIdentifier.create(path.subList(0, depth)); } diff --git a/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/StackedYangInstanceIdentifier.java b/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/StackedYangInstanceIdentifier.java index 955ef2543e..c8ff903394 100644 --- a/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/StackedYangInstanceIdentifier.java +++ b/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/StackedYangInstanceIdentifier.java @@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.data.api; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Verify.verify; +import static com.google.common.base.Verify.verifyNotNull; import static java.util.Objects.requireNonNull; import com.google.common.collect.Iterables; @@ -101,7 +102,7 @@ final class StackedYangInstanceIdentifier extends YangInstanceIdentifier impleme final int toWalk = ourDepth - depth; YangInstanceIdentifier result = this; for (int i = 0; i < toWalk; ++i) { - result = result.getParent(); + result = verifyNotNull(result.getParent()); } return result; diff --git a/data/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/PathArgumentListTest.java b/data/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/PathArgumentListTest.java index e2298784bb..4c08bd084f 100644 --- a/data/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/PathArgumentListTest.java +++ b/data/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/PathArgumentListTest.java @@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.data.api; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; @@ -111,7 +112,10 @@ public class PathArgumentListTest { final YangInstanceIdentifier yangInstanceIdentifier1 = stackedYangInstanceIdentifier.getAncestor(4); assertEquals(stackedYangInstanceIdentifier, stackedYangInstanceIdentifierClone); assertEquals(stackedReversePathArguments, yangInstanceIdentifier1.getReversePathArguments()); + assertSame(stackedYangInstanceIdentifier.getParent(), stackedYangInstanceIdentifier.getAncestor(3)); - assertThrows(IllegalArgumentException.class, () -> stackedYangInstanceIdentifier.getAncestor(12)); + final IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class, + () -> stackedYangInstanceIdentifier.getAncestor(12)); + assertEquals("Depth 12 exceeds maximum depth 4", thrown.getMessage()); } }