private void generateCollectionAddRemove( JType bean, BuilderModel model, BuilderPropertyModel property) { if (property.getType().isCollection() && model.isGenerateAddRemoveMethodsForIndexedProperties()) { SourceTemplate add = newSourceTemplate() .var("p.name", property.getPropertyName()) .var("p.addName", property.getPropertyAddName()) .var("p.type", property.getType().getObjectTypeFullName()) .var("p.newType", property.getPropertyConcreteType()) .var("p.genericPart", property.getType().getGenericPartOrEmpty()) .var("p.valueType", property.getType().getIndexedValueTypeNameOrNull()) .var("self.type", model.getBuilderSelfType()) .var("self.getter", model.getBuilderSelfAccessor()) .pl("public ${self.type} ${p.addName}(final ${p.valueType} val){") .pl(" if(this.${p.name} == null){ ") .pl(" this.${p.name} = new ${p.newType}${p.genericPart}(); ") .pl(" }") .pl(" this.${p.name}.add(val);") .pl(" return ${self.getter};") .pl("}"); addMethod(bean, add.asMethodNodeSnippet(), model.isMarkGenerated()); SourceTemplate remove = newSourceTemplate() .var("p.name", property.getPropertyName()) .var("p.removeName", property.getPropertyRemoveName()) .var("p.type", property.getType().getObjectTypeFullName()) .var("p.newType", property.getPropertyConcreteType()) .var("p.valueType", property.getType().getIndexedValueTypeNameOrNull()) .var("self.type", model.getBuilderSelfType()) .var("self.getter", model.getBuilderSelfAccessor()) .pl("public ${self.type} ${p.removeName}(final ${p.valueType} val){") .pl(" if(this.${p.name} != null){ ") .pl(" this.${p.name}.remove(val);") .pl(" }") .pl(" return ${self.getter};") .pl("}"); addMethod(bean, remove.asMethodNodeSnippet(), model.isMarkGenerated()); } }