|
22 | 22 | import java.lang.reflect.Method;
|
23 | 23 | import java.lang.reflect.Modifier;
|
24 | 24 | import java.lang.reflect.Proxy;
|
25 |
| -import java.util.ArrayList; |
26 | 25 | import java.util.Arrays;
|
27 | 26 | import java.util.Collection;
|
28 | 27 | import java.util.Collections;
|
29 | 28 | import java.util.HashMap;
|
30 | 29 | import java.util.HashSet;
|
31 | 30 | import java.util.Iterator;
|
32 | 31 | import java.util.LinkedHashSet;
|
33 |
| -import java.util.List; |
34 | 32 | import java.util.Map;
|
35 | 33 | import java.util.Set;
|
36 | 34 |
|
@@ -971,22 +969,8 @@ public static Class<?>[] getAllInterfacesForClass(Class<?> clazz) {
|
971 | 969 | * @return all interfaces that the given object implements as array
|
972 | 970 | */
|
973 | 971 | 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()]); |
990 | 974 | }
|
991 | 975 |
|
992 | 976 | /**
|
@@ -1022,16 +1006,14 @@ public static Set<Class> getAllInterfacesForClassAsSet(Class clazz) {
|
1022 | 1006 | */
|
1023 | 1007 | public static Set<Class> getAllInterfacesForClassAsSet(Class clazz, ClassLoader classLoader) {
|
1024 | 1008 | Assert.notNull(clazz, "Class must not be null");
|
1025 |
| - if (clazz.isInterface()) { |
| 1009 | + if (clazz.isInterface() && isVisible(clazz, classLoader)) { |
1026 | 1010 | return Collections.singleton(clazz);
|
1027 | 1011 | }
|
1028 | 1012 | Set<Class> interfaces = new LinkedHashSet<Class>();
|
1029 | 1013 | 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)); |
1035 | 1017 | }
|
1036 | 1018 | clazz = clazz.getSuperclass();
|
1037 | 1019 | }
|
|
0 commit comments