for (RpcDataArtifact data : artifacts.find(RpcDataArtifact.class)) {
allSerializableFields.putAll(data.getOperableFields());
}
for (CompilationResult result : artifacts.find(CompilationResult.class)) {
Builder builder = new Builder();
for (Map.Entry<String, List<String>> entry : allSerializableFields.entrySet()) {
builder.setSerializableFields(entry.getKey(), entry.getValue());
}
for (SymbolData symbolData : result.getSymbolMap()) {
String castableTypeMapString =
(symbolData.getCastableTypeMap() == null) ? null :
symbolData.getCastableTypeMap().toJs();
builder.add(symbolData.getSymbolName(), symbolData.getJsniIdent(),
symbolData.getClassName(), symbolData.getMemberName(),
symbolData.getRuntimeTypeId(),
new CastableTypeDataImpl(castableTypeMapString));
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
builder.getOracle().store(out);
} catch (IOException e) {
// Should generally not happen
logger.log(TreeLogger.ERROR, "Unable to store deRPC data", e);
throw new UnableToCompleteException();
}