private static String toInstanceConstructorBody(JavaClazz clazz, String fluent) { JavaMethod constructor = findBuildableConstructor(clazz); StringBuilder sb = new StringBuilder(); sb.append("this.fluent = " + fluent + "; "); for (JavaProperty property : constructor.getArguments()) { JavaMethod getter = findGetter(clazz, property); sb.append(fluent).append(".with").append(property.getNameCapitalized()).append("(instance.").append(getter.getName()).append("()); "); } return sb.toString(); }
private static boolean isApplicableGetterOf(JavaMethod method, JavaProperty property) { if (!method.getReturnType().isAssignable(property.getType())) { return false; } if (method.getName().endsWith("get" + property.getNameCapitalized())) { return true; } if (method.getName().endsWith("is" + property.getNameCapitalized())) { return true; } return false; }
@Override public String apply(JavaProperty item) { String prefix = item.getType().isBoolean() ? "is" : "get"; return "fluent." + prefix + item.getNameCapitalized() + "()"; } }, ","));
private String getBody(JavaProperty property) { String name = property.getName(); JavaType type = property.getType(); String className = type.getClassName(); StringBuilder sb = new StringBuilder(); if (type.isCollection()) { sb.append("this." + name + ".clear();"); if (className.contains("Map")) { sb.append("if (" + name + " != null) {this." + name + ".putAll(" + name + ");} return (T) this;"); } else if (className.contains("List") || className.contains("Set")) { JavaType unwraped = TypeAs.UNWRAP_COLLECTION_OF.apply(property.getType()); String addToMethodName = "addTo" + property.getNameCapitalized(); sb.append("if (" + name + " != null) {for (" + unwraped.getSimpleName() + " item : " + name + "){this." + addToMethodName + "(item);}} return (T) this;"); } return sb.toString(); } else if (isBuildable(property)) { JavaType builder = combine(UNWRAP_COLLECTION_OF, BUILDER).apply(property.getType()); String propertyName = property.getName(); String builderClass = builder.getSimpleName(); return "if (" + propertyName + "!=null){ this." + propertyName + "= new " + builderClass + "(" + propertyName + "); _visitables.add(this." + propertyName + ");} return (T) this;"; } return "this." + property.getName() + "=" + property.getName() + "; return (T) this;"; }
@Override public JavaMethod apply(JavaProperty property) { String methodName = "with" + property.getNameCapitalized(); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withName(methodName) .withReturnType(T) .withArguments(new JavaProperty[]{property}) .addToAttributes(BODY, getBody(property)) .build(); }
@Override public JavaMethod apply(JavaProperty property) { String methodName = "set" + property.getNameCapitalized(); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withName(methodName) .withReturnType(VOID) .withArguments(new JavaProperty[]{property}) .addToAttributes(BODY, "this." + property.getName() + "=" + property.getName() + ";") .build(); } },
for (JavaType descendant : BuilderUtils.getBuildableDescendants(candidate)) { JavaType collectionType = new JavaTypeBuilder(baseType).withGenericTypes(new JavaType[]{descendant}).build(); String propertyName = deCaptializeFirst(descendant.getSimpleName()) + property.getNameCapitalized(); result.add(new JavaPropertyBuilder(property) .withName(propertyName) String propertyName = descendant.getSimpleName() + property.getNameCapitalized(); result.add(new JavaPropertyBuilder(property) .withName(propertyName)
@Override public JavaMethod apply(JavaProperty property) { String methodName = "with" + property.getNameCapitalized(); JavaType unwraped = combine(UNWRAP_COLLECTION_OF, UNWRAP_ARRAY_OF).apply(property.getType()); String addToMethodName = "addTo" + property.getNameCapitalized(); JavaProperty arrayProperty = new JavaPropertyBuilder(property) .withType(new JavaTypeBuilder(unwraped) .withArray(true) .build()) .withArray(true) .build(); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withName(methodName) .withReturnType(T) .withArguments(new JavaProperty[]{arrayProperty}) .addToAttributes(BODY, "this." + property.getName() + ".clear(); if (" + property.getName() + " != null) {for (" + unwraped.getSimpleName() + " item :" + property.getName() + "){ this." + addToMethodName + "(item);}} return (T) this;") .build(); }
@Override public JavaMethod apply(JavaProperty property) { String prefix = property.getType().isBoolean() ? "is" : "get"; String methodName = prefix + property.getNameCapitalized(); JavaType type = property.getType(); Boolean isBuildable = isBuildable(type); JavaType targetType = isBuildable ? VISITABLE_BUILDER.apply(type) : TypeAs.UNWRAP_ARRAY_OF.apply(type); String body = String.format(isBuildable ? BUILDABLE_ARRAY_GETTER_TEXT : SIMPLE_ARRAY_GETTER_TEXT,type.getClassName(), targetType.getSimpleName(), property.getName(), type.getClassName()); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withName(methodName) .withReturnType(property.getType()) .withArguments(new JavaProperty[]{}) .addToAttributes(BODY, body) .build(); } },
@Override public JavaMethod apply(JavaProperty property) { JavaType mapType = property.getType(); JavaType keyType = mapType.getGenericTypes()[0]; JavaProperty keyProperty = new JavaPropertyBuilder().withName("key").withType(keyType).build(); String methodName = "removeFrom" + property.getNameCapitalized(); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withName(methodName) .withReturnType(T) .withArguments(new JavaProperty[]{keyProperty}) .addToAttributes(BODY, "if(key != null) {this." + property.getName() + ".remove(key);} return (T)this;") .build(); } }, WITH_NEW_NESTED {
@Override public JavaMethod apply(JavaProperty property) { JavaType mapType = property.getType(); JavaType keyType = mapType.getGenericTypes()[0]; JavaType valueType = mapType.getGenericTypes()[1]; JavaProperty keyProperty = new JavaPropertyBuilder().withName("key").withType(keyType).build(); JavaProperty valueProperty = new JavaPropertyBuilder().withName("value").withType(valueType).build(); String methodName = "addTo" + property.getNameCapitalized(); return new JavaMethodBuilder() .addToModifiers(Modifier.PUBLIC) .withName(methodName) .withReturnType(T) .withArguments(new JavaProperty[]{keyProperty, valueProperty}) .addToAttributes(BODY, "if(key != null && value != null) {this." + property.getName() + ".put(key, value);} return (T)this;") .build(); } }, REMOVE_FROM_MAP {
.build(); String methodName = "removeFrom" + property.getNameCapitalized(); String body = ""; Set<JavaProperty> descendants = getPropertyBuildableAncestors(property);
.build(); String methodName = "addTo" + property.getNameCapitalized(); String body = ""; Set<JavaProperty> descendants = getPropertyBuildableAncestors(property);
@Override public JavaMethod apply(JavaProperty property) { String prefix = property.getType().isBoolean() ? "is" : "get"; String methodName = prefix + property.getNameCapitalized(); String body = null;