Skip to content

Commit e969f7c

Browse files
committed
GH-354: Fix incorrect logic for filtering explicit class names
1 parent 9508405 commit e969f7c

File tree

1 file changed

+32
-9
lines changed

1 file changed

+32
-9
lines changed

java-compiler-testing/src/main/java/io/github/ascopes/jct/compilers/impl/JctCompilationFactoryImpl.java

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,24 @@
2626
import io.github.ascopes.jct.ex.JctCompilerException;
2727
import io.github.ascopes.jct.filemanagers.JctFileManager;
2828
import io.github.ascopes.jct.filemanagers.LoggingMode;
29+
import io.github.ascopes.jct.filemanagers.PathFileObject;
30+
import io.github.ascopes.jct.utils.FileUtils;
2931
import io.github.ascopes.jct.utils.IterableUtils;
3032
import java.io.IOException;
3133
import java.io.OutputStreamWriter;
3234
import java.util.Collection;
3335
import java.util.HashSet;
3436
import java.util.List;
3537
import java.util.Set;
38+
import java.util.function.Predicate;
39+
import java.util.stream.Collectors;
3640
import javax.tools.JavaCompiler;
3741
import javax.tools.JavaFileObject;
3842
import javax.tools.JavaFileObject.Kind;
3943
import javax.tools.StandardLocation;
4044
import org.apiguardian.api.API;
4145
import org.apiguardian.api.API.Status;
46+
import org.jspecify.annotations.Nullable;
4247
import org.slf4j.Logger;
4348
import 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

Comments
 (0)