public class CometSerializerGenerator extends GeneratorExt {
@Override
public RebindResult generateIncrementally(TreeLogger logger, GeneratorContextExt context, String typeName) throws UnableToCompleteException {
TypeOracle typeOracle = context.getTypeOracle();
// Create the CometSerializer impl
String packageName = "comet";
String className = typeName.replace('.', '_') + "Impl";
PrintWriter printWriter = context.tryCreate(logger, packageName, className);
if (printWriter != null) {
try {
JClassType type = typeOracle.getType(typeName);
SerialTypes annotation = type.getAnnotation(SerialTypes.class);
if (annotation == null) {
logger.log(TreeLogger.ERROR, "No SerialTypes annotation on CometSerializer type: " + typeName);
throw new UnableToCompleteException();
}
SerializableTypeOracleBuilder typesSentToBrowserBuilder = new SerializableTypeOracleBuilder(logger, context.getPropertyOracle(), context);
SerializableTypeOracleBuilder typesSentFromBrowserBuilder = new SerializableTypeOracleBuilder(logger, context.getPropertyOracle(), context);
for (Class<? extends Serializable> serializable : annotation.value()) {
int rank = 0;
if (serializable.isArray()) {
while (serializable.isArray()) {
serializable = (Class<? extends Serializable>) serializable.getComponentType();
rank++;
}
}
JType resolvedType = typeOracle.getType(serializable.getCanonicalName());
while (rank > 0) {
resolvedType = typeOracle.getArrayType(resolvedType);
rank--;
}
typesSentToBrowserBuilder.addRootType(logger, resolvedType);
}