private MethodDeclaration createSlotObjects() {
   SimpleName resultName = factory.newSimpleName("results");
   List<Statement> statements = Lists.create();
   statements.add(
       new TypeBuilder(factory, importer.toType(Writable.class))
           .array(1)
           .newArray(getSlotCount())
           .toLocalVariableDeclaration(importer.toType(Writable[].class), resultName));
   for (ResolvedSlot slot : slots) {
     Expression object;
     if (slot.getSortProperties().isEmpty()
         && ParallelSortClientEmitter.legacy(environment) == false) {
       object = Models.toNullLiteral(factory);
     } else {
       DataClass slotClass = slot.getValueClass();
       object = slotClass.createNewInstance(importer.toType(slotClass.getType()));
     }
     statements.add(
         new ExpressionBuilder(factory, resultName)
             .array(slot.getSlotNumber())
             .assignFrom(object)
             .toStatement());
   }
   statements.add(new ExpressionBuilder(factory, resultName).toReturnStatement());
   return factory.newMethodDeclaration(
       null,
       new AttributeBuilder(factory)
           .annotation(importer.toType(Override.class))
           .Protected()
           .toAttributes(),
       importer.toType(Writable[].class),
       factory.newSimpleName(SlotSorter.NAME_CREATE_SLOT_OBJECTS),
       Collections.<FormalParameterDeclaration>emptyList(),
       statements);
 }
 private MethodDeclaration createSlotNames() {
   SimpleName resultName = factory.newSimpleName("results");
   List<Statement> statements = Lists.create();
   statements.add(
       new TypeBuilder(factory, importer.toType(String.class))
           .array(1)
           .newArray(getSlotCount())
           .toLocalVariableDeclaration(importer.toType(String[].class), resultName));
   for (ResolvedSlot slot : slots) {
     Expression outputName;
     if (slot.getSortProperties().isEmpty()
         && ParallelSortClientEmitter.legacy(environment) == false) {
       outputName = Models.toNullLiteral(factory);
     } else {
       outputName = Models.toLiteral(factory, slot.getSource().getOutputName());
     }
     statements.add(
         new ExpressionBuilder(factory, resultName)
             .array(slot.getSlotNumber())
             .assignFrom(outputName)
             .toStatement());
   }
   statements.add(new ExpressionBuilder(factory, resultName).toReturnStatement());
   return factory.newMethodDeclaration(
       null,
       new AttributeBuilder(factory)
           .annotation(importer.toType(Override.class))
           .Protected()
           .toAttributes(),
       importer.toType(String[].class),
       factory.newSimpleName(SlotSorter.NAME_GET_OUTPUT_NAMES),
       Collections.<FormalParameterDeclaration>emptyList(),
       statements);
 }