Skip to content

Commit 52acc85

Browse files
committed
ClassUtils: be defensive when caching annotations
This avoids the following exception when injecting the application context into the ImageJ gateway: java.lang.UnsupportedClassVersionError: net/imagej/ops/OpService : Unsupported major.minor version 52.0 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.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2625) at java.lang.Class.getDeclaredMethods(Class.java:1868) at org.scijava.util.ClassUtils.cacheAnnotatedObjects(ClassUtils.java:507) at org.scijava.Context.inject(Context.java:377) at org.scijava.AbstractContextual.setContext(AbstractContextual.java:68) at org.scijava.AbstractGateway.<init>(AbstractGateway.java:85) at net.imagej.ImageJ.<init>(ImageJ.java:90)
1 parent f6f3d84 commit 52acc85

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

src/main/java/org/scijava/util/ClassUtils.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ public static <A extends Annotation> List<Method> getAnnotatedMethods(
358358
cachedMethods = methodCache.getList(c, annotationClass);
359359
}
360360

361-
methods.addAll(cachedMethods);
361+
if (cachedMethods != null) methods.addAll(cachedMethods);
362362
}
363363

364364
/**
@@ -501,15 +501,20 @@ else if (methodCache.getList(scannedClass, annotationClass) != null) {
501501
final Class<? extends AnnotatedElement> objectClass =
502502
query.get(annotationClass);
503503

504-
// Methods
505-
if (Method.class.isAssignableFrom(objectClass)) {
506-
populateCache(scannedClass, inherited, annotationClass, methodCache,
507-
scannedClass.getDeclaredMethods());
504+
try {
505+
// Methods
506+
if (Method.class.isAssignableFrom(objectClass)) {
507+
populateCache(scannedClass, inherited, annotationClass, methodCache,
508+
scannedClass.getDeclaredMethods());
509+
}
510+
// Fields
511+
else if (Field.class.isAssignableFrom(objectClass)) {
512+
populateCache(scannedClass, inherited, annotationClass, fieldCache,
513+
scannedClass.getDeclaredFields());
514+
}
508515
}
509-
// Fields
510-
else if (Field.class.isAssignableFrom(objectClass)) {
511-
populateCache(scannedClass, inherited, annotationClass, fieldCache,
512-
scannedClass.getDeclaredFields());
516+
catch (final Throwable t) {
517+
// NB: No action needed?
513518
}
514519
}
515520
}

0 commit comments

Comments
 (0)