Rolling back Generator Result Caching for RPC (issues have been identified)
Review at http://gwt-code-reviews.appspot.com/1241801
Review by: zundel@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9477 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/rpc/rebind/RpcProxyCreator.java b/user/src/com/google/gwt/rpc/rebind/RpcProxyCreator.java
index 19e33bc..644501d 100644
--- a/user/src/com/google/gwt/rpc/rebind/RpcProxyCreator.java
+++ b/user/src/com/google/gwt/rpc/rebind/RpcProxyCreator.java
@@ -19,7 +19,7 @@
import com.google.gwt.core.client.impl.ArtificialRescue;
import com.google.gwt.core.client.impl.Impl;
import com.google.gwt.core.client.impl.ArtificialRescue.Rescue;
-import com.google.gwt.core.ext.GeneratorContextExt;
+import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JArrayType;
@@ -118,7 +118,7 @@
}
@Override
- protected void generateTypeHandlers(TreeLogger logger, GeneratorContextExt ctx,
+ protected void generateTypeHandlers(TreeLogger logger, GeneratorContext ctx,
SerializableTypeOracle serializationSto,
SerializableTypeOracle deserializationSto)
throws UnableToCompleteException {
@@ -271,7 +271,7 @@
@Override
protected String writeSerializationPolicyFile(TreeLogger logger,
- GeneratorContextExt ctx, SerializableTypeOracle serializationSto,
+ GeneratorContext ctx, SerializableTypeOracle serializationSto,
SerializableTypeOracle deserializationSto)
throws UnableToCompleteException {
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 da4e52e..4921dd4 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
@@ -19,7 +19,7 @@
import com.google.gwt.core.client.impl.Impl;
import com.google.gwt.core.ext.BadPropertyValueException;
import com.google.gwt.core.ext.ConfigurationProperty;
-import com.google.gwt.core.ext.GeneratorContextExt;
+import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.PropertyOracle;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
@@ -248,7 +248,7 @@
*
* @throws UnableToCompleteException
*/
- public String create(TreeLogger logger, GeneratorContextExt context)
+ public String create(TreeLogger logger, GeneratorContext context)
throws UnableToCompleteException {
TypeOracle typeOracle = context.getTypeOracle();
@@ -690,7 +690,7 @@
}
protected void generateTypeHandlers(TreeLogger logger,
- GeneratorContextExt context, SerializableTypeOracle typesSentFromBrowser,
+ GeneratorContext context, SerializableTypeOracle typesSentFromBrowser,
SerializableTypeOracle typesSentToBrowser)
throws UnableToCompleteException {
Event event = SpeedTracerLogger.start(CompilerEventType.GENERATOR_RPC_TYPE_SERIALIZER);
@@ -729,7 +729,7 @@
}
protected String writeSerializationPolicyFile(TreeLogger logger,
- GeneratorContextExt ctx, SerializableTypeOracle serializationSto,
+ GeneratorContext ctx, SerializableTypeOracle serializationSto,
SerializableTypeOracle deserializationSto)
throws UnableToCompleteException {
try {
@@ -830,7 +830,7 @@
}
private void emitPolicyFileArtifact(TreeLogger logger,
- GeneratorContextExt context, String partialPath)
+ GeneratorContext context, String partialPath)
throws UnableToCompleteException {
try {
String qualifiedSourceName = serviceIntf.getQualifiedSourceName();
@@ -881,7 +881,7 @@
return ResponseReader.OBJECT;
}
- private SourceWriter getSourceWriter(TreeLogger logger, GeneratorContextExt ctx,
+ private SourceWriter getSourceWriter(TreeLogger logger, GeneratorContext ctx,
JClassType serviceAsync) {
JPackage serviceIntfPkg = serviceAsync.getPackage();
String packageName = serviceIntfPkg == null ? "" : serviceIntfPkg.getName();
diff --git a/user/src/com/google/gwt/user/rebind/rpc/ServiceInterfaceProxyGenerator.java b/user/src/com/google/gwt/user/rebind/rpc/ServiceInterfaceProxyGenerator.java
index 0ac93b4..ded7cda 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/ServiceInterfaceProxyGenerator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/ServiceInterfaceProxyGenerator.java
@@ -15,25 +15,23 @@
*/
package com.google.gwt.user.rebind.rpc;
-import com.google.gwt.core.ext.GeneratorContextExt;
-import com.google.gwt.core.ext.GeneratorExt;
+import com.google.gwt.core.ext.Generator;
+import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
-import com.google.gwt.dev.javac.rebind.RebindResult;
-import com.google.gwt.dev.javac.rebind.RebindStatus;
/**
* Generator for producing the asynchronous version of a
* {@link com.google.gwt.user.client.rpc.RemoteService RemoteService} interface.
*/
-public class ServiceInterfaceProxyGenerator extends GeneratorExt {
+public class ServiceInterfaceProxyGenerator extends Generator {
@Override
- public RebindResult generateIncrementally(TreeLogger logger, GeneratorContextExt ctx,
+ public String generate(TreeLogger logger, GeneratorContext ctx,
String requestedClass) throws UnableToCompleteException {
-
+
TypeOracle typeOracle = ctx.getTypeOracle();
assert (typeOracle != null);
@@ -56,16 +54,7 @@
"Generating client proxy for remote service interface '"
+ remoteService.getQualifiedSourceName() + "'", null);
- String returnTypeName = proxyCreator.create(proxyLogger, ctx);
-
- /*
- * Return with RebindStatus.USE_PARTIAL_CACHED, since we are implementing an
- * incremental scheme, which allows us to use a mixture of previously cached
- * and newly generated compilation units and artifacts. For example, the
- * field serializers only need to be generated fresh if their source type
- * has changed (or if no previously cached version exists).
- */
- return new RebindResult(RebindStatus.USE_PARTIAL_CACHED, returnTypeName);
+ return proxyCreator.create(proxyLogger, ctx);
}
protected ProxyCreator createProxyCreator(JClassType remoteService) {
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 b286735..ebb31d8 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,7 @@
import com.google.gwt.core.client.JsArrayString;
import com.google.gwt.core.ext.BadPropertyValueException;
import com.google.gwt.core.ext.ConfigurationProperty;
-import com.google.gwt.core.ext.GeneratorContextExt;
+import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JClassType;
@@ -29,7 +29,6 @@
import com.google.gwt.core.ext.typeinfo.JParameterizedType;
import com.google.gwt.core.ext.typeinfo.JType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
-import com.google.gwt.dev.javac.rebind.CachedRebindResult;
import com.google.gwt.dev.util.log.speedtracer.CompilerEventType;
import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;
import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event;
@@ -100,7 +99,7 @@
}
}
- private final GeneratorContextExt context;
+ private final GeneratorContext context;
private final SerializableTypeOracle deserializationOracle;
@@ -122,7 +121,7 @@
public TypeSerializerCreator(TreeLogger logger,
SerializableTypeOracle serializationOracle,
- SerializableTypeOracle deserializationOracle, GeneratorContextExt context,
+ SerializableTypeOracle deserializationOracle, GeneratorContext context,
String typeSerializerClassName, String typeSerializerSimpleName)
throws UnableToCompleteException {
this.context = context;
@@ -203,52 +202,44 @@
return typeSerializerClassName;
}
-
+
/*
* Create a field serializer for a type if it does not have a custom
* serializer.
*/
- private void createFieldSerializer(TreeLogger logger, GeneratorContextExt ctx,
+ private void createFieldSerializer(TreeLogger logger, GeneratorContext ctx,
JType type) {
Event event = SpeedTracerLogger.start(CompilerEventType.GENERATOR_RPC_FIELD_SERIALIZER);
- try {
- assert (type != null);
- assert (serializationOracle.isSerializable(type) || deserializationOracle.isSerializable(type));
-
- JParameterizedType parameterizedType = type.isParameterized();
- if (parameterizedType != null) {
- createFieldSerializer(logger, ctx, parameterizedType.getRawType());
- return;
- }
-
- /*
- * Only a JClassType can reach this point in the code. JPrimitives have been
- * removed because their serialization is built in, interfaces have been
- * removed because they are not an instantiable type and parameterized types
- * have been broken down into their raw types.
- */
- assert (type.isClass() != null || type.isArray() != null);
-
- if (findCacheableFieldSerializerAndMarkForReuseIfAvailable(ctx, type)) {
- // skip generation of field serializer
- return;
- }
-
- JClassType customFieldSerializer = SerializableTypeOracleBuilder.findCustomFieldSerializer(
- typeOracle, type);
- FieldSerializerCreator creator = new FieldSerializerCreator(typeOracle,
- serializationOracle, deserializationOracle, (JClassType) type,
- customFieldSerializer);
- creator.realize(logger, ctx);
- } finally {
- event.end();
+ assert (type != null);
+ assert (serializationOracle.isSerializable(type) || deserializationOracle.isSerializable(type));
+
+ JParameterizedType parameterizedType = type.isParameterized();
+ if (parameterizedType != null) {
+ createFieldSerializer(logger, ctx, parameterizedType.getRawType());
+ return;
}
+
+ /*
+ * Only a JClassType can reach this point in the code. JPrimitives have been
+ * removed because their serialization is built in, interfaces have been
+ * removed because they are not an instantiable type and parameterized types
+ * have been broken down into their raw types.
+ */
+ assert (type.isClass() != null || type.isArray() != null);
+
+ JClassType customFieldSerializer = SerializableTypeOracleBuilder.findCustomFieldSerializer(
+ typeOracle, type);
+ FieldSerializerCreator creator = new FieldSerializerCreator(typeOracle,
+ serializationOracle, deserializationOracle, (JClassType) type,
+ customFieldSerializer);
+ creator.realize(logger, ctx);
+ event.end();
}
/*
* Create all of the necessary field serializers.
*/
- private void createFieldSerializers(TreeLogger logger, GeneratorContextExt ctx) {
+ private void createFieldSerializers(TreeLogger logger, GeneratorContext ctx) {
JType[] types = getSerializableTypes();
int typeCount = types.length;
for (int typeIndex = 0; typeIndex < typeCount; ++typeIndex) {
@@ -258,51 +249,7 @@
createFieldSerializer(logger, ctx, type);
}
}
-
- /*
- * check whether we can use a previously generated version of a
- * FieldSerializer. If so, mark it for reuse, and return true.
- * Otherwise return false.
- */
- private boolean findCacheableFieldSerializerAndMarkForReuseIfAvailable(
- GeneratorContextExt ctx, JType type) {
-
- CachedRebindResult lastResult = ctx.getCachedGeneratorResult();
- if (lastResult == null || !ctx.isGeneratorResultCachingEnabled()) {
- return false;
- }
-
- String fieldSerializerName =
- SerializationUtils.getStandardSerializerName((JClassType) type);
-
- if (type instanceof JClassType) {
- // check that it is available for reuse
- if (!lastResult.isTypeCached(fieldSerializerName)) {
- return false;
- }
- } else {
- return false;
- }
-
- try {
- /*
- * TODO(jbrosenberg): Change this check to use getVersion() from
- * TypeOracle, once that is available.
- */
- long lastModified = ctx.getSourceLastModifiedTime((JClassType) type);
-
- if (lastModified != 0L &&
- lastModified < lastResult.getTimeGenerated()) {
-
- // use cached version
- return ctx.reuseTypeFromCacheIfAvailable(fieldSerializerName);
- }
- } catch (RuntimeException ex) {
- // could get an exception checking modified time
- }
-
- return false;
- }
+
private String[] getPackageAndClassName(String fullClassName) {
String className = fullClassName;
String packageName = "";
@@ -318,7 +265,7 @@
return serializableTypes;
}
- private SourceWriter getSourceWriter(TreeLogger logger, GeneratorContextExt ctx) {
+ private SourceWriter getSourceWriter(TreeLogger logger, GeneratorContext ctx) {
String name[] = getPackageAndClassName(typeSerializerClassName);
String packageName = name[0];
String className = name[1];