Code Monkey home page Code Monkey logo

classutil's Introduction

bmc

Just some quick details:

Other links are in my GitHub profile.

classutil's People

Contributors

acruise avatar aemoncannon avatar bmc avatar jcrussell avatar pjberry avatar retronym avatar ruippeixotog avatar sethtisue avatar sullis avatar xuwei-k avatar ymasory avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

classutil's Issues

ClassFinder for full-fat start jar

Hi,

I have tried the following code which seems to work perfectly:

    val path : String = CLI.getClass.getProtectionDomain.getCodeSource.getLocation.getPath
    println("Path found " + path)

    val finder = ClassFinder(List(path).map(new File(_)))

This detects the jar file I started from, gives me back the path which I then can pass into the class finder. Seems to work for both a classpath to my class files as well as an assembled jar with all dependencies included.

Maybe an idea for the readme, example or the actual code?

MapToBean can generate clashing names

MapToBean generates class names by default (though this can be overridden by callers). Its strategy for doing so, however, is flawed. It uses a random number generator to generate a unique class name, but the random number period is too small, leading to potential re-use of names and, ultimately, errors like this:

java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.clapper.classutil.ClassUtil$.loadClass(ClassUtil.scala:149)
    at org.clapper.classutil.asm.MapToBeanMapperImpl.makeBean(MapToBeanMapperImpl.scala:131)
    at org.clapper.classutil.MapToBean$.apply(MapToBean.scala:164)
    at foo$$anonfun$main$1.apply(foo.scala:8)
    at foo$$anonfun$main$1.apply(foo.scala:8)
    at scala.collection.immutable.Range$ByOne$class.foreach(Range.scala:282)
    at scala.collection.immutable.Range$$anon$1.foreach(Range.scala:274)
    at foo$.main(foo.scala:8)
    at foo.main(foo.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:81)
    at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:24)
    at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:86)
    at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:81)
    at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:86)
    at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:83)
    at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
Caused by: java.lang.LinkageError: loader (instance of  scala/tools/nsc/util/ScalaClassLoader$URLClassLoader): attempted  duplicate class definition for name: "org/clapper/classutil/MapBean$5743"
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:466)
    ... 23 more

Either widen the range or substitute some other mechanism (e.g., a UUID).

method signature seems wrong

hi,
I want to reflect a high-order function of scala,so i use classUtil to track it, but I found the print sigature of the method is wrong(just print as method name):

import org.clapper.classutil.ClassFinder
import org.clapper.classutil.ClassUtil

import java.io.File

object Main extends App {

val classpath = List(
    new File("target/scala-2.10/classes/com/alibaba/fodps/classUtil/"))
val finder = ClassFinder(classpath)
//val classes = finder.getClasses // classes is an Iterator[ClassInfo]

println("interface ...")
val ifaces = finder.getClasses.filter(_.isInterface)
ifaces.foreach(println(_))

println("concrete ...")
val crete = finder.getClasses.filter(_.isConcrete)
for (cls <- crete){
    println(cls.name)
    if (cls.name == "com.alibaba.fodps.classUtil.Foo$$anonfun$run$1"){
        printf("bingo, methods:%s\n",cls.methods)
        for (m <- cls.methods){
            if (m.name == "apply")
                printf("desc=%s,sig=%s\n", m.descriptor, m.signature)
        }
    }
}

}

use sbt and print:

run
[info] Compiling 1 Scala source to /Users/zhangjun/Documents/workspace/classUtil/target/scala-2.10/classes...
[info] Running com.alibaba.fodps.classUtil.Main
interface ...
concrete ...
com.alibaba.fodps.classUtil.Foo$$anonfun$run$1
bingo, methods:Set(, apply, apply$mcII$sp)
desc=(I)I,sig=apply <--------------------the sig is wrong here!!!
com.alibaba.fodps.classUtil.Foo
com.alibaba.fodps.classUtil.Main$$anonfun$1
com.alibaba.fodps.classUtil.Main$$anonfun$2
com.alibaba.fodps.classUtil.Main$$anonfun$3
com.alibaba.fodps.classUtil.Main$$anonfun$4$$anonfun$apply$1
com.alibaba.fodps.classUtil.Main$$anonfun$4
com.alibaba.fodps.classUtil.Main$
com.alibaba.fodps.classUtil.Main$delayedInit$body
com.alibaba.fodps.classUtil.Main
[success] Total time: 1 s, completed Nov 27, 2013 12:35:14 PM

