@@ -0,0 +1,1569 @@
+package net.md_5.specialsource;%0A%0Aimport org.objectweb.asm.ClassReader;%0Aimport org.objectweb.asm.tree.ClassNode;%0A%0Aimport java.io.IOException;%0Aimport java.io.InputStream;%0Aimport java.net.URL;%0Aimport java.net.URLClassLoader;%0Aimport java.util.ArrayList;%0Aimport java.util.List;%0A%0A/**%0A * Lookup inheritance from a class in a given URLClassLoader.%0A */%0Apublic class URLClassLoaderInheritanceProvider implements IInheritanceProvider %7B%0A    private final URLClassLoader classLoader;%0A%0A    public URLClassLoaderInheritanceProvider(URLClassLoader classLoader) %7B%0A        this.classLoader = classLoader;%0A    %7D%0A%0A    @Override%0A    @SuppressWarnings(%22unchecked%22)%0A    public List%3CString%3E getParents(String owner) %7B%0A        try %7B%0A            String ownerInternalName = owner.replace('.', '/'); // TODO: abstract out%0A            URL url = classLoader.findResource(ownerInternalName);%0A            if (url == null) %7B%0A                return null;%0A            %7D%0A%0A            InputStream inputStream = url.openStream();%0A            if (inputStream == null) %7B%0A                return null;%0A            %7D%0A%0A            // TODO: refactor%0A%0A            ClassReader cr = new ClassReader(inputStream);%0A            ClassNode node = new ClassNode();%0A            cr.accept(node, 0);%0A%0A            List%3CString%3E parents = new ArrayList%3CString%3E();%0A%0A            for (String iface : (List%3CString%3E) node.interfaces) %7B%0A                parents.add(iface);%0A            %7D%0A            parents.add(node.superName);%0A%0A            return parents;%0A        %7D catch (IOException ex) %7B%0A            return null;%0A        %7D%0A    %7D%0A%7D%0A

Add classloader inheritance provider