/*
* Copyright (c) 2013-2017 Chris Newland.
* Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD
* Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki
*/
package org.adoptopenjdk.jitwatch.util;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.*;
import org.adoptopenjdk.jitwatch.loader.DisposableURLClassLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public final class ClassUtil
{
private static DisposableURLClassLoader disposableClassLoader = new DisposableURLClassLoader(new ArrayList<URL>());
private static final Logger logger = LoggerFactory.getLogger(ClassUtil.class);
private ClassUtil()
{
}
public static void initialise(final List<URL> urls)
{
if (DEBUG_LOGGING_CLASSPATH)
{
for (URL url : urls)
{
logger.debug("Adding classpath to DisposableURLClassLoader {}", url);
}
}
disposableClassLoader = new DisposableURLClassLoader(urls);
}
public static Class<?> loadClassWithoutInitialising(String fqClassName) throws ClassNotFoundException
{
if (DEBUG_LOGGING_CLASSPATH)
{
logger.debug("loadClassWithoutInitialising '{}'", fqClassName);
}
return Class.forName(fqClassName, false, disposableClassLoader);
}
public static Class<?> loadClassWithoutInitialising(String fqClassName, ClassLoader classLoader) throws ClassNotFoundException
{
return Class.forName(fqClassName, false, classLoader);
}
public static List<String> getCurrentClasspathElements()
{
String classPath = System.getProperty("java.class.path");
String[] parts = classPath.split(File.pathSeparator);
return Arrays.asList(parts);
}
public static void clear()
{
if (disposableClassLoader != null)
{
try
{
disposableClassLoader.close();
}
catch (IOException e)
{
logger.warn("Could not close the DisposableURLClassLoader", e);
}
}
disposableClassLoader = null;
}
}