From ce5b8a495dfe3e59642848ecc13138c456dd7ab3 Mon Sep 17 00:00:00 2001 From: Xavier Pinho Date: Thu, 25 Apr 2024 10:20:18 +0100 Subject: [PATCH] Invoke JavaParser.clearInstances after AST creation (#4489) --- .../src/main/scala/io/joern/javasrc2cpg/JavaSrc2Cpg.scala | 1 + .../io/joern/javasrc2cpg/passes/AstCreationPass.scala | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/joern-cli/frontends/javasrc2cpg/src/main/scala/io/joern/javasrc2cpg/JavaSrc2Cpg.scala b/joern-cli/frontends/javasrc2cpg/src/main/scala/io/joern/javasrc2cpg/JavaSrc2Cpg.scala index 297d903f6b19..15c89f0173ab 100644 --- a/joern-cli/frontends/javasrc2cpg/src/main/scala/io/joern/javasrc2cpg/JavaSrc2Cpg.scala +++ b/joern-cli/frontends/javasrc2cpg/src/main/scala/io/joern/javasrc2cpg/JavaSrc2Cpg.scala @@ -31,6 +31,7 @@ class JavaSrc2Cpg extends X2CpgFrontend[Config] { val astCreationPass = new AstCreationPass(config, cpg) astCreationPass.createAndApply() astCreationPass.sourceParser.cleanupDelombokOutput() + astCreationPass.clearJavaParserCaches() new ConfigFileCreationPass(cpg).createAndApply() if (!config.skipTypeInfPass) { TypeNodePass.withRegisteredTypes(astCreationPass.global.usedTypes.keys().asScala.toList, cpg).createAndApply() diff --git a/joern-cli/frontends/javasrc2cpg/src/main/scala/io/joern/javasrc2cpg/passes/AstCreationPass.scala b/joern-cli/frontends/javasrc2cpg/src/main/scala/io/joern/javasrc2cpg/passes/AstCreationPass.scala index ecc4c1746e7f..87715c058197 100644 --- a/joern-cli/frontends/javasrc2cpg/src/main/scala/io/joern/javasrc2cpg/passes/AstCreationPass.scala +++ b/joern-cli/frontends/javasrc2cpg/src/main/scala/io/joern/javasrc2cpg/passes/AstCreationPass.scala @@ -6,6 +6,7 @@ import com.github.javaparser.ParserConfiguration.LanguageLevel import com.github.javaparser.ast.CompilationUnit import com.github.javaparser.ast.Node.Parsedness import com.github.javaparser.symbolsolver.JavaSymbolSolver +import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade import com.github.javaparser.symbolsolver.resolution.typesolvers.{ ClassLoaderTypeSolver, JarTypeSolver, @@ -58,6 +59,13 @@ class AstCreationPass(config: Config, cpg: Cpg, sourcesOverride: Option[List[Str } } + /** Clear JavaParser caches. Should only be invoked after we no longer need JavaParser, e.g. as soon as we've built + * the AST layer for all files. + */ + def clearJavaParserCaches(): Unit = { + JavaParserFacade.clearInstances() + } + private def initParserAndUtils(config: Config): (SourceParser, JavaSymbolSolver) = { val dependencies = getDependencyList(config.inputPath) val sourceParser = SourceParser(config, sourcesOverride)