From 9e0e66b8a190dbd7f2903f1b4457fe4a1660254a Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 2 Sep 2019 17:25:37 +0200 Subject: [PATCH] Optimize immutable lookups We have a number of private Set/Map/Lists which we are using for lookups. These typically are backed by Immutable implementations, hence we can propagate the type knowledge to improve bytecode generation and make JIT's life easier. Change-Id: I7f90393b8bc76196deced50f1800c3f99424fa1c Signed-off-by: Robert Varga --- .../yang/model/export/YangTextSnippetIterator.java | 4 ++-- .../opendaylight/yangtools/yang/model/util/BaseTypes.java | 3 +-- .../opendaylight/yangtools/yang/model/util/RegexUtils.java | 3 +-- .../yangtools/yang/parser/impl/YangParserFactoryImpl.java | 2 +- .../yang/parser/stmt/reactor/StatementContextBase.java | 6 +++--- .../parser/rfc7950/stmt/action/ActionStatementSupport.java | 5 ++--- .../stmt/deviate/AbstractDeviateStatementSupport.java | 4 ++-- .../notification/NotificationStatementRFC7950Support.java | 5 ++--- .../rfc7950/stmt/type/AbstractTypeStatementSupport.java | 5 ++--- .../rfc7950/stmt/type/TypeStatementRFC7950Support.java | 3 +-- 10 files changed, 17 insertions(+), 23 deletions(-) diff --git a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YangTextSnippetIterator.java b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YangTextSnippetIterator.java index 4e18d885e1..1166f407e7 100644 --- a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YangTextSnippetIterator.java +++ b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YangTextSnippetIterator.java @@ -50,7 +50,7 @@ final class YangTextSnippetIterator extends AbstractIterator<@NonNull String> { private static final CharMatcher NEED_QUOTE_MATCHER = CharMatcher.anyOf(" \t\r'\";{}"); private static final CharMatcher DQUOT_MATCHER = CharMatcher.is('"'); private static final Splitter NEWLINE_SPLITTER = Splitter.on('\n'); - private static final Collection QUOTE_MULTILINE_STATEMENTS = ImmutableSet.of( + private static final ImmutableSet QUOTE_MULTILINE_STATEMENTS = ImmutableSet.of( YangStmtMapping.CONTACT, YangStmtMapping.DESCRIPTION, YangStmtMapping.ERROR_MESSAGE, @@ -64,7 +64,7 @@ final class YangTextSnippetIterator extends AbstractIterator<@NonNull String> { * are commonly used with the default value, which would make the module * difficult to read if used everywhere they are allowed. */ - private static final Map DEFAULT_STATEMENTS = + private static final ImmutableMap DEFAULT_STATEMENTS = ImmutableMap.builder() .put(YangStmtMapping.CONFIG, "true") .put(YangStmtMapping.MANDATORY, "true") diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/BaseTypes.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/BaseTypes.java index e3a5284f89..1d96038670 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/BaseTypes.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/BaseTypes.java @@ -9,7 +9,6 @@ package org.opendaylight.yangtools.yang.model.util; import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; -import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; @@ -42,7 +41,7 @@ public final class BaseTypes { public static final QName UINT64_QNAME = constructQName("uint64"); public static final QName UNION_QNAME = constructQName("union"); - private static final Set BUILT_IN_TYPES = ImmutableSet.builder() + private static final ImmutableSet BUILT_IN_TYPES = ImmutableSet.builder() .add(BINARY_QNAME) .add(BITS_QNAME) .add(BOOLEAN_QNAME) diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/RegexUtils.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/RegexUtils.java index e9f47a2d56..a5e5d707b9 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/RegexUtils.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/RegexUtils.java @@ -9,7 +9,6 @@ package org.opendaylight.yangtools.yang.model.util; import com.google.common.collect.ImmutableSet; -import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; @@ -22,7 +21,7 @@ import org.slf4j.LoggerFactory; public final class RegexUtils { private static final Logger LOG = LoggerFactory.getLogger(RegexUtils.class); private static final Pattern BETWEEN_CURLY_BRACES_PATTERN = Pattern.compile("\\{(.+?)\\}"); - private static final Set JAVA_UNICODE_BLOCKS = ImmutableSet.builder() + private static final ImmutableSet JAVA_UNICODE_BLOCKS = ImmutableSet.builder() .add("AegeanNumbers") .add("AlchemicalSymbols") .add("AlphabeticPresentationForms") diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserFactoryImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserFactoryImpl.java index 5779934bb8..f64fb23d64 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserFactoryImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserFactoryImpl.java @@ -27,7 +27,7 @@ import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementR @Beta @MetaInfServices public final class YangParserFactoryImpl implements YangParserFactory { - private static final Collection SUPPORTED_MODES = ImmutableList.of( + private static final ImmutableList SUPPORTED_MODES = ImmutableList.of( StatementParserMode.DEFAULT_MODE, StatementParserMode.SEMVER_MODE); private final CrossSourceStatementReactor reactor; diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java index 47f2a3e2e0..dc3a3f0197 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java @@ -624,7 +624,7 @@ public abstract class StatementContextBase, E return; } - getBehaviour(type).addListener(new KeyedValueAddedListener(this, key) { + getBehaviour(type).addListener(new KeyedValueAddedListener<>(this, key) { @Override void onValueAdded(final Object value) { listener.namespaceItemAdded(StatementContextBase.this, type, key, value); @@ -873,11 +873,11 @@ public abstract class StatementContextBase, E } // FIXME: revise this, as it seems to be wrong - private static final Set NOCOPY_FROM_GROUPING_SET = ImmutableSet.of( + private static final ImmutableSet NOCOPY_FROM_GROUPING_SET = ImmutableSet.of( YangStmtMapping.DESCRIPTION, YangStmtMapping.REFERENCE, YangStmtMapping.STATUS); - private static final Set REUSED_DEF_SET = ImmutableSet.of( + private static final ImmutableSet REUSED_DEF_SET = ImmutableSet.of( YangStmtMapping.TYPE, YangStmtMapping.TYPEDEF, YangStmtMapping.USES); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java index 0ed659cdc0..b0acf7ef1d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java @@ -8,7 +8,6 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.action; import com.google.common.collect.ImmutableSet; -import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -28,8 +27,8 @@ import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; public final class ActionStatementSupport extends AbstractQNameStatementSupport> { - private static final Set ILLEGAL_PARENTS = ImmutableSet.of(YangStmtMapping.NOTIFICATION, - YangStmtMapping.RPC, YangStmtMapping.ACTION); + private static final ImmutableSet ILLEGAL_PARENTS = ImmutableSet.of( + YangStmtMapping.NOTIFICATION, YangStmtMapping.RPC, YangStmtMapping.ACTION); private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.ACTION) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java index dfcf13b665..7e5c90fc2d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java @@ -86,11 +86,11 @@ abstract class AbstractDeviateStatementSupport extends AbstractStatementSupport< private static final ImmutableMap KEYWORD_TO_DEVIATE_MAP = Maps.uniqueIndex(Arrays.asList(DeviateKind.values()), DeviateKind::getKeyword); - private static final Set SINGLETON_STATEMENTS = ImmutableSet.of( + private static final ImmutableSet SINGLETON_STATEMENTS = ImmutableSet.of( YangStmtMapping.UNITS, YangStmtMapping.CONFIG, YangStmtMapping.MANDATORY, YangStmtMapping.MIN_ELEMENTS, YangStmtMapping.MAX_ELEMENTS); - private static final Set IMPLICIT_STATEMENTS = ImmutableSet.of(YangStmtMapping.CONFIG, + private static final ImmutableSet IMPLICIT_STATEMENTS = ImmutableSet.of(YangStmtMapping.CONFIG, YangStmtMapping.MANDATORY, YangStmtMapping.MAX_ELEMENTS, YangStmtMapping.MIN_ELEMENTS); AbstractDeviateStatementSupport() { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java index da275ebdfc..6125160cf2 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java @@ -9,7 +9,6 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.notification; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableSet; -import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -45,8 +44,8 @@ public final class NotificationStatementRFC7950Support extends AbstractNotificat .addAny(YangStmtMapping.USES) .build(); - private static final Set ILLEGAL_PARENTS = ImmutableSet.of(YangStmtMapping.NOTIFICATION, - YangStmtMapping.RPC, YangStmtMapping.ACTION); + private static final ImmutableSet ILLEGAL_PARENTS = ImmutableSet.of( + YangStmtMapping.NOTIFICATION, YangStmtMapping.RPC, YangStmtMapping.ACTION); private static final NotificationStatementRFC7950Support INSTANCE = new NotificationStatementRFC7950Support(); private NotificationStatementRFC7950Support() { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java index f8fe34ccff..77be43cce7 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java @@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import java.util.Collection; -import java.util.Map; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; @@ -92,7 +91,7 @@ abstract class AbstractTypeStatementSupport static final String UINT64 = "uint64"; static final String UNION = "union"; - private static final Map BUILT_IN_TYPES = ImmutableMap.builder() + private static final ImmutableMap BUILT_IN_TYPES = ImmutableMap.builder() .put(BINARY, BINARY) .put(BITS, BITS) .put(BOOLEAN, BOOLEAN) @@ -114,7 +113,7 @@ abstract class AbstractTypeStatementSupport .put(UNION, UNION) .build(); - private static final Map> ARGUMENT_SPECIFIC_SUPPORTS = + private static final ImmutableMap> ARGUMENT_SPECIFIC_SUPPORTS = ImmutableMap.>builder() .put(BITS, new BitsSpecificationSupport()) .put(DECIMAL64, new Decimal64SpecificationSupport()) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java index debce5e974..ba61b92dec 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java @@ -9,7 +9,6 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableMap; -import java.util.Map; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; /** @@ -17,7 +16,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; */ @Beta public final class TypeStatementRFC7950Support extends AbstractTypeStatementSupport { - private static final Map> ARGUMENT_SPECIFIC_SUPPORTS = ImmutableMap.of( + private static final ImmutableMap> ARGUMENT_SPECIFIC_SUPPORTS = ImmutableMap.of( LEAF_REF, new LeafrefSpecificationRFC7950Support(), IDENTITY_REF, new IdentityrefSpecificationRFC7950Support()); private static final TypeStatementRFC7950Support INSTANCE = new TypeStatementRFC7950Support(); -- 2.36.6