build.sbt:
scalaVersion := "2.10.2"

libraryDependencies ++= Seq(
"org.scalatest" % "scalatest_2.10" % "2.0" % "test",
"org.slf4j" % "slf4j-api" % "1.7.2",
"org.slf4j" % "slf4j-simple" % "1.7.2",
"org.clapper" % "grizzled-scala_2.10" % "1.1.4",
"org.clapper" % "grizzled-slf4j_2.10" % "1.0.1",
"asm" % "asm" % "3.3.1",
"org.clapper" % "classutil_2.10" % "1.0.2"
)

An exception or error caused a run to abort. java.lang.IllegalArgumentException

the following code in a class constructor executed in IntelliJ IDEA 14.1:

class TestAllTransformers extends SpookyEnvSuite {

val files = sys.props("java.class.path").split(":").map(new File()).filter(.exists())
val finder: ClassFinder = ClassFinder(files)
val classes: Iterator[ClassInfo] = finder.getClasses().iterator

results in the following error:

An exception or error caused a run to abort.
java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.(ClassReader.java:170)
at org.objectweb.asm.ClassReader.(ClassReader.java:153)
at org.objectweb.asm.ClassReader.(ClassReader.java:424)
at org.clapper.classutil.asm.ClassFile$.load(ClassFinderImpl.scala:189)
at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$classData(ClassFinder.scala:406)
at org.clapper.classutil.ClassFinder$$anonfun$2.apply(ClassFinder.scala:364)
at org.clapper.classutil.ClassFinder$$anonfun$2.apply(ClassFinder.scala:364)
at scala.collection.immutable.Stream.map(Stream.scala:376)
at org.clapper.classutil.ClassFinder.processOpenZip(ClassFinder.scala:364)
at org.clapper.classutil.ClassFinder.processJar(ClassFinder.scala:318)
at org.clapper.classutil.ClassFinder.findClassesIn(ClassFinder.scala:307)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:299)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:299)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:299)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:299)
at org.clapper.classutil.ClassFinder.getClasses(ClassFinder.scala:289)
at com.tribbloids.spookystuff.pipeline.TestAllTransformers.(TestAllTransformers.scala:15)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at java.lang.Class.newInstance(Class.java:442)
at org.scalatest.tools.Runner$.genSuiteConfig(Runner.scala:2644)
at org.scalatest.tools.Runner$$anonfun$37.apply(Runner.scala:2461)
at org.scalatest.tools.Runner$$anonfun$37.apply(Runner.scala:2460)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.immutable.List.foreach(List.scala:318)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at org.scalatest.tools.Runner$.doRunRunRunDaDoRunRun(Runner.scala:2460)
at org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1044)
at org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1043)
at org.scalatest.tools.Runner$.withClassLoaderAndDispatchReporter(Runner.scala:2722)
at org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:1043)
at org.scalatest.tools.Runner$.run(Runner.scala:883)
at org.scalatest.tools.Runner.run(Runner.scala)
at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2(ScalaTestRunner.java:138)
at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.main(ScalaTestRunner.java:28)

Process finished with exit code 0

java.lang.UnsupportedOperationException: This feature requires ASM7

Hi. I'm doing class lookup on list of jars from Spring application and getting bellow error.
asm-7.1.jar is available in list of jars I'm loading.

classutils: 1.5.0
Java version: 1.8.0_265

