All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.joern.gosrc2cpg.passes.PackageCtorCreationPass.scala Maven / Gradle / Ivy

The newest version!
package io.joern.gosrc2cpg.passes

import io.joern.gosrc2cpg.Config
import io.joern.gosrc2cpg.astcreation.AstForPackageConstructorCreator
import io.joern.gosrc2cpg.datastructures.{GoGlobal, PackageMemberAst}
import io.joern.x2cpg.Ast
import io.shiftleft.codepropertygraph.generated.Cpg
import io.shiftleft.passes.ForkJoinParallelCpgPass

import scala.jdk.CollectionConverters.*

class PackageCtorCreationPass(cpg: Cpg, config: Config, goGlobal: GoGlobal)
    extends ForkJoinParallelCpgPass[(String, Set[PackageMemberAst])](cpg) {
  override def generateParts(): Array[(String, Set[PackageMemberAst])] = {
    val parts = goGlobal.pkgLevelVarAndConstantAstMap
      .keys()
      .asScala
      .map(key => (key, goGlobal.pkgLevelVarAndConstantAstMap.get(key)))
      .toArray
    // Clearing the cache once its used.
    goGlobal.pkgLevelVarAndConstantAstMap.clear()
    parts
  }

  override def runOnPart(diffGraph: DiffGraphBuilder, part: (String, Set[PackageMemberAst])): Unit = {
    val (packageStr, statementAsts) = part
    val packageCtorAstCreator = new AstForPackageConstructorCreator(packageStr, statementAsts)(config.schemaValidation)
    val localDiff             = packageCtorAstCreator.createAst()
    diffGraph.absorb(localDiff)
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy