Optimize ListEffectiveStatement layout 46/98846/3
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 5 Dec 2021 17:56:49 +0000 (18:56 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 6 Dec 2021 00:27:01 +0000 (01:27 +0100)
We can save a field in case the declared statement's argument matches
the effective argument.

JIRA: YANGTOOLS-1316
Change-Id: I02842d9dbe741b2d26f3f75948103715707df3b3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractListEffectiveStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyListEffectiveStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularListEffectiveStatement.java

index d7edccbeefdf918835a51080a738f999138f9cef..dbc2e2701e99e5cb91f0dd8cf9d46c82ea6e7ba4 100644 (file)
@@ -618,8 +618,8 @@ public final class EffectiveStatements {
     public static ListEffectiveStatement createList(final ListStatement declared, final QName argument,
             final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableList<QName> keyDefinition, final @Nullable ElementCountConstraint elementCountConstraint) {
-        return elementCountConstraint == null
-            ? new EmptyListEffectiveStatement(declared, argument, flags, substatements, keyDefinition)
+        return elementCountConstraint == null && argument.equals(declared.argument())
+            ? new EmptyListEffectiveStatement(declared, flags, substatements, keyDefinition)
                 : new RegularListEffectiveStatement(declared, argument, flags, substatements, keyDefinition,
                     elementCountConstraint);
     }
index 506413c5297d27c0bad5b747829aae0c43797bd5..766f7e138d6ad27cb2ec4e544b277f938ffc6f24 100644 (file)
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
-import static java.util.Objects.requireNonNull;
-
 import com.google.common.collect.ImmutableList;
 import java.util.Collection;
 import java.util.List;
@@ -42,31 +40,22 @@ abstract class AbstractListEffectiveStatement
             AugmentationTargetMixin<QName, ListStatement>, NotificationNodeContainerMixin<QName, ListStatement>,
             ActionNodeContainerMixin<QName, ListStatement>, MustConstraintMixin<QName, ListStatement> {
     private final int flags;
-    private final @NonNull QName argument;
     private final @NonNull Object keyDefinition;
 
-    AbstractListEffectiveStatement(final ListStatement declared, final QName argument, final int flags,
+    AbstractListEffectiveStatement(final ListStatement declared, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableList<QName> keyDefinition) {
         super(declared, substatements);
-        this.argument = requireNonNull(argument);
         this.keyDefinition = maskList(keyDefinition);
         this.flags = flags;
     }
 
-    AbstractListEffectiveStatement(final AbstractListEffectiveStatement original, final QName argument,
-            final int flags) {
+    AbstractListEffectiveStatement(final AbstractListEffectiveStatement original, final int flags) {
         super(original);
-        this.argument = requireNonNull(argument);
-        this.keyDefinition = original.keyDefinition;
+        keyDefinition = original.keyDefinition;
         this.flags = flags;
     }
 
-    @Override
-    public final QName argument() {
-        return argument;
-    }
-
     @Override
     public final int flags() {
         return flags;
index 91a29f6c2f625fc473628f074554232690f6cbee..e745aa5340b0b7b28a25d23b04e5636de39c7672 100644 (file)
@@ -15,15 +15,15 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
 
 public final class EmptyListEffectiveStatement extends AbstractListEffectiveStatement {
-    public EmptyListEffectiveStatement(final ListStatement declared, final QName argument, final int flags,
+    public EmptyListEffectiveStatement(final ListStatement declared, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableList<QName> keyDefinition) {
-        super(declared, argument, flags, substatements, keyDefinition);
+        super(declared, flags, substatements, keyDefinition);
     }
 
-    public EmptyListEffectiveStatement(final EmptyListEffectiveStatement original, final QName argument,
-            final int flags) {
-        super(original, argument, flags);
+    @Override
+    public QName argument() {
+        return getDeclared().argument();
     }
 
     @Override
index f113e12b7bf44a76d316991fdcc2954495e12d98..c29e0ed7c969a09b45a230dfc001969d95fc0e9a 100644 (file)
@@ -7,8 +7,11 @@
  */
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
 import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
@@ -16,26 +19,35 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
 
 public final class RegularListEffectiveStatement extends AbstractListEffectiveStatement {
     private final ElementCountConstraint elementCountConstraint;
+    private final @NonNull QName argument;
 
     public RegularListEffectiveStatement(final ListStatement declared, final QName argument, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableList<QName> keyDefinition, final ElementCountConstraint elementCountConstraint) {
-        super(declared, argument, flags, substatements, keyDefinition);
+        super(declared, flags, substatements, keyDefinition);
+        this.argument = requireNonNull(argument);
         this.elementCountConstraint = elementCountConstraint;
     }
 
     public RegularListEffectiveStatement(final RegularListEffectiveStatement originalEffective, final QName argument,
             final int flags) {
-        super(originalEffective, argument, flags);
+        super(originalEffective, flags);
+        this.argument = requireNonNull(argument);
         elementCountConstraint = originalEffective.elementCountConstraint;
     }
 
     public RegularListEffectiveStatement(final EmptyListEffectiveStatement originalEffective, final QName argument,
             final int flags) {
-        super(originalEffective, argument, flags);
+        super(originalEffective, flags);
+        this.argument = requireNonNull(argument);
         elementCountConstraint = null;
     }
 
+    @Override
+    public QName argument() {
+        return argument;
+    }
+
     @Override
     public Optional<ElementCountConstraint> getElementCountConstraint() {
         return Optional.ofNullable(elementCountConstraint);