private void processMasterSelection(
LineEndProcessor.Context context,
OperatorHelper selector) {
assert context != null;
assert selector != null;
ModelFactory f = context.getModelFactory();
Expression lookup = createLookup(context, f);
Expression selected = context.createLocalVariable(
resource.getMasterDataClass().getType(),
Models.toNullLiteral(f));
List<Expression> arguments = Lists.create();
arguments.add(lookup);
arguments.add(context.getInput());
for (OperatorDescription.Parameter param : context.getOperatorDescription().getParameters()) {
arguments.add(Models.toLiteral(f, param.getValue()));
}
assert selector.getParameterTypes().size() <= arguments.size();
if (selector.getParameterTypes().size() <= arguments.size()) {
arguments = arguments.subList(0, selector.getParameterTypes().size());
}
Expression impl = context.createImplementation();
context.add(f.newIfStatement(
new ExpressionBuilder(f, lookup)
.apply(InfixOperator.NOT_EQUALS, Models.toNullLiteral(f))
.toExpression(),
f.newBlock(new ExpressionBuilder(f, selected)
.assignFrom(new ExpressionBuilder(f, impl)
.method(selector.getName(), arguments)
.toExpression())
.toStatement())));