package com.boco.nbd.wios.manage.util;

import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author:cao hai
 * @date:2022/6/17 11:02
 * @version:V1.0
 * @description:TODO ClassUtil
 * @modify:
 */
public class ClassUtil {

    /**
     * 通过packages获取class
     *
     * @param packages
     * @return
     */
    public static List<Class<?>> getClassFromPackage(String... packages) {
        final List<Class<?>> list = new ArrayList<>();
        for (String s : packages) {
            ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
            provider.addIncludeFilter((metadataReader, metadataReaderFactory) -> {

                String className = metadataReader.getClassMetadata().getClassName();
                try {
                    Class<?> clazz = Class.forName(className);
                    list.add(clazz);
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }

                return true;
            });
            provider.findCandidateComponents(s);
        }
        return list;
    }
}