QNameWithPredicateBuilder should use an ArrayList 00/32000/2
authorRobert Varga <robert.varga@pantheon.sk>
Sat, 2 Jan 2016 12:55:34 +0000 (13:55 +0100)
committerGerrit Code Review <gerrit@opendaylight.org>
Mon, 4 Jan 2016 16:22:28 +0000 (16:22 +0000)
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 <robert.varga@pantheon.sk>
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/QNameWithPredicateBuilder.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/QNameWithPredicateImpl.java

index 991063879b5926aff85fbc3a2627193a1e59575b..bef27ff45aec3fc53288d7929b41953e9a31792c 100644 (file)
@@ -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<QNamePredicate> qnamePredicates;
+    private final List<QNamePredicate> 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;
     }
 
index d98fbe3c16e97c699e5551b4113576f6fdb60842..b9d00813b42ced9a3c555121fac52b9afee02a79 100644 (file)
@@ -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<QNamePredicate> qnamePredicates) {
         this.moduleQname = moduleQname;
         this.localName = localName;
-        this.qnamePredicates = qnamePredicates;
+        this.qnamePredicates = ImmutableList.copyOf(qnamePredicates);
     }
 
     @Override