/** * Collects all realizing classes that are sub-class of given class type or any of its * sub-classes and adds them to the given results list. This method is recursive. * * @param results * List to store classes to. * @param classType * Type to check. */ private void collectClassesFromSubClasses(Collection<ImmutableClassType> results, ImmutableClassType classType) { for (ImmutableClassType subClassType : classType.getImmutableSubClasses()) { if (subClassType.isInitialized()) { results.add(subClassType); } collectClassesFromSubClasses(results, subClassType); } }
/** * Collects all realizing classes that implement given interface or any of its sub-interfaces * and adds them to the given results list. This method is recursive. * * @param results * List to store classes to. * @param interfaceType * Type to check. */ private void collectClassesFromInterfaceAndSubInterfaces(Collection<ImmutableClassType> results, ImmutableInterfaceType interfaceType) { for (ImmutableClassType classType : interfaceType.getImmutableRealizingClasses()) { if (classType.isInitialized()) { results.add(classType); } collectClassesFromSubClasses(results, classType); } for (ImmutableInterfaceType superInterfaceType : interfaceType.getImmutableSubInterfaces()) { collectClassesFromInterfaceAndSubInterfaces(results, superInterfaceType); } }
collectClassesFromSubClasses(results, superClassType);
results.add(immutableClassType); collectClassesFromSubClasses(results, immutableClassType); } else if (immutableType.isInterface()) { ImmutableInterfaceType immutableInterfaceType = immutableType.castToInterface();