From d85b112f9079f41bdab82c947bb501513c75c5ff Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 6 Jun 2017 02:41:29 +0200 Subject: [PATCH] Cleanup effectiveStatements() access No need to cache the field, as we are typically only iterating over it. Change-Id: Ia5d189deca1dbc560c77c17423814db1f7700c0d Signed-off-by: Robert Varga (cherry picked from commit aa3a77e73cc51fe1286902caab094295b3a4ee91) --- .../yang/parser/stmt/rfc6020/TypeUtils.java | 4 +- ...tEffectiveDocumentedDataNodeContainer.java | 37 +++++++++---------- .../AugmentEffectiveStatementImpl.java | 6 +-- .../ChoiceEffectiveStatementImpl.java | 8 ++-- .../NotificationEffectiveStatementImpl.java | 8 ++-- .../RefineEffectiveStatementImpl.java | 17 +++------ .../effective/RpcEffectiveStatementImpl.java | 4 +- .../effective/UsesEffectiveStatementImpl.java | 12 +++--- .../ActionEffectiveStatementImpl.java | 4 +- .../yangtools/yang/stmt/Bug6972Test.java | 6 +-- 10 files changed, 39 insertions(+), 67 deletions(-) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeUtils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeUtils.java index e6e67ea0bb..4e8241307e 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeUtils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeUtils.java @@ -18,7 +18,6 @@ import com.google.common.collect.Iterables; import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; -import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -316,8 +315,7 @@ public final class TypeUtils { private static boolean isAnyDefaultValueMarkedWithIfFeature(final TypeEffectiveStatement typeStmt, final Set defaultValues) { - final Collection> effectiveSubstatements = typeStmt.effectiveSubstatements(); - for (final EffectiveStatement effectiveSubstatement : effectiveSubstatements) { + for (final EffectiveStatement effectiveSubstatement : typeStmt.effectiveSubstatements()) { if (YangStmtMapping.BIT.equals(effectiveSubstatement.statementDefinition())) { final QName bitQName = (QName) effectiveSubstatement.argument(); if (defaultValues.remove(bitQName.getLocalName()) && containsIfFeature(effectiveSubstatement)) { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java index c9ea8ff8c1..cd7371349d 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java @@ -9,7 +9,6 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import java.util.Collection; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -44,25 +43,23 @@ abstract class AbstractEffectiveDocumentedDataNodeContainer ctx) { super(ctx); - Collection> effectiveSubstatements = effectiveSubstatements(); - Map mutableChildNodes = new LinkedHashMap<>(); Set mutableGroupings = new HashSet<>(); Set mutableUses = new HashSet<>(); Set> mutableTypeDefinitions = new LinkedHashSet<>(); Set mutablePublicChildNodes = new LinkedHashSet<>(); - for (EffectiveStatement effectiveStatement : effectiveSubstatements) { - if (effectiveStatement instanceof DataSchemaNode) { - final DataSchemaNode dataSchemaNode = (DataSchemaNode) effectiveStatement; + for (EffectiveStatement stmt : effectiveSubstatements()) { + if (stmt instanceof DataSchemaNode) { + final DataSchemaNode dataSchemaNode = (DataSchemaNode) stmt; if (!mutableChildNodes.containsKey(dataSchemaNode.getQName())) { /** * Add case short hand when augmenting choice with short hand **/ - if (this instanceof AugmentationSchema && !(effectiveStatement instanceof ChoiceCaseNode || - effectiveStatement instanceof ChoiceSchemaNode) && - (YangValidationBundles.SUPPORTED_CASE_SHORTHANDS.contains(effectiveStatement.statementDefinition())) && - Boolean.TRUE.equals(ctx.getFromNamespace(AugmentToChoiceNamespace.class, ctx))) { + if (this instanceof AugmentationSchema + && !(stmt instanceof ChoiceCaseNode || stmt instanceof ChoiceSchemaNode) + && YangValidationBundles.SUPPORTED_CASE_SHORTHANDS.contains(stmt.statementDefinition()) + && Boolean.TRUE.equals(ctx.getFromNamespace(AugmentToChoiceNamespace.class, ctx))) { final CaseShorthandImpl caseShorthand = new CaseShorthandImpl(dataSchemaNode); mutableChildNodes.put(caseShorthand.getQName(), caseShorthand); mutablePublicChildNodes.add(caseShorthand); @@ -71,32 +68,32 @@ abstract class AbstractEffectiveDocumentedDataNodeContainer type = typeDef.getTypeDefinition(); if (!mutableTypeDefinitions.contains(type)) { mutableTypeDefinitions.add(type); } else { - throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement); + throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, stmt); } } - if (effectiveStatement instanceof GroupingDefinition) { - GroupingDefinition grp = (GroupingDefinition) effectiveStatement; + if (stmt instanceof GroupingDefinition) { + GroupingDefinition grp = (GroupingDefinition) stmt; if (!mutableGroupings.contains(grp)) { mutableGroupings.add(grp); } else { - throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement); + throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, stmt); } } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AugmentEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AugmentEffectiveStatementImpl.java index 62fb1a779e..989a854904 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AugmentEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AugmentEffectiveStatementImpl.java @@ -13,7 +13,6 @@ import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import java.net.URI; -import java.util.Collection; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -62,14 +61,13 @@ public final class AugmentEffectiveStatementImpl extends this.copyOf = ctx.getOriginalCtx() == null ? null : (AugmentationSchema) ctx.getOriginalCtx().buildEffective(); final WhenEffectiveStatementImpl whenStmt = firstEffective(WhenEffectiveStatementImpl.class); - this.whenCondition = (whenStmt == null) ? null : whenStmt.argument(); + this.whenCondition = whenStmt == null ? null : whenStmt.argument(); // initSubstatementCollections - final Collection> effectiveSubstatements = effectiveSubstatements(); final ImmutableSet.Builder actionsBuilder = ImmutableSet.builder(); final ImmutableSet.Builder notificationsBuilder = ImmutableSet.builder(); final ImmutableList.Builder listBuilder = new ImmutableList.Builder<>(); - for (final EffectiveStatement effectiveStatement : effectiveSubstatements) { + for (final EffectiveStatement effectiveStatement : effectiveSubstatements()) { if (effectiveStatement instanceof ActionDefinition) { actionsBuilder.add((ActionDefinition) effectiveStatement); } else if (effectiveStatement instanceof NotificationDefinition) { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ChoiceEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ChoiceEffectiveStatementImpl.java index 52cb61c15e..70f6978694 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ChoiceEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ChoiceEffectiveStatementImpl.java @@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; -import java.util.Collection; import java.util.Comparator; import java.util.LinkedHashSet; import java.util.Objects; @@ -49,14 +48,13 @@ public final class ChoiceEffectiveStatementImpl extends AbstractEffectiveDataSch this.original = ctx.getOriginalCtx() == null ? null : (ChoiceSchemaNode) ctx.getOriginalCtx().buildEffective(); final DefaultEffectiveStatementImpl defaultStmt = firstEffective(DefaultEffectiveStatementImpl.class); - this.defaultCase = (defaultStmt == null) ? null : defaultStmt.argument(); + this.defaultCase = defaultStmt == null ? null : defaultStmt.argument(); // initSubstatementCollectionsAndFields - final Collection> effectiveSubstatements = effectiveSubstatements(); final Set augmentationsInit = new LinkedHashSet<>(); final SortedSet casesInit = new TreeSet<>(SCHEMA_NODE_COMP); - for (final EffectiveStatement effectiveStatement : effectiveSubstatements) { + for (final EffectiveStatement effectiveStatement : effectiveSubstatements()) { if (effectiveStatement instanceof AugmentationSchema) { final AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement; augmentationsInit.add(augmentationSchema); @@ -130,7 +128,7 @@ public final class ChoiceEffectiveStatementImpl extends AbstractEffectiveDataSch Preconditions.checkArgument(name != null, "Choice Case string Name cannot be NULL!"); for (final ChoiceCaseNode caseNode : cases) { - if (caseNode != null && (caseNode.getQName() != null) && name.equals(caseNode.getQName().getLocalName())) { + if (caseNode != null && caseNode.getQName() != null && name.equals(caseNode.getQName().getLocalName())) { return caseNode; } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NotificationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NotificationEffectiveStatementImpl.java index c769f6265b..3eae1c0bef 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NotificationEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NotificationEffectiveStatementImpl.java @@ -9,9 +9,8 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; -import java.util.Collection; +import java.util.ArrayList; import java.util.LinkedHashSet; -import java.util.LinkedList; import java.util.List; import java.util.Objects; import java.util.Set; @@ -43,10 +42,9 @@ public class NotificationEffectiveStatementImpl extends this.constraints = EffectiveConstraintDefinitionImpl.forParent(this); // initSubstatementCollections - Collection> effectiveSubstatements = effectiveSubstatements(); - List unknownNodesInit = new LinkedList<>(); + List unknownNodesInit = new ArrayList<>(); Set augmentationsInit = new LinkedHashSet<>(); - for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + for (EffectiveStatement effectiveStatement : effectiveSubstatements()) { if (effectiveStatement instanceof UnknownSchemaNode) { UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; unknownNodesInit.add(unknownNode); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RefineEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RefineEffectiveStatementImpl.java index e22a17be05..17c381e062 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RefineEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RefineEffectiveStatementImpl.java @@ -8,15 +8,13 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; import com.google.common.collect.ImmutableList; -import java.util.Collection; -import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -36,15 +34,10 @@ public final class RefineEffectiveStatementImpl extends refineTargetNode = (SchemaNode) ctx.getEffectOfStatement().iterator().next().buildEffective(); // initSubstatementCollectionsAndFields - Collection> effectiveSubstatements = effectiveSubstatements(); - List unknownNodesInit = new LinkedList<>(); - for (EffectiveStatement effectiveSubstatement : effectiveSubstatements) { - if (effectiveSubstatement instanceof UnknownSchemaNode) { - UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveSubstatement; - unknownNodesInit.add(unknownNode); - } - } - this.unknownNodes = ImmutableList.copyOf(unknownNodesInit); + this.unknownNodes = ImmutableList.copyOf(effectiveSubstatements().stream() + .filter(UnknownSchemaNode.class::isInstance) + .map(UnknownSchemaNode.class::cast) + .collect(Collectors.toList())); } public SchemaNode getRefineTargetNode() { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RpcEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RpcEffectiveStatementImpl.java index ecd26e5401..1296099419 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RpcEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RpcEffectiveStatementImpl.java @@ -8,7 +8,6 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; import com.google.common.collect.ImmutableSet; -import java.util.Collection; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Objects; @@ -34,10 +33,9 @@ public class RpcEffectiveStatementImpl extends AbstractEffectiveSchemaNode> effectiveSubstatements = effectiveSubstatements(); Set groupingsInit = new HashSet<>(); Set> mutableTypeDefinitions = new LinkedHashSet<>(); - for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + for (EffectiveStatement effectiveStatement : effectiveSubstatements()) { if (effectiveStatement instanceof GroupingDefinition) { GroupingDefinition groupingDefinition = (GroupingDefinition) effectiveStatement; groupingsInit.add(groupingDefinition); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java index 30c4ea4be6..103f5d99c8 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java @@ -11,10 +11,9 @@ import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import java.util.Collection; +import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashSet; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -32,8 +31,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; public final class UsesEffectiveStatementImpl extends AbstractEffectiveDocumentedNode implements UsesNode { private final SchemaPath groupingPath; @@ -56,11 +55,10 @@ public final class UsesEffectiveStatementImpl extends AbstractEffectiveDocumente addedByUses = ctx.getCopyHistory().contains(CopyType.ADDED_BY_USES); // initSubstatementCollections - final Collection> effectiveSubstatements = effectiveSubstatements(); - final List unknownNodesInit = new LinkedList<>(); + final List unknownNodesInit = new ArrayList<>(); final Set augmentationsInit = new LinkedHashSet<>(); final Map refinesInit = new HashMap<>(); - for (final EffectiveStatement effectiveStatement : effectiveSubstatements) { + for (final EffectiveStatement effectiveStatement : effectiveSubstatements()) { if (effectiveStatement instanceof UnknownSchemaNode) { final UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; unknownNodesInit.add(unknownNode); @@ -80,7 +78,7 @@ public final class UsesEffectiveStatementImpl extends AbstractEffectiveDocumente this.refines = ImmutableMap.copyOf(refinesInit); final WhenEffectiveStatementImpl whenStmt = firstEffective(WhenEffectiveStatementImpl.class); - this.whenCondition = (whenStmt == null) ? null : whenStmt.argument(); + this.whenCondition = whenStmt == null ? null : whenStmt.argument(); } @Nonnull diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/ActionEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/ActionEffectiveStatementImpl.java index c051e05948..73a4bf0d71 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/ActionEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/ActionEffectiveStatementImpl.java @@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc7950.effective; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableSet; -import java.util.Collection; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Objects; @@ -42,10 +41,9 @@ public class ActionEffectiveStatementImpl extends AbstractEffectiveSchemaNode> effectiveSubstatements = effectiveSubstatements(); Set groupingsInit = new HashSet<>(); Set> mutableTypeDefinitions = new LinkedHashSet<>(); - for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + for (EffectiveStatement effectiveStatement : effectiveSubstatements()) { if (effectiveStatement instanceof GroupingDefinition) { GroupingDefinition groupingDefinition = (GroupingDefinition) effectiveStatement; groupingsInit.add(groupingDefinition); diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug6972Test.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug6972Test.java index 0d5f760e96..f2301e21cd 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug6972Test.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug6972Test.java @@ -12,7 +12,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import java.util.Collection; import java.util.Date; import org.junit.Ignore; import org.junit.Test; @@ -70,10 +69,7 @@ public class Bug6972Test { final LeafSchemaNode leaf = (LeafSchemaNode) cont.getDataChildByName(leafQName); assertNotNull(leaf); - final Collection> effectiveSubstatements = - ((LeafEffectiveStatementImpl) leaf).effectiveSubstatements(); - - for (EffectiveStatement effStmt : effectiveSubstatements) { + for (EffectiveStatement effStmt : ((LeafEffectiveStatementImpl) leaf).effectiveSubstatements()) { if (effStmt instanceof UnitsEffectiveStatementImpl) { units = (UnitsEffectiveStatementImpl) effStmt; break; -- 2.36.6