You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xbean-scm@geronimo.apache.org by rm...@apache.org on 2014/05/20 19:23:07 UTC
svn commit: r1596328 - in /geronimo/xbean/trunk/xbean-finder/src:
main/java/org/apache/xbean/finder/ test/java/org/apache/xbean/finder/
Author: rmannibucau
Date: Tue May 20 17:23:06 2014
New Revision: 1596328
URL: http://svn.apache.org/r1596328
Log:
XBEAN-267 javadoc for 267 and fix for XBEAN-263 creating ClassInfo for an annotated Class object throws NPE
Modified:
geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AnnotationFinder.java
geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AsynchronousInheritanceAnnotationFinder.java
geronimo/xbean/trunk/xbean-finder/src/test/java/org/apache/xbean/finder/ClassFinderDepthTest.java
Modified: geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AnnotationFinder.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AnnotationFinder.java?rev=1596328&r1=1596327&r2=1596328&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AnnotationFinder.java (original)
+++ geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AnnotationFinder.java Tue May 20 17:23:06 2014
@@ -1698,8 +1698,12 @@ public class AnnotationFinder implements
}
public AnnotationInfo(String name) {
- name = Type.getType(name).getClassName();
- this.name = name.intern();
+ final Type type = Type.getType(name);
+ name = type.getClassName();
+ if (name == null) {
+ name = type.getDescriptor(); // name was already a class name
+ }
+ this.name = name;
}
public String getName() {
Modified: geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AsynchronousInheritanceAnnotationFinder.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AsynchronousInheritanceAnnotationFinder.java?rev=1596328&r1=1596327&r2=1596328&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AsynchronousInheritanceAnnotationFinder.java (original)
+++ geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AsynchronousInheritanceAnnotationFinder.java Tue May 20 17:23:06 2014
@@ -29,6 +29,7 @@ import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
+// designed to trigger asynchronism from a single thread
public class AsynchronousInheritanceAnnotationFinder extends AnnotationFinder {
private ExecutorService executor = null;
private CountDownLatch subclassesLatch = null;
@@ -43,7 +44,7 @@ public class AsynchronousInheritanceAnno
super(archive);
}
- @Override
+ @Override // should be called from main thread
public AnnotationFinder enableFindImplementations() {
if (implementationsLatch == null) {
enableFindSubclasses();
@@ -65,7 +66,7 @@ public class AsynchronousInheritanceAnno
return this;
}
- @Override
+ @Override // should be called from main thread
public AnnotationFinder enableFindSubclasses() {
if (subclassesLatch == null) {
subclassesLatch = new CountDownLatch(1);
@@ -80,7 +81,7 @@ public class AsynchronousInheritanceAnno
return this;
}
- @Override
+ @Override // should be called from main thread
public <T> List<Class<? extends T>> findSubclasses(final Class<T> clazz) {
if (subclassesLatch == null) {
enableFindSubclasses();
@@ -89,7 +90,7 @@ public class AsynchronousInheritanceAnno
return super.findSubclasses(clazz);
}
- @Override
+ @Override // should be called from main thread
public <T> List<Class<? extends T>> findImplementations(final Class<T> clazz) {
if (implementationsLatch == null) {
enableFindImplementations();
Modified: geronimo/xbean/trunk/xbean-finder/src/test/java/org/apache/xbean/finder/ClassFinderDepthTest.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-finder/src/test/java/org/apache/xbean/finder/ClassFinderDepthTest.java?rev=1596328&r1=1596327&r2=1596328&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-finder/src/test/java/org/apache/xbean/finder/ClassFinderDepthTest.java (original)
+++ geronimo/xbean/trunk/xbean-finder/src/test/java/org/apache/xbean/finder/ClassFinderDepthTest.java Tue May 20 17:23:06 2014
@@ -20,13 +20,16 @@ import junit.framework.TestCase;
import org.apache.xbean.finder.archive.ClassesArchive;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
/**
* @version $Rev$ $Date$
*/
public class ClassFinderDepthTest extends TestCase {
-
+ @Deprecated
+ public static abstract class TargetImpl implements java.lang.annotation.Target {
+ }
public static interface Hue<T> {
}
@@ -74,6 +77,20 @@ public class ClassFinderDepthTest extend
}
}
+ public void testFindAnnotatedInterfaceImplementationsAfterGet() {
+ for (int i = 0; i < 10; i++) {
+ final ClassesArchive archive = new ClassesArchive(TargetImpl.class);
+ for (final AnnotationFinder finder : new AnnotationFinder[] {
+ new AnnotationFinder(archive),
+ new AsynchronousInheritanceAnnotationFinder(archive)
+ }) {
+ assertEquals(Collections.singletonList(TargetImpl.class), finder.findAnnotatedClasses(Deprecated.class));
+ finder.link();
+ assertImplementations(finder, java.lang.annotation.Target.class, TargetImpl.class);
+ }
+ }
+ }
+
public void testFindImplementations() throws Exception {
for (int i = 0; i < 10; i++) { // try to avoid AsynchronousInheritanceAnnotationFinder "luck" issues
for (final AnnotationFinder finder : new AnnotationFinder[] {