package org.infernus.idea.checkstyle.checker;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.infernus.idea.checkstyle.util.ModulePaths;
public class ModuleClassPathBuilder {
private static final Log LOG = LogFactory.getLog(ModuleClassPathBuilder.class);
public ClassLoader build(final Module baseModule) {
if (baseModule == null) {
return getClass().getClassLoader();
}
final List<URL> outputPaths = new ArrayList<>();
final Set<Module> transitiveDependencies = new HashSet<>();
ModuleUtil.getDependencies(baseModule, transitiveDependencies);
for (Module moduleInScope : transitiveDependencies) {
if (LOG.isDebugEnabled()) {
LOG.debug("Adding module to classpath: " + moduleInScope.getName());
}
outputPaths.addAll(ModulePaths.compilerOutputPathsFor(moduleInScope));
outputPaths.addAll(ModulePaths.libraryPathsFor(moduleInScope));
}
if (LOG.isDebugEnabled()) {
LOG.debug("Creating class-loader with URLs: " + outputPaths);
}
return new URLClassLoader(outputPaths.toArray(new URL[outputPaths.size()]), getClass().getClassLoader());
}
}