From 20d1af49ac3ff9fb27358e8a8472e2842792233d Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 26 Jan 2020 20:18:37 +0100 Subject: [PATCH] Reuse OrderedByEffectiveStatement instances This is a low-cardinality statement for which we are already reusing declared instances. This extends that support to cover effective instances based on the shared declared instances. Also ditch the use of EnumMap -- while it works, we only have two values, which is easily taken care of by a switch statement. JIRA: YANGTOOLS-1065 Change-Id: I43f135c9dec443b1b46b5517fa98f2c08af3d877 Signed-off-by: Robert Varga (cherry picked from commit b235e6290637ae2decf53015012807026bb849db) --- .../ordered_by/OrderedByStatementSupport.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ordered_by/OrderedByStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ordered_by/OrderedByStatementSupport.java index 7a43729653..e1f02af77b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ordered_by/OrderedByStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ordered_by/OrderedByStatementSupport.java @@ -30,6 +30,10 @@ public final class OrderedByStatementSupport */ private static final @NonNull EmptyOrderedByStatement EMPTY_SYSTEM_DECL = new EmptyOrderedByStatement("system"); private static final @NonNull EmptyOrderedByStatement EMPTY_USER_DECL = new EmptyOrderedByStatement("user"); + private static final @NonNull EmptyOrderedByEffectiveStatement EMPTY_SYSTEM_EFF = + new EmptyOrderedByEffectiveStatement(EMPTY_SYSTEM_DECL); + private static final @NonNull EmptyOrderedByEffectiveStatement EMPTY_USER_EFF = + new EmptyOrderedByEffectiveStatement(EMPTY_USER_DECL); private OrderedByStatementSupport() { super(YangStmtMapping.ORDERED_BY); @@ -91,6 +95,25 @@ public final class OrderedByStatementSupport protected OrderedByEffectiveStatement createEmptyEffective( final StmtContext ctx, final OrderedByStatement declared) { + // Aggressively reuse effective instances which are backed by the corresponding empty declared instance, as this + // is the case unless there is a weird extension in use. + final String argument = declared.getValue(); + switch (argument) { + case "system": + if (EMPTY_SYSTEM_DECL.equals(declared)) { + return EMPTY_SYSTEM_EFF; + } + break; + case "user": + if (EMPTY_USER_DECL.equals(declared)) { + return EMPTY_USER_EFF; + } + break; + default: + throw new IllegalStateException("Unhandled argument " + argument); + } + + // Declared instance was non-empty, which can happen with extensions return new EmptyOrderedByEffectiveStatement(declared); } } -- 2.36.6