java.lang.UnsupportedOperationException: This feature requires ASM7
        at org.objectweb.asm.ClassVisitor.visitNestHost(ClassVisitor.java:150)
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:550)
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:400)
        at org.clapper.classutil.asm.ClassFile$.load(ClassFinderImpl.scala:224)
        at org.clapper.classutil.ClassFinder.classData(ClassFinder.scala:404)
        at org.clapper.classutil.ClassFinder.$anonfun$processOpenZip$2(ClassFinder.scala:359)
        at scala.collection.Iterator$$anon$10.next(Iterator.scala:461)
        at scala.collection.Iterator$$anon$11.nextCur(Iterator.scala:486)
        at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:492)
        at scala.collection.Iterator.toStream(Iterator.scala:1417)
        at scala.collection.Iterator.toStream$(Iterator.scala:1416)
        at scala.collection.AbstractIterator.toStream(Iterator.scala:1431)
        at scala.collection.Iterator.$anonfun$toStream$1(Iterator.scala:1417)
        at scala.collection.immutable.Stream$Cons.tail(Stream.scala:1173)
        at scala.collection.immutable.Stream$Cons.tail(Stream.scala:1163)
        at scala.collection.immutable.Stream.$anonfun$$plus$plus$1(Stream.scala:372)
        at scala.collection.immutable.Stream$Cons.tail(Stream.scala:1173)
        at scala.collection.immutable.Stream$Cons.tail(Stream.scala:1163)
        at scala.collection.immutable.Stream.$anonfun$$plus$plus$1(Stream.scala:372)
        at scala.collection.immutable.Stream$Cons.tail(Stream.scala:1173)
        at scala.collection.immutable.Stream$Cons.tail(Stream.scala:1163)
        at scala.collection.immutable.StreamIterator.$anonfun$next$1(Stream.scala:1061)
        at scala.collection.immutable.StreamIterator$LazyCell.v$lzycompute(Stream.scala:1050)
        at scala.collection.immutable.StreamIterator$LazyCell.v(Stream.scala:1050)
        at scala.collection.immutable.StreamIterator.hasNext(Stream.scala:1055)
        at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:460)
        at scala.collection.Iterator.foreach(Iterator.scala:943)
        at scala.collection.Iterator.foreach$(Iterator.scala:943)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
        at scala.collection.generic.Growable.$plus$plus$eq(Growable.scala:62)
        at scala.collection.generic.Growable.$plus$plus$eq$(Growable.scala:53)
        at scala.collection.immutable.Map$MapBuilderImpl.$plus$plus$eq(Map.scala:648)
        at scala.collection.immutable.Map$MapBuilderImpl.$plus$plus$eq(Map.scala:595)
        at scala.collection.TraversableOnce.toMap(TraversableOnce.scala:372)
        at scala.collection.TraversableOnce.toMap$(TraversableOnce.scala:370)
        at scala.collection.AbstractIterator.toMap(Iterator.scala:1431)
        at org.clapper.classutil.ClassFinder$.classInfoMap(ClassFinder.scala:445)
        at org.clapper.classutil.ClassFinder$.classInfoMap(ClassFinder.scala:453)

Slow Loading Time

I am loading from the JDK, so that's a lot of classes. Using ClassFinder, it takes 20+ seconds. I am guessing that since there is a lot of IO involved, it would be possible to parallelize it.

Is it something that would be beneficial, or you already did some experiments and showed that it wasn't?

No annotation info in ClassInfo

There seems to be no support for retrieving the runtime Java annotations of a class. In some situations it is useful to get all classes marked with a certain annotation together with the annotation parameters.

From what I understood in a quick tour around the source code, it would be a matter of overriding visitAnnotation in your ClassVisitor and adding a new annotations field in ClassInfoImpl, wouldn't it?

An exception or error caused a run to abort (v 1.1.2)

the following code
private lazy val classesInPath = finder.getClasses().toList
is cause to abort

