1. The TypeSerializerCreator class used the last argument in its constructor, a
JClassType object, just to obtain the name of the TypeSerializer class that it
creates.
2. The FieldSerializer classes and the content of the *_TypeSerializer class
created by TypeSerializerCreator were determined only by the types in
SerializableTypeOracleBuilder. This was not at all clear from the previous
structure.
This patch simplifies TypeSerializerCreator by having it accept a String name
instead of a class object as the last argument. It modifies ProxyCreator, which
invokes TypeSerializerCreator, accordingly.
Review by: spoon
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@3103 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
index 762c9dd..a8f599d 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
@@ -233,7 +233,7 @@
rpcLog.setPrivate(true);
TypeSerializerCreator tsc = new TypeSerializerCreator(logger, sto, context,
- serviceIntf);
+ sto.getTypeSerializerQualifiedName(serviceIntf));
tsc.realize(logger);
enforceTypeVersioning = Shared.shouldEnforceTypeVersioning(logger,
diff --git a/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java b/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java
index 9e70229..d5d04db 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java
@@ -21,7 +21,6 @@
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JMethod;
-import com.google.gwt.core.ext.typeinfo.JPackage;
import com.google.gwt.core.ext.typeinfo.JParameterizedType;
import com.google.gwt.core.ext.typeinfo.JType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
@@ -35,8 +34,9 @@
import java.io.PrintWriter;
/**
- * This class generates a class that is able to serialize and deserialize a set
- * of types into or out of a stream.
+ * This class generates a class with name 'typeSerializerClassName' that is able
+ * to serialize and deserialize a set of types into or out of a stream. The set
+ * of types is obtained from the SerializableTypeOracle object.
*/
public class TypeSerializerCreator {
@@ -56,8 +56,6 @@
private final boolean enforceTypeVersioning;
- private final JClassType remoteService;
-
private final JType[] serializableTypes;
private final SerializableTypeOracle serializationOracle;
@@ -66,11 +64,13 @@
private final TypeOracle typeOracle;
+ private final String typeSerializerClassName;
+
public TypeSerializerCreator(TreeLogger logger,
SerializableTypeOracle serializationOracle, GeneratorContext context,
- JClassType remoteService) {
+ String typeSerializerClassName) {
this.context = context;
- this.remoteService = remoteService;
+ this.typeSerializerClassName = typeSerializerClassName;
this.serializationOracle = serializationOracle;
this.typeOracle = context.getTypeOracle();
@@ -85,8 +85,8 @@
public String realize(TreeLogger logger) {
logger = logger.branch(TreeLogger.DEBUG,
"Generating TypeSerializer for service interface '"
- + getServiceInterface().getQualifiedSourceName() + "'", null);
- String typeSerializerName = serializationOracle.getTypeSerializerQualifiedName(getServiceInterface());
+ + getTypeSerializerClassName() + "'", null);
+ String typeSerializerName = getTypeSerializerClassName();
if (srcWriter == null) {
return typeSerializerName;
}
@@ -172,20 +172,25 @@
+ serializationOracle.getFieldSerializerName(type).replace('.', '_');
}
+ private String[] getPackageAndClassName(String fullClassName) {
+ String className = fullClassName;
+ String packageName = "";
+ int index = -1;
+ if ((index = className.lastIndexOf('.')) >= 0) {
+ packageName = className.substring(0, index);
+ className = className.substring(index + 1, className.length());
+ }
+ return new String[]{packageName, className};
+ }
+
private JType[] getSerializableTypes() {
return serializableTypes;
}
-
- private JClassType getServiceInterface() {
- return remoteService;
- }
-
+
private SourceWriter getSourceWriter(TreeLogger logger, GeneratorContext ctx) {
- JClassType serviceIntf = getServiceInterface();
- JPackage serviceIntfPackage = serviceIntf.getPackage();
- String packageName = serviceIntfPackage != null
- ? serviceIntfPackage.getName() : "";
- String className = serializationOracle.getTypeSerializerSimpleName(getServiceInterface());
+ String name[] = getPackageAndClassName(getTypeSerializerClassName());
+ String packageName = name[0];
+ String className = name[1];
PrintWriter printWriter = ctx.tryCreate(logger, packageName, className);
if (printWriter == null) {
return null;
@@ -204,6 +209,10 @@
return composerFactory.createSourceWriter(ctx, printWriter);
}
+ private String getTypeSerializerClassName() {
+ return typeSerializerClassName;
+ }
+
/**
* Return <code>true</code> if this type is concrete and has a custom field
* serializer that does not declare an instantiate method.
@@ -279,7 +288,7 @@
{
srcWriter.print("@");
if (needsCreateMethod(type)) {
- srcWriter.print(serializationOracle.getTypeSerializerQualifiedName(getServiceInterface()));
+ srcWriter.print(getTypeSerializerClassName());
srcWriter.print("::");
srcWriter.print(getCreateMethodName(type));
} else {
@@ -402,7 +411,7 @@
srcWriter.print(DESERIALIZE_METHOD_SIGNATURE);
srcWriter.println(" /*-" + '{');
{
- String serializerTypeName = serializationOracle.getTypeSerializerQualifiedName(getServiceInterface());
+ String serializerTypeName = getTypeSerializerClassName();
srcWriter.indent();
srcWriter.println("var methodTable = @" + serializerTypeName
+ "::methodMap[typeSignature];");
@@ -423,7 +432,7 @@
srcWriter.indentln("return null;");
srcWriter.println("};");
} else {
- String serializerTypeName = serializationOracle.getTypeSerializerQualifiedName(getServiceInterface());
+ String serializerTypeName = getTypeSerializerClassName();
srcWriter.println("public native String getSerializationSignature(String typeName) /*-" + '{');
srcWriter.indent();
srcWriter.println("return @" + serializerTypeName
@@ -438,7 +447,7 @@
srcWriter.print(INSTANTIATE_METHOD_SIGNATURE);
srcWriter.println(" /*-" + '{');
{
- String serializerTypeName = serializationOracle.getTypeSerializerQualifiedName(getServiceInterface());
+ String serializerTypeName = getTypeSerializerClassName();
srcWriter.indent();
srcWriter.println("var methodTable = @" + serializerTypeName
+ "::methodMap[typeSignature];");
@@ -464,7 +473,7 @@
srcWriter.print(SERIALIZE_METHOD_SIGNATURE);
srcWriter.println(" /*-" + '{');
{
- String serializerTypeName = serializationOracle.getTypeSerializerQualifiedName(getServiceInterface());
+ String serializerTypeName = getTypeSerializerClassName();
srcWriter.indent();
srcWriter.println("var methodTable = @" + serializerTypeName
+ "::methodMap[typeSignature];");