public Statement generate(Context context) {
AnonymousClassStructureBuilder anonQueryClassBuilder = ObjectBuilder.newInstanceOf(ErraiTypedQuery.class, context).extend(
Stmt.loadVariable("entityManager"),
Stmt.loadVariable("actualResultType"),
Stmt.loadVariable("parameters"));
appendMatchesMethod(anonQueryClassBuilder);
appendComparatorMethod(anonQueryClassBuilder, context);
AnonymousClassStructureBuilder factoryBuilder = ObjectBuilder.newInstanceOf(TypedQueryFactory.class, context).extend(
Stmt.loadLiteral(resultType),
Stmt.newArray(ErraiParameter.class).initialize((Object[]) generateQueryParamArray()));
BlockBuilder<AnonymousClassStructureBuilder> createQueryMethod =
factoryBuilder.protectedMethod(
TypedQuery.class, "createQuery", Parameter.finalOf(ErraiEntityManager.class, "entityManager"))
.body();
createQueryMethod.append(Stmt.nestedCall(anonQueryClassBuilder.finish()).returnValue());
createQueryMethod.finish();
return factoryBuilder.finish();
}