public static Pojo code(PojoConfiguration configuration, String processorQualifiedName, ClassInfo classInfo) { AnnotationSpec annotationSpec = AnnotationSpec.builder(ClassName.get(Generated.class)) .addMember("value", "$S", processorQualifiedName) .build(); ClassName className = classInfo.toClassNameSuffix("Pojo"); ClassName classNameBuilder = classInfo.toClassNameSuffix("Builder"); ClassName classNameBuilderPojo = classInfo.toClassNameSuffix("BuilderPojo"); List<ConstructorInfo> constructorInfoList = WayIterables .from(classInfo.getConstructorInfoMap()) .filter(ConstructorInfoHasAccessInfo.not(AccessInfo.PRIVATE)) .toImmutableList(); List<MethodInfo> methodInfoList = classInfo.getMethodInfoIterable() .filter(MethodInfoHasModifierInfo.get(ModifierInfo.ABSTRACT)) .filter(MethodInfoHasReturnTypeInfo.not(SimpleTypePrimitives.VOID)) .filter(MethodInfoHasParameterInfoListSize.get(0)) .toImmutableList(); TypeParameterInfoMap typeParameterInfoMap = classInfo.typeParameterInfoMap(); List<TypeVariableName> typeVariableNameList = typeParameterInfoMap.toTypeVariableNameList(); List<TypeVariableName> typeVariableNameUnboundedList = typeParameterInfoMap.toTypeVariableNameUnboundedList(); return new Pojo( configuration, annotationSpec, classInfo, className, classNameBuilder, classNameBuilderPojo, constructorInfoList, methodInfoList, typeVariableNameList, typeVariableNameUnboundedList); }