Skip to content

Commit 882289b

Browse files
committed
getAllInterfacesForClass introspects parent interfaces as well (SPR-7247)
1 parent 12cffc6 commit 882289b

File tree

1 file changed

+6
-24
lines changed
  • org.springframework.core/src/main/java/org/springframework/util

1 file changed

+6
-24
lines changed

org.springframework.core/src/main/java/org/springframework/util/ClassUtils.java

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,13 @@
2222
import java.lang.reflect.Method;
2323
import java.lang.reflect.Modifier;
2424
import java.lang.reflect.Proxy;
25-
import java.util.ArrayList;
2625
import java.util.Arrays;
2726
import java.util.Collection;
2827
import java.util.Collections;
2928
import java.util.HashMap;
3029
import java.util.HashSet;
3130
import java.util.Iterator;
3231
import java.util.LinkedHashSet;
33-
import java.util.List;
3432
import java.util.Map;
3533
import java.util.Set;
3634

@@ -971,22 +969,8 @@ public static Class<?>[] getAllInterfacesForClass(Class<?> clazz) {
971969
* @return all interfaces that the given object implements as array
972970
*/
973971
public static Class<?>[] getAllInterfacesForClass(Class<?> clazz, ClassLoader classLoader) {
974-
Assert.notNull(clazz, "Class must not be null");
975-
if (clazz.isInterface()) {
976-
return new Class[] {clazz};
977-
}
978-
List<Class<?>> interfaces = new ArrayList<Class<?>>();
979-
while (clazz != null) {
980-
Class<?>[] ifcs = clazz.getInterfaces();
981-
for (Class<?> ifc : ifcs) {
982-
if (!interfaces.contains(ifc) &&
983-
(classLoader == null || isVisible(ifc, classLoader))) {
984-
interfaces.add(ifc);
985-
}
986-
}
987-
clazz = clazz.getSuperclass();
988-
}
989-
return interfaces.toArray(new Class[interfaces.size()]);
972+
Set<Class> ifcs = getAllInterfacesForClassAsSet(clazz, classLoader);
973+
return ifcs.toArray(new Class[ifcs.size()]);
990974
}
991975

992976
/**
@@ -1022,16 +1006,14 @@ public static Set<Class> getAllInterfacesForClassAsSet(Class clazz) {
10221006
*/
10231007
public static Set<Class> getAllInterfacesForClassAsSet(Class clazz, ClassLoader classLoader) {
10241008
Assert.notNull(clazz, "Class must not be null");
1025-
if (clazz.isInterface()) {
1009+
if (clazz.isInterface() && isVisible(clazz, classLoader)) {
10261010
return Collections.singleton(clazz);
10271011
}
10281012
Set<Class> interfaces = new LinkedHashSet<Class>();
10291013
while (clazz != null) {
1030-
for (int i = 0; i < clazz.getInterfaces().length; i++) {
1031-
Class<?> ifc = clazz.getInterfaces()[i];
1032-
if (classLoader == null || isVisible(ifc, classLoader)) {
1033-
interfaces.add(ifc);
1034-
}
1014+
Class<?>[] ifcs = clazz.getInterfaces();
1015+
for (Class<?> ifc : ifcs) {
1016+
interfaces.addAll(getAllInterfacesForClassAsSet(ifc, classLoader));
10351017
}
10361018
clazz = clazz.getSuperclass();
10371019
}

0 commit comments

Comments
 (0)