statements.add(new TypeBuilder(factory, util.t(OperatorDescription.Builder.class))
.newObject(factory.newClassLiteral(util.t(descriptor.getAnnotationType())))
.toLocalVariableDeclaration(
util.t(OperatorDescription.Builder.class),
builderName));
statements.add(new ExpressionBuilder(factory, builderName)
.method("declare",
factory.newClassLiteral(util.t(operatorClass.getElement())),
factory.newClassLiteral(factory.newNamedType(
util.getImplementorName(operatorClass.getElement()))),
util.v(descriptor.getName()))
.toStatement());
for (VariableElement parameter : context.element.getParameters()) {
statements.add(new ExpressionBuilder(factory, builderName)
.method("declareParameter",
new TypeBuilder(factory, util.t(environment.getErasure(parameter.asType())))
.dotClass()
.toExpression())
.toStatement());
}
for (OperatorPortDeclaration var : descriptor.getInputPorts()) {
ShuffleKey key = var.getShuffleKey();
List<Expression> arguments = Lists.create();
arguments.add(util.v(var.getName()));
arguments.add(factory.newSimpleName(var.getName()));
if (key != null) {
arguments.add(toSource(key));
}
statements.add(new ExpressionBuilder(factory, builderName)
.method("addInput", arguments)
.toStatement());
}
for (OperatorPortDeclaration var : descriptor.getOutputPorts()) {
Expression type = toExpression(var);
statements.add(new ExpressionBuilder(factory, builderName)
.method("addOutput", util.v(var.getName()), type)
.toStatement());
}
for (OperatorPortDeclaration var : descriptor.getParameters()) {
Expression type = toExpression(var);
statements.add(new ExpressionBuilder(factory, builderName)
.method("addParameter",
util.v(var.getName()),
type,
factory.newSimpleName(var.getName()))
.toStatement());
}
for (Expression attr : descriptor.getAttributes()) {
statements.add(new ExpressionBuilder(factory, builderName)
.method("addAttribute", attr)
.toStatement());
}
Expression resolver = new ExpressionBuilder(factory, factory.newThis())
.field(RESOLVER_FIELD_NAME)
.toExpression();
statements.add(new ExpressionBuilder(factory, resolver)
.assignFrom(new ExpressionBuilder(factory, builderName)
.method("toResolver")
.toExpression())
.toStatement());
for (OperatorPortDeclaration var : descriptor.getInputPorts()) {
statements.add(new ExpressionBuilder(factory, resolver)
.method("resolveInput",
util.v(var.getName()),
factory.newSimpleName(var.getName()))
.toStatement());
}
for (OperatorPortDeclaration var : descriptor.getOutputPorts()) {
statements.add(new ExpressionBuilder(factory, factory.newThis())
.field(var.getName())
.assignFrom(new ExpressionBuilder(factory, resolver)
.method("resolveOutput", util.v(var.getName()))
.toExpression())
.toStatement());
}
return statements;