Name keyOrNull, Name valueOrNull,
Name groupingOrNull, Name orderingOrNull,
Location outputLocation) throws IOException {
assert compiledSlots != null;
assert outputLocation != null;
Name partitionerOrNull;
Name reducerOrNull;
if (keyOrNull != null) {
partitionerOrNull = Models.toName(
environment.getModelFactory(), Partitioner.class.getName().replace('$', '.'));
reducerOrNull = Models.toName(
environment.getModelFactory(), DirectOutputReducer.class.getName());
} else {
partitionerOrNull = null;
reducerOrNull = null;
}
Engine engine = new Engine(
environment,
moduleId,
compiledSlots,
outputLocation,
keyOrNull, valueOrNull,
groupingOrNull, orderingOrNull, partitionerOrNull,
reducerOrNull);
CompilationUnit source = engine.generate();
environment.emit(source);
Name packageName = source.getPackageDeclaration().getName();
SimpleName simpleName = source.getTypeDeclarations().get(0).getName();
QualifiedName name = environment
.getModelFactory()
.newQualifiedName(packageName, simpleName);
LOG.debug("\"{}\" will use {}", moduleId, name);