View Javadoc
1   package com.atlassian.event.internal;
2   
3   import com.google.common.collect.Sets;
4   
5   import java.util.Set;
6   
7   class ClassUtils {
8       private ClassUtils() {
9       }
10  
11      /**
12       * Finds all super classes and interfaces for a given class
13       *
14       * @param cls The class to scan
15       * @return The collected related classes found
16       */
17      static Set<Class<?>> findAllTypes(final Class<?> cls) {
18          final Set<Class<?>> types = Sets.newLinkedHashSet();
19          findAllTypes(cls, types);
20          return types;
21      }
22  
23      /**
24       * Finds all super classes and interfaces for a given class
25       *
26       * @param cls   The class to scan
27       * @param types The collected related classes found
28       */
29      static void findAllTypes(final Class<?> cls, final Set<Class<?>> types) {
30          if (cls == null) {
31              return;
32          }
33  
34          // check to ensure it hasn't been scanned yet
35          if (types.contains(cls)) {
36              return;
37          }
38  
39          types.add(cls);
40  
41          findAllTypes(cls.getSuperclass(), types);
42          for (int x = 0; x < cls.getInterfaces().length; x++) {
43              findAllTypes(cls.getInterfaces()[x], types);
44          }
45      }
46  }