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

io.joern.dataflowengineoss.language.package.scala Maven / Gradle / Ivy

package io.joern.dataflowengineoss

import io.shiftleft.codepropertygraph.generated.nodes.*
import io.shiftleft.semanticcpg.language.*
import io.joern.dataflowengineoss.language.dotextension.DdgNodeDot
import io.joern.dataflowengineoss.language.nodemethods.{ExpressionMethods, ExtendedCfgNodeMethods}
import flatgraph.help.Doc

import scala.language.implicitConversions

package object language {

  implicit def cfgNodeToMethodsQp[NodeType <: CfgNode](node: NodeType): ExtendedCfgNodeMethods[NodeType] =
    new ExtendedCfgNodeMethods(node)

  implicit def expressionMethods[NodeType <: Expression](node: NodeType): ExpressionMethods[NodeType] =
    new ExpressionMethods(node)

  implicit def toExtendedCfgNode[NodeType <: CfgNode](traversal: IterableOnce[NodeType]): ExtendedCfgNode =
    new ExtendedCfgNode(traversal.iterator)

  implicit def toDdgNodeDot(traversal: IterableOnce[Method]): DdgNodeDot =
    new DdgNodeDot(traversal.iterator)

  implicit def toDdgNodeDotSingle(method: Method): DdgNodeDot =
    new DdgNodeDot(Iterator.single(method))

  implicit def toExtendedPathsTrav[NodeType <: Path](traversal: IterableOnce[NodeType]): PassesExt =
    new PassesExt(traversal.iterator)

  class PassesExt(traversal: Iterator[Path]) {

    @Doc(info = "Filters in paths that pass though the given paths")
    def passes(trav: Iterator[AstNode] => Iterator[?]): Iterator[Path] = {
      traversal.filter(_.elements.exists(_.start.where(trav).nonEmpty))
    }

    @Doc(info = "Filters out paths that pass though the given paths")
    def passesNot(trav: Iterator[AstNode] => Iterator[?]): Iterator[Path] = {
      traversal.filter(_.elements.forall(_.start.where(trav).isEmpty))
    }

  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy