Optimize AbstractResumedStatement.buildDeclared() 59/87759/1
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 15 Feb 2020 02:25:40 +0000 (03:25 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 16 Feb 2020 09:42:37 +0000 (10:42 +0100)
Optimize bytecode size of buildDeclared() by off-loading actual
work to loadDeclared(). Improves inlining and improves tracing
visibility -- which shows that the cache has about 90% cach hit
rate.

Change-Id: If09d417ab5257bf6651b94da2506695a6ced0104
JIRA: YANGTOOLS-652
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/AbstractResumedStatement.java

index 978164ef727d9cf7266c275d4ad6e804032f95b6..c0cba1d29b73a0efb4079f2e67caaf1c93b956b5 100644 (file)
@@ -92,10 +92,11 @@ abstract class AbstractResumedStatement<A, D extends DeclaredStatement<A>, E ext
 
     @Override
     public final D buildDeclared() {
-        final D existing = declaredInstance;
-        if (existing != null) {
-            return existing;
-        }
+        final D existing;
+        return (existing = declaredInstance) != null ? existing : loadDeclared();
+    }
+
+    private @NonNull D loadDeclared() {
         final ModelProcessingPhase phase = getCompletedPhase();
         checkState(phase == ModelProcessingPhase.FULL_DECLARATION || phase == ModelProcessingPhase.EFFECTIVE_MODEL,
                 "Cannot build declared instance after phase %s", phase);