Fix inefficient ConstraintEffectiveStatements 71/47171/2
authorRobert Varga <rovarga@cisco.com>
Tue, 18 Oct 2016 14:28:35 +0000 (16:28 +0200)
committerRobert Varga <nite@hq.sk>
Wed, 19 Oct 2016 21:54:32 +0000 (21:54 +0000)
Leaking a mutable ArrayList is incorrect, as the result
should be immutable. Furthermore not providing a hint
results in wasted space. Fix this by copying the temporary
ArrayList into an ImmutableList.

Change-Id: Ic6d1f1a72e6c045479a8b2e95b6b36f0b8d3aaaf
Signed-off-by: Robert Varga <rovarga@cisco.com>
(cherry picked from commit 1f56bcb262d2b5f6b7fb6c879e30143db07945ec)

yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractConstraintEffectiveStatement.java

index 7c2bc71dbeb960bcf13fb80ef1255660b1548fde..9930eab77c405256d0bf51d61fcc59dce4b83537 100644 (file)
@@ -97,11 +97,11 @@ abstract class ListConstraintFactory<A> extends ConstraintFactory<List<A>> {
             return ImmutableList.copyOf(argument);
         }
 
-        List<A> customizedConstraints = new ArrayList<>();
+        final List<A> customizedConstraints = new ArrayList<>(argument.size());
         for (A constraint : argument) {
             customizedConstraints.add(createCustomizedConstraint(constraint, stmt));
         }
-        return customizedConstraints;
+        return ImmutableList.copyOf(customizedConstraints);
     }
 
     abstract protected A createCustomizedConstraint(A constraint, AbstractConstraintEffectiveStatement<List<A>, ?> stmt);
@@ -130,9 +130,9 @@ final class PatternConstraintFactory extends ConstraintFactory<PatternConstraint
     protected PatternConstraint createConstraints(final AbstractConstraintEffectiveStatement<PatternConstraint, ?> stmt, final PatternConstraint argument) {
         if (!stmt.isCustomizedStatement()) {
             return argument;
-        } else {
-            return createCustomizedConstraint(argument, stmt);
         }
+
+        return createCustomizedConstraint(argument, stmt);
     }
 
     private static PatternConstraint createCustomizedConstraint(final PatternConstraint patternConstraint,