@Override
    public TypeDefinition build(
            ProcessingEnvironment processingEnv, DeclaredType type, Map<String, TypeDefinition> typeCache) {
        String typeName = type.toString();
        TypeDefinition typeDefinition = new TypeDefinition(typeName);
        // Generic Type arguments
        type.getTypeArguments().stream()
                .map(typeArgument -> TypeDefinitionBuilder.build(
                        processingEnv, typeArgument, typeCache)) // build the TypeDefinition from typeArgument
                .filter(Objects::nonNull)
                .map(TypeDefinition::getType)
                .forEach(typeDefinition.getItems()::add); // Add into the declared TypeDefinition
        return typeDefinition;
    }
@Test
    void testBuild() {

        buildAndAssertTypeDefinition(
                processingEnv, stringsField, "java.util.Collection<java.lang.String>", "java.lang.String", builder);

        buildAndAssertTypeDefinition(
                processingEnv,
                colorsField,
                "java.util.List<org.apache.dubbo.metadata.annotation.processing.model.Color>",
                "org.apache.dubbo.metadata.annotation.processing.model.Color",
                builder);

        buildAndAssertTypeDefinition(
                processingEnv,
                primitiveTypeModelsField,
                "java.util.Queue<org.apache.dubbo.metadata.annotation.processing.model.PrimitiveTypeModel>",
                "org.apache.dubbo.metadata.annotation.processing.model.PrimitiveTypeModel",
                builder);

        buildAndAssertTypeDefinition(
                processingEnv,
                modelsField,
                "java.util.Deque<org.apache.dubbo.metadata.annotation.processing.model.Model>",
                "org.apache.dubbo.metadata.annotation.processing.model.Model",
                builder);

        buildAndAssertTypeDefinition(
                processingEnv,
                modelArraysField,
                "java.util.Set<org.apache.dubbo.metadata.annotation.processing.model.Model[]>",
                "org.apache.dubbo.metadata.annotation.processing.model.Model[]",
                builder);
    }