RFR: 8061472 String.format in DeferredAttr.DeferredTypeMap constructor leads to excessive object creation

Joel Borggrén-Franck joel.franck at oracle.com
Thu Dec 18 13:41:32 UTC 2014


Hi,

Jan suggested supplying the descriptive name with the enum constructor, which I agree reads better. New patch inline.

cheers
/Joel

diff -r 47926c290355 src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java	Wed Dec 17 12:48:04 2014 -0800
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java	Thu Dec 18 14:28:34 2014 +0100
@@ -352,11 +352,24 @@
          * type are reversed after the speculative round finishes. This means the
          * expression tree will be left in a blank state.
          */
-        SPECULATIVE,
+        SPECULATIVE("deferredTypeMap[SPECULATIVE]"),
         /**
          * This is the plain type-checking mode. Produces side-effects on the underlying AST node
          */
-        CHECK
+        CHECK("deferredTypeMap[CHECK]");
+
+        /**
+         * Returns a descriptive name of this mode.
+         */
+        public String getDescriptiveName() {
+            return descriptiveName;
+        }
+
+        private final String descriptiveName;
+
+        private AttrMode(String descriptiveName) {
+            this.descriptiveName = descriptiveName;
+        }
     }

     /**
@@ -849,7 +862,7 @@
         DeferredAttrContext deferredAttrContext;

         protected DeferredTypeMap(AttrMode mode, Symbol msym, MethodResolutionPhase phase) {
-            super(String.format("deferredTypeMap[%s]", mode));
+            super(mode.getDescriptiveName());
             this.deferredAttrContext = new DeferredAttrContext(mode, msym, phase,
                     infer.emptyContext, emptyDeferredAttrContext, types.noWarnings);
         }


More information about the compiler-dev mailing list