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

io.shiftleft.layers.EnhancedBaseCreator.scala Maven / Gradle / Ivy

package io.shiftleft.layers

import gremlin.scala.ScalaGraph
import io.shiftleft.SerializedCpg
import io.shiftleft.codepropertygraph.generated.Languages
import io.shiftleft.passes.containsedges.ContainsEdgePass
import io.shiftleft.passes.languagespecific.fuzzyc.{MethodStubCreator, TypeDeclStubCreator}
import io.shiftleft.passes.linking.capturinglinker.CapturingLinker
import io.shiftleft.passes.linking.linker.Linker
import io.shiftleft.passes.linking.memberaccesslinker.MemberAccessLinker
import io.shiftleft.passes.methoddecorations.MethodDecoratorPass
import io.shiftleft.passes.namespacecreator.NamespaceCreator
import io.shiftleft.passes.receiveredges.ReceiverEdgePass
import io.shiftleft.passes.{CpgPass, CpgPassRunner}

class EnhancedBaseCreator(graph: ScalaGraph, language: String, serializedCpg: SerializedCpg) {
  private val runner = new CpgPassRunner(serializedCpg)
  private val enhancementExecList = createEnhancementExecList(language)

  private def createEnhancementExecList(language: String): List[CpgPass] = {
    language match {
      case Languages.JAVA =>
        List(
          new ReceiverEdgePass(graph),
          new MethodDecoratorPass(graph),
          new CapturingLinker(graph),
          new Linker(graph),
          new MemberAccessLinker(graph),
          new ContainsEdgePass(graph),
          new NamespaceCreator(graph)
        )
      case Languages.C =>
        List(
          new TypeDeclStubCreator(graph),
          new MethodStubCreator(graph),
          new MethodDecoratorPass(graph),
          new CapturingLinker(graph),
          new Linker(graph),
          new MemberAccessLinker(graph),
          new ContainsEdgePass(graph),
          new NamespaceCreator(graph)
        )
      case _ =>
        List(
          new ReceiverEdgePass(graph),
          new MethodDecoratorPass(graph),
          new CapturingLinker(graph),
          new Linker(graph),
          new MemberAccessLinker(graph),
          new ContainsEdgePass(graph),
          new NamespaceCreator(graph)
        )
    }
  }

  def create(): Unit = {
    enhancementExecList.foreach(runner.createStoreAndApplyOverlay(_))
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy