*/
package com.vaadin.terminal.gwt.client.ui.splitpanel;
+import java.io.Serializable;
+
import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.client.Connector;
this.splitterState = splitterState;
}
- public static class SplitterState {
+ public static class SplitterState implements Serializable {
private float position;
private String positionUnit;
private boolean positionReversed = false;
package com.vaadin.terminal.gwt.widgetsetutils;
import java.io.PrintWriter;
+import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
TypeOracle typeOracle = context.getTypeOracle();
Set<JClassType> typesNeedingSerializers = findTypesNeedingSerializers(
typeOracle, logger);
+ warnIfNotJavaSerializable(typesNeedingSerializers, typeOracle,
+ logger);
Set<JClassType> typesWithExistingSerializers = findTypesWithExistingSerializers(
typeOracle, logger);
Set<JClassType> serializerMappings = new HashSet<JClassType>();
return packageName + "." + className;
}
+ /**
+ * Emits a warning for all classes that are used in communication but do not
+ * implement java.io.Serializable. Implementing java.io.Serializable is not
+ * needed for communication but for the server side Application to be
+ * serializable i.e. work in GAE for instance.
+ *
+ * @param typesNeedingSerializers
+ * @param typeOracle
+ * @param logger
+ */
+ private void warnIfNotJavaSerializable(
+ Set<JClassType> typesNeedingSerializers, TypeOracle typeOracle,
+ TreeLogger logger) {
+ JClassType javaSerializable = typeOracle.findType(Serializable.class
+ .getName());
+ for (JClassType type : typesNeedingSerializers) {
+ boolean serializable = type.isAssignableTo(javaSerializable);
+ if (!serializable) {
+ logger.log(
+ Type.ERROR,
+ type
+ + " is used in RPC or shared state but does not implement "
+ + Serializable.class.getName()
+ + ". Communication will work but the Application on server side cannot be serialized if it refers to objects of this type.");
+ }
+ }
+ }
+
private Set<JClassType> findTypesWithExistingSerializers(
TypeOracle typeOracle, TreeLogger logger) {
JClassType serializerInterface = typeOracle
return;
}
- if (serializableTypes.contains(type))
+ if (serializableTypes.contains(type)) {
return;
+ }
JClassType typeClass = type.isClass();
if (typeClass != null) {