Skip to content

Commit 8736ca1

Browse files
[swiftsrc2cpg] Shrink Swift type map when file gets handled (#5646)
We can safely remove everything for the currently handled file to safe heap space.
1 parent 9da0536 commit 8736ca1

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

joern-cli/frontends/swiftsrc2cpg/src/main/scala/io/joern/swiftsrc2cpg/passes/AstCreationPass.scala

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,7 @@ import io.joern.swiftsrc2cpg.parser.SwiftJsonParser
66
import io.joern.swiftsrc2cpg.parser.SwiftJsonParser.ParseResult
77
import io.joern.swiftsrc2cpg.utils.AstGenRunner.AstGenRunnerResult
88
import io.joern.swiftsrc2cpg.utils.SwiftTypesProvider
9-
import io.joern.swiftsrc2cpg.utils.SwiftTypesProvider.{
10-
MutableSwiftFileLocalTypeMapping,
11-
MutableSwiftTypeMapping,
12-
SwiftFileLocalTypeMapping
13-
}
9+
import io.joern.swiftsrc2cpg.utils.SwiftTypesProvider.SwiftFileLocalTypeMapping
1410
import io.joern.x2cpg.ValidationMode
1511
import io.joern.x2cpg.datastructures.Global
1612
import io.joern.x2cpg.frontendspecific.swiftsrc2cpg.Defines
@@ -21,7 +17,6 @@ import io.shiftleft.utils.IOUtils
2117
import org.slf4j.{Logger, LoggerFactory}
2218

2319
import java.nio.file.Paths
24-
import scala.collection.concurrent.TrieMap
2520
import scala.jdk.CollectionConverters.*
2621
import scala.util.{Failure, Success, Try}
2722

@@ -32,7 +27,7 @@ class AstCreationPass(cpg: Cpg, astGenRunnerResult: AstGenRunnerResult, config:
3227
private val logger: Logger = LoggerFactory.getLogger(classOf[AstCreationPass])
3328

3429
private val global = new Global()
35-
private val typeMap = SwiftTypesProvider(config).map(_.retrieveMappings()).getOrElse(Map.empty)
30+
private var typeMap = SwiftTypesProvider(config).map(_.retrieveMappings()).getOrElse(Map.empty)
3631

3732
def typesSeen(): List[String] = global.usedTypes.keys().asScala.filterNot(Defines.SwiftTypes.contains).toList
3833

@@ -52,13 +47,18 @@ class AstCreationPass(cpg: Cpg, astGenRunnerResult: AstGenRunnerResult, config:
5247
}
5348

5449
private def extractFileLocalTypeMap(parseResult: ParseResult): SwiftFileLocalTypeMapping = {
55-
val fileLocalTypesMap = typeMap.collectFirst {
56-
// special handling for GitHub Windows and MacOS runner
57-
// Windows: C:\Users\RUNNER~1\AppData\Local\Temp\hash\Input\file.swift vs. C:\Users\runneradmin\AppData\Local\Temp\hash\Input\file.swift
58-
// macOS: /private/var/folders/y6/hash/T/Input/file.swift vs. /var/folders/y6/hash/T/Input/file.swift
59-
case (filename, map) if filename.replace("\\", "/").endsWith(parseResult.filename) => map
60-
}
61-
fileLocalTypesMap.getOrElse(Map.empty)
50+
typeMap
51+
.collectFirst {
52+
// special handling for GitHub Windows and MacOS runner
53+
// Windows: C:\Users\RUNNER~1\AppData\Local\Temp\hash\Input\file.swift vs. C:\Users\runneradmin\AppData\Local\Temp\hash\Input\file.swift
54+
// macOS: /private/var/folders/y6/hash/T/Input/file.swift vs. /var/folders/y6/hash/T/Input/file.swift
55+
case (filename, map) if filename.replace("\\", "/").endsWith(parseResult.filename) => (filename, map)
56+
}
57+
.map { case (filename, map) =>
58+
typeMap = typeMap.removed(filename)
59+
map
60+
}
61+
.getOrElse(Map.empty)
6262
}
6363

6464
override def runOnPart(diffGraph: DiffGraphBuilder, input: String): Unit = {

0 commit comments

Comments
 (0)