blob: ff9a774882dd803fdac412f3a5f95d07f002e2fe [file] [log] [blame]
/*
* Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.user.server.rpc;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.client.rpc.TypeCheckedGenericClass;
import com.google.gwt.user.client.rpc.TypeCheckedObjectsTestSetValidator;
import com.google.gwt.user.server.rpc.impl.DequeMap;
import com.google.gwt.user.server.rpc.impl.SerializabilityUtil;
import com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.HashMap;
/**
* This class is defined outside of the TypeCheckedObjectTestSetFactory because
* of a bug where custom field serializers cannot be inner classes. Once we fix
* this bug we can move this class into the test set factory.
*/
@SuppressWarnings({"rawtypes", "unused"})
public class TypeCheckedGenericClass_ServerCustomFieldSerializer {
@SuppressWarnings("unchecked")
public static void deserializeChecked(ServerSerializationStreamReader streamReader,
TypeCheckedGenericClass instance, Type[] expectedParameterTypes,
DequeMap<TypeVariable<?>, Type> resolvedTypes) throws SerializationException {
Object junkKey = streamReader.readObject();
Object junkValue = streamReader.readObject();
/*
* If deserializing a superclass we will not have been instantiated using
* the custom instantiator, so skip the checks for correct markers.
*/
if (instance.getClass() != TypeCheckedGenericClass.class
|| ((instance.getMarkerKey() instanceof Integer)
&& ((Integer) instance.getMarkerKey()).intValue() == 54321
&& (instance.getMarkerValue() instanceof String) && ((String) instance.getMarkerValue())
.equals("LocalMarker"))) {
instance.setMarker(TypeCheckedObjectsTestSetValidator.markerKey,
TypeCheckedObjectsTestSetValidator.markerValue);
} else {
throw new SerializationException(
"Incorrect markers in TypeCheckedGenericClass server deserialization. "
+ "Custom instantiate probably not called.");
}
try {
Field declField = TypeCheckedGenericClass.class.getField("hashField");
Type declGenericType = declField.getGenericType();
SerializabilityUtil.resolveTypes(declGenericType, resolvedTypes);
instance.hashField = (HashMap) streamReader.readObject(declGenericType, resolvedTypes);
SerializabilityUtil.releaseTypes(declGenericType, resolvedTypes);
} catch (Exception e) {
throw new SerializationException(e);
}
}
@SuppressWarnings("unchecked")
public static void deserialize(ServerSerializationStreamReader streamReader,
TypeCheckedGenericClass instance) throws SerializationException {
Object junkKey = streamReader.readObject();
Object junkValue = streamReader.readObject();
/*
* If deserializing a superclass we will not have been instantiated using
* the custom instantiator, so skip the checks for correct markers.
*/
if (instance.getClass() != TypeCheckedGenericClass.class
|| ((instance.getMarkerKey() instanceof Integer)
&& ((Integer) instance.getMarkerKey()).intValue() == 54321
&& (instance.getMarkerValue() instanceof String) && ((String) instance.getMarkerValue())
.equals("LocalMarker"))) {
instance.setMarker(TypeCheckedObjectsTestSetValidator.markerKey,
TypeCheckedObjectsTestSetValidator.markerValue);
} else {
throw new SerializationException(
"Incorrect markers in TypeCheckedGenericClass server deserialization. "
+ "Custom instantiate probably not called.");
}
instance.hashField = (HashMap) streamReader.readObject();
}
public static TypeCheckedGenericClass instantiateChecked(
ServerSerializationStreamReader streamReader, Type[] expectedParameterTypes,
DequeMap<TypeVariable<?>, Type> resolvedTypes) {
TypeCheckedGenericClass<Integer, String> result =
new TypeCheckedGenericClass<Integer, String>();
result.setMarker(54321, "LocalMarker");
return result;
}
public static TypeCheckedGenericClass instantiate(
ServerSerializationStreamReader streamReader) {
TypeCheckedGenericClass<Integer, String> result =
new TypeCheckedGenericClass<Integer, String>();
result.setMarker(54321, "LocalMarker");
return result;
}
}