getAllInterfacesForClass introspects parent interfaces as well (SPR-7247)
This commit is contained in:
parent
12cffc68c8
commit
882289b06e
|
|
@ -22,7 +22,6 @@ import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.lang.reflect.Proxy;
|
import java.lang.reflect.Proxy;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
@ -30,7 +29,6 @@ import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
@ -971,22 +969,8 @@ public abstract class ClassUtils {
|
||||||
* @return all interfaces that the given object implements as array
|
* @return all interfaces that the given object implements as array
|
||||||
*/
|
*/
|
||||||
public static Class<?>[] getAllInterfacesForClass(Class<?> clazz, ClassLoader classLoader) {
|
public static Class<?>[] getAllInterfacesForClass(Class<?> clazz, ClassLoader classLoader) {
|
||||||
Assert.notNull(clazz, "Class must not be null");
|
Set<Class> ifcs = getAllInterfacesForClassAsSet(clazz, classLoader);
|
||||||
if (clazz.isInterface()) {
|
return ifcs.toArray(new Class[ifcs.size()]);
|
||||||
return new Class[] {clazz};
|
|
||||||
}
|
|
||||||
List<Class<?>> interfaces = new ArrayList<Class<?>>();
|
|
||||||
while (clazz != null) {
|
|
||||||
Class<?>[] ifcs = clazz.getInterfaces();
|
|
||||||
for (Class<?> ifc : ifcs) {
|
|
||||||
if (!interfaces.contains(ifc) &&
|
|
||||||
(classLoader == null || isVisible(ifc, classLoader))) {
|
|
||||||
interfaces.add(ifc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
clazz = clazz.getSuperclass();
|
|
||||||
}
|
|
||||||
return interfaces.toArray(new Class[interfaces.size()]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -1022,16 +1006,14 @@ public abstract class ClassUtils {
|
||||||
*/
|
*/
|
||||||
public static Set<Class> getAllInterfacesForClassAsSet(Class clazz, ClassLoader classLoader) {
|
public static Set<Class> getAllInterfacesForClassAsSet(Class clazz, ClassLoader classLoader) {
|
||||||
Assert.notNull(clazz, "Class must not be null");
|
Assert.notNull(clazz, "Class must not be null");
|
||||||
if (clazz.isInterface()) {
|
if (clazz.isInterface() && isVisible(clazz, classLoader)) {
|
||||||
return Collections.singleton(clazz);
|
return Collections.singleton(clazz);
|
||||||
}
|
}
|
||||||
Set<Class> interfaces = new LinkedHashSet<Class>();
|
Set<Class> interfaces = new LinkedHashSet<Class>();
|
||||||
while (clazz != null) {
|
while (clazz != null) {
|
||||||
for (int i = 0; i < clazz.getInterfaces().length; i++) {
|
Class<?>[] ifcs = clazz.getInterfaces();
|
||||||
Class<?> ifc = clazz.getInterfaces()[i];
|
for (Class<?> ifc : ifcs) {
|
||||||
if (classLoader == null || isVisible(ifc, classLoader)) {
|
interfaces.addAll(getAllInterfacesForClassAsSet(ifc, classLoader));
|
||||||
interfaces.add(ifc);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
clazz = clazz.getSuperclass();
|
clazz = clazz.getSuperclass();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue