Skip to content

Commit 74cc79b

Browse files
feat: replace reflections lib with classgraph
1 parent 5249704 commit 74cc79b

File tree

2 files changed

+34
-39
lines changed

2 files changed

+34
-39
lines changed

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
<groovy.version>1.8.0</groovy.version>
5656
<groovy.eclipse.compiler.version>2.7.0-01</groovy.eclipse.compiler.version>
5757
<groovy-eclipse-batch.version>2.0.4-04</groovy-eclipse-batch.version>
58+
<io.github.classgraph.version>4.8.149</io.github.classgraph.version>
5859
<io.openapitools.jackson.dataformat.version>1.0.8</io.openapitools.jackson.dataformat.version>
5960
<io.swagger.core.v3.version>2.1.7</io.swagger.core.v3.version>
6061
<javax.xml.bin.jaxb-api.version>2.3.0</javax.xml.bin.jaxb-api.version>
@@ -64,7 +65,6 @@
6465
<org.apache.maven.version>3.6.0</org.apache.maven.version>
6566
<org.apache.maven.plugin-testing.version>3.3.0</org.apache.maven.plugin-testing.version>
6667
<org.mockito.version>3.2.0</org.mockito.version>
67-
<org.reflections.version>0.9.12</org.reflections.version>
6868
<org.slf4j.version>1.7.29</org.slf4j.version>
6969
</properties>
7070

@@ -105,9 +105,9 @@
105105
<version>${org.apache.maven.version}</version>
106106
</dependency>
107107
<dependency>
108-
<groupId>org.reflections</groupId>
109-
<artifactId>reflections</artifactId>
110-
<version>${org.reflections.version}</version>
108+
<groupId>io.github.classgraph</groupId>
109+
<artifactId>classgraph</artifactId>
110+
<version>${io.github.classgraph.version}</version>
111111
</dependency>
112112
<dependency>
113113
<groupId>javax.xml.bind</groupId>

src/main/java/io/openapitools/swagger/JaxRSScanner.java

Lines changed: 30 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Collections;
44
import java.util.HashSet;
5+
import java.util.List;
56
import java.util.Set;
67
import java.util.stream.Collectors;
78
import java.util.stream.Stream;
@@ -10,12 +11,11 @@
1011
import javax.ws.rs.core.Application;
1112

1213
import org.apache.maven.plugin.logging.Log;
13-
import org.reflections.Reflections;
14-
import org.reflections.scanners.ResourcesScanner;
15-
import org.reflections.scanners.SubTypesScanner;
16-
import org.reflections.scanners.TypeAnnotationsScanner;
17-
import org.reflections.util.ConfigurationBuilder;
1814

15+
import io.github.classgraph.ClassGraph;
16+
import io.github.classgraph.ClassInfo;
17+
import io.github.classgraph.ClassInfoList;
18+
import io.github.classgraph.ScanResult;
1919
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
2020

2121
/**
@@ -33,46 +33,41 @@ class JaxRSScanner {
3333
public JaxRSScanner(Log log, Set<String> resourcePackages, Boolean useResourcePackagesChildren) {
3434
this.log = log;
3535
this.resourcePackages = resourcePackages == null ? Collections.emptySet() : new HashSet<>(resourcePackages);
36-
this.useResourcePackagesChildren = useResourcePackagesChildren != null && useResourcePackagesChildren;
36+
this.useResourcePackagesChildren = Boolean.TRUE.equals(useResourcePackagesChildren);
3737
}
3838

3939
Application applicationInstance() {
40-
ConfigurationBuilder config = ConfigurationBuilder
41-
.build(resourcePackages)
42-
.setScanners(new ResourcesScanner(), new TypeAnnotationsScanner(), new SubTypesScanner());
43-
Reflections reflections = new Reflections(config);
44-
Set<Class<? extends Application>> applicationClasses = reflections.getSubTypesOf(Application.class)
45-
.stream()
46-
.filter(this::filterClassByResourcePackages)
47-
.collect(Collectors.toSet());
48-
if (applicationClasses.isEmpty()) {
49-
return null;
40+
ClassGraph classGraph = new ClassGraph().enableClassInfo();
41+
try (ScanResult scanResult = classGraph.scan()) {
42+
List<ClassInfo> applicationClasses = scanResult.getSubclasses(Application.class.getName()).stream()
43+
.filter(this::filterClassByResourcePackages)
44+
.collect(Collectors.toList());
45+
if (applicationClasses.size() == 1) {
46+
return ClassUtils.createInstance(applicationClasses.get(0).loadClass(Application.class));
47+
}
48+
if (applicationClasses.size() > 1) {
49+
log.warn("More than one javax.ws.rs.core.Application classes found on the classpath, skipping");
50+
}
5051
}
51-
if (applicationClasses.size() > 1) {
52-
log.warn("More than one javax.ws.rs.core.Application classes found on the classpath, skipping");
53-
return null;
54-
}
55-
return ClassUtils.createInstance(applicationClasses.iterator().next());
52+
return null;
5653
}
5754

5855
Set<Class<?>> classes() {
59-
ConfigurationBuilder config = ConfigurationBuilder
60-
.build(resourcePackages)
61-
.setScanners(new ResourcesScanner(), new TypeAnnotationsScanner(), new SubTypesScanner());
62-
Reflections reflections = new Reflections(config);
63-
Stream<Class<?>> apiClasses = reflections.getTypesAnnotatedWith(Path.class)
64-
.stream()
65-
.filter(this::filterClassByResourcePackages);
66-
Stream<Class<?>> defClasses = reflections.getTypesAnnotatedWith(OpenAPIDefinition.class)
67-
.stream()
68-
.filter(this::filterClassByResourcePackages);
69-
return Stream.concat(apiClasses, defClasses).collect(Collectors.toSet());
56+
ClassGraph classGraph = new ClassGraph().enableClassInfo().enableAnnotationInfo();
57+
try (ScanResult scanResult = classGraph.scan()) {
58+
ClassInfoList apiClasses = scanResult.getClassesWithAnnotation(Path.class.getName());
59+
ClassInfoList defClasses = scanResult.getClassesWithAnnotation(OpenAPIDefinition.class.getName());
60+
return Stream.concat(apiClasses.stream(), defClasses.stream())
61+
.filter(this::filterClassByResourcePackages)
62+
.map(ClassInfo::loadClass)
63+
.collect(Collectors.toSet());
64+
}
7065
}
7166

72-
private boolean filterClassByResourcePackages(Class<?> cls) {
67+
private boolean filterClassByResourcePackages(ClassInfo cls) {
7368
return resourcePackages.isEmpty()
74-
|| resourcePackages.contains(cls.getPackage().getName())
75-
|| (useResourcePackagesChildren && resourcePackages.stream().anyMatch(p -> cls.getPackage().getName().startsWith(p)));
69+
|| resourcePackages.contains(cls.getPackageName())
70+
|| (useResourcePackagesChildren && resourcePackages.stream().anyMatch(p -> cls.getPackageName().startsWith(p)));
7671
}
7772

7873
}

0 commit comments

Comments
 (0)