2626import io .github .ascopes .jct .ex .JctCompilerException ;
2727import io .github .ascopes .jct .filemanagers .JctFileManager ;
2828import io .github .ascopes .jct .filemanagers .LoggingMode ;
29+ import io .github .ascopes .jct .filemanagers .PathFileObject ;
30+ import io .github .ascopes .jct .utils .FileUtils ;
2931import io .github .ascopes .jct .utils .IterableUtils ;
3032import java .io .IOException ;
3133import java .io .OutputStreamWriter ;
3234import java .util .Collection ;
3335import java .util .HashSet ;
3436import java .util .List ;
3537import java .util .Set ;
38+ import java .util .function .Predicate ;
39+ import java .util .stream .Collectors ;
3640import javax .tools .JavaCompiler ;
3741import javax .tools .JavaFileObject ;
3842import javax .tools .JavaFileObject .Kind ;
3943import javax .tools .StandardLocation ;
4044import org .apiguardian .api .API ;
4145import org .apiguardian .api .API .Status ;
46+ import org .jspecify .annotations .Nullable ;
4247import org .slf4j .Logger ;
4348import org .slf4j .LoggerFactory ;
4449
@@ -85,7 +90,7 @@ private JctCompilation createCheckedCompilation(
8590 JavaCompiler jsr199Compiler ,
8691 Collection <String > classNames
8792 ) throws Exception {
88- var compilationUnits = findCompilationUnits (fileManager );
93+ var compilationUnits = findFilteredCompilationUnits (fileManager , classNames );
8994
9095 // Do not close stdout, it breaks test engines, especially IntellIJ.
9196 var writer = new TeeWriter (new OutputStreamWriter (System .out , compiler .getLogCharset ()));
@@ -100,7 +105,7 @@ private JctCompilation createCheckedCompilation(
100105 fileManager ,
101106 diagnosticListener ,
102107 flags ,
103- classNames ,
108+ null ,
104109 compilationUnits
105110 );
106111
@@ -111,15 +116,9 @@ private JctCompilation createCheckedCompilation(
111116
112117 LOGGER
113118 .atInfo ()
114- .setMessage (
115- "Starting compilation with {} (found {} compilation units, {} user-provided class names)"
116- )
119+ .setMessage ("Starting compilation with {} (found {} compilation units)" )
117120 .addArgument (compiler ::getName )
118121 .addArgument (compilationUnits ::size )
119- .addArgument (classNames == null
120- ? () -> "no"
121- : classNames ::size
122- )
123122 .log ();
124123
125124 var start = System .nanoTime ();
@@ -154,6 +153,22 @@ private JctCompilation createCheckedCompilation(
154153 .build ();
155154 }
156155
156+ private Set <JavaFileObject > findFilteredCompilationUnits (
157+ JctFileManager fileManager ,
158+ @ Nullable Collection <String > classNames
159+ ) throws IOException {
160+ var compilationUnits = findCompilationUnits (fileManager );
161+
162+ if (classNames == null ) {
163+ return compilationUnits ;
164+ }
165+
166+ return compilationUnits
167+ .stream ()
168+ .filter (pathFileObjectIn (classNames ))
169+ .collect (Collectors .toSet ());
170+ }
171+
157172 private Set <JavaFileObject > findCompilationUnits (JctFileManager fileManager ) throws IOException {
158173 var locations = IterableUtils
159174 .flatten (fileManager .listLocationsForModules (StandardLocation .MODULE_SOURCE_PATH ));
@@ -183,4 +198,12 @@ private Set<JavaFileObject> findCompilationUnits(JctFileManager fileManager) thr
183198
184199 return objects ;
185200 }
201+
202+ private Predicate <JavaFileObject > pathFileObjectIn (Collection <String > classNames ) {
203+ return fileObject -> {
204+ var pathFileObject = (PathFileObject ) fileObject ;
205+ var binaryName = FileUtils .pathToBinaryName (pathFileObject .getRelativePath ());
206+ return classNames .contains (binaryName );
207+ };
208+ }
186209}
0 commit comments