All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.test4j.mock.faking.util.ClassLoad Maven / Gradle / Ivy

package org.test4j.mock.faking.util;

import java.util.concurrent.locks.ReentrantLock;

import static org.test4j.mock.faking.util.ReflectUtility.doThrow;
import static org.test4j.mock.faking.util.TypeUtility.PRIMITIVE_CLASS;

public final class ClassLoad {
    public static final ClassLoader CLASS_LOADER = SearchingClassLoader.combineLoadersOf(null);

    private ClassLoad() {
    }

    public static ClassLoader loadersOf(Class first, Class... types) {
        return SearchingClassLoader.combineLoadersOf(first, types);
    }

    /**
     * 查找class, initialize = false
     *
     * @param className
     * @param 
     * @return
     */
    public static  Class loadClass(String className) {
        if (className == null) {
            return null;
        }
        if (PRIMITIVE_CLASS.containsKey(className)) {
            return PRIMITIVE_CLASS.get(className);
        }
        try {
            String clazzName = className.replace('/', '.');
            return (Class) Class.forName(clazzName, false, CLASS_LOADER);
        } catch (LinkageError | ClassNotFoundException e) {
            return doThrow(e);
        }
    }


    /**
     * 类是否在classpath中
     *
     * @param typeName
     * @return
     */
    public static boolean isInClasspath(String typeName) {
        try {
            Class clazz = loadClass(typeName);
            return clazz != null;
        } catch (Throwable ignore) {
            return false;
        }
    }

    private static final ReentrantLock LOCK = new ReentrantLock();

    /**
     * 在某些环境下, 需要在这里静态定义 {@link ReentrantLock} 实例
     * 否则BridgeFakeInvocation不生效 :(
     * TODO
     *
     * @return
     */
    public static boolean isLoading() {
        if (LOCK.isHeldByCurrentThread()) {
            return true;
        } else {
            return false;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy