package xapi.dev.test.gwt.reflect.rebind; import static java.io.File.separator; import java.io.File; import java.net.URL; import java.net.URLClassLoader; import xapi.collect.impl.SimpleStack; public class CompileTester { public void testCompile() { ClassLoader cl = Thread.currentThread().getContextClassLoader(); if (cl instanceof URLClassLoader) { // collect classpath SimpleStack<String> paths = new SimpleStack<String>(); SimpleStack<String> sources = new SimpleStack<String>(); for (URL url : ((URLClassLoader)cl).getURLs()) { addPath(url.getPath(), paths); } paths = adjustClasspath(sources, paths); } } private void addPath(String path, SimpleStack<String> paths) { paths.add(path); if (path.endsWith("classes"+separator)) { int target = path.indexOf(separator+"target"+separator); if (target == -1) { path = path.replace(separator+"classes"+separator, separator+"src"); if (new File(path).isDirectory()) paths.add(path); } else { boolean isTest = path.endsWith("test-classes"+separator); String base = path.substring(0, target); if (isTest) { base += separator+"src"+separator + "test" + separator; } else { base += separator+"src"+separator + "main" + separator; } addResources(base, paths); } } else if (path.endsWith("bin"+separator)) { path = path.replace(separator+"bin"+separator, separator+"src"); if (new File(path).isDirectory()) paths.add(path); } } private void addResources(String base, SimpleStack<String> sources) { String folder = base + "java"; if (new File(folder).isDirectory()) sources.add(folder); folder = base + "resources"; if (new File(folder).isDirectory()) sources.add(folder); } // Let subclass modify the classpath protected SimpleStack<String> adjustClasspath(SimpleStack<String> sources, SimpleStack<String> classpath) { return sources.consume(classpath); } }