Skip to content

Commit c9cf33d

Browse files
committed
Kotlin: Nest TRAP files inside their basename
1 parent dff1cf4 commit c9cf33d

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,11 @@ private TrapLocker(IrDeclaration decl, String signature) {
486486
// We encode the metadata into the filename, so that the
487487
// TRAP filenames for different metadatas don't overlap.
488488
trapFileVersion = TrapClassVersion.fromSymbol(sym, log);
489-
trapFileBase = new File(normalTrapFile.getParentFile(), normalTrapFile.getName().replace(".trap.gz", ""));
489+
String baseName = normalTrapFile.getName().replace(".trap.gz", "");
490+
// If a class has lots of inner classes, then we get lots of files
491+
// in a single directory. This makes our directory listings later slow.
492+
// To avoid this, rather than using files named .../Foo*, we use .../Foo/Foo*.
493+
trapFileBase = new File(new File(normalTrapFile.getParentFile(), baseName), baseName);
490494
trapFile = new File(trapFileBase.getPath() + '#' + trapFileVersion.toString() + ".trap.gz");
491495
}
492496
}
@@ -539,9 +543,14 @@ public void close() {
539543
for (File f: FileUtil.list(trapFileDir)) {
540544
String name = f.getName();
541545
Matcher m = selectClassVersionComponents.matcher(name);
542-
if (m.matches() && m.group(1).equals(trapFileBaseName)) {
543-
TrapClassVersion v = new TrapClassVersion(Integer.valueOf(m.group(2)), Integer.valueOf(m.group(3)), Long.valueOf(m.group(4)), m.group(5));
544-
pairs.add(new Pair<File, TrapClassVersion>(f, v));
546+
if (m.matches()) {
547+
if (m.group(1).equals(trapFileBaseName)) {
548+
TrapClassVersion v = new TrapClassVersion(Integer.valueOf(m.group(2)), Integer.valueOf(m.group(3)), Long.valueOf(m.group(4)), m.group(5));
549+
pairs.add(new Pair<File, TrapClassVersion>(f, v));
550+
} else {
551+
// Everything in this directory should be for the same TRAP file base
552+
log.error("Unexpected sibling " + m.group(1) + " when extracting " + trapFileBaseName);
553+
}
545554
}
546555
}
547556
if (pairs.isEmpty()) {

0 commit comments

Comments
 (0)