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