Skip to content

Commit 62b175a

Browse files
authored
Add tag step on StoredNode. (#1005)
Also moved tag step on Traversal[StoredNode] to expected place.
1 parent cdc985d commit 62b175a

3 files changed

Lines changed: 19 additions & 9 deletions

File tree

semanticcpg/src/main/scala/io/shiftleft/semanticcpg/language/NodeSteps.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,11 @@ class NodeSteps[NodeType <: nodes.StoredNode](val traversal: Traversal[NodeType]
113113
taggedNode.tagList.l
114114
}.l
115115

116+
@Doc("Tags attached to this node")
117+
def tag: Traversal[nodes.Tag] = {
118+
traversal.flatMap { node =>
119+
node.tag
120+
}
121+
}
122+
116123
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package io.shiftleft.semanticcpg.language.nodemethods
2+
3+
import io.shiftleft.codepropertygraph.generated.nodes
4+
import overflowdb.traversal.Traversal
5+
import scala.jdk.CollectionConverters._
6+
7+
class StoredNodeMethods(val node: nodes.StoredNode) extends AnyVal {
8+
def tag: Traversal[nodes.Tag] = {
9+
node._taggedByOut().asScala.map(_.asInstanceOf[nodes.Tag]).to(Traversal)
10+
}
11+
}

semanticcpg/src/main/scala/io/shiftleft/semanticcpg/language/package.scala

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ package object language extends operatorextension.Implicits {
4141

4242
implicit def cfgNodeToAstNode(node: nodes.CfgNode): AstNodeMethods = new AstNodeMethods(node)
4343
implicit def toExtendedNode(node: nodes.CpgNode): NodeMethods = new NodeMethods(node)
44+
implicit def toExtendedStoredNode(node: nodes.StoredNode): StoredNodeMethods = new StoredNodeMethods(node)
4445
implicit def withMethodMethodsQp(node: nodes.WithinMethod): WithinMethodMethods = new WithinMethodMethods(node)
4546
implicit def toAstNodeMethods(node: nodes.AstNode): AstNodeMethods = new AstNodeMethods(node)
4647
implicit def toCfgNodeMethods(node: nodes.CfgNode): CfgNodeMethods = new CfgNodeMethods(node)
@@ -78,15 +79,6 @@ package object language extends operatorextension.Implicits {
7879
implicit def toMethodRef(trav: Traversal[nodes.MethodRef]): MethodRef = new MethodRef(trav)
7980
implicit def toBinding(trav: Traversal[nodes.Binding]): Binding = new Binding(trav)
8081

81-
implicit class NodeStepsExt(val traversal: Traversal[_ <: StoredNode]) extends AnyVal {
82-
83-
/**
84-
Traverse to tags of nodes in enhanced graph
85-
*/
86-
def tag: Traversal[nodes.Tag] =
87-
traversal.out(EdgeTypes.TAGGED_BY).cast[nodes.Tag]
88-
}
89-
9082
// Call graph extension
9183
implicit def toMethodForCallGraph(trav: Traversal[nodes.Method]): Method = new Method(trav)
9284
implicit def toCallForCallGraph(trav: Traversal[nodes.Call]): Call = new Call(trav)

0 commit comments

Comments
 (0)