Element[] orig = originating.toArray(new Element[originating.size()]);
origHelper = orig;
JavaFileObject jfo = filer.createSourceFile(qualifiedBuilderName, orig);
Writer writer = jfo.openWriter();
JavaWriter jw = new JavaWriter(writer);
writePackage(jw, entry.getKey());
jw.emitImports("android.os.Bundle");
jw.beginType(builder, "class", EnumSet.of(Modifier.PUBLIC, Modifier.FINAL));
jw.emitField("Bundle", "mArguments", EnumSet.of(Modifier.PRIVATE, Modifier.FINAL),
"new Bundle()");
jw.emitEmptyLine();
Set<AnnotatedField> required =
collectArgumentsForType(typeUtils, entry.getKey(), fieldsByType, true, true);
String[] args = new String[required.size() * 2];
int index = 0;
for (AnnotatedField arg : required) {
args[index++] = arg.getType();
args[index++] = arg.getVariableName();
}
jw.beginMethod(null, builder, EnumSet.of(Modifier.PUBLIC), args);
for (AnnotatedField arg : required) {
writePutArguments(jw, arg.getVariableName(), "mArguments", arg);
}
jw.endMethod();
if (!required.isEmpty()) {
writeNewFragmentWithRequiredMethod(builder, entry.getKey(), jw, args);
}
Set<AnnotatedField> allArguments =
collectArgumentsForType(typeUtils, entry.getKey(), fieldsByType, false, true);
Set<AnnotatedField> optionalArguments = new HashSet<AnnotatedField>(allArguments);
optionalArguments.removeAll(required);
for (AnnotatedField arg : optionalArguments) {
writeBuilderMethod(builder, jw, arg);
}
writeInjectMethod(jw, entry.getKey(),
collectArgumentsForType(typeUtils, entry.getKey(), fieldsByType, false, false));
writeBuildMethod(jw, entry.getKey());
writeBuildSubclassMethod(jw, entry.getKey());
jw.endType();
jw.close();
autoMapping.put(qualifiedFragmentName, qualifiedBuilderName);
} catch (IOException e) {
error(entry.getKey(), "Unable to write builder for type %s: %s", entry.getKey(),
e.getMessage());