@Override public JavaMethod apply(JavaProperty property) { String methodName = "end" + captializeFirst(property.getType().isCollection() ? singularize(property.getName()) : property.getName()); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withReturnType(N) .withName(methodName) .addToAttributes(BODY, "return and();") .build(); } };
@Override public Set<JavaMethod> apply(JavaProperty property) { Set<JavaMethod> result = new LinkedHashSet<JavaMethod>(); JavaClazz clazz = PropertyAs.CLASS.apply(property); for (JavaMethod constructor : getInlineableConstructors(property)) { String ownPrefix = property.getType().isCollection() ? "addNew" : "withNew"; String ownName = ownPrefix + captializeFirst(property.getType().isCollection() ? singularize(property.getName()) : property.getName()); String delegatePrefix = property.getType().isCollection() ? "addTo" : "with"; String delegateName = delegatePrefix + captializeFirst(property.getName()); String args = StringUtils.join(constructor.getArguments(), new Function<JavaProperty, String>() { @Override public String apply(JavaProperty item) { return item.getName(); } }, ", "); result.add(new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withReturnType(T) .withArguments(constructor.getArguments()) .withName(ownName) .addToAttributes(BODY, "return " + delegateName + "(new " + clazz.getType().getSimpleName() + "(" + args + "));") .build()); } return result; } };
@Override public JavaMethod apply(JavaProperty property) { //We need to repackage because we are nesting under this class. JavaType nestedType = PropertyAs.NESTED_TYPE.apply(property); JavaType rewraped = new JavaTypeBuilder(nestedType).withGenericTypes(new JavaType[]{T}).build(); String prefix = property.getType().isCollection() ? "addNew" : "withNew"; String methodName = prefix + captializeFirst(property.getType().isCollection() ? singularize(property.getName()) : property.getName()); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withReturnType(rewraped) .withName(methodName) .addToAttributes(BODY, "return new " + rewraped.getSimpleName() + "();") .build(); } }, WITH_NEW_LIKE_NESTED {
@Override public JavaMethod apply(JavaProperty property) { JavaType baseType = TypeAs.UNWRAP_COLLECTION_OF.apply(property.getType()); JavaType nestedType = PropertyAs.NESTED_TYPE.apply(property); //JavaType nestedUnwrapped = new JavaTypeBuilder(nestedType).withGenericTypes(new JavaType[0]).build(); //We need to repackage because we are nesting under this class. JavaType rewraped = new JavaTypeBuilder(nestedType).withGenericTypes(new JavaType[]{T}).build(); String prefix = property.getType().isCollection() ? "addNew" : "withNew"; String suffix = "Like"; String methodName = prefix + captializeFirst(property.getType().isCollection() ? singularize(property.getName()) : property.getName()) + suffix; return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withReturnType(rewraped) .withName(methodName) .addNewArgument() .withName("item") .withType(baseType) .endArgument() .addToAttributes(BODY, "return new " + rewraped.getSimpleName() + "(item);") .build(); } }, EDIT_NESTED {