java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.(Unknown Source)
at org.objectweb.asm.ClassReader.(Unknown Source)
at org.objectweb.asm.ClassReader.(Unknown Source)
at org.clapper.classutil.asm.ClassFile$.load(ClassFinderImpl.scala:249)
at org.clapper.classutil.ClassFinder.classData(ClassFinder.scala:428)
at org.clapper.classutil.ClassFinder.$anonfun$processOpenZip$2(ClassFinder.scala:386)
at scala.collection.immutable.Stream.map(Stream.scala:415)
at org.clapper.classutil.ClassFinder.processOpenZip(ClassFinder.scala:386)
at org.clapper.classutil.ClassFinder.processJar(ClassFinder.scala:340)
at org.clapper.classutil.ClassFinder.findClassesIn(ClassFinder.scala:329)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:321)
at org.clapper.classutil.ClassFinder.getClasses(ClassFinder.scala:311)
at ru.jtcc.acc.boot.ClassUtil$.classesInPath$lzycompute(ClassUtil.scala:13)
at ru.jtcc.acc.boot.ClassUtil$.classesInPath(ClassUtil.scala:13)
at ru.jtcc.acc.boot.ClassUtil$.findAllClassesByPredicate(ClassUtil.scala:18)
at ru.j

Single directory as classpath

Is possible to use a single directory as classpath?
Doing something like this:
val classpath = List("./src/main/scala/plugins").map(new File(_))
i get an empty classMap.

UnsupportedOperationException

Hi, I get this error, do you know any solution?

scala 2.11.12
org.ow2.asm 6.1.1
classutil 2.11-1.3.0

what I do is just:
val finder = ClassFinder() val classes = finder.getClasses()
and then broke

An exception or error caused a run to abort. java.lang.UnsupportedOperationException at org.objectweb.asm.ClassVisitor.visitModule(ClassVisitor.java:129) at org.objectweb.asm.ClassReader.readModule(ClassReader.java:667) at org.objectweb.asm.ClassReader.accept(ClassReader.java:503) at org.objectweb.asm.ClassReader.accept(ClassReader.java:355) at org.clapper.classutil.asm.ClassFile$.load(ClassFinderImpl.scala:261) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$classData(ClassFinder.scala:428) at org.clapper.classutil.ClassFinder$$anonfun$2.apply(ClassFinder.scala:386) at org.clapper.classutil.ClassFinder$$anonfun$2.apply(ClassFinder.scala:386) at scala.collection.immutable.Stream.map(Stream.scala:418) at org.clapper.classutil.ClassFinder.processOpenZip(ClassFinder.scala:386) at org.clapper.classutil.ClassFinder.processJar(ClassFinder.scala:344) at org.clapper.classutil.ClassFinder.findClassesIn(ClassFinder.scala:333) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$find(ClassFinder.scala:325) at org.clapper.classutil.ClassFinder.getClasses(ClassFinder.scala:315) at com.myproject.getAllConfs(myproject.scala:46) at com.myproject.<init>(myproject.scala:51) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at org.scalatest.tools.Runner$.genSuiteConfig(Runner.scala:1422) at org.scalatest.tools.Runner$$anonfun$31.apply(Runner.scala:1236) at org.scalatest.tools.Runner$$anonfun$31.apply(Runner.scala:1235) at scala.collection.immutable.List.map(List.scala:284) at org.scalatest.tools.Runner$.doRunRunRunDaDoRunRun(Runner.scala:1235) at org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1011) at org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1010) at org.scalatest.tools.Runner$.withClassLoaderAndDispatchReporter(Runner.scala:1500) at org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:1010) at org.scalatest.tools.Runner$.run(Runner.scala:850) at org.scalatest.tools.Runner.run(Runner.scala) at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2(ScalaTestRunner.java:131) at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.main(ScalaTestRunner.java:28)

java.lang.IncompatibleClassChangeError upon invoking getClasses() on ClassFinder instance

Hi there! Was checking out the library, which looks really nice. I added the dependency through Maven Central (using sbt 0.13.7) via libraryDependencies += "org.clapper" %% "classutil" % "1.0.5", so not sure if that would be an issue since the instructions reference bin-tray. I'm compiling with Scala 2.10.4, by the way.

