package br.uff.ic.oceano.core.tools.metrics.util; import br.uff.ic.oceano.core.model.Revision; import br.uff.ic.oceano.core.tools.compiler.CompilerService; import br.uff.ic.oceano.core.tools.revision.JavaRevisionTool; import br.uff.ic.oceano.core.tools.maven.MavenUtil; import br.uff.ic.oceano.core.tools.revision.RevisionUtil; import java.util.Collections; import java.util.LinkedList; import java.util.List; import org.aspectj.apache.bcel.classfile.ClassParser; /** * * @author Daniel */ public class ClassLoaderUtil { public static List<String> loadClassNames(Revision revision) throws Exception, NoClassDefFoundError { if(!revision.getProject().isMavenProject()){ throw new Exception("Build tool not supported."); } JavaRevisionTool jvTool = new JavaRevisionTool(); List<String> classNames = jvTool.getCompiledClassNames(revision); //Is compiled if (classNames.isEmpty()) { //compile CompilerService.compile(revision); classNames = jvTool.getCompiledClassNames(revision); } return classNames; } public static List<Class> loadClasses(Revision revision) throws Exception, NoClassDefFoundError { if(!revision.getProject().isMavenProject()){ throw new Exception("Build tool not supported."); } List<String> classNames = loadClassNames(revision); if (classNames.isEmpty()) { throw new Exception("No compiled classes found"); } ClassLoader customLoader = MavenUtil.getProjectClassLoaderByCommandLine(revision); List<Class> classes = new LinkedList<Class>(); for (String classname : classNames) { Class oneClass = customLoader.loadClass(classname); classes.add(oneClass); } return classes; } public static Class loadClass(Revision revision, String path) throws Exception, NoClassDefFoundError { if(!revision.getProject().isMavenProject()){ throw new Exception("Build tool not supported."); } ClassParser cp = new ClassParser(path); org.aspectj.apache.bcel.classfile.JavaClass jc = cp.parse(); ClassLoader customLoader = MavenUtil.getProjectClassLoaderByCommandLine(revision); return customLoader.loadClass(jc.getClassName()); } }