Skip to content

Commit 5832f7c

Browse files
author
Max Schaefer
committed
JavaScript: Pull ExtractorState out of FileExtractor.
1 parent 335d43b commit 5832f7c

4 files changed

Lines changed: 25 additions & 25 deletions

File tree

javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,6 @@ public class AutoBuild {
173173
private final Path LGTM_SRC, SEMMLE_DIST;
174174
private final TypeScriptMode typeScriptMode;
175175
private final String defaultEncoding;
176-
private ExtractorState extractorState;
177176

178177
public AutoBuild() {
179178
this.LGTM_SRC = toRealPath(getPathFromEnvVar("LGTM_SRC"));
@@ -182,7 +181,6 @@ public AutoBuild() {
182181
this.trapCache = mkTrapCache();
183182
this.typeScriptMode = getEnumFromEnvVar("LGTM_INDEX_TYPESCRIPT", TypeScriptMode.class, TypeScriptMode.BASIC);
184183
this.defaultEncoding = getEnvVar("LGTM_INDEX_DEFAULT_ENCODING");
185-
this.extractorState = new ExtractorState();
186184
setupMatchers();
187185
}
188186

@@ -413,12 +411,12 @@ public File lookup(String source, ExtractorConfig config, FileType type) {
413411
}
414412
}
415413

416-
FileExtractor extractor = new FileExtractor(config, outputConfig, trapCache, extractorState);
414+
FileExtractor extractor = new FileExtractor(config, outputConfig, trapCache);
417415
FileVisitor<? super Path> visitor = new SimpleFileVisitor<Path>() {
418416
@Override
419417
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
420418
if (".js".equals(FileUtil.extension(file.toString())))
421-
extract(extractor, file);
419+
extract(extractor, file, null);
422420
return super.visitFile(file, attrs);
423421
}
424422
};
@@ -435,7 +433,7 @@ private void extractSource() throws IOException {
435433
config = config.withTypeScriptMode(typeScriptMode);
436434
if (defaultEncoding != null)
437435
config = config.withDefaultEncoding(defaultEncoding);
438-
FileExtractor extractor = new FileExtractor(config, outputConfig, trapCache, extractorState);
436+
FileExtractor extractor = new FileExtractor(config, outputConfig, trapCache);
439437
Path[] currentRoot = new Path[1];
440438
final Set<Path> filesToExtract = new LinkedHashSet<>();
441439
final List<Path> tsconfigFiles = new ArrayList<>();
@@ -482,6 +480,7 @@ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) th
482480
}
483481

484482
// If there are any .ts files, verify that TypeScript is installed.
483+
ExtractorState extractorState = new ExtractorState();
485484
TypeScriptParser tsParser = extractorState.getTypeScriptParser();
486485
boolean hasTypeScriptFiles = false;
487486
for (Path file : filesToExtract) {
@@ -494,7 +493,7 @@ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) th
494493
}
495494
}
496495
if (hasTypeScriptFiles || !tsconfigFiles.isEmpty()) {
497-
verifyTypeScriptInstallation();
496+
verifyTypeScriptInstallation(extractorState);
498497
}
499498

500499
// Extract TypeScript projects
@@ -515,7 +514,7 @@ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) th
515514
typeScriptFiles.add(sourcePath.toFile());
516515
}
517516
}
518-
extractTypeScriptFiles(typeScriptFiles, extractedFiles, extractor);
517+
extractTypeScriptFiles(typeScriptFiles, extractedFiles, extractor, extractorState);
519518
tsParser.closeProject(projectFile);
520519
}
521520

@@ -533,7 +532,7 @@ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) th
533532
}
534533
}
535534
if (!remainingTypeScriptFiles.isEmpty()) {
536-
extractTypeScriptFiles(remainingTypeScriptFiles, extractedFiles, extractor);
535+
extractTypeScriptFiles(remainingTypeScriptFiles, extractedFiles, extractor, extractorState);
537536
}
538537