Anyway, I seem to have encountered an exception when invoking mainClassFinder.getClasses() where mainClassFinder is a ClassFinder instance that is using the current classpath. I'm not sure if this is a problem from me adding the dependency from Maven central - FYI, I tried bin-tray afterwards with same result - or if it's an issue with my classpath or something else. Any guidance?

Code

import java.io.File
import org.clapper.classutil.{ClassInfo, ClassFinder}

class ModuleManager(extraClassPaths: Seq[String] = Nil) {
  private lazy val mainClassFinder: ClassFinder = ClassFinder()
  private lazy val extraClassFinder: Option[ClassFinder] = Option(
    if (extraClassPaths.nonEmpty) ClassFinder(extraClassPaths.map(new File(_)))
    else null
  )

  private lazy val allClasses = mainClassFinder.getClasses() ++
    extraClassFinder.map(_.getClasses()).getOrElse(Stream.empty[ClassInfo])
  private lazy val allClassMap =
    ClassFinder.classInfoMap(allClasses.toIterator)

  lazy val modules = ClassFinder.concreteSubclasses(
    classOf[ModuleLike].getName,
    allClassMap
  )

  modules.foreach(println)
}

Exception

Exception in thread "main" java.lang.IncompatibleClassChangeError: class org.clapper.classutil.asm.EmptyVisitor has interface org.objectweb.asm.ClassVisitor as super class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at org.clapper.classutil.asm.ClassFile$.load(ClassFinderImpl.scala:190)
    at org.clapper.classutil.ClassFinder.org$clapper$classutil$ClassFinder$$classData(ClassFinder.scala:406)
    at org.clapper.classutil.ClassFinder$$anonfun$2.apply(ClassFinder.scala:364)
    at org.clapper.classutil.ClassFinder$$anonfun$2.apply(ClassFinder.scala:364)
    at scala.collection.immutable.Stream.map(Stream.scala:376)
    at org.clapper.classutil.ClassFinder.processOpenZip(ClassFinder.scala:364)
    at org.clapper.classutil.ClassFinder.processJar(ClassFinder.scala:318)
    at org.clapper.classutil.ClassFinder.findClassesIn(ClassFinder.scala:307)
    at org.clapper.classutil.ClassFinder.find(ClassFinder.scala:299)
    at org.clapper.classutil.ClassFinder.getClasses(ClassFinder.scala:289)
    at com.ibm.spark.kernel.module.ModuleManager.allClasses$lzycompute(ModuleManager.scala:37)
    at com.ibm.spark.kernel.module.ModuleManager.allClasses(ModuleManager.scala:37)
    at com.ibm.spark.kernel.module.ModuleManager.allClassMap$lzycompute(ModuleManager.scala:40)
    at com.ibm.spark.kernel.module.ModuleManager.allClassMap(ModuleManager.scala:39)
    at com.ibm.spark.kernel.module.ModuleManager.modules$lzycompute(ModuleManager.scala:45)
    at com.ibm.spark.kernel.module.ModuleManager.modules(ModuleManager.scala:42)
    at com.ibm.spark.kernel.module.ModuleManager.<init>(ModuleManager.scala:48)

Unable to get classes from one-jar

I have a scala application and I am packaging it using sbt-one-jar. I am trying to use the ClassUtil to get some annotation details from my jar file. However, I am not able to get the details from one-jar. It is working fine if I run directly in the project. But once the jar is created, it is not getting the classes. I know that the problem is with the one-jar as it packages the jar files in different folder. Is there any way to make the ClassUtil work with one-jar. My sample code with ClassUtil is given below.

