Revision: 9783
Author: sco...@google.com
Date: Mon Feb 28 13:30:00 2011
Log: Reduce JType and JPrimitiveType memory and serialization footprint.

http://gwt-code-reviews.appspot.com/1367801/

Review by: zun...@google.com
http://code.google.com/p/google-web-toolkit/source/detail?r=9783

Modified:
 /trunk/dev/core/src/com/google/gwt/dev/jjs/ast/JPrimitiveType.java
 /trunk/dev/core/src/com/google/gwt/dev/jjs/ast/JReferenceType.java
 /trunk/dev/core/src/com/google/gwt/dev/jjs/ast/JType.java

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/jjs/ast/JPrimitiveType.java Sat Oct 2 13:55:34 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/jjs/ast/JPrimitiveType.java Mon Feb 28 13:30:00 2011
@@ -25,6 +25,9 @@
  * Base class for all Java primitive types.
  */
 public class JPrimitiveType extends JType {
+  /*
+ * Primitive types are static singletons. Serialization via readResolve().
+   */

   private static final class Singletons {
public static final Map<String, JPrimitiveType> map = new HashMap<String, JPrimitiveType>();
@@ -57,13 +60,16 @@
   public static final JPrimitiveType VOID = new JPrimitiveType("void", "V",
       "java.lang.Void", null);

-  private final String signatureName;
-
-  private final String wrapperTypeName;
+  private final transient JValueLiteral defaultValue;
+
+  private final transient String signatureName;
+
+  private final transient String wrapperTypeName;

   private JPrimitiveType(String name, String signatureName,
-      String wrapperTypeName, JLiteral defaultValue) {
-    super(SourceOrigin.UNKNOWN, name, defaultValue);
+      String wrapperTypeName, JValueLiteral defaultValue) {
+    super(SourceOrigin.UNKNOWN, name);
+    this.defaultValue = defaultValue;
     this.signatureName = StringInterner.get().intern(signatureName);
     this.wrapperTypeName = StringInterner.get().intern(wrapperTypeName);
     Singletons.map.put(this.name, this);
@@ -74,10 +80,8 @@
    * if no such coercion is possible.
    */
   public JValueLiteral coerceLiteral(JValueLiteral value) {
-    JLiteral defaultValue = getDefaultValue();
-    if (defaultValue instanceof JValueLiteral) {
-      JValueLiteral defaultValueLiteral = (JValueLiteral) defaultValue;
-      return defaultValueLiteral.cloneFrom(value);
+    if (defaultValue != null) {
+      return defaultValue.cloneFrom(value);
     }
     return null;
   }
@@ -86,6 +90,11 @@
   public String getClassLiteralFactoryMethod() {
     return "Class.createForPrimitive";
   }
+
+  @Override
+  public final JLiteral getDefaultValue() {
+    return defaultValue;
+  }

   @Override
   public String getJavahSignatureName() {
@@ -111,6 +120,9 @@
     visitor.endVisit(this, ctx);
   }

+  /**
+   * Canonicalize to singleton; uses {@link JType#name}.
+   */
   private Object readResolve() {
     return Singletons.map.get(name);
   }
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/jjs/ast/JReferenceType.java Sat Jan 22 17:19:44 2011 +++ /trunk/dev/core/src/com/google/gwt/dev/jjs/ast/JReferenceType.java Mon Feb 28 13:30:00 2011
@@ -25,7 +25,7 @@
   private transient JNonNullType nonNullType;

   public JReferenceType(SourceInfo info, String name) {
-    super(info, name, JNullLiteral.INSTANCE);
+    super(info, name);
   }

   /**
@@ -37,6 +37,11 @@
   public boolean canBeNull() {
     return true;
   }
+
+  @Override
+  public final JLiteral getDefaultValue() {
+    return JNullLiteral.INSTANCE;
+  }

   @Override
   public String getJavahSignatureName() {
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/jjs/ast/JType.java Sat Oct 2 13:55:34 2010 +++ /trunk/dev/core/src/com/google/gwt/dev/jjs/ast/JType.java Mon Feb 28 13:30:00 2011
@@ -24,19 +24,15 @@
 public abstract class JType extends JNode implements HasName, CanBeFinal {

   protected final String name;
-  private final JLiteral defaultValue;
-
-  public JType(SourceInfo info, String name, JLiteral defaultValue) {
+
+  public JType(SourceInfo info, String name) {
     super(info);
     this.name = StringInterner.get().intern(name);
-    this.defaultValue = defaultValue;
   }

   public abstract String getClassLiteralFactoryMethod();

-  public JLiteral getDefaultValue() {
-    return defaultValue;
-  }
+  public abstract JLiteral getDefaultValue();

   public abstract String getJavahSignatureName();

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to