539538
// The TypeScript compiler instance is no longer needed.
@@ -542,7 +541,7 @@ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) th
542541
// Extract non-TypeScript files
543542
for (Path f : filesToExtract) {
544543
if (extractedFiles.add(f)) {
545-
extract(extractor, f);
544+
extract(extractor, f, null);
546545
}
547546
}
548547
}
@@ -551,16 +550,17 @@ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) th
551550
* Verifies that Node.js and the TypeScript compiler are installed and can be
552551
* found.
553552
*/
554-
public void verifyTypeScriptInstallation() {
553+
public void verifyTypeScriptInstallation(ExtractorState extractorState) {
555554
extractorState.getTypeScriptParser().verifyInstallation(true);
556555
}
557556

558-
public void extractTypeScriptFiles(List<File> files, Set<Path> extractedFiles, FileExtractor extractor) throws IOException {
557+
public void extractTypeScriptFiles(List<File> files, Set<Path> extractedFiles,
558+
FileExtractor extractor, ExtractorState extractorState) throws IOException {
559559
extractorState.getTypeScriptParser().prepareFiles(files);
560560
for (File f : files) {
561561
Path path = f.toPath();
562562
extractedFiles.add(path);
563-
extract(extractor, f.toPath());
563+
extract(extractor, f.toPath(), extractorState);
564564
}
565565
}
566566

@@ -597,15 +597,15 @@ private SourceType getSourceType() {
597597
/**
598598
* Extract a single file.
599599
*/
600-
protected void extract(FileExtractor extractor, Path file) throws IOException {
600+
protected void extract(FileExtractor extractor, Path file, ExtractorState state) throws IOException {
601601
File f = file.toFile();
602602
if (!f.exists()) {
603603
warn("Skipping " + file + ", which does not exist.");
604604
return;
605605
}
606606

607607
long start = logBeginProcess("Extracting " + file);
608-
extractor.extract(f);
608+
extractor.extract(f, state);
609609
logEndProcess(start);
610610
}
611611

javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -395,13 +395,11 @@ public boolean isTrapCachingAllowed() {
395395
private final ExtractorConfig config;
396396
private final ExtractorOutputConfig outputConfig;
397397
private final ITrapCache trapCache;
398-
private final ExtractorState state;
399398

400-
public FileExtractor(ExtractorConfig config, ExtractorOutputConfig outputConfig, ITrapCache trapCache, ExtractorState state) {
399+
public FileExtractor(ExtractorConfig config, ExtractorOutputConfig outputConfig, ITrapCache trapCache) {
401400
this.config = config;
402401
this.outputConfig = outputConfig;
403402
this.trapCache = trapCache;
404-
this.state = state;
405403
}
406404

407405
public ExtractorConfig getConfig() {
@@ -412,7 +410,7 @@ public boolean supports(File f) {
412410
return config.hasFileType() || FileType.forFile(f, config) != null;
413411
}
414412

415-
public void extract(File f) throws IOException {
413+
public void extract(File f, ExtractorState state) throws IOException {
416414
// populate source archive
417415
String source = new WholeIO(config.getDefaultEncoding()).strictread(f);
418416
outputConfig.getSourceArchive().add(f, source);
@@ -424,7 +422,7 @@ public void extract(File f) throws IOException {
424422
locationManager.emitFileLocation(fileLabel, 0, 0, 0, 0);
425423

426424
// now extract the contents
427-
extractContents(f, fileLabel, source, locationManager);
425+
extractContents(f, fileLabel, source, locationManager, state);
428426
}
429427

430428

@@ -440,7 +438,7 @@ public void extract(File f) throws IOException {
440438
*
441439
* We only cache the content-dependent part, which makes up the bulk of the TRAP
442440
* file anyway. The location-dependent part is emitted from scratch every time
443-
* by the {@link #extract(File)} method above.
441+
* by the {@link #extract(File, ExtractorState)} method above.
444442
*
445443
* In order to keep labels in the main part independent of the file's location,
446444
* we bump the TRAP label counter to a known value (currently 20000) after the
@@ -451,7 +449,8 @@ public void extract(File f) throws IOException {
451449
* Also note that we support extraction with TRAP writer factories that are not file-backed;
452450
* obviously, no caching is done in that scenario.
453451
*/
454-
private void extractContents(File f, Label fileLabel, String source, LocationManager locationManager) throws IOException {
452+
private void extractContents(File f, Label fileLabel, String source, LocationManager locationManager,
453+
ExtractorState state) throws IOException {
455454
TrapWriter trapwriter = locationManager.getTrapWriter();
456455
FileType fileType = config.hasFileType() ? FileType.valueOf(config.getFileType())
457456
: FileType.forFile(f, config);

javascript/extractor/src/com/semmle/js/extractor/Main.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public void run(String[] args) {
125125
ap.error(P_TRAP_CACHE_BOUND + " should only be specified together with " + P_TRAP_CACHE + ".");
126126
trapCache = new DummyTrapCache();
127127
}
128-
fileExtractor = new FileExtractor(extractorConfig, extractorOutputConfig, trapCache, extractorState);
128+
fileExtractor = new FileExtractor(extractorConfig, extractorOutputConfig, trapCache);
129129

130130
setupMatchers(ap);
131131

@@ -211,7 +211,7 @@ private void ensureFileIsExtracted(File f, ArgsParser ap) {
211211
}
212212
long start = verboseLogStartTimer(ap, "Extracting " + f);
213213
try {
214-
fileExtractor.extract(f.getAbsoluteFile());
214+
fileExtractor.extract(f.getAbsoluteFile(), extractorState);
215215
verboseLogEndTimer(ap, start);
216216
} catch (IOException e) {
217217
throw new ResourceError("Extraction of " + f + " failed.", e);

javascript/extractor/src/com/semmle/js/extractor/test/AutoBuildTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.junit.Test;
2222

2323
import com.semmle.js.extractor.AutoBuild;
24+
import com.semmle.js.extractor.ExtractorState;
2425
import com.semmle.js.extractor.FileExtractor;
2526
import com.semmle.util.data.StringUtil;
2627
import com.semmle.util.exception.UserError;
@@ -94,12 +95,12 @@ private void runTest() throws IOException {
9495
Set<String> actual = new LinkedHashSet<>();
9596
new AutoBuild() {
9697
@Override
97-
protected void extract(FileExtractor extractor, Path file) {
98+
protected void extract(FileExtractor extractor, Path file, ExtractorState state) {
9899
actual.add(file.toString());
99100
}
100101

101102
@Override
102-
public void verifyTypeScriptInstallation() {
103+
public void verifyTypeScriptInstallation(ExtractorState state) {
103104
}
104105

105106
@Override

0 commit comments

Comments
 (0)