Optimize immutable lookups 35/84135/2
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 2 Sep 2019 15:25:37 +0000 (17:25 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 2 Sep 2019 16:02:51 +0000 (18:02 +0200)
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 <robert.varga@pantheon.tech>
(cherry picked from commit 9e0e66b8a190dbd7f2903f1b4457fe4a1660254a)

yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YangTextSnippetIterator.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/BaseTypes.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/RegexUtils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserFactoryImpl.java
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java

index 4e18d885e1bacf85d301ee86f2303e101dfd84c3..1166f407e72b4e935959f0c662aa197dbd3db07d 100644 (file)
@@ -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<StatementDefinition> QUOTE_MULTILINE_STATEMENTS = ImmutableSet.of(
+    private static final ImmutableSet<StatementDefinition> 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<StatementDefinition, String> DEFAULT_STATEMENTS =
+    private static final ImmutableMap<StatementDefinition, String> DEFAULT_STATEMENTS =
             ImmutableMap.<StatementDefinition, String>builder()
             .put(YangStmtMapping.CONFIG, "true")
             .put(YangStmtMapping.MANDATORY, "true")
index e3a5284f8971eb990782be13e1440c08d837791b..1d9603867099afd1d061606adc0665ec2e26729f 100644 (file)
@@ -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<QName> BUILT_IN_TYPES = ImmutableSet.<QName>builder()
+    private static final ImmutableSet<QName> BUILT_IN_TYPES = ImmutableSet.<QName>builder()
             .add(BINARY_QNAME)
             .add(BITS_QNAME)
             .add(BOOLEAN_QNAME)
index e9f47a2d56bee6da228aa955513bbbaac69cf862..a5e5d707b9fe0784661ca8e67dc09af6dab3912e 100644 (file)
@@ -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<String> JAVA_UNICODE_BLOCKS = ImmutableSet.<String>builder()
+    private static final ImmutableSet<String> JAVA_UNICODE_BLOCKS = ImmutableSet.<String>builder()
             .add("AegeanNumbers")
             .add("AlchemicalSymbols")
             .add("AlphabeticPresentationForms")
index 5779934bb836b498370ddde669cc816443f76549..f64fb23d6454e532f49979e6ab0b37f0747e1816 100644 (file)
@@ -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<StatementParserMode> SUPPORTED_MODES = ImmutableList.of(
+    private static final ImmutableList<StatementParserMode> SUPPORTED_MODES = ImmutableList.of(
         StatementParserMode.DEFAULT_MODE, StatementParserMode.SEMVER_MODE);
 
     private final CrossSourceStatementReactor reactor;
index 47f2a3e2e082193aa9aeeef6f76d1fe8f29d31d3..9fcbb686085006d8a3d580946848fe95ebe2da4e 100644 (file)
@@ -873,11 +873,11 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
     }
 
     // FIXME: revise this, as it seems to be wrong
-    private static final Set<YangStmtMapping> NOCOPY_FROM_GROUPING_SET = ImmutableSet.of(
+    private static final ImmutableSet<YangStmtMapping> NOCOPY_FROM_GROUPING_SET = ImmutableSet.of(
         YangStmtMapping.DESCRIPTION,
         YangStmtMapping.REFERENCE,
         YangStmtMapping.STATUS);
-    private static final Set<YangStmtMapping> REUSED_DEF_SET = ImmutableSet.of(
+    private static final ImmutableSet<YangStmtMapping> REUSED_DEF_SET = ImmutableSet.of(
         YangStmtMapping.TYPE,
         YangStmtMapping.TYPEDEF,
         YangStmtMapping.USES);
index 0ed659cdc0aacd26e02e7ccf30d3e6719ee5f244..b0acf7ef1de97e7e3b1bc0c7bf5daf743de5f951 100644 (file)
@@ -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<ActionStatement, EffectiveStatement<QName, ActionStatement>> {
-    private static final Set<StatementDefinition> ILLEGAL_PARENTS = ImmutableSet.of(YangStmtMapping.NOTIFICATION,
-            YangStmtMapping.RPC, YangStmtMapping.ACTION);
+    private static final ImmutableSet<StatementDefinition> ILLEGAL_PARENTS = ImmutableSet.of(
+            YangStmtMapping.NOTIFICATION, YangStmtMapping.RPC, YangStmtMapping.ACTION);
 
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
         YangStmtMapping.ACTION)
index dfcf13b6654412c788b7b10e56fa3da05907f746..7e5c90fc2dfa0495a006eaa015a55b8b9b1ef27c 100644 (file)
@@ -86,11 +86,11 @@ abstract class AbstractDeviateStatementSupport extends AbstractStatementSupport<
     private static final ImmutableMap<String, DeviateKind> KEYWORD_TO_DEVIATE_MAP =
             Maps.uniqueIndex(Arrays.asList(DeviateKind.values()), DeviateKind::getKeyword);
 
-    private static final Set<YangStmtMapping> SINGLETON_STATEMENTS = ImmutableSet.of(
+    private static final ImmutableSet<YangStmtMapping> SINGLETON_STATEMENTS = ImmutableSet.of(
             YangStmtMapping.UNITS, YangStmtMapping.CONFIG, YangStmtMapping.MANDATORY,
             YangStmtMapping.MIN_ELEMENTS, YangStmtMapping.MAX_ELEMENTS);
 
-    private static final Set<YangStmtMapping> IMPLICIT_STATEMENTS = ImmutableSet.of(YangStmtMapping.CONFIG,
+    private static final ImmutableSet<YangStmtMapping> IMPLICIT_STATEMENTS = ImmutableSet.of(YangStmtMapping.CONFIG,
             YangStmtMapping.MANDATORY, YangStmtMapping.MAX_ELEMENTS, YangStmtMapping.MIN_ELEMENTS);
 
     AbstractDeviateStatementSupport() {
index da275ebdfc24312728e6c26d19f15ce252190292..6125160cf219382f7d2a60af3382f3f69b78a72d 100644 (file)
@@ -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<StatementDefinition> ILLEGAL_PARENTS = ImmutableSet.of(YangStmtMapping.NOTIFICATION,
-            YangStmtMapping.RPC, YangStmtMapping.ACTION);
+    private static final ImmutableSet<StatementDefinition> ILLEGAL_PARENTS = ImmutableSet.of(
+            YangStmtMapping.NOTIFICATION, YangStmtMapping.RPC, YangStmtMapping.ACTION);
     private static final NotificationStatementRFC7950Support INSTANCE = new NotificationStatementRFC7950Support();
 
     private NotificationStatementRFC7950Support() {
index f8fe34ccff8bd240bce835ef2df160ab24364147..77be43cce7797ee42f773cf5956e6845e0246b22 100644 (file)
@@ -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<String, String> BUILT_IN_TYPES = ImmutableMap.<String, String>builder()
+    private static final ImmutableMap<String, String> BUILT_IN_TYPES = ImmutableMap.<String, String>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<String, StatementSupport<?, ?, ?>> ARGUMENT_SPECIFIC_SUPPORTS =
+    private static final ImmutableMap<String, StatementSupport<?, ?, ?>> ARGUMENT_SPECIFIC_SUPPORTS =
             ImmutableMap.<String, StatementSupport<?, ?, ?>>builder()
             .put(BITS, new BitsSpecificationSupport())
             .put(DECIMAL64, new Decimal64SpecificationSupport())
index debce5e9746ced2577e47ad14c7c526d220564db..ba61b92dec297cd85dd0d7d08e56f54997dc96b2 100644 (file)
@@ -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<String, StatementSupport<?, ?, ?>> ARGUMENT_SPECIFIC_SUPPORTS = ImmutableMap.of(
+    private static final ImmutableMap<String, StatementSupport<?, ?, ?>> ARGUMENT_SPECIFIC_SUPPORTS = ImmutableMap.of(
         LEAF_REF, new LeafrefSpecificationRFC7950Support(),
         IDENTITY_REF, new IdentityrefSpecificationRFC7950Support());
     private static final TypeStatementRFC7950Support INSTANCE = new TypeStatementRFC7950Support();