def getAnnotations ={
    val finder = ClassFinder()
    println("full list "+finder.getClasses().size)
    finder.getClasses().toList.map(x=> println(" -- "+x))
    val classes = finder.getClasses().filter(c => c.implements("work.com.pack.FunctionMetadata"))
    println("classes size = "+classes.size)
    val allClasses = classes.map { clazz => Class.forName(clazz.name) }
    println("size ="+allClasses.size)
    val fmAnnotations = allClasses.map { clazz =>
      val fields = clazz.getDeclaredFields.filter(field => field.getDeclaredAnnotations.nonEmpty)
      val result = fields.toList.map { field =>
        val result = field.getDeclaredAnnotations.find(a => a.annotationType().getName == classOf[MyAnnotation].getName)
        if (result.isDefined) Some(result.get.asInstanceOf[MyAnnotation]) else None
      }
      result.filter(_.isDefined).map(_.get)
    }.toList.flatten
    println("Annotations = "+fmAnnotations)
    fmAnnotations
  }

The output I am getting is from OneJar classes. Output from running the above code is

full list 20
com.simontuffs.onejar.Handler$1
-- com.simontuffs.onejar.OneJarFile
-- com.simontuffs.onejar.OneJarFile$2
-- com.simontuffs.onejar.JarClassLoader$2
-- com.simontuffs.onejar.OneJarFile$1
-- com.simontuffs.onejar.Boot
-- com.simontuffs.onejar.Boot$3
-- com.simontuffs.onejar.JarClassLoader$1
-- com.simontuffs.onejar.JarClassLoader$OneJarURLFactory
-- com.simontuffs.onejar.JarClassLoader$IURLFactory
-- com.simontuffs.onejar.JarClassLoader
-- com.simontuffs.onejar.OneJarURLConnection
-- com.simontuffs.onejar.Handler
-- com.simontuffs.onejar.Boot$1
-- OneJar
-- com.simontuffs.onejar.IProperties
-- com.simontuffs.onejar.JarClassLoader$ByteCode
-- com.simontuffs.onejar.JarClassLoader$FileURLFactory$1
-- com.simontuffs.onejar.JarClassLoader$FileURLFactory
-- com.simontuffs.onejar.Boot$2
classes size = 0
size =0
Annotations = List()
List()

java.lang.reflect.InaccessibleObjectException on jdk 17

The problem exists with jdk > 11, but in jdk 17 the workaround also stops working:

[error] OpenJDK 64-Bit Server VM warning: Ignoring option --illegal-access=warn; support was removed in 17.0
[error] Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make public java.lang.String java.util.jar.JarFile$JarFileEntry.getName() accessible: module java.base does not "opens java.util.jar" to unnamed module @1068e947
[error] at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
[error] at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
[error] at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
[error] at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
[error] at scala.reflect.package$.ensureAccessible(package.scala:62)
[error] at scala.runtime.ScalaRunTime$.ensureAccessible(ScalaRunTime.scala:153)
[error] at org.clapper.classutil.ClassFinder.reflMethod$Method2(ClassFinder.scala:375)
[error] at org.clapper.classutil.ClassFinder.isClass(ClassFinder.scala:375)
[error] at org.clapper.classutil.ClassFinder.$anonfun$processOpenZip$1(ClassFinder.scala:358)
[error] at org.clapper.classutil.ClassFinder.$anonfun$processOpenZip$1$adapted(ClassFinder.scala:358)
[error] at scala.collection.Iterator$$anon$6.hasNext(Iterator.scala:472)
[error] at scala.collection.Iterator$$anon$9.hasNext(Iterator.scala:574)
[error] at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:592)
[

ClassFinder only finding one class

I'm using a ClassFinder like so:

val file = new File("target/scala-2.8.1.final/test-classes")
val finder = ClassFinder(List(file))
for (c <- finder.getClasses) println(c.name)

There are 288 classes in that folder (many of them anonymous classes or companion objects rather than classes), but only one of them is being printed:

hooks.test.LargeSpec$BadFeature$

I've checked that the classpath is the right folder. I can't see anything about the one class it prints to make it stand out: it's not the first, it's not a container of the others. It's a companion object like dozens of other classes in the folder.

Am I doing it wrong?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.