We could probably hook that up. The ClassLoader is a required
argument for byte code scrapping, so we could pretty easily do a
classLoader.findResource() to get the parent class, then process
recursively. We'd just leave that deeper resolution off by default
and allow it to be turned on with a constructor flag.
-David
On May 29, 2008, at 10:43 AM, Musachy Barroso wrote:
We would have to load the class at that point. I don't think we could
make ClassFinder do this for us, because some of the classes in the
hierarchy could be in the excluded jars.
musachy
On Thu, May 29, 2008 at 1:17 PM, Brian Pontarelli <[EMAIL PROTECTED]
> wrote:
But does that include all of the interfaces including those
implemented by
super-classes and those which interfaces the class directly
implements
extend?
Musachy Barroso wrote:
ClassFinder.ClassInfo has a list of implemented interfaces, so I am
checking if "com.opensymphony.xwork2.Action" is one of them
musachy
On Thu, May 29, 2008 at 11:47 AM, Brian Pontarelli <[EMAIL PROTECTED]
>
wrote:
Just a quick question. How did you modify ClasFinder to check for
implementation of the XWork Action interface? Doesn't this need
to parse
up
the inheritance chain as well as the implementation chain? It
didn't look
like ClassFinder currently did that, unless I missed it.
-bp
Musachy Barroso wrote:
Thanks for the tips, I wasn't using UrlSet at yet, but that looks
great . I am using ASM 3 with it, I don't know about new
features you
could take advantage of, but it is easy to get it running. I think
this method is wrong on ClassInfo:
public String getPackageName(){
return name.substring(name.lastIndexOf(".")+1, name.length());
}
musachy
On Wed, May 28, 2008 at 9:04 PM, David Blevins <[EMAIL PROTECTED]
>
wrote:
On May 28, 2008, at 4:54 PM, Musachy Barroso wrote:
It is a standalone library, used heavily by the OpenEJB and
Geronimo
guys.
oops.
Personally, I favor copying the code over and jarjar'ing the
asm
dependency.
+1
+1 :)
Just wanted to throw my support in for fun.
I'd pull in the ClassFinder and UrlSet. ClassFinder.java is a
standalone
class (aside from ASM), but the UrlSet is really useful for
narrowing
down
the scope of jars that you search which of course makes things
even
faster.
If you know the exact jar(s) you want to search, you're set.
But if
you
simply have a classloader and want to search everything "in"
it, you
might
want to rip out some standard vm jars and other jars you know
you do
not
care about. Here's an example usage:
// Just this line right here is good as is will diff the
classpath of
the
// parent classloader against the classpath of the supplied
classloader
and
// give you the difference.
UrlSet urlSet = new UrlSet(classLoader);
// If you happen to need to search the system classloader, the
difference
// still leaves a lot of useless garbage
urlSet =
urlSet.exclude(ClassLoader.getSystemClassLoader().getParent());
urlSet = urlSet.excludeJavaExtDirs();
urlSet = urlSet.excludeJavaEndorsedDirs();
urlSet = urlSet.excludeJavaHome();
urlSet =
urlSet.excludePaths(System.getProperty("sun.boot.class.path",
""));
urlSet = urlSet.exclude(".*/JavaVM.framework/.*");
// If the remainder contains a lot of third party libraries
required
by
you
// that you know don't contain annotations you're interested
in, then
it
can
// be good to aggressively cut those out.
urlSet = urlSet.exclude(".*/activemq-(core|ra)-[\\d.]
+.jar(!/)?");
urlSet = urlSet.exclude(".*/catalina-[\\d.]+.jar(!/)?");
urlSet =
urlSet.exclude(".*/commons-(logging|cli|pool|lang|collections|
dbcp)-[\\d.]+.jar(!/)?");
urlSet = urlSet.exclude(".*/derby-[\\d.]+.jar(!/)?");
urlSet =
urlSet.exclude(".*/geronimo-(connector|transaction)-[\\d.]
+.jar(!/)?");
urlSet = urlSet.exclude(".*/geronimo-[^/]+_spec-[\\d.]
+.jar(!/)?");
urlSet =
urlSet.exclude(".*/geronimo-javamail_([\\d.]+)_mail-[\\d.]
+.jar(!/)?");
urlSet = urlSet.exclude(".*/hsqldb-[\\d.]+.jar(!/)?");
urlSet = urlSet.exclude(".*/idb-[\\d.]+.jar(!/)?");
urlSet = urlSet.exclude(".*/jaxb-(impl|api)-[\\d.]+.jar(!/)?");
urlSet = urlSet.exclude(".*/junit-[\\d.]+.jar(!/)?");
urlSet = urlSet.exclude(".*/log4j-[\\d.]+.jar(!/)?");
urlSet =
urlSet.exclude(".*/openjpa-(jdbc|kernel|lib|persistence|
persistence-jdbc)(-5)?-[\\d.]+.jar(!/)?");
// then eventually
List<URL> urls = urlSet.getUrls();
ClassFinder classFinder = new ClassFinder(classloader, urls);
As far as the stability of the API, it hasn't changed in months
and
months.
I do have one planned change involving the use of ASM 3 and new
flag
that
will speed up the scanning by allowing ASM to skip by large
chunks of
the
byte code.
Let me see if I can't get that in there real quick.
-David
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
"Hey you! Would you help me to carry the stone?" Pink Floyd
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]