From: Robert Varga Date: Sat, 2 Jan 2016 12:55:34 +0000 (+0100) Subject: QNameWithPredicateBuilder should use an ArrayList X-Git-Tag: release/beryllium~47 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=yangtools.git;a=commitdiff_plain;h=9fe749bedc154b0263d90337e70328abe36ec624 QNameWithPredicateBuilder should use an ArrayList Also fix QNameWithPredicateImpl's promise of being Immutable, by copying the predicates. Otherwise these could be modified by the leaked collection. Change-Id: I46105644986bb7a99faf4bd3d6f8b9ff3ff84592 Signed-off-by: Robert Varga --- diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/QNameWithPredicateBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/QNameWithPredicateBuilder.java index 991063879b..bef27ff45a 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/QNameWithPredicateBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/QNameWithPredicateBuilder.java @@ -7,14 +7,14 @@ */ package org.opendaylight.yangtools.yang.data.impl.leafref; -import java.util.LinkedList; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import org.opendaylight.yangtools.yang.common.QNameModule; class QNameWithPredicateBuilder { - private List qnamePredicates; + private final List qnamePredicates = new ArrayList<>(); private QNameModule moduleQname; private String localName; @@ -29,15 +29,14 @@ class QNameWithPredicateBuilder { public QNameWithPredicateBuilder(final QNameModule moduleQname, final String localName) { this.moduleQname = moduleQname; this.localName = localName; - this.qnamePredicates = new LinkedList<>(); } public QNameWithPredicate build() { final QNameWithPredicateImpl qNameWithPredicateImpl = new QNameWithPredicateImpl( moduleQname, localName, qnamePredicates); - this.qnamePredicates = new LinkedList<>(); - + // QNameWithPredicateImpl has taken a copy + qnamePredicates.clear(); return qNameWithPredicateImpl; } @@ -81,7 +80,7 @@ class QNameWithPredicateBuilder { @Override public int hashCode() { int result = moduleQname != null ? moduleQname.hashCode() : 0; - result = 31 * result + (localName != null ? localName.hashCode() : 0); + result = 31 * result + Objects.hashCode(localName); return result; } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/QNameWithPredicateImpl.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/QNameWithPredicateImpl.java index d98fbe3c16..b9d00813b4 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/QNameWithPredicateImpl.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/QNameWithPredicateImpl.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.impl.leafref; +import com.google.common.collect.ImmutableList; import java.io.Serializable; import java.util.List; import java.util.Objects; @@ -27,7 +28,7 @@ final class QNameWithPredicateImpl implements Immutable, Serializable, final List qnamePredicates) { this.moduleQname = moduleQname; this.localName = localName; - this.qnamePredicates = qnamePredicates; + this.qnamePredicates = ImmutableList.copyOf(qnamePredicates); } @Override