From 541932e3a97f3f461dc806e46f8c2bd21caf2853 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 13 Oct 2017 12:42:03 +0200 Subject: [PATCH] BUG-9265: Switch empty type mapping from Void to Empty Using Void means NormalizedNode.getValue() has to be nullable, which wreaks havoc to a lot of places. Switch mapping to Empty, which is a singleton dedicated to representing this type. This flushes out quite a few of null violations, which are also fixed up. Change-Id: I4de3afed3d641eda292fdd4116497f3f22a0d770 Signed-off-by: Robert Varga --- .../yang/data/api/codec/EmptyCodec.java | 7 +++--- .../yang/data/api/codec/StringCodec.java | 5 ++-- .../yang/data/api/schema/AnyXmlNode.java | 7 ++---- .../data/api/schema/AugmentationNode.java | 5 ++-- .../data/api/schema/DataContainerChild.java | 3 ++- .../data/api/schema/DataContainerNode.java | 3 ++- .../yang/data/api/schema/LeafNode.java | 3 ++- .../data/api/schema/LeafSetEntryNode.java | 3 ++- .../yang/data/api/schema/LeafSetNode.java | 6 ++--- .../yang/data/api/schema/NormalizedNode.java | 5 ++-- .../yang/data/api/schema/ValueNode.java | 3 ++- .../yang/data/codec/gson/EmptyJSONCodec.java | 13 +++++----- .../gson/JsonStreamToNormalizedNodeTest.java | 3 ++- .../gson/NormalizedNodeToJsonStreamTest.java | 3 ++- .../yang/data/codec/xml/EmptyXmlCodec.java | 17 +++++++------ .../data/impl/codec/EmptyStringCodec.java | 16 ++++++------ .../data/impl/codec/StringStringCodec.java | 10 +++----- ...bstractImmutableNormalizedNodeBuilder.java | 17 ++++++++----- .../AbstractImmutableNormalizedValueNode.java | 25 ++++++------------- .../impl/codecs/EmptyCodecStringTest.java | 6 ++--- .../impl/codecs/StringCodecStringTest.java | 2 -- .../impl/codecs/UnionCodecStringTest.java | 4 +-- .../impl/schema/InstanceIdToNodesTest.java | 18 +++++++------ ...tImmutableNormalizedValueAttrNodeTest.java | 15 +---------- .../data/util/SimpleNodeDataWithSchema.java | 5 ++-- 25 files changed, 97 insertions(+), 107 deletions(-) diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/EmptyCodec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/EmptyCodec.java index cedd779713..1ca2a882e8 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/EmptyCodec.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/EmptyCodec.java @@ -8,11 +8,12 @@ package org.opendaylight.yangtools.yang.data.api.codec; import org.opendaylight.yangtools.concepts.Codec; +import org.opendaylight.yangtools.yang.common.Empty; -public interface EmptyCodec extends Codec { +public interface EmptyCodec extends Codec { @Override - T serialize(Void data); + T serialize(Empty data); @Override - Void deserialize(T data); + Empty deserialize(T data); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/StringCodec.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/StringCodec.java index 365a5069f2..2c4db71299 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/StringCodec.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/StringCodec.java @@ -7,12 +7,13 @@ */ package org.opendaylight.yangtools.yang.data.api.codec; +import javax.annotation.Nonnull; import org.opendaylight.yangtools.concepts.Codec; public interface StringCodec extends Codec { @Override - T serialize(String data); + T serialize(@Nonnull String data); @Override - String deserialize(T data); + String deserialize(@Nonnull T data); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnyXmlNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnyXmlNode.java index a7e4bdcd29..593d6aeec2 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnyXmlNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnyXmlNode.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; +import javax.annotation.Nonnull; import javax.xml.transform.dom.DOMSource; import org.opendaylight.yangtools.yang.data.api.AttributesContainer; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -15,10 +16,6 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent * AN normalizedNode. */ public interface AnyXmlNode extends AttributesContainer, DataContainerChild { - - @Override - NodeIdentifier getIdentifier(); - /** * Return value represented as a DOMSource. Returned source contains top level element * that duplicates the anyxml node. @@ -26,5 +23,5 @@ public interface AnyXmlNode extends AttributesContainer, DataContainerChildaugment * that augment statement must not add multiple nodes from same namespace / module to the target node. * - * @return Identifier which uniquelly identifies augmentation in particular subtree. + * @return Identifier which uniquely identifies augmentation in particular subtree. */ @Override - AugmentationIdentifier getIdentifier(); + @Nonnull AugmentationIdentifier getIdentifier(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerChild.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerChild.java index 993949296a..5d2a788a28 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerChild.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerChild.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; +import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; /** @@ -29,5 +30,5 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum */ public interface DataContainerChild extends NormalizedNode { @Override - K getIdentifier(); + @Nonnull K getIdentifier(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerNode.java index 341c41a5da..df43be8819 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DataContainerNode.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.data.api.schema; import java.util.Collection; +import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; /** @@ -41,5 +42,5 @@ public interface DataContainerNode extends // * @return Iteration of all child nodes */ @Override - Collection> getValue(); + @Nonnull Collection> getValue(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafNode.java index 5ec80151ee..86bebfee51 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafNode.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; +import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.data.api.AttributesContainer; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -27,5 +28,5 @@ public interface LeafNode extends AttributesContainer, DataContainerChild extends AttributesContainer, NormalizedNode * @return {@link NodeWithValue} which identifies this leaf set entry. */ @Override - NodeWithValue getIdentifier(); + @Nonnull NodeWithValue getIdentifier(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafSetNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafSetNode.java index 3b42c44686..77d45199e9 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafSetNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/LeafSetNode.java @@ -20,9 +20,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithV * * @param Type of leaf node values. */ -public interface LeafSetNode extends - MixinNode, // - DataContainerChild>>, // - NormalizedNodeContainer> { +public interface LeafSetNode extends MixinNode, DataContainerChild>>, + NormalizedNodeContainer> { } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNode.java index 700f0f5bc2..72688525ea 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNode.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; +import javax.annotation.Nonnull; import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; @@ -35,12 +36,12 @@ public interface NormalizedNode extends Identifiable< * @return Node identifier, non-null. */ @Override - K getIdentifier(); + @Nonnull K getIdentifier(); /** * Value of node. * * @return Value of the node, may be null. */ - V getValue(); + @Nonnull V getValue(); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ValueNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ValueNode.java index eb70bfaa98..5edbdcff88 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ValueNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/ValueNode.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.api.schema; +import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; /** @@ -30,5 +31,5 @@ public interface ValueNode extends NormalizedNode { +final class EmptyJSONCodec implements JSONCodec { static final EmptyJSONCodec INSTANCE = new EmptyJSONCodec(); @@ -20,17 +21,17 @@ final class EmptyJSONCodec implements JSONCodec { } @Override - public Class getDataType() { - return Void.class; + public Class getDataType() { + return Empty.class; } @Override - public Void parseValue(final Object ctx, final String input) { - return null; + public Empty parseValue(final Object ctx, final String input) { + return Empty.getInstance(); } @Override - public void writeValue(final JsonWriter ctx, final Void value) throws IOException { + public void writeValue(final JsonWriter ctx, final Empty value) throws IOException { ctx.beginArray(); ctx.value((String) null); ctx.endArray(); diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonStreamToNormalizedNodeTest.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonStreamToNormalizedNodeTest.java index 60cc51d43f..c0599b7b6b 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonStreamToNormalizedNodeTest.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonStreamToNormalizedNodeTest.java @@ -24,6 +24,7 @@ import java.net.URISyntaxException; import java.util.Collections; import org.junit.BeforeClass; import org.junit.Test; +import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -164,7 +165,7 @@ public class JsonStreamToNormalizedNodeTest { final String inputJson = loadTextFile("/complexjson/type-empty.json"); final ContainerNode awaitedStructure = containerBuilder() .withNodeIdentifier(new NodeIdentifier(CONT_1)) - .addChild(leafNode(EMPTY_LEAF, null)) + .addChild(leafNode(EMPTY_LEAF, Empty.getInstance())) .build(); verifyTransformationToNormalizedNode(inputJson, awaitedStructure); diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java index 6dfd0aeef8..2f9fa49d1a 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/NormalizedNodeToJsonStreamTest.java @@ -29,6 +29,7 @@ import java.util.HashSet; import java.util.Iterator; import org.junit.BeforeClass; import org.junit.Test; +import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @@ -297,7 +298,7 @@ public class NormalizedNodeToJsonStreamTest { final StringWriter writer = new StringWriter(); final ContainerNode emptyStructure = Builders.containerBuilder() .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(CONT_1)) - .addChild(ImmutableNodes.leafNode(EMPTY_LEAF, null)).build(); + .addChild(ImmutableNodes.leafNode(EMPTY_LEAF, Empty.getInstance())).build(); final String jsonOutput = normalizedNodeToJsonStreamTransformation(writer, emptyStructure); final JsonObject cont1 = resolveCont1(jsonOutput); final JsonElement emptyObj = cont1.get("empty"); diff --git a/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/EmptyXmlCodec.java b/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/EmptyXmlCodec.java index c55a14f271..f6bbdd0bd0 100644 --- a/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/EmptyXmlCodec.java +++ b/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/EmptyXmlCodec.java @@ -5,14 +5,16 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.yangtools.yang.data.codec.xml; +import static java.util.Objects.requireNonNull; + import javax.xml.namespace.NamespaceContext; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; +import org.opendaylight.yangtools.yang.common.Empty; -final class EmptyXmlCodec implements XmlCodec { +final class EmptyXmlCodec implements XmlCodec { static final EmptyXmlCodec INSTANCE = new EmptyXmlCodec(); @@ -21,17 +23,18 @@ final class EmptyXmlCodec implements XmlCodec { } @Override - public Class getDataType() { - return Void.class; + public Class getDataType() { + return Empty.class; } @Override - public Void parseValue(final NamespaceContext ctx, final String str) { - return null; + public Empty parseValue(final NamespaceContext ctx, final String str) { + return Empty.getInstance(); } @Override - public void writeValue(final XMLStreamWriter ctx, final Void value) throws XMLStreamException { + public void writeValue(final XMLStreamWriter ctx, final Empty value) throws XMLStreamException { + requireNonNull(value); ctx.writeCharacters(""); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/EmptyStringCodec.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/EmptyStringCodec.java index 9d49f6a343..4a62a291fe 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/EmptyStringCodec.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/EmptyStringCodec.java @@ -8,28 +8,30 @@ package org.opendaylight.yangtools.yang.data.impl.codec; import static com.google.common.base.Preconditions.checkArgument; +import static java.util.Objects.requireNonNull; -import com.google.common.base.Strings; import java.util.Optional; +import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.data.api.codec.EmptyCodec; import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition; -final class EmptyStringCodec extends TypeDefinitionAwareCodec implements +final class EmptyStringCodec extends TypeDefinitionAwareCodec implements EmptyCodec { static final EmptyStringCodec INSTANCE = new EmptyStringCodec(); private EmptyStringCodec() { - super(Optional.empty(), Void.class); + super(Optional.empty(), Empty.class); } @Override - public String serialize(final Void data) { + public String serialize(final Empty data) { + requireNonNull(data); return ""; } @Override - public Void deserialize(final String stringRepresentation) { - checkArgument(Strings.isNullOrEmpty(stringRepresentation), "The value must be empty"); - return null; + public Empty deserialize(final String stringRepresentation) { + checkArgument(stringRepresentation.isEmpty(), "The value must be empty"); + return Empty.getInstance(); } } \ No newline at end of file diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/StringStringCodec.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/StringStringCodec.java index 8ee7bb2790..d05f57c5b9 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/StringStringCodec.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/StringStringCodec.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.data.impl.codec; import static com.google.common.base.Preconditions.checkArgument; +import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableRangeSet; @@ -15,7 +16,6 @@ import com.google.common.collect.Range; import com.google.common.collect.RangeSet; import com.google.common.collect.TreeRangeSet; import java.util.Collection; -import java.util.Objects; import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.codec.StringCodec; import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint; @@ -56,17 +56,13 @@ public class StringStringCodec extends TypeDefinitionAwareCodec withValue(final V value) { - this.value = value; + public NormalizedNodeAttrBuilder withValue(final V value) { + this.value = requireNonNull(value); return this; } @Override - public NormalizedNodeAttrBuilder withNodeIdentifier(final I nodeIdentifier) { - this.nodeIdentifier = nodeIdentifier; + public NormalizedNodeAttrBuilder withNodeIdentifier(final I nodeIdentifier) { + this.nodeIdentifier = requireNonNull(nodeIdentifier); return this; } @Override - public NormalizedNodeAttrBuilder withAttributes(final Map attributes) { - this.attributes = attributes; + public NormalizedNodeAttrBuilder withAttributes(final Map attributes) { + this.attributes = requireNonNull(attributes); return this; } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueNode.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueNode.java index a37a44450e..31f8bab90d 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueNode.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueNode.java @@ -7,39 +7,28 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.nodes; -import javax.annotation.Nullable; +import static java.util.Objects.requireNonNull; + +import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public abstract class AbstractImmutableNormalizedValueNode extends AbstractImmutableNormalizedNode { - private static final Logger LOG = LoggerFactory.getLogger(AbstractImmutableNormalizedValueNode.class); - @Nullable + @Nonnull private final V value; - protected AbstractImmutableNormalizedValueNode(final K nodeIdentifier, @Nullable final V value) { + protected AbstractImmutableNormalizedValueNode(final K nodeIdentifier, @Nonnull final V value) { super(nodeIdentifier); - - /* - * Null value is allowed for empty type definition so it should be debug, - * but still we are logging it in case we need to debug missing values. - */ - // FIXME: one we do not map YANG 'void' to java.lang.Void we should be enforcing non-null here - if (value == null) { - LOG.debug("The value of node {} is null", nodeIdentifier.getNodeType()); - } - this.value = value; + this.value = requireNonNull(value); } - @Nullable @Override public final V getValue() { return wrapValue(value); } - @Nullable + @Nonnull protected final V value() { return value; } diff --git a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/EmptyCodecStringTest.java b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/EmptyCodecStringTest.java index fc41d6d8c0..c2f778893c 100644 --- a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/EmptyCodecStringTest.java +++ b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/EmptyCodecStringTest.java @@ -11,6 +11,7 @@ package org.opendaylight.yangtools.yang.data.impl.codecs; import static org.junit.Assert.assertEquals; import org.junit.Test; +import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.data.api.codec.EmptyCodec; import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; @@ -26,7 +27,7 @@ public class EmptyCodecStringTest { public void testSerialize() { EmptyCodec codec = TypeDefinitionAwareCodecTestHelper.getCodec(BaseTypes.emptyType(), EmptyCodec.class); - assertEquals("serialize", "", codec.serialize(null)); + assertEquals("serialize", "", codec.serialize(Empty.getInstance())); } @SuppressWarnings("unchecked") @@ -34,8 +35,7 @@ public class EmptyCodecStringTest { public void testDeserialize() { EmptyCodec codec = TypeDefinitionAwareCodecTestHelper.getCodec(BaseTypes.emptyType(), EmptyCodec.class); - assertEquals("deserialize", null, codec.deserialize("")); - assertEquals("deserialize", null, codec.deserialize(null)); + assertEquals("deserialize", Empty.getInstance(), codec.deserialize("")); TypeDefinitionAwareCodecTestHelper.deserializeWithExpectedIllegalArgEx(codec, "foo"); } diff --git a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/StringCodecStringTest.java b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/StringCodecStringTest.java index a78c05dd94..115080b10f 100644 --- a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/StringCodecStringTest.java +++ b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/StringCodecStringTest.java @@ -29,7 +29,6 @@ public class StringCodecStringTest { assertEquals("serialize", "foo", codec.serialize("foo")); assertEquals("serialize", "", codec.serialize("")); - assertEquals("serialize", "", codec.serialize(null)); } @SuppressWarnings("unchecked") @@ -40,6 +39,5 @@ public class StringCodecStringTest { assertEquals("deserialize", "bar", codec.deserialize("bar")); assertEquals("deserialize", "", codec.deserialize("")); - assertEquals("deserialize", "", codec.deserialize(null)); } } diff --git a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/UnionCodecStringTest.java b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/UnionCodecStringTest.java index 2ec4f16464..a7c762cfd7 100644 --- a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/UnionCodecStringTest.java +++ b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/UnionCodecStringTest.java @@ -14,6 +14,7 @@ import static org.opendaylight.yangtools.yang.data.impl.codecs.TypeDefinitionAwa import static org.opendaylight.yangtools.yang.data.impl.codecs.TypeDefinitionAwareCodecTestHelper.toEnumTypeDefinition; import org.junit.Test; +import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.data.api.codec.UnionCodec; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; @@ -62,8 +63,7 @@ public class UnionCodecStringTest { assertEquals("deserialize", 123, codec.deserialize("123")); assertEquals("deserialize", -123, codec.deserialize("-123")); assertEquals("deserialize", 41234567890L, codec.deserialize("41234567890")); - assertEquals("deserialize", null, codec.deserialize("")); - assertEquals("deserialize", null, codec.deserialize(null)); + assertEquals("deserialize", Empty.getInstance(), codec.deserialize("")); deserializeWithExpectedIllegalArgEx(codec, "enum3"); deserializeWithExpectedIllegalArgEx(codec, "123o"); diff --git a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodesTest.java b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodesTest.java index 91a1436358..6e91d46a49 100644 --- a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodesTest.java +++ b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/InstanceIdToNodesTest.java @@ -67,6 +67,7 @@ public class InstanceIdToNodesTest { @Test public void testInAugment() throws Exception { + final LeafNode leaf = Builders.leafBuilder().withNodeIdentifier(augmentedLeaf).withValue("").build(); final ContainerNode expectedFilter = Builders .containerBuilder() .withNodeIdentifier(rootContainer) @@ -77,11 +78,10 @@ public class InstanceIdToNodesTest { Builders.augmentationBuilder() .withNodeIdentifier(augmentation) .withChild( - Builders.leafBuilder().withNodeIdentifier(augmentedLeaf) - .build()).build()).build()).build(); + leaf).build()).build()).build(); final NormalizedNode filter = ImmutableNodes.fromInstanceId(ctx, - YangInstanceIdentifier.create(rootContainer, outerContainer, augmentation, augmentedLeaf)); + YangInstanceIdentifier.create(rootContainer, outerContainer, augmentation, augmentedLeaf), leaf); assertEquals(expectedFilter, filter); } @@ -107,6 +107,7 @@ public class InstanceIdToNodesTest { @Test public void testListChoice() throws Exception { + final LeafNode leaf = Builders.leafBuilder().withNodeIdentifier(leafFromCase).withValue("").build(); final ContainerNode expectedFilter = Builders .containerBuilder() .withNodeIdentifier(rootContainer) @@ -124,14 +125,14 @@ public class InstanceIdToNodesTest { .withChild( Builders.choiceBuilder() .withNodeIdentifier(choice) - .withChild( - Builders.leafBuilder() - .withNodeIdentifier(leafFromCase) - .build()).build()).build()).build()) + .withChild(leaf) + .build()) + .build()) + .build()) .build(); final NormalizedNode filter = ImmutableNodes.fromInstanceId(ctx, - YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey, choice, leafFromCase)); + YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey, choice, leafFromCase), leaf); assertEquals(expectedFilter, filter); } @@ -157,6 +158,7 @@ public class InstanceIdToNodesTest { .withChild( Builders.leafBuilder() .withNodeIdentifier(leafFromCase) + .withValue("") .build()).build()).build()).build()) .build(); diff --git a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueAttrNodeTest.java b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueAttrNodeTest.java index d27baf80dc..effb1a5448 100644 --- a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueAttrNodeTest.java +++ b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueAttrNodeTest.java @@ -26,14 +26,6 @@ public class AbstractImmutableNormalizedValueAttrNodeTest { // This test is based on using different references; we're testing equals() @SuppressWarnings({"RedundantStringConstructorCall", "EqualsWithItself"}) public void equalsByteTest() { - - LeafNode leafNodeNull = ImmutableNodes.leafNode(LEAF_QNAME, null); - LeafNode equalLeafNodeNull = ImmutableNodes.leafNode(SAME_LEAF_QNAME, null); - - assertTrue(leafNodeNull.equals(leafNodeNull)); - assertTrue(leafNodeNull.equals(equalLeafNodeNull)); - assertTrue(equalLeafNodeNull.equals(leafNodeNull)); - byte[] value = "test".getBytes(); byte[] equalValue = "test".getBytes(); @@ -47,8 +39,7 @@ public class AbstractImmutableNormalizedValueAttrNodeTest { Byte[] value2 = new Byte[] { new Byte("1"), new Byte("2") }; Byte[] equalValue2 = new Byte[] { new Byte("1"), new Byte("2") }; - LeafNode leafNode2 = ImmutableNodes - .leafNode(LEAF_QNAME, value2); + LeafNode leafNode2 = ImmutableNodes.leafNode(LEAF_QNAME, value2); LeafNode equalLeafNode2 = ImmutableNodes.leafNode(SAME_LEAF_QNAME, equalValue2); assertTrue(leafNode2.equals(leafNode2)); @@ -192,10 +183,6 @@ public class AbstractImmutableNormalizedValueAttrNodeTest { assertFalse(leafNode4.equals(leafNode5)); assertFalse(leafNode6.equals(leafNode5)); - LeafNode leafNodeNull = ImmutableNodes.leafNode(SAME_LEAF_QNAME, null); - assertFalse(leafNodeNull.equals(leafNode)); - assertFalse(leafNode.equals(leafNodeNull)); - byte[] byteValue = new byte[] { 1, 1 }; LeafNode byteLeafNode = ImmutableNodes.leafNode(SAME_LEAF_QNAME, byteValue); diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/SimpleNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/SimpleNodeDataWithSchema.java index c7cbfa088d..2fb5f83696 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/SimpleNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/SimpleNodeDataWithSchema.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.data.util; +import static java.util.Objects.requireNonNull; + import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; /** @@ -25,11 +27,10 @@ public abstract class SimpleNodeDataWithSchema extends AbstractNodeDataWithSchem } public void setValue(final Object value) { - this.value = value; + this.value = requireNonNull(value); } public Object getValue() { return value; } - } -- 2.36.6