package io.takari.maven.plugins.compile.jdt;
import java.io.Closeable;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Locale;
import org.eclipse.jdt.internal.compiler.apt.util.EclipseFileManager;
/**
* Workaround open URLClassLoader leak in {@link EclipseFileManager}
*
* @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=514121
*/
class EclipseFileManager514121 extends EclipseFileManager {
private final HashMap<Location, ClassLoader> classloaders = new HashMap<>();
public EclipseFileManager514121(Locale locale, Charset charset) {
super(locale, charset);
}
@Override
public ClassLoader getClassLoader(Location location) {
synchronized (classloaders) {
ClassLoader cl = classloaders.get(location);
if (cl == null) {
cl = super.getClassLoader(location);
classloaders.put(location, cl);
}
return cl;
}
}
@Override
public void close() throws IOException {
synchronized (classloaders) {
for (ClassLoader cl : classloaders.values()) {
if (cl instanceof Closeable) {
((Closeable) cl).close();
}
}
}
super.close();
}
}