From 9a16801e07c1613829e5825fa3f55704c95cac38 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 5 Dec 2021 18:56:49 +0100 Subject: [PATCH] Optimize ListEffectiveStatement layout 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 --- .../model/ri/stmt/EffectiveStatements.java | 4 ++-- .../eff/AbstractListEffectiveStatement.java | 17 +++-------------- .../impl/eff/EmptyListEffectiveStatement.java | 10 +++++----- .../eff/RegularListEffectiveStatement.java | 18 +++++++++++++++--- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java index d7edccbeef..dbc2e2701e 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java @@ -618,8 +618,8 @@ public final class EffectiveStatements { public static ListEffectiveStatement createList(final ListStatement declared, final QName argument, final int flags, final ImmutableList> substatements, final ImmutableList 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); } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractListEffectiveStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractListEffectiveStatement.java index 506413c529..766f7e138d 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractListEffectiveStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractListEffectiveStatement.java @@ -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, NotificationNodeContainerMixin, ActionNodeContainerMixin, MustConstraintMixin { 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> substatements, final ImmutableList 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; diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyListEffectiveStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyListEffectiveStatement.java index 91a29f6c2f..e745aa5340 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyListEffectiveStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyListEffectiveStatement.java @@ -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> substatements, final ImmutableList 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 diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularListEffectiveStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularListEffectiveStatement.java index f113e12b7b..c29e0ed7c9 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularListEffectiveStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularListEffectiveStatement.java @@ -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> substatements, final ImmutableList 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 getElementCountConstraint() { return Optional.ofNullable(elementCountConstraint); -- 2.36.6