extended support for extension methods

This commit is contained in:
Timo Westkämper 2010-06-10 17:48:13 +00:00
parent fbe4afcdd8
commit d73f429758
2 changed files with 42 additions and 6 deletions

View File

@ -39,6 +39,8 @@ public class QueryExtensions6Test {
QQueryExtensions6Test_User user = QQueryExtensions6Test_User.user;
QQueryExtensions6Test_User other = new QQueryExtensions6Test_User("other");
assertEquals("user.managedBy = other", user.isManagedBy(other).toString());
System.out.println(user.isManagedBy(new User()));
}

View File

@ -387,18 +387,25 @@ public class EntitySerializer implements Serializer{
}
protected void method(final EntityType model, Method method, SerializerConfig config, CodeWriter writer) throws IOException {
// header
String type = typeMappings.getExprType(method.getReturnType(), model, false, true, false);
writer.beginPublicMethod(type, method.getName(), method.getParameters(), new Transformer<Parameter,String>(){
String exprType = typeMappings.getExprType(method.getReturnType(), model, false, true, false);
String custType = typeMappings.getCustomType(method.getReturnType(), model, true);
exprArgsMethod(model, method, writer, exprType, custType);
if (!method.getParameters().isEmpty()){
normalArgsMethod(model, method, writer, exprType, custType);
}
}
private void exprArgsMethod(final EntityType model, Method method, CodeWriter writer, String exprType, String custType) throws IOException {
writer.beginPublicMethod(exprType, method.getName(), method.getParameters(), new Transformer<Parameter,String>(){
@Override
public String transform(Parameter p) {
return typeMappings.getExprType(p.getType(), model, false, false, true) + SPACE + p.getName();
}
});
// body start
String customClass = typeMappings.getCustomType(method.getReturnType(), model, true);
writer.beginLine(RETURN + customClass + ".create(");
// body start
writer.beginLine(RETURN + custType + ".create(");
String fullName = method.getReturnType().getFullName();
if (!fullName.equals(String.class.getName()) && !fullName.equals(Boolean.class.getName())){
method.getReturnType().appendLocalRawName(model, writer);
@ -414,6 +421,33 @@ public class EntitySerializer implements Serializer{
// body end
writer.end();
}
private void normalArgsMethod(final EntityType model, Method method, CodeWriter writer, String exprType, String custType) throws IOException {
writer.beginPublicMethod(exprType, method.getName(), method.getParameters(), new Transformer<Parameter,String>(){
@Override
public String transform(Parameter p) {
return p.getType().getLocalGenericName(model, true) + SPACE + p.getName();
}
});
// body start
writer.beginLine(RETURN + custType + ".create(");
String fullName = method.getReturnType().getFullName();
if (!fullName.equals(String.class.getName()) && !fullName.equals(Boolean.class.getName())){
method.getReturnType().appendLocalRawName(model, writer);
writer.append(".class, ");
}
writer.append(QUOTE + StringEscapeUtils.escapeJava(method.getTemplate()) + QUOTE);
writer.append(", this");
for (Parameter p : method.getParameters()){
writer.append(COMMA + "ExprConst.create(" + p.getName() + ")");
}
writer.append(");\n");
// body end
writer.end();
}
protected void outro(EntityType model, CodeWriter writer) throws IOException {
writer.end();