public static TypeParamDef getParameterDefinition(TypeRef typeRef, Collection<TypeParamDef> parameters) { String name; if (typeRef instanceof ClassRef) { name = ((ClassRef)typeRef).getName(); } else if (typeRef instanceof TypeParamRef) { name = ((TypeParamRef)typeRef).getName(); } else if (typeRef instanceof PrimitiveRef) { name = ((PrimitiveRef)typeRef).getName(); } else { name = typeRef.toString(); } for (TypeParamDef parameter : parameters) { if (parameter.getName().equals(name)) { return parameter; } } return null; }
@Override public Method apply(Property property) { Method method = WITH_NEW_LIKE_NESTED.apply(property); if (!(property.getTypeRef() instanceof ClassRef)) { throw new IllegalStateException("Expected Nestable / Buildable type and found:" + property.getTypeRef()); } ClassRef baseType = (ClassRef) TypeAs.UNWRAP_COLLECTION_OF.apply(property.getTypeRef()); TypeRef returnType = property.hasAttribute(GENERIC_TYPE_REF) ? property.getAttribute(GENERIC_TYPE_REF) : T_REF; TypeDef nestedTypeImpl = PropertyAs.NESTED_CLASS_TYPE.apply(property); List<TypeRef> typeArguments = new ArrayList<TypeRef>(); for (TypeRef ignore : baseType.getArguments()) { typeArguments.add(Q); } typeArguments.add(returnType); ClassRef rewrapedImpl = nestedTypeImpl.toReference(typeArguments); return new MethodBuilder(method) .addToArguments(0, INDEX) .withName(method.getName().replaceFirst("add", "set")) .editBlock() .withStatements(new StringStatement("return new " + rewrapedImpl.getName() + "(index, item);")) .endBlock() .build(); } };
statementsWithItem.add(new StringStatement("this.builder = new " + builderType.getName() + "(this, item);")); constructors.add(new MethodBuilder() .withName("") .build()); statementsWithoutItem.add(new StringStatement("this.builder = new " + builderType.getName() + "(this);")); constructors.add(new MethodBuilder() .withName("")
String builderClass = builder.toReference().getName(); statements.add(new StringStatement("if (" + argumentName + "!=null){ this." + fieldName + "= new " + builderClass + "(" + argumentName + "); _visitables.add(this." + fieldName + ");} return (" + returnType + ") this;")); return statements; TypeRef dunwraped = combine(UNWRAP_COLLECTION_OF, UNWRAP_ARRAY_OF, UNWRAP_OPTIONAL_OF).apply(descendant.getTypeRef()); TypeDef builder = BUILDER.apply(((ClassRef) dunwraped).getDefinition()); String builderClass = builder.toReference().getName(); statements.add(new StringStatement("if (" + argumentName + " instanceof " + dunwraped + "){ this." + fieldName + "= new " + builderClass + "((" + dunwraped + ")" + argumentName + "); _visitables.add(this." + fieldName + ");}"));
? "return withNew" + methodNameBase + "Like(get" + methodNameBase + "() != null && get"+methodNameBase+"().isPresent() ? get" + methodNameBase + "().get() : new " + builderType.getName() + "().build());" : "return withNew" + methodNameBase + "Like(get" + methodNameBase + "() != null ? get" + methodNameBase + "(): new " + builderType.getName() + "().build());"; return new MethodBuilder() .withModifiers(TypeUtils.modifiersToInt(Modifier.PUBLIC))
String key = ref.getName();
String targetClass = targetType.getName(); parameters.addAll(targetType.getDefinition().getParameters()); String builderClass = targetClass + "Builder"; statements.add(createRemoveFromDescendantsFallback(targetType.getName(), property.getName())); statements.add(new StringStatement( "} return (" + returnType + ")this;"));
.endArgument() .withNewBlock() .addNewStringStatementStatement("return new " + rewrapedImpl.getName() + "(" + (isCollection ? "-1, " : "") + "item);") .endBlock() .build();
.withName(methodName) .withNewBlock() .addNewStringStatementStatement("return new " + rewrapedImpl.getName() + "();") .endBlock() .build();
final ClassRef targetType = (ClassRef) unwrapped; String targetClass = targetType.getName(); parameters.addAll(targetType.getDefinition().getParameters()); String builderClass = targetClass + "Builder"; statements.add(createAddToDescendantsFallback(targetType.getName(), propertyName)); statements.add(new StringStatement("} return (" + returnType + ")this;"));