You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by sudeendra-nadager <gi...@git.apache.org> on 2018/10/15 18:04:24 UTC

[GitHub] commons-lang pull request #358: ClassUtils.getBaseClasses(desiredBase, packa...

Github user sudeendra-nadager commented on a diff in the pull request:

    https://github.com/apache/commons-lang/pull/358#discussion_r225263101
  
    --- Diff: src/main/java/org/apache/commons/lang3/ClassUtils.java ---
    @@ -1059,6 +1066,69 @@ public static boolean isInnerClass(final Class<?> cls) {
             return getClass(loader, className, initialize);
         }
     
    +    /**
    +     * Returns a list of base classes/interfaces underneath the supplied package
    +     * This method only retrieves base classes/interfaces that have children that can be instantiated
    +     * via a no-args constructor
    +     * The class loader is retrieved via Thread.currentThread().getContextClassLoader()
    +     * This only retrieves base classes/interfaces directly underneath the supplied package
    +     *
    +     * @param desiredBase the desired base class/interface to retrieve
    +     * @param packageName the package name in the standard import format (i.e. "java.lang.String")
    +     * @param <T> The desired base class or interface type to retrieve
    +     * @return a list of base classes/interfaces that match the supplied type underneath the supplied package
    +     * @throws URISyntaxException if the packageName is not found in the class loader
    +     * @throws IOException if an I/O error occurs in getting a new directory stream
    +     * @throws IllegalArgumentException if the desiredBase or packageName are invalid
    +     */
    +    public static <T> List<T> getBaseClasses(final Class<T> desiredBase, final String packageName)
    +            throws URISyntaxException, IOException, IllegalArgumentException {
    +
    +        if (desiredBase == null) {
    +            throw new IllegalArgumentException("desiredBase must not be null");
    +        }
    +
    +        if (StringUtils.isBlank(packageName)) {
    +            throw new IllegalArgumentException("packageName must not be blank");
    +        }
    +
    +        if (packageName.contains("/")) {
    --- End diff --
    
    might be better to validate against a regex. 


---