From e35ad2326fb90c1d2876f1bb102a382fcef85e04 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 3 Jul 2020 11:03:21 +0200 Subject: [PATCH] Remove statement filter caches from AbstractEffectiveModule Majority of collections kept by AbstractEffectiveModule are simple filters on effective substatements. Use Collections2.filter() instead of fully instantiating them. Since we are dealing with generic Collections, this is also flushing out a bad use of equality in a test. JIRA: YANGTOOLS-1065 Change-Id: If6e8689fdd6638aaddfd45c4846086c03d91032e Signed-off-by: Robert Varga --- .../rfc7950/stmt/AbstractEffectiveModule.java | 83 ++++--------------- .../rfc7950/IdentityrefStatementTest.java | 4 +- 2 files changed, 18 insertions(+), 69 deletions(-) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java index 680ba7b202..b5c519eb8d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java @@ -12,14 +12,12 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableList; +import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; import com.google.common.collect.ImmutableSet; -import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashSet; -import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -67,18 +65,9 @@ public abstract class AbstractEffectiveModule implements Module, NotificationNodeContainerCompat { private final String prefix; - private final ImmutableSet imports; - private final ImmutableSet features; - private final @NonNull ImmutableSet notifications; - private final ImmutableSet augmentations; - private final ImmutableSet rpcs; - private final ImmutableSet deviations; - private final ImmutableList extensionNodes; - private final ImmutableSet identities; private final ImmutableSet groupings; private final ImmutableSet uses; private final ImmutableSet> typeDefinitions; - private final ImmutableSet publicChildNodes; private final ImmutableMap> schemaTreeNamespace; protected AbstractEffectiveModule( @@ -98,48 +87,11 @@ public abstract class AbstractEffectiveModule augmentationsInit = new LinkedHashSet<>(); - final Set importsInit = new LinkedHashSet<>(); - final Set notificationsInit = new LinkedHashSet<>(); - final Set rpcsInit = new LinkedHashSet<>(); - final Set deviationsInit = new LinkedHashSet<>(); - final Set identitiesInit = new LinkedHashSet<>(); - final Set featuresInit = new LinkedHashSet<>(); - final List extensionNodesInit = new ArrayList<>(); - final Set mutableGroupings = new LinkedHashSet<>(); final Set mutableUses = new LinkedHashSet<>(); final Set> mutableTypeDefinitions = new LinkedHashSet<>(); - final Set mutablePublicChildNodes = new LinkedHashSet<>(); for (final EffectiveStatement effectiveStatement : effectiveSubstatements()) { - if (effectiveStatement instanceof AugmentationSchemaNode) { - augmentationsInit.add((AugmentationSchemaNode) effectiveStatement); - } - if (effectiveStatement instanceof ModuleImport) { - importsInit.add((ModuleImport) effectiveStatement); - } - if (effectiveStatement instanceof NotificationDefinition) { - notificationsInit.add((NotificationDefinition) effectiveStatement); - } - if (effectiveStatement instanceof RpcDefinition) { - rpcsInit.add((RpcDefinition) effectiveStatement); - } - if (effectiveStatement instanceof Deviation) { - deviationsInit.add((Deviation) effectiveStatement); - } - if (effectiveStatement instanceof IdentitySchemaNode) { - identitiesInit.add((IdentitySchemaNode) effectiveStatement); - } - if (effectiveStatement instanceof FeatureDefinition) { - featuresInit.add((FeatureDefinition) effectiveStatement); - } - if (effectiveStatement instanceof ExtensionDefinition) { - extensionNodesInit.add((ExtensionDefinition) effectiveStatement); - } - if (effectiveStatement instanceof DataSchemaNode) { - mutablePublicChildNodes.add((DataSchemaNode) effectiveStatement); - } if (effectiveStatement instanceof UsesNode && !mutableUses.add((UsesNode) effectiveStatement)) { throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement); } @@ -155,17 +107,7 @@ public abstract class AbstractEffectiveModule getImports() { - return imports; + return filterSubstatements(ModuleImport.class); } @Override public Collection getFeatures() { - return features; + return filterSubstatements(FeatureDefinition.class); } @Override public Collection getNotifications() { - return notifications; + return filterSubstatements(NotificationDefinition.class); } @Override public Collection getAugmentations() { - return augmentations; + return filterSubstatements(AugmentationSchemaNode.class); } @Override public Collection getRpcs() { - return rpcs; + return filterSubstatements(RpcDefinition.class); } @Override public Collection getDeviations() { - return deviations; + return filterSubstatements(Deviation.class); } @Override public Collection getExtensionSchemaNodes() { - return extensionNodes; + return filterSubstatements(ExtensionDefinition.class); } @Override public Collection getIdentities() { - return identities; + return filterSubstatements(IdentitySchemaNode.class); } @Override @@ -243,7 +185,7 @@ public abstract class AbstractEffectiveModule getChildNodes() { - return publicChildNodes; + return filterSubstatements(DataSchemaNode.class); } @Override @@ -308,4 +250,9 @@ public abstract class AbstractEffectiveModule @NonNull Collection filterSubstatements(final Class type) { + return (Collection) Collections2.filter(effectiveSubstatements(), type::isInstance); + } } diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IdentityrefStatementTest.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IdentityrefStatementTest.java index 434ae44b65..464e210d42 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IdentityrefStatementTest.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IdentityrefStatementTest.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc7950; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -43,7 +45,7 @@ public class IdentityrefStatementTest { final IdentityrefTypeDefinition idrefType = (IdentityrefTypeDefinition) idrefLeaf.getType(); final Set referencedIdentities = idrefType.getIdentities(); assertEquals(3, referencedIdentities.size()); - assertEquals(identities, referencedIdentities); + assertThat(referencedIdentities, containsInAnyOrder(identities.toArray())); assertEquals("id-a", idrefType.getIdentities().iterator().next().getQName().getLocalName()); } -- 2.36.6