Scan the classpath in Java: how to search for classes by a constructor that takes a specific type as first parameter and by at least 2 methods that begin for a given string

To search for classes by a constructor that takes a specific type as first parameter and by at least 2 methods that begin for a given string by using the ClassHunter, we need to initially add the following dependency to our pom.xml:

<dependency>
    <groupId>org.burningwave</groupId>
    <artifactId>core</artifactId>
    <version>12.64.3</version>
</dependency>

… And to use Burningwave Core as a Java module, add the following to your module-info.java:

requires org.burningwave.core;

And now let’s take a look at the code:

import java.util.Collection;
import java.util.Date;

import org.burningwave.core.assembler.ComponentContainer;
import org.burningwave.core.assembler.ComponentSupplier;
import org.burningwave.core.classes.ClassCriteria;
import org.burningwave.core.classes.ClassHunter;
import org.burningwave.core.classes.ConstructorCriteria;
import org.burningwave.core.classes.MethodCriteria;
import org.burningwave.core.classes.SearchConfig;
import org.burningwave.core.io.PathHelper;

public class Finder {       
    
    public Collection<Class<?>> find() {
        ComponentSupplier componentSupplier = ComponentContainer.getInstance();
        PathHelper pathHelper = componentSupplier.getPathHelper();
        ClassHunter classHunter = componentSupplier.getClassHunter();
        
        MethodCriteria methodCriteria = MethodCriteria.withoutConsideringParentClasses().name((methodName) ->
            methodName.startsWith("set")
        ).result((methodFounds) ->
            methodFounds.size() >= 2
        );    
        
        ConstructorCriteria constructorCriteria = ConstructorCriteria.withoutConsideringParentClasses()
            .parameterType((uploadedClasses, array, idx) ->
                idx == 0 && array[idx].equals(uploadedClasses.get(Date.class)
            )
        );
        
        SearchConfig searchConfig = SearchConfig.forPaths(
            //Here you can add all absolute path you want:
            //both folders, zip and jar will be recursively scanned.
            //For example you can add: "C:\\Users\\user\\.m2"
            //With the line below the search will be executed on runtime class paths
            pathHelper.getMainClassPaths()
        ).by(
            ClassCriteria.create().byMembers(
                methodCriteria
            ).and().byMembers(
                constructorCriteria
            ).useClasses(
                Date.class,
                Object.class
            )
        );

        try(ClassHunter.SearchResult searchResult = classHunter.findBy(searchConfig)) {

            //If you need all Constructor founds  unconment this
            //searchResult.getMembersFoundBy(constructorCriteria);
            
            //If you need all Method founds  unconment this
            //searchResult.getMembersFoundBy(methodCriteria);
    
            return searchResult.getClasses();
        }
    }

}

Flexible

It’s possible to search classes by every criteria that your imagination can make by using lambda expressions

Optimized

Scan engine is highly optimized using direct allocated ByteBuffers to avoid heap saturation

Open

Burningwave core is an advanced free and open source Java library