package org.incha; import java.io.File; import java.io.IOException; import java.net.URL; import java.net.URLDecoder; public final class TestUtils { private TestUtils() {} /** * @param class1 * @return */ public static File findSourceForClass(final Class<?> clazz) throws IOException { //find this source file //get class file final String className = clazz.getName(); final URL location = clazz.getProtectionDomain().getCodeSource().getLocation(); final File file = new File(URLDecoder.decode(location.getFile(), System.getProperty("file.encoding"))); //find project root. String root = null; File current = file; while (current != null) { if (current.isDirectory() && new File(current, "pom.xml").exists()) { root = current.getAbsolutePath(); break; } current = current.getParentFile(); } final String relativePath = className.replace('.', File.separatorChar) + ".java"; return findByRelativePath(new File(root), relativePath); } /** * @param parent * @param relativePath * @return */ private static File findByRelativePath(final File parent, final String relativePath) { if (parent.isDirectory()) { final File file = new File(parent.getAbsolutePath() + File.separator + relativePath); if (file.exists()) { return file; } for (final File child : parent.listFiles()) { final File f = findByRelativePath(child, relativePath); if (f != null) { return f; } } } return null; } }