From 47aef0f8ac674aa8ecac78d2b41c09b1f2e63d4e Mon Sep 17 00:00:00 2001 From: Johannes Coetzee Date: Wed, 16 Jul 2025 12:27:12 +0200 Subject: [PATCH 1/4] Add STATIC_BASE_TYPE property to calls --- .../codepropertygraph/schema/CallGraph.scala | 16 +++++++++++++++- .../codepropertygraph/schema/ProtoIds.scala | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CallGraph.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CallGraph.scala index a5cb20aa7..30218578a 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CallGraph.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CallGraph.scala @@ -176,8 +176,22 @@ object CallGraph extends SchemaBase { ).protoId(ProtoIds.Inlined) ) + val staticBaseType = builder + .addProperty( + name = "STATIC_BASE_TYPE", + valueType = ValueType.String, + comment = """The `STATIC_BASE_TYPE` field is used to keep track of the type on which a static method + |is called for static methods which may be inherited. This information can then be used to find + |the true `METHOD_FULL_NAME` of the method being called during call linking. For example, if a + |class `Foo` defines a static method `foo` and a class `Bar extends Foo`, then the `STATIC_BASE_TYPE` + |of a`Bar.foo()` call is `Bar` and the `METHOD_FULL_NAME` of the `foo` call is rewritten to + |`Foo.foo:`. + |""".stripMargin + ) + .protoId(ProtoIds.StaticBaseType) + callNode - .addProperties(dispatchType) + .addProperties(dispatchType, staticBaseType) callNode .addOutEdge(edge = call, inNode = method) diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/ProtoIds.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/ProtoIds.scala index 07ecd342c..a961a8728 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/ProtoIds.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/ProtoIds.scala @@ -124,6 +124,7 @@ object ProtoIds { val AstParentType = 56 val AstParentFullName = 57 val DependencyGroupId = 58 + val StaticBaseType = 59 val Symbol = 100 val MethodShortName = 102 val PackageName = 103 From 4e4166a4b2b01d3e4bd3a9647252f393c8ca1c54 Mon Sep 17 00:00:00 2001 From: Johannes Coetzee Date: Wed, 16 Jul 2025 12:27:39 +0200 Subject: [PATCH 2/4] Generate code --- .../generated/GraphSchema.scala | 154 +++++++++--------- .../generated/Properties.scala | 16 +- .../generated/PropertyNames.scala | 9 + .../generated/accessors/Accessors.scala | 19 ++- .../generated/nodes/BaseTypes.scala | 5 + .../generated/nodes/Call.scala | 16 +- .../generated/nodes/Finding.scala | 4 +- .../generated/nodes/NewBlock.scala | 2 +- .../generated/nodes/NewCall.scala | 44 ++++- .../generated/nodes/NewDependency.scala | 2 +- .../generated/nodes/NewFinding.scala | 4 +- .../generated/nodes/NewIdentifier.scala | 2 +- .../generated/nodes/NewKeyValuePair.scala | 2 +- .../generated/nodes/NewLiteral.scala | 2 +- .../generated/nodes/NewLocal.scala | 2 +- .../generated/nodes/NewMember.scala | 2 +- .../generated/nodes/NewMetaData.scala | 2 +- .../nodes/NewMethodParameterIn.scala | 2 +- .../nodes/NewMethodParameterOut.scala | 2 +- .../generated/nodes/NewMethodRef.scala | 2 +- .../generated/nodes/NewMethodReturn.scala | 2 +- .../generated/nodes/NewTag.scala | 2 +- .../generated/nodes/NewTagNodePair.scala | 4 +- .../generated/nodes/NewType.scala | 2 +- .../generated/nodes/NewTypeRef.scala | 2 +- .../generated/nodes/NewUnknown.scala | 2 +- .../generated/nodes/TagNodePair.scala | 4 +- .../traversals/TraversalBlockBase.scala | 4 +- .../traversals/TraversalCallBase.scala | 77 ++++++++- .../traversals/TraversalDependencyBase.scala | 4 +- .../traversals/TraversalIdentifierBase.scala | 4 +- .../TraversalKeyvaluepairBase.scala | 4 +- .../traversals/TraversalLiteralBase.scala | 4 +- .../traversals/TraversalLocalBase.scala | 4 +- .../traversals/TraversalMemberBase.scala | 4 +- .../traversals/TraversalMetadataBase.scala | 4 +- .../TraversalMethodparameterinBase.scala | 4 +- .../TraversalMethodparameteroutBase.scala | 4 +- .../traversals/TraversalMethodrefBase.scala | 4 +- .../TraversalMethodreturnBase.scala | 4 +- .../TraversalPropertyStaticBaseType.scala | 84 ++++++++++ .../TraversalPropertyTypeDeclFullName.scala | 4 +- .../TraversalPropertyTypeFullName.scala | 4 +- .../traversals/TraversalPropertyValue.scala | 4 +- .../traversals/TraversalPropertyVersion.scala | 4 +- .../traversals/TraversalTagBase.scala | 4 +- .../traversals/TraversalTypeBase.scala | 4 +- .../traversals/TraversalTyperefBase.scala | 4 +- .../traversals/TraversalUnknownBase.scala | 4 +- .../generated/traversals/package.scala | 4 + 50 files changed, 401 insertions(+), 155 deletions(-) create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyStaticBaseType.scala diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala index a66de74ac..826d126b7 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala @@ -224,6 +224,7 @@ object GraphSchema extends flatgraph.Schema { size => new Array[String](size), size => new Array[String](size), size => new Array[String](size), + size => new Array[String](size), size => new Array[flatgraph.GNode](size), size => new Array[flatgraph.GNode](size), size => new Array[flatgraph.GNode](size), @@ -276,19 +277,20 @@ object GraphSchema extends flatgraph.Schema { "POSSIBLE_TYPES", "ROOT", "SIGNATURE", + "STATIC_BASE_TYPE", "TYPE_DECL_FULL_NAME", "TYPE_FULL_NAME", "VALUE", "VERSION" ) val nodePropertyByLabel = normalNodePropertyNames.zipWithIndex.toMap - .updated("evidence", 50) - .updated("keyValuePairs", 51) - .updated("node", 52) - .updated("tag", 53) + .updated("evidence", 51) + .updated("keyValuePairs", 52) + .updated("node", 53) + .updated("tag", 54) val nodePropertyDescriptors: Array[FormalQtyType.FormalQuantity | FormalQtyType.FormalType] = { - val nodePropertyDescriptors = new Array[FormalQtyType.FormalQuantity | FormalQtyType.FormalType](4644) - for (idx <- Range(0, 4644)) { + val nodePropertyDescriptors = new Array[FormalQtyType.FormalQuantity | FormalQtyType.FormalType](4730) + for (idx <- Range(0, 4730)) { nodePropertyDescriptors(idx) = if ((idx & 1) == 0) FormalQtyType.NothingType else FormalQtyType.QtyNone @@ -398,8 +400,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3453) = FormalQtyType.QtyOne nodePropertyDescriptors(3710) = FormalQtyType.StringType // BLOCK.POSSIBLE_TYPES nodePropertyDescriptors(3711) = FormalQtyType.QtyMulti - nodePropertyDescriptors(4054) = FormalQtyType.StringType // BLOCK.TYPE_FULL_NAME - nodePropertyDescriptors(4055) = FormalQtyType.QtyOne + nodePropertyDescriptors(4140) = FormalQtyType.StringType // BLOCK.TYPE_FULL_NAME + nodePropertyDescriptors(4141) = FormalQtyType.QtyOne nodePropertyDescriptors(100) = FormalQtyType.IntType // CALL.ARGUMENT_INDEX nodePropertyDescriptors(101) = FormalQtyType.QtyOne nodePropertyDescriptors(186) = FormalQtyType.StringType // CALL.ARGUMENT_NAME @@ -428,8 +430,10 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3713) = FormalQtyType.QtyMulti nodePropertyDescriptors(3884) = FormalQtyType.StringType // CALL.SIGNATURE nodePropertyDescriptors(3885) = FormalQtyType.QtyOne - nodePropertyDescriptors(4056) = FormalQtyType.StringType // CALL.TYPE_FULL_NAME - nodePropertyDescriptors(4057) = FormalQtyType.QtyOne + nodePropertyDescriptors(3970) = FormalQtyType.StringType // CALL.STATIC_BASE_TYPE + nodePropertyDescriptors(3971) = FormalQtyType.QtyOption + nodePropertyDescriptors(4142) = FormalQtyType.StringType // CALL.TYPE_FULL_NAME + nodePropertyDescriptors(4143) = FormalQtyType.QtyOne nodePropertyDescriptors(532) = FormalQtyType.StringType // CLOSURE_BINDING.CLOSURE_BINDING_ID nodePropertyDescriptors(533) = FormalQtyType.QtyOption nodePropertyDescriptors(1392) = FormalQtyType.StringType // CLOSURE_BINDING.EVALUATION_STRATEGY @@ -476,8 +480,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(1143) = FormalQtyType.QtyOption nodePropertyDescriptors(3206) = FormalQtyType.StringType // DEPENDENCY.NAME nodePropertyDescriptors(3207) = FormalQtyType.QtyOne - nodePropertyDescriptors(4238) = FormalQtyType.StringType // DEPENDENCY.VERSION - nodePropertyDescriptors(4239) = FormalQtyType.QtyOne + nodePropertyDescriptors(4324) = FormalQtyType.StringType // DEPENDENCY.VERSION + nodePropertyDescriptors(4325) = FormalQtyType.QtyOne nodePropertyDescriptors(112) = FormalQtyType.IntType // FIELD_IDENTIFIER.ARGUMENT_INDEX nodePropertyDescriptors(113) = FormalQtyType.QtyOne nodePropertyDescriptors(198) = FormalQtyType.StringType // FIELD_IDENTIFIER.ARGUMENT_NAME @@ -516,10 +520,10 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3469) = FormalQtyType.QtyOne nodePropertyDescriptors(1492) = FormalQtyType.StringType // FINDING.EVIDENCE_DESCRIPTION nodePropertyDescriptors(1493) = FormalQtyType.QtyMulti - nodePropertyDescriptors(4330) = FormalQtyType.RefType // FINDING.evidence - nodePropertyDescriptors(4331) = FormalQtyType.QtyMulti - nodePropertyDescriptors(4416) = FormalQtyType.RefType // FINDING.keyValuePairs + nodePropertyDescriptors(4416) = FormalQtyType.RefType // FINDING.evidence nodePropertyDescriptors(4417) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4502) = FormalQtyType.RefType // FINDING.keyValuePairs + nodePropertyDescriptors(4503) = FormalQtyType.QtyMulti nodePropertyDescriptors(118) = FormalQtyType.IntType // IDENTIFIER.ARGUMENT_INDEX nodePropertyDescriptors(119) = FormalQtyType.QtyOne nodePropertyDescriptors(204) = FormalQtyType.StringType // IDENTIFIER.ARGUMENT_NAME @@ -542,8 +546,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3473) = FormalQtyType.QtyOne nodePropertyDescriptors(3730) = FormalQtyType.StringType // IDENTIFIER.POSSIBLE_TYPES nodePropertyDescriptors(3731) = FormalQtyType.QtyMulti - nodePropertyDescriptors(4074) = FormalQtyType.StringType // IDENTIFIER.TYPE_FULL_NAME - nodePropertyDescriptors(4075) = FormalQtyType.QtyOne + nodePropertyDescriptors(4160) = FormalQtyType.StringType // IDENTIFIER.TYPE_FULL_NAME + nodePropertyDescriptors(4161) = FormalQtyType.QtyOne nodePropertyDescriptors(636) = FormalQtyType.StringType // IMPORT.CODE nodePropertyDescriptors(637) = FormalQtyType.QtyOne nodePropertyDescriptors(722) = FormalQtyType.IntType // IMPORT.COLUMN_NUMBER @@ -602,8 +606,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3651) = FormalQtyType.QtyOne nodePropertyDescriptors(2706) = FormalQtyType.StringType // KEY_VALUE_PAIR.KEY nodePropertyDescriptors(2707) = FormalQtyType.QtyOne - nodePropertyDescriptors(4168) = FormalQtyType.StringType // KEY_VALUE_PAIR.VALUE - nodePropertyDescriptors(4169) = FormalQtyType.QtyOne + nodePropertyDescriptors(4254) = FormalQtyType.StringType // KEY_VALUE_PAIR.VALUE + nodePropertyDescriptors(4255) = FormalQtyType.QtyOne nodePropertyDescriptors(128) = FormalQtyType.IntType // LITERAL.ARGUMENT_INDEX nodePropertyDescriptors(129) = FormalQtyType.QtyOne nodePropertyDescriptors(214) = FormalQtyType.StringType // LITERAL.ARGUMENT_NAME @@ -624,8 +628,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3483) = FormalQtyType.QtyOne nodePropertyDescriptors(3740) = FormalQtyType.StringType // LITERAL.POSSIBLE_TYPES nodePropertyDescriptors(3741) = FormalQtyType.QtyMulti - nodePropertyDescriptors(4084) = FormalQtyType.StringType // LITERAL.TYPE_FULL_NAME - nodePropertyDescriptors(4085) = FormalQtyType.QtyOne + nodePropertyDescriptors(4170) = FormalQtyType.StringType // LITERAL.TYPE_FULL_NAME + nodePropertyDescriptors(4171) = FormalQtyType.QtyOne nodePropertyDescriptors(560) = FormalQtyType.StringType // LOCAL.CLOSURE_BINDING_ID nodePropertyDescriptors(561) = FormalQtyType.QtyOption nodePropertyDescriptors(646) = FormalQtyType.StringType // LOCAL.CODE @@ -648,8 +652,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3485) = FormalQtyType.QtyOne nodePropertyDescriptors(3742) = FormalQtyType.StringType // LOCAL.POSSIBLE_TYPES nodePropertyDescriptors(3743) = FormalQtyType.QtyMulti - nodePropertyDescriptors(4086) = FormalQtyType.StringType // LOCAL.TYPE_FULL_NAME - nodePropertyDescriptors(4087) = FormalQtyType.QtyOne + nodePropertyDescriptors(4172) = FormalQtyType.StringType // LOCAL.TYPE_FULL_NAME + nodePropertyDescriptors(4173) = FormalQtyType.QtyOne nodePropertyDescriptors(304) = FormalQtyType.StringType // MEMBER.AST_PARENT_FULL_NAME nodePropertyDescriptors(305) = FormalQtyType.QtyOne nodePropertyDescriptors(390) = FormalQtyType.StringType // MEMBER.AST_PARENT_TYPE @@ -674,8 +678,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3487) = FormalQtyType.QtyOne nodePropertyDescriptors(3744) = FormalQtyType.StringType // MEMBER.POSSIBLE_TYPES nodePropertyDescriptors(3745) = FormalQtyType.QtyMulti - nodePropertyDescriptors(4088) = FormalQtyType.StringType // MEMBER.TYPE_FULL_NAME - nodePropertyDescriptors(4089) = FormalQtyType.QtyOne + nodePropertyDescriptors(4174) = FormalQtyType.StringType // MEMBER.TYPE_FULL_NAME + nodePropertyDescriptors(4175) = FormalQtyType.QtyOne nodePropertyDescriptors(1940) = FormalQtyType.StringType // META_DATA.HASH nodePropertyDescriptors(1941) = FormalQtyType.QtyOption nodePropertyDescriptors(2800) = FormalQtyType.StringType // META_DATA.LANGUAGE @@ -684,8 +688,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3575) = FormalQtyType.QtyMulti nodePropertyDescriptors(3832) = FormalQtyType.StringType // META_DATA.ROOT nodePropertyDescriptors(3833) = FormalQtyType.QtyOne - nodePropertyDescriptors(4262) = FormalQtyType.StringType // META_DATA.VERSION - nodePropertyDescriptors(4263) = FormalQtyType.QtyOne + nodePropertyDescriptors(4348) = FormalQtyType.StringType // META_DATA.VERSION + nodePropertyDescriptors(4349) = FormalQtyType.QtyOne nodePropertyDescriptors(308) = FormalQtyType.StringType // METHOD.AST_PARENT_FULL_NAME nodePropertyDescriptors(309) = FormalQtyType.QtyOne nodePropertyDescriptors(394) = FormalQtyType.StringType // METHOD.AST_PARENT_TYPE @@ -746,8 +750,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3493) = FormalQtyType.QtyOne nodePropertyDescriptors(3750) = FormalQtyType.StringType // METHOD_PARAMETER_IN.POSSIBLE_TYPES nodePropertyDescriptors(3751) = FormalQtyType.QtyMulti - nodePropertyDescriptors(4094) = FormalQtyType.StringType // METHOD_PARAMETER_IN.TYPE_FULL_NAME - nodePropertyDescriptors(4095) = FormalQtyType.QtyOne + nodePropertyDescriptors(4180) = FormalQtyType.StringType // METHOD_PARAMETER_IN.TYPE_FULL_NAME + nodePropertyDescriptors(4181) = FormalQtyType.QtyOne nodePropertyDescriptors(656) = FormalQtyType.StringType // METHOD_PARAMETER_OUT.CODE nodePropertyDescriptors(657) = FormalQtyType.QtyOne nodePropertyDescriptors(742) = FormalQtyType.IntType // METHOD_PARAMETER_OUT.COLUMN_NUMBER @@ -768,8 +772,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3409) = FormalQtyType.QtyOption nodePropertyDescriptors(3494) = FormalQtyType.IntType // METHOD_PARAMETER_OUT.ORDER nodePropertyDescriptors(3495) = FormalQtyType.QtyOne - nodePropertyDescriptors(4096) = FormalQtyType.StringType // METHOD_PARAMETER_OUT.TYPE_FULL_NAME - nodePropertyDescriptors(4097) = FormalQtyType.QtyOne + nodePropertyDescriptors(4182) = FormalQtyType.StringType // METHOD_PARAMETER_OUT.TYPE_FULL_NAME + nodePropertyDescriptors(4183) = FormalQtyType.QtyOne nodePropertyDescriptors(142) = FormalQtyType.IntType // METHOD_REF.ARGUMENT_INDEX nodePropertyDescriptors(143) = FormalQtyType.QtyOne nodePropertyDescriptors(228) = FormalQtyType.StringType // METHOD_REF.ARGUMENT_NAME @@ -792,8 +796,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3497) = FormalQtyType.QtyOne nodePropertyDescriptors(3754) = FormalQtyType.StringType // METHOD_REF.POSSIBLE_TYPES nodePropertyDescriptors(3755) = FormalQtyType.QtyMulti - nodePropertyDescriptors(4098) = FormalQtyType.StringType // METHOD_REF.TYPE_FULL_NAME - nodePropertyDescriptors(4099) = FormalQtyType.QtyOne + nodePropertyDescriptors(4184) = FormalQtyType.StringType // METHOD_REF.TYPE_FULL_NAME + nodePropertyDescriptors(4185) = FormalQtyType.QtyOne nodePropertyDescriptors(660) = FormalQtyType.StringType // METHOD_RETURN.CODE nodePropertyDescriptors(661) = FormalQtyType.QtyOne nodePropertyDescriptors(746) = FormalQtyType.IntType // METHOD_RETURN.COLUMN_NUMBER @@ -812,8 +816,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3499) = FormalQtyType.QtyOne nodePropertyDescriptors(3756) = FormalQtyType.StringType // METHOD_RETURN.POSSIBLE_TYPES nodePropertyDescriptors(3757) = FormalQtyType.QtyMulti - nodePropertyDescriptors(4100) = FormalQtyType.StringType // METHOD_RETURN.TYPE_FULL_NAME - nodePropertyDescriptors(4101) = FormalQtyType.QtyOne + nodePropertyDescriptors(4186) = FormalQtyType.StringType // METHOD_RETURN.TYPE_FULL_NAME + nodePropertyDescriptors(4187) = FormalQtyType.QtyOne nodePropertyDescriptors(662) = FormalQtyType.StringType // MODIFIER.CODE nodePropertyDescriptors(663) = FormalQtyType.QtyOne nodePropertyDescriptors(748) = FormalQtyType.IntType // MODIFIER.COLUMN_NUMBER @@ -878,12 +882,12 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3507) = FormalQtyType.QtyOne nodePropertyDescriptors(3250) = FormalQtyType.StringType // TAG.NAME nodePropertyDescriptors(3251) = FormalQtyType.QtyOne - nodePropertyDescriptors(4196) = FormalQtyType.StringType // TAG.VALUE - nodePropertyDescriptors(4197) = FormalQtyType.QtyOne - nodePropertyDescriptors(4542) = FormalQtyType.RefType // TAG_NODE_PAIR.node - nodePropertyDescriptors(4543) = FormalQtyType.QtyOne - nodePropertyDescriptors(4628) = FormalQtyType.RefType // TAG_NODE_PAIR.tag + nodePropertyDescriptors(4282) = FormalQtyType.StringType // TAG.VALUE + nodePropertyDescriptors(4283) = FormalQtyType.QtyOne + nodePropertyDescriptors(4628) = FormalQtyType.RefType // TAG_NODE_PAIR.node nodePropertyDescriptors(4629) = FormalQtyType.QtyOne + nodePropertyDescriptors(4714) = FormalQtyType.RefType // TAG_NODE_PAIR.tag + nodePropertyDescriptors(4715) = FormalQtyType.QtyOne nodePropertyDescriptors(158) = FormalQtyType.IntType // TEMPLATE_DOM.ARGUMENT_INDEX nodePropertyDescriptors(159) = FormalQtyType.QtyOne nodePropertyDescriptors(244) = FormalQtyType.StringType // TEMPLATE_DOM.ARGUMENT_NAME @@ -906,8 +910,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(1795) = FormalQtyType.QtyOne nodePropertyDescriptors(3256) = FormalQtyType.StringType // TYPE.NAME nodePropertyDescriptors(3257) = FormalQtyType.QtyOne - nodePropertyDescriptors(4030) = FormalQtyType.StringType // TYPE.TYPE_DECL_FULL_NAME - nodePropertyDescriptors(4031) = FormalQtyType.QtyOne + nodePropertyDescriptors(4116) = FormalQtyType.StringType // TYPE.TYPE_DECL_FULL_NAME + nodePropertyDescriptors(4117) = FormalQtyType.QtyOne nodePropertyDescriptors(678) = FormalQtyType.StringType // TYPE_ARGUMENT.CODE nodePropertyDescriptors(679) = FormalQtyType.QtyOne nodePropertyDescriptors(764) = FormalQtyType.IntType // TYPE_ARGUMENT.COLUMN_NUMBER @@ -984,8 +988,8 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3523) = FormalQtyType.QtyOne nodePropertyDescriptors(3780) = FormalQtyType.StringType // TYPE_REF.POSSIBLE_TYPES nodePropertyDescriptors(3781) = FormalQtyType.QtyMulti - nodePropertyDescriptors(4124) = FormalQtyType.StringType // TYPE_REF.TYPE_FULL_NAME - nodePropertyDescriptors(4125) = FormalQtyType.QtyOne + nodePropertyDescriptors(4210) = FormalQtyType.StringType // TYPE_REF.TYPE_FULL_NAME + nodePropertyDescriptors(4211) = FormalQtyType.QtyOne nodePropertyDescriptors(170) = FormalQtyType.IntType // UNKNOWN.ARGUMENT_INDEX nodePropertyDescriptors(171) = FormalQtyType.QtyOne nodePropertyDescriptors(256) = FormalQtyType.StringType // UNKNOWN.ARGUMENT_NAME @@ -1010,12 +1014,12 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3697) = FormalQtyType.QtyOne nodePropertyDescriptors(3782) = FormalQtyType.StringType // UNKNOWN.POSSIBLE_TYPES nodePropertyDescriptors(3783) = FormalQtyType.QtyMulti - nodePropertyDescriptors(4126) = FormalQtyType.StringType // UNKNOWN.TYPE_FULL_NAME - nodePropertyDescriptors(4127) = FormalQtyType.QtyOne + nodePropertyDescriptors(4212) = FormalQtyType.StringType // UNKNOWN.TYPE_FULL_NAME + nodePropertyDescriptors(4213) = FormalQtyType.QtyOne nodePropertyDescriptors } private val newNodeInsertionHelpers: Array[flatgraph.NewNodePropertyInsertionHelper] = { - val _newNodeInserters = new Array[flatgraph.NewNodePropertyInsertionHelper](4644) + val _newNodeInserters = new Array[flatgraph.NewNodePropertyInsertionHelper](4730) _newNodeInserters(86) = nodes.NewAnnotation.InsertionHelpers.NewNodeInserter_Annotation_argumentIndex _newNodeInserters(172) = nodes.NewAnnotation.InsertionHelpers.NewNodeInserter_Annotation_argumentName _newNodeInserters(602) = nodes.NewAnnotation.InsertionHelpers.NewNodeInserter_Annotation_code @@ -1077,7 +1081,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3366) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_offsetEnd _newNodeInserters(3452) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_order _newNodeInserters(3710) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_possibleTypes - _newNodeInserters(4054) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_typeFullName + _newNodeInserters(4140) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_typeFullName _newNodeInserters(100) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_argumentIndex _newNodeInserters(186) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_argumentName _newNodeInserters(616) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_code @@ -1092,7 +1096,8 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3454) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_order _newNodeInserters(3712) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_possibleTypes _newNodeInserters(3884) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_signature - _newNodeInserters(4056) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_typeFullName + _newNodeInserters(3970) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_staticBaseType + _newNodeInserters(4142) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_typeFullName _newNodeInserters(532) = nodes.NewClosureBinding.InsertionHelpers.NewNodeInserter_ClosureBinding_closureBindingId _newNodeInserters(1392) = nodes.NewClosureBinding.InsertionHelpers.NewNodeInserter_ClosureBinding_evaluationStrategy _newNodeInserters(620) = nodes.NewComment.InsertionHelpers.NewNodeInserter_Comment_code @@ -1117,7 +1122,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3634) = nodes.NewControlStructure.InsertionHelpers.NewNodeInserter_ControlStructure_parserTypeName _newNodeInserters(1142) = nodes.NewDependency.InsertionHelpers.NewNodeInserter_Dependency_dependencyGroupId _newNodeInserters(3206) = nodes.NewDependency.InsertionHelpers.NewNodeInserter_Dependency_name - _newNodeInserters(4238) = nodes.NewDependency.InsertionHelpers.NewNodeInserter_Dependency_version + _newNodeInserters(4324) = nodes.NewDependency.InsertionHelpers.NewNodeInserter_Dependency_version _newNodeInserters(112) = nodes.NewFieldIdentifier.InsertionHelpers.NewNodeInserter_FieldIdentifier_argumentIndex _newNodeInserters(198) = nodes.NewFieldIdentifier.InsertionHelpers.NewNodeInserter_FieldIdentifier_argumentName _newNodeInserters(456) = nodes.NewFieldIdentifier.InsertionHelpers.NewNodeInserter_FieldIdentifier_canonicalName @@ -1137,8 +1142,8 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3382) = nodes.NewFile.InsertionHelpers.NewNodeInserter_File_offsetEnd _newNodeInserters(3468) = nodes.NewFile.InsertionHelpers.NewNodeInserter_File_order _newNodeInserters(1492) = nodes.NewFinding.InsertionHelpers.NewNodeInserter_Finding_evidenceDescription - _newNodeInserters(4330) = nodes.NewFinding.InsertionHelpers.NewNodeInserter_Finding_evidence - _newNodeInserters(4416) = nodes.NewFinding.InsertionHelpers.NewNodeInserter_Finding_keyValuePairs + _newNodeInserters(4416) = nodes.NewFinding.InsertionHelpers.NewNodeInserter_Finding_evidence + _newNodeInserters(4502) = nodes.NewFinding.InsertionHelpers.NewNodeInserter_Finding_keyValuePairs _newNodeInserters(118) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_argumentIndex _newNodeInserters(204) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_argumentName _newNodeInserters(634) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_code @@ -1150,7 +1155,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3386) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_offsetEnd _newNodeInserters(3472) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_order _newNodeInserters(3730) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_possibleTypes - _newNodeInserters(4074) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_typeFullName + _newNodeInserters(4160) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_typeFullName _newNodeInserters(636) = nodes.NewImport.InsertionHelpers.NewNodeInserter_Import_code _newNodeInserters(722) = nodes.NewImport.InsertionHelpers.NewNodeInserter_Import_columnNumber _newNodeInserters(1582) = nodes.NewImport.InsertionHelpers.NewNodeInserter_Import_explicitAs @@ -1180,7 +1185,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3478) = nodes.NewJumpTarget.InsertionHelpers.NewNodeInserter_JumpTarget_order _newNodeInserters(3650) = nodes.NewJumpTarget.InsertionHelpers.NewNodeInserter_JumpTarget_parserTypeName _newNodeInserters(2706) = nodes.NewKeyValuePair.InsertionHelpers.NewNodeInserter_KeyValuePair_key - _newNodeInserters(4168) = nodes.NewKeyValuePair.InsertionHelpers.NewNodeInserter_KeyValuePair_value + _newNodeInserters(4254) = nodes.NewKeyValuePair.InsertionHelpers.NewNodeInserter_KeyValuePair_value _newNodeInserters(128) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_argumentIndex _newNodeInserters(214) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_argumentName _newNodeInserters(644) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_code @@ -1191,7 +1196,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3396) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_offsetEnd _newNodeInserters(3482) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_order _newNodeInserters(3740) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_possibleTypes - _newNodeInserters(4084) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_typeFullName + _newNodeInserters(4170) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_typeFullName _newNodeInserters(560) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_closureBindingId _newNodeInserters(646) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_code _newNodeInserters(732) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_columnNumber @@ -1203,7 +1208,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3398) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_offsetEnd _newNodeInserters(3484) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_order _newNodeInserters(3742) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_possibleTypes - _newNodeInserters(4086) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_typeFullName + _newNodeInserters(4172) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_typeFullName _newNodeInserters(304) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_astParentFullName _newNodeInserters(390) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_astParentType _newNodeInserters(648) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_code @@ -1216,12 +1221,12 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3400) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_offsetEnd _newNodeInserters(3486) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_order _newNodeInserters(3744) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_possibleTypes - _newNodeInserters(4088) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_typeFullName + _newNodeInserters(4174) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_typeFullName _newNodeInserters(1940) = nodes.NewMetaData.InsertionHelpers.NewNodeInserter_MetaData_hash _newNodeInserters(2800) = nodes.NewMetaData.InsertionHelpers.NewNodeInserter_MetaData_language _newNodeInserters(3574) = nodes.NewMetaData.InsertionHelpers.NewNodeInserter_MetaData_overlays _newNodeInserters(3832) = nodes.NewMetaData.InsertionHelpers.NewNodeInserter_MetaData_root - _newNodeInserters(4262) = nodes.NewMetaData.InsertionHelpers.NewNodeInserter_MetaData_version + _newNodeInserters(4348) = nodes.NewMetaData.InsertionHelpers.NewNodeInserter_MetaData_version _newNodeInserters(308) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_astParentFullName _newNodeInserters(394) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_astParentType _newNodeInserters(652) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_code @@ -1256,7 +1261,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3492) = nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_order _newNodeInserters(3750) = nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_possibleTypes - _newNodeInserters(4094) = nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_typeFullName + _newNodeInserters(4180) = nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_typeFullName _newNodeInserters(656) = nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_code _newNodeInserters(742) = nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_columnNumber @@ -1269,7 +1274,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3322) = nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_offset _newNodeInserters(3408) = nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_offsetEnd _newNodeInserters(3494) = nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_order - _newNodeInserters(4096) = + _newNodeInserters(4182) = nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_typeFullName _newNodeInserters(142) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_argumentIndex _newNodeInserters(228) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_argumentName @@ -1282,7 +1287,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3410) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_offsetEnd _newNodeInserters(3496) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_order _newNodeInserters(3754) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_possibleTypes - _newNodeInserters(4098) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_typeFullName + _newNodeInserters(4184) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_typeFullName _newNodeInserters(660) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_code _newNodeInserters(746) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_columnNumber _newNodeInserters(1348) = @@ -1293,7 +1298,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3412) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_offsetEnd _newNodeInserters(3498) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_order _newNodeInserters(3756) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_possibleTypes - _newNodeInserters(4100) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_typeFullName + _newNodeInserters(4186) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_typeFullName _newNodeInserters(662) = nodes.NewModifier.InsertionHelpers.NewNodeInserter_Modifier_code _newNodeInserters(748) = nodes.NewModifier.InsertionHelpers.NewNodeInserter_Modifier_columnNumber _newNodeInserters(2898) = nodes.NewModifier.InsertionHelpers.NewNodeInserter_Modifier_lineNumber @@ -1326,9 +1331,9 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3420) = nodes.NewReturn.InsertionHelpers.NewNodeInserter_Return_offsetEnd _newNodeInserters(3506) = nodes.NewReturn.InsertionHelpers.NewNodeInserter_Return_order _newNodeInserters(3250) = nodes.NewTag.InsertionHelpers.NewNodeInserter_Tag_name - _newNodeInserters(4196) = nodes.NewTag.InsertionHelpers.NewNodeInserter_Tag_value - _newNodeInserters(4542) = nodes.NewTagNodePair.InsertionHelpers.NewNodeInserter_TagNodePair_node - _newNodeInserters(4628) = nodes.NewTagNodePair.InsertionHelpers.NewNodeInserter_TagNodePair_tag + _newNodeInserters(4282) = nodes.NewTag.InsertionHelpers.NewNodeInserter_Tag_value + _newNodeInserters(4628) = nodes.NewTagNodePair.InsertionHelpers.NewNodeInserter_TagNodePair_node + _newNodeInserters(4714) = nodes.NewTagNodePair.InsertionHelpers.NewNodeInserter_TagNodePair_tag _newNodeInserters(158) = nodes.NewTemplateDom.InsertionHelpers.NewNodeInserter_TemplateDom_argumentIndex _newNodeInserters(244) = nodes.NewTemplateDom.InsertionHelpers.NewNodeInserter_TemplateDom_argumentName _newNodeInserters(674) = nodes.NewTemplateDom.InsertionHelpers.NewNodeInserter_TemplateDom_code @@ -1340,7 +1345,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3512) = nodes.NewTemplateDom.InsertionHelpers.NewNodeInserter_TemplateDom_order _newNodeInserters(1794) = nodes.NewType.InsertionHelpers.NewNodeInserter_Type_fullName _newNodeInserters(3256) = nodes.NewType.InsertionHelpers.NewNodeInserter_Type_name - _newNodeInserters(4030) = nodes.NewType.InsertionHelpers.NewNodeInserter_Type_typeDeclFullName + _newNodeInserters(4116) = nodes.NewType.InsertionHelpers.NewNodeInserter_Type_typeDeclFullName _newNodeInserters(678) = nodes.NewTypeArgument.InsertionHelpers.NewNodeInserter_TypeArgument_code _newNodeInserters(764) = nodes.NewTypeArgument.InsertionHelpers.NewNodeInserter_TypeArgument_columnNumber _newNodeInserters(2914) = nodes.NewTypeArgument.InsertionHelpers.NewNodeInserter_TypeArgument_lineNumber @@ -1379,7 +1384,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3436) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_offsetEnd _newNodeInserters(3522) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_order _newNodeInserters(3780) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_possibleTypes - _newNodeInserters(4124) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_typeFullName + _newNodeInserters(4210) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_typeFullName _newNodeInserters(170) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_argumentIndex _newNodeInserters(256) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_argumentName _newNodeInserters(686) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_code @@ -1392,7 +1397,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3524) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_order _newNodeInserters(3696) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_parserTypeName _newNodeInserters(3782) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_possibleTypes - _newNodeInserters(4126) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_typeFullName + _newNodeInserters(4212) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_typeFullName _newNodeInserters } override def getNumberOfNodeKinds: Int = 43 @@ -1463,6 +1468,7 @@ object GraphSchema extends flatgraph.Schema { "ORDER", "POSSIBLE_TYPES", "SIGNATURE", + "STATIC_BASE_TYPE", "TYPE_FULL_NAME" ) case "CLOSURE_BINDING" => Set("CLOSURE_BINDING_ID", "EVALUATION_STRATEGY") @@ -1748,17 +1754,17 @@ object GraphSchema extends flatgraph.Schema { } override def getPropertyLabel(nodeKind: Int, propertyKind: Int): String = { - if (propertyKind < 50) normalNodePropertyNames(propertyKind) - else if (propertyKind == 50 && nodeKind == 15) "evidence" /*on node FINDING*/ - else if (propertyKind == 51 && nodeKind == 15) "keyValuePairs" /*on node FINDING*/ - else if (propertyKind == 52 && nodeKind == 35) "node" /*on node TAG_NODE_PAIR*/ - else if (propertyKind == 53 && nodeKind == 35) "tag" /*on node TAG_NODE_PAIR*/ + if (propertyKind < 51) normalNodePropertyNames(propertyKind) + else if (propertyKind == 51 && nodeKind == 15) "evidence" /*on node FINDING*/ + else if (propertyKind == 52 && nodeKind == 15) "keyValuePairs" /*on node FINDING*/ + else if (propertyKind == 53 && nodeKind == 35) "node" /*on node TAG_NODE_PAIR*/ + else if (propertyKind == 54 && nodeKind == 35) "tag" /*on node TAG_NODE_PAIR*/ else null } override def getPropertyKindByName(label: String): Int = nodePropertyByLabel.getOrElse(label, flatgraph.Schema.UndefinedKind) - override def getNumberOfPropertyKinds: Int = 54 + override def getNumberOfPropertyKinds: Int = 55 override def makeNode(graph: flatgraph.Graph, nodeKind: Short, seq: Int): nodes.StoredNode = nodeFactories(nodeKind)(graph, seq) override def makeEdge( diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Properties.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Properties.scala index 8a8ee0c44..d14858c2c 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Properties.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Properties.scala @@ -242,23 +242,31 @@ object Properties { */ val Signature = flatgraph.SinglePropertyKey[String](kind = 45, name = "SIGNATURE", default = "") + /** The `STATIC_BASE_TYPE` field is used to keep track of the type on which a static method is called for static + * methods which may be inherited. This information can then be used to find the true `METHOD_FULL_NAME` of the + * method being called during call linking. For example, if a class `Foo` defines a static method `foo` and a class + * `Bar extends Foo`, then the `STATIC_BASE_TYPE` of a`Bar.foo()` call is `Bar` and the `METHOD_FULL_NAME` of the + * `foo` call is rewritten to `Foo.foo:`. + */ + val StaticBaseType = flatgraph.OptionalPropertyKey[String](kind = 46, name = "STATIC_BASE_TYPE") + /** The static type decl of a TYPE. This property is matched against the FULL_NAME of TYPE_DECL nodes. It is required * to have exactly one TYPE_DECL for each different TYPE_DECL_FULL_NAME */ val TypeDeclFullName = - flatgraph.SinglePropertyKey[String](kind = 46, name = "TYPE_DECL_FULL_NAME", default = "") + flatgraph.SinglePropertyKey[String](kind = 47, name = "TYPE_DECL_FULL_NAME", default = "") /** This field contains the fully-qualified static type name of the program construct represented by a node. It is the * name of an instantiated type, e.g., `java.util.List`, rather than `java.util.List[T]`. If the type cannot * be determined, this field should be set to the empty string. */ - val TypeFullName = flatgraph.SinglePropertyKey[String](kind = 47, name = "TYPE_FULL_NAME", default = "") + val TypeFullName = flatgraph.SinglePropertyKey[String](kind = 48, name = "TYPE_FULL_NAME", default = "") /** This property denotes a string value as used in a key-value pair. */ - val Value = flatgraph.SinglePropertyKey[String](kind = 48, name = "VALUE", default = "") + val Value = flatgraph.SinglePropertyKey[String](kind = 49, name = "VALUE", default = "") /** A version, given as a string. Used, for example, in the META_DATA node to indicate which version of the CPG spec * this CPG conforms to */ - val Version = flatgraph.SinglePropertyKey[String](kind = 49, name = "VERSION", default = "") + val Version = flatgraph.SinglePropertyKey[String](kind = 50, name = "VERSION", default = "") } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyNames.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyNames.scala index 5e6ad8a5b..d30ea6a35 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyNames.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyNames.scala @@ -247,6 +247,14 @@ object PropertyNames { */ val Signature: String = "SIGNATURE" + /** The `STATIC_BASE_TYPE` field is used to keep track of the type on which a static method is called for static + * methods which may be inherited. This information can then be used to find the true `METHOD_FULL_NAME` of the + * method being called during call linking. For example, if a class `Foo` defines a static method `foo` and a class + * `Bar extends Foo`, then the `STATIC_BASE_TYPE` of a`Bar.foo()` call is `Bar` and the `METHOD_FULL_NAME` of the + * `foo` call is rewritten to `Foo.foo:`. + */ + val StaticBaseType: String = "STATIC_BASE_TYPE" + /** The static type decl of a TYPE. This property is matched against the FULL_NAME of TYPE_DECL nodes. It is required * to have exactly one TYPE_DECL for each different TYPE_DECL_FULL_NAME */ @@ -330,6 +338,7 @@ object PropertyNames { Root, SecondaryId, Signature, + StaticBaseType, TypeDeclFullName, TypeFullName, Value, diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/accessors/Accessors.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/accessors/Accessors.scala index 022483e1d..c89f864cb 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/accessors/Accessors.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/accessors/Accessors.scala @@ -316,11 +316,15 @@ object Accessors { default = "": String ) } + final class AccessPropertyStaticBaseType(val node: nodes.StoredNode) extends AnyVal { + def staticBaseType: Option[String] = flatgraph.Accessors + .getNodePropertyOption[String](node.graph, nodeKind = node.nodeKind, propertyKind = 46, seq = node.seq) + } final class AccessPropertyTypeDeclFullName(val node: nodes.StoredNode) extends AnyVal { def typeDeclFullName: String = flatgraph.Accessors.getNodePropertySingle( node.graph, nodeKind = node.nodeKind, - propertyKind = 46, + propertyKind = 47, seq = node.seq(), default = "": String ) @@ -329,7 +333,7 @@ object Accessors { def typeFullName: String = flatgraph.Accessors.getNodePropertySingle( node.graph, nodeKind = node.nodeKind, - propertyKind = 47, + propertyKind = 48, seq = node.seq(), default = "": String ) @@ -338,7 +342,7 @@ object Accessors { def value: String = flatgraph.Accessors.getNodePropertySingle( node.graph, nodeKind = node.nodeKind, - propertyKind = 48, + propertyKind = 49, seq = node.seq(), default = "": String ) @@ -347,7 +351,7 @@ object Accessors { def version: String = flatgraph.Accessors.getNodePropertySingle( node.graph, nodeKind = node.nodeKind, - propertyKind = 49, + propertyKind = 50, seq = node.seq(), default = "": String ) @@ -419,6 +423,10 @@ object Accessors { case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes case newNode: nodes.NewCall => newNode.possibleTypes } + def staticBaseType: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyStaticBaseType(stored).staticBaseType + case newNode: nodes.NewCall => newNode.staticBaseType + } def typeFullName: String = node match { case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName case newNode: nodes.NewCall => newNode.typeFullName @@ -1112,6 +1120,9 @@ trait ConcreteStoredConversions extends ConcreteBaseConversions { implicit def accessPropertySignature( node: nodes.StoredNode & nodes.StaticType[nodes.HasSignatureEMT] ): AccessPropertySignature = new AccessPropertySignature(node) + implicit def accessPropertyStaticBaseType( + node: nodes.StoredNode & nodes.StaticType[nodes.HasStaticBaseTypeEMT] + ): AccessPropertyStaticBaseType = new AccessPropertyStaticBaseType(node) implicit def accessPropertyTypeDeclFullName( node: nodes.StoredNode & nodes.StaticType[nodes.HasTypeDeclFullNameEMT] ): AccessPropertyTypeDeclFullName = new AccessPropertyTypeDeclFullName(node) diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/BaseTypes.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/BaseTypes.scala index 99e1ae480..486568ed0 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/BaseTypes.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/BaseTypes.scala @@ -334,6 +334,11 @@ trait HasRootEMT */ trait HasSignatureEMT +/** Node types with this marker trait are guaranteed to have the STATIC_BASE_TYPE property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasStaticBaseTypeEMT + /** Node types with this marker trait are guaranteed to have the TYPE_DECL_FULL_NAME property. EMT stands for: "erased * marker trait", it exists only at compile time in order to improve type safety. */ diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Call.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Call.scala index 2ea80382b..2537c9255 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Call.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Call.scala @@ -15,6 +15,7 @@ trait CallEMT with HasDynamicTypeHintFullNameEMT with HasMethodFullNameEMT with HasPossibleTypesEMT + with HasStaticBaseTypeEMT with HasTypeFullNameEMT trait CallBase extends AbstractNode with CallReprBase with ExpressionBase with StaticType[CallEMT] { @@ -38,6 +39,7 @@ trait CallBase extends AbstractNode with CallReprBase with ExpressionBase with S val tmpPossibleTypes = this.possibleTypes; if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) if (("": String) != this.signature) res.put("SIGNATURE", this.signature) + this.staticBaseType.foreach { p => res.put("STATIC_BASE_TYPE", p) } if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) res } @@ -106,6 +108,12 @@ object Call { * enforce a strict format for the signature, that is, it can be chosen by the frontend implementor to fit the source * language. * + * ▸ StaticBaseType (String); Cardinality `ZeroOrOne` (optional); The `STATIC_BASE_TYPE` field is used to keep track of + * the type on which a static method is called for static methods which may be inherited. This information can then be + * used to find the true `METHOD_FULL_NAME` of the method being called during call linking. For example, if a class + * `Foo` defines a static method `foo` and a class `Bar extends Foo`, then the `STATIC_BASE_TYPE` of a`Bar.foo()` call + * is `Bar` and the `METHOD_FULL_NAME` of the `foo` call is rewritten to `Foo.foo:`. + * * ▸ TypeFullName (String); Cardinality `one` (mandatory with default value ``); This field contains the * fully-qualified static type name of the program construct represented by a node. It is the name of an instantiated * type, e.g., `java.util.List`, rather than `java.util.List[T]`. If the type cannot be determined, this field @@ -134,7 +142,8 @@ class Call(graph_4762: flatgraph.Graph, seq_4762: Int) case 11 => "order" case 12 => "possibleTypes" case 13 => "signature" - case 14 => "typeFullName" + case 14 => "staticBaseType" + case 15 => "typeFullName" case _ => "" } @@ -154,12 +163,13 @@ class Call(graph_4762: flatgraph.Graph, seq_4762: Int) case 11 => this.order case 12 => this.possibleTypes case 13 => this.signature - case 14 => this.typeFullName + case 14 => this.staticBaseType + case 15 => this.typeFullName case _ => null } override def productPrefix = "Call" - override def productArity = 15 + override def productArity = 16 override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Call] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Finding.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Finding.scala index e84d8121b..bd662f50e 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Finding.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Finding.scala @@ -44,9 +44,9 @@ class Finding(graph_4762: flatgraph.Graph, seq_4762: Int) with FindingBase with StaticType[FindingEMT] { def evidence: IndexedSeq[StoredNode] = - flatgraph.Accessors.getNodePropertyMulti[StoredNode](graph, nodeKind = nodeKind, propertyKind = 50, seq = seq) + flatgraph.Accessors.getNodePropertyMulti[StoredNode](graph, nodeKind = nodeKind, propertyKind = 51, seq = seq) def keyValuePairs: IndexedSeq[KeyValuePair] = - flatgraph.Accessors.getNodePropertyMulti[KeyValuePair](graph, nodeKind = nodeKind, propertyKind = 51, seq = seq) + flatgraph.Accessors.getNodePropertyMulti[KeyValuePair](graph, nodeKind = nodeKind, propertyKind = 52, seq = seq) override def productElementName(n: Int): String = n match { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewBlock.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewBlock.scala index f59e41b4f..50d7ce3fb 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewBlock.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewBlock.scala @@ -1594,7 +1594,7 @@ class NewBlock extends NewNode(nodeKind = 6) with BlockBase with ExpressionNew { interface.countProperty(this, 39, offsetEnd.size) interface.countProperty(this, 40, 1) interface.countProperty(this, 43, possibleTypes.size) - interface.countProperty(this, 47, 1) + interface.countProperty(this, 48, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewCall.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewCall.scala index 56591941f..4318633ea 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewCall.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewCall.scala @@ -1615,6 +1615,35 @@ object NewCall { } } } + object NewNodeInserter_Call_staticBaseType extends flatgraph.NewNodePropertyInsertionHelper { + override def insertNewNodeProperties( + newNodes: mutable.ArrayBuffer[flatgraph.DNode], + dst: AnyRef, + offsets: Array[Int] + ): Unit = { + if (newNodes.isEmpty) return + val dstCast = dst.asInstanceOf[Array[String]] + val seq = newNodes.head.storedRef.get.seq() + var offset = offsets(seq) + var idx = 0 + while (idx < newNodes.length) { + val nn = newNodes(idx) + nn match { + case generated: NewCall => + generated.staticBaseType match { + case Some(item) => + dstCast(offset) = item + offset += 1 + case _ => + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } object NewNodeInserter_Call_typeFullName extends flatgraph.NewNodePropertyInsertionHelper { override def insertNewNodeProperties( newNodes: mutable.ArrayBuffer[flatgraph.DNode], @@ -1668,6 +1697,7 @@ class NewCall extends NewNode(nodeKind = 7) with CallBase with CallReprNew with var order: Int = -1: Int var possibleTypes: IndexedSeq[String] = ArraySeq.empty var signature: String = "": String + var staticBaseType: Option[String] = None var typeFullName: String = "": String def argumentIndex(value: Int): this.type = { this.argumentIndex = value; this } def argumentName(value: Option[String]): this.type = { this.argumentName = value; this } @@ -1690,6 +1720,8 @@ class NewCall extends NewNode(nodeKind = 7) with CallBase with CallReprNew with def order(value: Int): this.type = { this.order = value; this } def possibleTypes(value: IterableOnce[String]): this.type = { this.possibleTypes = value.iterator.to(ArraySeq); this } def signature(value: String): this.type = { this.signature = value; this } + def staticBaseType(value: Option[String]): this.type = { this.staticBaseType = value; this } + def staticBaseType(value: String): this.type = { this.staticBaseType = Option(value); this } def typeFullName(value: String): this.type = { this.typeFullName = value; this } override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { interface.countProperty(this, 1, 1) @@ -1706,7 +1738,8 @@ class NewCall extends NewNode(nodeKind = 7) with CallBase with CallReprNew with interface.countProperty(this, 40, 1) interface.countProperty(this, 43, possibleTypes.size) interface.countProperty(this, 45, 1) - interface.countProperty(this, 47, 1) + interface.countProperty(this, 46, staticBaseType.size) + interface.countProperty(this, 48, 1) } override def copy: this.type = { @@ -1725,6 +1758,7 @@ class NewCall extends NewNode(nodeKind = 7) with CallBase with CallReprNew with newInstance.order = this.order newInstance.possibleTypes = this.possibleTypes newInstance.signature = this.signature + newInstance.staticBaseType = this.staticBaseType newInstance.typeFullName = this.typeFullName newInstance.asInstanceOf[this.type] } @@ -1745,7 +1779,8 @@ class NewCall extends NewNode(nodeKind = 7) with CallBase with CallReprNew with case 11 => "order" case 12 => "possibleTypes" case 13 => "signature" - case 14 => "typeFullName" + case 14 => "staticBaseType" + case 15 => "typeFullName" case _ => "" } @@ -1765,11 +1800,12 @@ class NewCall extends NewNode(nodeKind = 7) with CallBase with CallReprNew with case 11 => this.order case 12 => this.possibleTypes case 13 => this.signature - case 14 => this.typeFullName + case 14 => this.staticBaseType + case 15 => this.typeFullName case _ => null } override def productPrefix = "NewCall" - override def productArity = 15 + override def productArity = 16 override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewCall] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewDependency.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewDependency.scala index 0261e9fa1..55de8b1dc 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewDependency.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewDependency.scala @@ -113,7 +113,7 @@ class NewDependency extends NewNode(nodeKind = 12) with DependencyBase { override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { interface.countProperty(this, 13, dependencyGroupId.size) interface.countProperty(this, 37, 1) - interface.countProperty(this, 49, 1) + interface.countProperty(this, 50, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewFinding.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewFinding.scala index 0ff41af4b..74b5e55f5 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewFinding.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewFinding.scala @@ -123,9 +123,9 @@ class NewFinding extends NewNode(nodeKind = 15) with FindingBase { } override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { interface.countProperty(this, 17, evidenceDescription.size) - interface.countProperty(this, 50, evidence.size) + interface.countProperty(this, 51, evidence.size) evidence.foreach(interface.visitContainedNode) - interface.countProperty(this, 51, keyValuePairs.size) + interface.countProperty(this, 52, keyValuePairs.size) keyValuePairs.foreach(interface.visitContainedNode) } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewIdentifier.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewIdentifier.scala index 34fd7a8be..6546a0ac7 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewIdentifier.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewIdentifier.scala @@ -1622,7 +1622,7 @@ class NewIdentifier extends NewNode(nodeKind = 16) with IdentifierBase with Expr interface.countProperty(this, 39, offsetEnd.size) interface.countProperty(this, 40, 1) interface.countProperty(this, 43, possibleTypes.size) - interface.countProperty(this, 47, 1) + interface.countProperty(this, 48, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewKeyValuePair.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewKeyValuePair.scala index 9f6cef151..b742e27d8 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewKeyValuePair.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewKeyValuePair.scala @@ -80,7 +80,7 @@ class NewKeyValuePair extends NewNode(nodeKind = 20) with KeyValuePairBase { def value(value: String): this.type = { this.value = value; this } override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { interface.countProperty(this, 31, 1) - interface.countProperty(this, 48, 1) + interface.countProperty(this, 49, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewLiteral.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewLiteral.scala index 6aede6555..3dad7b78d 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewLiteral.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewLiteral.scala @@ -1594,7 +1594,7 @@ class NewLiteral extends NewNode(nodeKind = 21) with LiteralBase with Expression interface.countProperty(this, 39, offsetEnd.size) interface.countProperty(this, 40, 1) interface.countProperty(this, 43, possibleTypes.size) - interface.countProperty(this, 47, 1) + interface.countProperty(this, 48, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewLocal.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewLocal.scala index 2f5320f14..9be09f215 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewLocal.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewLocal.scala @@ -1622,7 +1622,7 @@ class NewLocal extends NewNode(nodeKind = 22) with LocalBase with AstNodeNew wit interface.countProperty(this, 39, offsetEnd.size) interface.countProperty(this, 40, 1) interface.countProperty(this, 43, possibleTypes.size) - interface.countProperty(this, 47, 1) + interface.countProperty(this, 48, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMember.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMember.scala index 639a37b66..1f5f77995 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMember.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMember.scala @@ -1645,7 +1645,7 @@ class NewMember extends NewNode(nodeKind = 23) with MemberBase with AstNodeNew w interface.countProperty(this, 39, offsetEnd.size) interface.countProperty(this, 40, 1) interface.countProperty(this, 43, possibleTypes.size) - interface.countProperty(this, 47, 1) + interface.countProperty(this, 48, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMetaData.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMetaData.scala index 40bace65d..1e316737c 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMetaData.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMetaData.scala @@ -171,7 +171,7 @@ class NewMetaData extends NewNode(nodeKind = 24) with MetaDataBase { interface.countProperty(this, 32, 1) interface.countProperty(this, 41, overlays.size) interface.countProperty(this, 44, 1) - interface.countProperty(this, 49, 1) + interface.countProperty(this, 50, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodParameterIn.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodParameterIn.scala index 93bd3b434..d2a4ef304 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodParameterIn.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodParameterIn.scala @@ -1683,7 +1683,7 @@ class NewMethodParameterIn interface.countProperty(this, 39, offsetEnd.size) interface.countProperty(this, 40, 1) interface.countProperty(this, 43, possibleTypes.size) - interface.countProperty(this, 47, 1) + interface.countProperty(this, 48, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodParameterOut.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodParameterOut.scala index 68f369848..7b23f3cce 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodParameterOut.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodParameterOut.scala @@ -1588,7 +1588,7 @@ class NewMethodParameterOut interface.countProperty(this, 38, offset.size) interface.countProperty(this, 39, offsetEnd.size) interface.countProperty(this, 40, 1) - interface.countProperty(this, 47, 1) + interface.countProperty(this, 48, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodRef.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodRef.scala index 5c1675083..6b28afa6b 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodRef.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodRef.scala @@ -1622,7 +1622,7 @@ class NewMethodRef extends NewNode(nodeKind = 28) with MethodRefBase with Expres interface.countProperty(this, 39, offsetEnd.size) interface.countProperty(this, 40, 1) interface.countProperty(this, 43, possibleTypes.size) - interface.countProperty(this, 47, 1) + interface.countProperty(this, 48, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodReturn.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodReturn.scala index 16c9d90e6..9a57fa99a 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodReturn.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewMethodReturn.scala @@ -1561,7 +1561,7 @@ class NewMethodReturn extends NewNode(nodeKind = 29) with MethodReturnBase with interface.countProperty(this, 39, offsetEnd.size) interface.countProperty(this, 40, 1) interface.countProperty(this, 43, possibleTypes.size) - interface.countProperty(this, 47, 1) + interface.countProperty(this, 48, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewTag.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewTag.scala index 5ed94d952..d9b3b3426 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewTag.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewTag.scala @@ -105,7 +105,7 @@ class NewTag extends NewNode(nodeKind = 34) with TagBase { def value(value: String): this.type = { this.value = value; this } override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { interface.countProperty(this, 37, 1) - interface.countProperty(this, 48, 1) + interface.countProperty(this, 49, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewTagNodePair.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewTagNodePair.scala index 725ba6bba..a2353bd27 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewTagNodePair.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewTagNodePair.scala @@ -83,9 +83,9 @@ class NewTagNodePair extends NewNode(nodeKind = 35) with TagNodePairBase { def node(value: AbstractNode): this.type = { this.node = value; this } def tag(value: TagBase): this.type = { this.tag = value; this } override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { - interface.countProperty(this, 52, 1) - interface.visitContainedNode(node) interface.countProperty(this, 53, 1) + interface.visitContainedNode(node) + interface.countProperty(this, 54, 1) interface.visitContainedNode(tag) } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewType.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewType.scala index a5454fb84..687de603d 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewType.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewType.scala @@ -128,7 +128,7 @@ class NewType extends NewNode(nodeKind = 37) with TypeBase { override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { interface.countProperty(this, 20, 1) interface.countProperty(this, 37, 1) - interface.countProperty(this, 46, 1) + interface.countProperty(this, 47, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewTypeRef.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewTypeRef.scala index 02a8a1168..6338552dd 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewTypeRef.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewTypeRef.scala @@ -1594,7 +1594,7 @@ class NewTypeRef extends NewNode(nodeKind = 41) with TypeRefBase with Expression interface.countProperty(this, 39, offsetEnd.size) interface.countProperty(this, 40, 1) interface.countProperty(this, 43, possibleTypes.size) - interface.countProperty(this, 47, 1) + interface.countProperty(this, 48, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewUnknown.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewUnknown.scala index b3f0085fd..d2e1e3e5b 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewUnknown.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewUnknown.scala @@ -1650,7 +1650,7 @@ class NewUnknown extends NewNode(nodeKind = 42) with UnknownBase with Expression interface.countProperty(this, 40, 1) interface.countProperty(this, 42, 1) interface.countProperty(this, 43, possibleTypes.size) - interface.countProperty(this, 47, 1) + interface.countProperty(this, 48, 1) } override def copy: this.type = { diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TagNodePair.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TagNodePair.scala index 30fde1c3b..52ebcb4b1 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TagNodePair.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TagNodePair.scala @@ -38,14 +38,14 @@ class TagNodePair(graph_4762: flatgraph.Graph, seq_4762: Int) def node: StoredNode = flatgraph.Accessors.getNodePropertySingle( graph, nodeKind = nodeKind, - propertyKind = 52, + propertyKind = 53, seq = seq, default = null: StoredNode ) def tag: Tag = flatgraph.Accessors.getNodePropertySingle( graph, nodeKind = nodeKind, - propertyKind = 53, + propertyKind = 54, seq = seq, default = null: Tag ) diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalBlockBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalBlockBase.scala index 03a06d3fc..e83617db0 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalBlockBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalBlockBase.scala @@ -40,7 +40,7 @@ final class TraversalBlockBase[NodeType <: nodes.BlockBase](val traversal: Itera case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -54,7 +54,7 @@ final class TraversalBlockBase[NodeType <: nodes.BlockBase](val traversal: Itera val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallBase.scala index 9e74ac6f4..d78037101 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallBase.scala @@ -149,6 +149,79 @@ final class TraversalCallBase[NodeType <: nodes.CallBase](val traversal: Iterato def possibleTypes: Iterator[String] = traversal.flatMap(_.possibleTypes) + /** Traverse to staticBaseType property */ + def staticBaseType: Iterator[String] = + traversal.flatMap(_.staticBaseType) + + /** Traverse to nodes where the staticBaseType matches the regular expression `value` + */ + def staticBaseType(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + staticBaseTypeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.staticBaseType; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the staticBaseType matches at least one of the regular expressions in `values` + */ + def staticBaseType(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.staticBaseType; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where staticBaseType matches `value` exactly. + */ + def staticBaseTypeExact(value: String): Iterator[NodeType] = traversal match { + case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => + val someNode = init.next + flatgraph.Accessors + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 46, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.staticBaseType; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where staticBaseType matches one of the elements in `values` exactly. + */ + def staticBaseTypeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) staticBaseTypeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.staticBaseType; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where staticBaseType does not match the regular expression `value`. + */ + def staticBaseTypeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.staticBaseType.isEmpty || node.staticBaseType.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.staticBaseType; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where staticBaseType does not match any of the regular expressions in `values`. + */ + def staticBaseTypeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.staticBaseType; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + /** Traverse to typeFullName property */ def typeFullName: Iterator[String] = traversal.map(_.typeFullName) @@ -176,7 +249,7 @@ final class TraversalCallBase[NodeType <: nodes.CallBase](val traversal: Iterato case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -190,7 +263,7 @@ final class TraversalCallBase[NodeType <: nodes.CallBase](val traversal: Iterato val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalDependencyBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalDependencyBase.scala index 4ae5b25a3..5c8708afc 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalDependencyBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalDependencyBase.scala @@ -174,7 +174,7 @@ final class TraversalDependencyBase[NodeType <: nodes.DependencyBase](val traver case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 49, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 50, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.version == value } } @@ -188,7 +188,7 @@ final class TraversalDependencyBase[NodeType <: nodes.DependencyBase](val traver val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 49, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 50, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalIdentifierBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalIdentifierBase.scala index 1af260dd6..b3256a5ec 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalIdentifierBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalIdentifierBase.scala @@ -109,7 +109,7 @@ final class TraversalIdentifierBase[NodeType <: nodes.IdentifierBase](val traver case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -123,7 +123,7 @@ final class TraversalIdentifierBase[NodeType <: nodes.IdentifierBase](val traver val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalKeyvaluepairBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalKeyvaluepairBase.scala index ef15631d5..268f3f997 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalKeyvaluepairBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalKeyvaluepairBase.scala @@ -101,7 +101,7 @@ final class TraversalKeyvaluepairBase[NodeType <: nodes.KeyValuePairBase](val tr case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 49, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.value == value } } @@ -115,7 +115,7 @@ final class TraversalKeyvaluepairBase[NodeType <: nodes.KeyValuePairBase](val tr val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 49, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLiteralBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLiteralBase.scala index d914a2286..1ffe14082 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLiteralBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLiteralBase.scala @@ -40,7 +40,7 @@ final class TraversalLiteralBase[NodeType <: nodes.LiteralBase](val traversal: I case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -54,7 +54,7 @@ final class TraversalLiteralBase[NodeType <: nodes.LiteralBase](val traversal: I val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLocalBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLocalBase.scala index d7dd52df3..7969c5d7b 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLocalBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLocalBase.scala @@ -181,7 +181,7 @@ final class TraversalLocalBase[NodeType <: nodes.LocalBase](val traversal: Itera case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -195,7 +195,7 @@ final class TraversalLocalBase[NodeType <: nodes.LocalBase](val traversal: Itera val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMemberBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMemberBase.scala index 285bd4133..d1b2e0ed1 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMemberBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMemberBase.scala @@ -244,7 +244,7 @@ final class TraversalMemberBase[NodeType <: nodes.MemberBase](val traversal: Ite case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -258,7 +258,7 @@ final class TraversalMemberBase[NodeType <: nodes.MemberBase](val traversal: Ite val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMetadataBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMetadataBase.scala index e9e49e7f5..c2604a32c 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMetadataBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMetadataBase.scala @@ -245,7 +245,7 @@ final class TraversalMetadataBase[NodeType <: nodes.MetaDataBase](val traversal: case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 49, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 50, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.version == value } } @@ -259,7 +259,7 @@ final class TraversalMetadataBase[NodeType <: nodes.MetaDataBase](val traversal: val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 49, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 50, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodparameterinBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodparameterinBase.scala index f2bf740ed..2ab632f17 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodparameterinBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodparameterinBase.scala @@ -239,7 +239,7 @@ final class TraversalMethodparameterinBase[NodeType <: nodes.MethodParameterInBa case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -253,7 +253,7 @@ final class TraversalMethodparameterinBase[NodeType <: nodes.MethodParameterInBa val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodparameteroutBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodparameteroutBase.scala index 3c883b3f4..c300108ea 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodparameteroutBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodparameteroutBase.scala @@ -158,7 +158,7 @@ final class TraversalMethodparameteroutBase[NodeType <: nodes.MethodParameterOut case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -172,7 +172,7 @@ final class TraversalMethodparameteroutBase[NodeType <: nodes.MethodParameterOut val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodrefBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodrefBase.scala index 31e2eb493..ba3264e67 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodrefBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodrefBase.scala @@ -108,7 +108,7 @@ final class TraversalMethodrefBase[NodeType <: nodes.MethodRefBase](val traversa case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -122,7 +122,7 @@ final class TraversalMethodrefBase[NodeType <: nodes.MethodRefBase](val traversa val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodreturnBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodreturnBase.scala index b8737e61b..03b1e15cd 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodreturnBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodreturnBase.scala @@ -109,7 +109,7 @@ final class TraversalMethodreturnBase[NodeType <: nodes.MethodReturnBase](val tr case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -123,7 +123,7 @@ final class TraversalMethodreturnBase[NodeType <: nodes.MethodReturnBase](val tr val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyStaticBaseType.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyStaticBaseType.scala new file mode 100644 index 000000000..d6c5d0d4a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyStaticBaseType.scala @@ -0,0 +1,84 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyStaticBaseType[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasStaticBaseTypeEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to staticBaseType property */ + def staticBaseType: Iterator[String] = + traversal.flatMap(_.staticBaseType) + + /** Traverse to nodes where the staticBaseType matches the regular expression `value` + */ + def staticBaseType(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + staticBaseTypeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.staticBaseType; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the staticBaseType matches at least one of the regular expressions in `values` + */ + def staticBaseType(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.staticBaseType; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where staticBaseType matches `value` exactly. + */ + def staticBaseTypeExact(value: String): Iterator[NodeType] = traversal match { + case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => + val someNode = init.next + flatgraph.Accessors + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 46, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.staticBaseType; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where staticBaseType matches one of the elements in `values` exactly. + */ + def staticBaseTypeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) staticBaseTypeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.staticBaseType; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where staticBaseType does not match the regular expression `value`. + */ + def staticBaseTypeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.staticBaseType.isEmpty || node.staticBaseType.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.staticBaseType; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where staticBaseType does not match any of the regular expressions in `values`. + */ + def staticBaseTypeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.staticBaseType; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyTypeDeclFullName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyTypeDeclFullName.scala index 5b58c8af0..9336cc957 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyTypeDeclFullName.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyTypeDeclFullName.scala @@ -35,7 +35,7 @@ final class TraversalPropertyTypeDeclFullName[ case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 46, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeDeclFullName == value } } @@ -49,7 +49,7 @@ final class TraversalPropertyTypeDeclFullName[ val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 46, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyTypeFullName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyTypeFullName.scala index 29f306bd2..9535d0ad6 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyTypeFullName.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyTypeFullName.scala @@ -34,7 +34,7 @@ final class TraversalPropertyTypeFullName[NodeType <: nodes.StoredNode & nodes.S case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -48,7 +48,7 @@ final class TraversalPropertyTypeFullName[NodeType <: nodes.StoredNode & nodes.S val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyValue.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyValue.scala index a1e643895..727443fa8 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyValue.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyValue.scala @@ -34,7 +34,7 @@ final class TraversalPropertyValue[NodeType <: nodes.StoredNode & nodes.StaticTy case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 49, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.value == value } } @@ -48,7 +48,7 @@ final class TraversalPropertyValue[NodeType <: nodes.StoredNode & nodes.StaticTy val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 49, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyVersion.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyVersion.scala index a9cc8b3a7..436c35452 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyVersion.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyVersion.scala @@ -34,7 +34,7 @@ final class TraversalPropertyVersion[NodeType <: nodes.StoredNode & nodes.Static case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 49, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 50, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.version == value } } @@ -48,7 +48,7 @@ final class TraversalPropertyVersion[NodeType <: nodes.StoredNode & nodes.Static val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 49, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 50, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTagBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTagBase.scala index 6f7c6d0e9..9acd95132 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTagBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTagBase.scala @@ -100,7 +100,7 @@ final class TraversalTagBase[NodeType <: nodes.TagBase](val traversal: Iterator[ case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 49, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.value == value } } @@ -114,7 +114,7 @@ final class TraversalTagBase[NodeType <: nodes.TagBase](val traversal: Iterator[ val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 49, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeBase.scala index 06854d484..bc8dc3938 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeBase.scala @@ -168,7 +168,7 @@ final class TraversalTypeBase[NodeType <: nodes.TypeBase](val traversal: Iterato case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 46, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeDeclFullName == value } } @@ -182,7 +182,7 @@ final class TraversalTypeBase[NodeType <: nodes.TypeBase](val traversal: Iterato val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 46, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTyperefBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTyperefBase.scala index 4c904ba26..9508185d2 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTyperefBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTyperefBase.scala @@ -40,7 +40,7 @@ final class TraversalTyperefBase[NodeType <: nodes.TypeRefBase](val traversal: I case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -54,7 +54,7 @@ final class TraversalTyperefBase[NodeType <: nodes.TypeRefBase](val traversal: I val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalUnknownBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalUnknownBase.scala index 6bc6b8def..a7ccbb0fa 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalUnknownBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalUnknownBase.scala @@ -176,7 +176,7 @@ final class TraversalUnknownBase[NodeType <: nodes.UnknownBase](val traversal: I case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { _.typeFullName == value } } @@ -190,7 +190,7 @@ final class TraversalUnknownBase[NodeType <: nodes.UnknownBase](val traversal: I val someNode = init.next values.iterator.flatMap { value => flatgraph.Accessors - .getWithInverseIndex(someNode.graph, someNode.nodeKind, 47, value) + .getWithInverseIndex(someNode.graph, someNode.nodeKind, 48, value) .asInstanceOf[Iterator[NodeType]] } case _ => diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/package.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/package.scala index 4c4f0751f..6b16f958b 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/package.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/package.scala @@ -199,6 +199,10 @@ package object traversals { ](traversal: IterableOnce[NodeType]): TraversalPropertySignature[NodeType] = new TraversalPropertySignature( traversal.iterator ) + implicit def accessPropertyStaticBaseTypeTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasStaticBaseTypeEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyStaticBaseType[NodeType] = + new TraversalPropertyStaticBaseType(traversal.iterator) implicit def accessPropertyTypeDeclFullNameTraversal[ NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasTypeDeclFullNameEMT] ](traversal: IterableOnce[NodeType]): TraversalPropertyTypeDeclFullName[NodeType] = From e73e2149720def82b8b9a031da27f250a7eb0b08 Mon Sep 17 00:00:00 2001 From: Johannes Coetzee Date: Wed, 23 Jul 2025 12:07:56 +0200 Subject: [PATCH 3/4] Rename property to STATIC_RECEIVER --- .../codepropertygraph/schema/CallGraph.scala | 12 ++++++------ .../codepropertygraph/schema/ProtoIds.scala | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CallGraph.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CallGraph.scala index 30218578a..7aaaf1929 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CallGraph.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CallGraph.scala @@ -176,22 +176,22 @@ object CallGraph extends SchemaBase { ).protoId(ProtoIds.Inlined) ) - val staticBaseType = builder + val staticReceiver = builder .addProperty( - name = "STATIC_BASE_TYPE", + name = "STATIC_RECEIVER", valueType = ValueType.String, - comment = """The `STATIC_BASE_TYPE` field is used to keep track of the type on which a static method + comment = """The `STATIC_RECEIVER` field is used to keep track of the type on which a static method |is called for static methods which may be inherited. This information can then be used to find |the true `METHOD_FULL_NAME` of the method being called during call linking. For example, if a - |class `Foo` defines a static method `foo` and a class `Bar extends Foo`, then the `STATIC_BASE_TYPE` + |class `Foo` defines a static method `foo` and a class `Bar extends Foo`, then the `STATIC_RECEIVER` |of a`Bar.foo()` call is `Bar` and the `METHOD_FULL_NAME` of the `foo` call is rewritten to |`Foo.foo:`. |""".stripMargin ) - .protoId(ProtoIds.StaticBaseType) + .protoId(ProtoIds.StaticReceiver) callNode - .addProperties(dispatchType, staticBaseType) + .addProperties(dispatchType, staticReceiver) callNode .addOutEdge(edge = call, inNode = method) diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/ProtoIds.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/ProtoIds.scala index a961a8728..3e775f5cb 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/ProtoIds.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/ProtoIds.scala @@ -124,7 +124,7 @@ object ProtoIds { val AstParentType = 56 val AstParentFullName = 57 val DependencyGroupId = 58 - val StaticBaseType = 59 + val StaticReceiver = 59 val Symbol = 100 val MethodShortName = 102 val PackageName = 103 From 55b15a00b384bf8fc1fcf55e4e7d6629d1d06699 Mon Sep 17 00:00:00 2001 From: Johannes Coetzee Date: Wed, 23 Jul 2025 12:10:58 +0200 Subject: [PATCH 4/4] Generate code --- .../generated/GraphSchema.scala | 8 +-- .../generated/Properties.scala | 6 +-- .../generated/PropertyNames.scala | 8 +-- .../generated/accessors/Accessors.scala | 16 +++--- .../generated/nodes/BaseTypes.scala | 4 +- .../generated/nodes/Call.scala | 12 ++--- .../generated/nodes/NewCall.scala | 18 +++---- .../traversals/TraversalCallBase.scala | 48 ++++++++--------- ... => TraversalPropertyStaticReceiver.scala} | 52 +++++++++---------- .../generated/traversals/package.scala | 8 +-- 10 files changed, 90 insertions(+), 90 deletions(-) rename domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/{TraversalPropertyStaticBaseType.scala => TraversalPropertyStaticReceiver.scala} (53%) diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala index 826d126b7..8dd43935d 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala @@ -277,7 +277,7 @@ object GraphSchema extends flatgraph.Schema { "POSSIBLE_TYPES", "ROOT", "SIGNATURE", - "STATIC_BASE_TYPE", + "STATIC_RECEIVER", "TYPE_DECL_FULL_NAME", "TYPE_FULL_NAME", "VALUE", @@ -430,7 +430,7 @@ object GraphSchema extends flatgraph.Schema { nodePropertyDescriptors(3713) = FormalQtyType.QtyMulti nodePropertyDescriptors(3884) = FormalQtyType.StringType // CALL.SIGNATURE nodePropertyDescriptors(3885) = FormalQtyType.QtyOne - nodePropertyDescriptors(3970) = FormalQtyType.StringType // CALL.STATIC_BASE_TYPE + nodePropertyDescriptors(3970) = FormalQtyType.StringType // CALL.STATIC_RECEIVER nodePropertyDescriptors(3971) = FormalQtyType.QtyOption nodePropertyDescriptors(4142) = FormalQtyType.StringType // CALL.TYPE_FULL_NAME nodePropertyDescriptors(4143) = FormalQtyType.QtyOne @@ -1096,7 +1096,7 @@ object GraphSchema extends flatgraph.Schema { _newNodeInserters(3454) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_order _newNodeInserters(3712) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_possibleTypes _newNodeInserters(3884) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_signature - _newNodeInserters(3970) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_staticBaseType + _newNodeInserters(3970) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_staticReceiver _newNodeInserters(4142) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_typeFullName _newNodeInserters(532) = nodes.NewClosureBinding.InsertionHelpers.NewNodeInserter_ClosureBinding_closureBindingId _newNodeInserters(1392) = nodes.NewClosureBinding.InsertionHelpers.NewNodeInserter_ClosureBinding_evaluationStrategy @@ -1468,7 +1468,7 @@ object GraphSchema extends flatgraph.Schema { "ORDER", "POSSIBLE_TYPES", "SIGNATURE", - "STATIC_BASE_TYPE", + "STATIC_RECEIVER", "TYPE_FULL_NAME" ) case "CLOSURE_BINDING" => Set("CLOSURE_BINDING_ID", "EVALUATION_STRATEGY") diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Properties.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Properties.scala index d14858c2c..b6a0b1c15 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Properties.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Properties.scala @@ -242,13 +242,13 @@ object Properties { */ val Signature = flatgraph.SinglePropertyKey[String](kind = 45, name = "SIGNATURE", default = "") - /** The `STATIC_BASE_TYPE` field is used to keep track of the type on which a static method is called for static + /** The `STATIC_RECEIVER` field is used to keep track of the type on which a static method is called for static * methods which may be inherited. This information can then be used to find the true `METHOD_FULL_NAME` of the * method being called during call linking. For example, if a class `Foo` defines a static method `foo` and a class - * `Bar extends Foo`, then the `STATIC_BASE_TYPE` of a`Bar.foo()` call is `Bar` and the `METHOD_FULL_NAME` of the + * `Bar extends Foo`, then the `STATIC_RECEIVER` of a`Bar.foo()` call is `Bar` and the `METHOD_FULL_NAME` of the * `foo` call is rewritten to `Foo.foo:`. */ - val StaticBaseType = flatgraph.OptionalPropertyKey[String](kind = 46, name = "STATIC_BASE_TYPE") + val StaticReceiver = flatgraph.OptionalPropertyKey[String](kind = 46, name = "STATIC_RECEIVER") /** The static type decl of a TYPE. This property is matched against the FULL_NAME of TYPE_DECL nodes. It is required * to have exactly one TYPE_DECL for each different TYPE_DECL_FULL_NAME diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyNames.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyNames.scala index d30ea6a35..ee0d26f24 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyNames.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyNames.scala @@ -247,13 +247,13 @@ object PropertyNames { */ val Signature: String = "SIGNATURE" - /** The `STATIC_BASE_TYPE` field is used to keep track of the type on which a static method is called for static + /** The `STATIC_RECEIVER` field is used to keep track of the type on which a static method is called for static * methods which may be inherited. This information can then be used to find the true `METHOD_FULL_NAME` of the * method being called during call linking. For example, if a class `Foo` defines a static method `foo` and a class - * `Bar extends Foo`, then the `STATIC_BASE_TYPE` of a`Bar.foo()` call is `Bar` and the `METHOD_FULL_NAME` of the + * `Bar extends Foo`, then the `STATIC_RECEIVER` of a`Bar.foo()` call is `Bar` and the `METHOD_FULL_NAME` of the * `foo` call is rewritten to `Foo.foo:`. */ - val StaticBaseType: String = "STATIC_BASE_TYPE" + val StaticReceiver: String = "STATIC_RECEIVER" /** The static type decl of a TYPE. This property is matched against the FULL_NAME of TYPE_DECL nodes. It is required * to have exactly one TYPE_DECL for each different TYPE_DECL_FULL_NAME @@ -338,7 +338,7 @@ object PropertyNames { Root, SecondaryId, Signature, - StaticBaseType, + StaticReceiver, TypeDeclFullName, TypeFullName, Value, diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/accessors/Accessors.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/accessors/Accessors.scala index c89f864cb..1e65ebd2d 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/accessors/Accessors.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/accessors/Accessors.scala @@ -316,8 +316,8 @@ object Accessors { default = "": String ) } - final class AccessPropertyStaticBaseType(val node: nodes.StoredNode) extends AnyVal { - def staticBaseType: Option[String] = flatgraph.Accessors + final class AccessPropertyStaticReceiver(val node: nodes.StoredNode) extends AnyVal { + def staticReceiver: Option[String] = flatgraph.Accessors .getNodePropertyOption[String](node.graph, nodeKind = node.nodeKind, propertyKind = 46, seq = node.seq) } final class AccessPropertyTypeDeclFullName(val node: nodes.StoredNode) extends AnyVal { @@ -423,9 +423,9 @@ object Accessors { case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes case newNode: nodes.NewCall => newNode.possibleTypes } - def staticBaseType: Option[String] = node match { - case stored: nodes.StoredNode => new AccessPropertyStaticBaseType(stored).staticBaseType - case newNode: nodes.NewCall => newNode.staticBaseType + def staticReceiver: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyStaticReceiver(stored).staticReceiver + case newNode: nodes.NewCall => newNode.staticReceiver } def typeFullName: String = node match { case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName @@ -1120,9 +1120,9 @@ trait ConcreteStoredConversions extends ConcreteBaseConversions { implicit def accessPropertySignature( node: nodes.StoredNode & nodes.StaticType[nodes.HasSignatureEMT] ): AccessPropertySignature = new AccessPropertySignature(node) - implicit def accessPropertyStaticBaseType( - node: nodes.StoredNode & nodes.StaticType[nodes.HasStaticBaseTypeEMT] - ): AccessPropertyStaticBaseType = new AccessPropertyStaticBaseType(node) + implicit def accessPropertyStaticReceiver( + node: nodes.StoredNode & nodes.StaticType[nodes.HasStaticReceiverEMT] + ): AccessPropertyStaticReceiver = new AccessPropertyStaticReceiver(node) implicit def accessPropertyTypeDeclFullName( node: nodes.StoredNode & nodes.StaticType[nodes.HasTypeDeclFullNameEMT] ): AccessPropertyTypeDeclFullName = new AccessPropertyTypeDeclFullName(node) diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/BaseTypes.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/BaseTypes.scala index 486568ed0..4c11c504e 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/BaseTypes.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/BaseTypes.scala @@ -334,10 +334,10 @@ trait HasRootEMT */ trait HasSignatureEMT -/** Node types with this marker trait are guaranteed to have the STATIC_BASE_TYPE property. EMT stands for: "erased +/** Node types with this marker trait are guaranteed to have the STATIC_RECEIVER property. EMT stands for: "erased * marker trait", it exists only at compile time in order to improve type safety. */ -trait HasStaticBaseTypeEMT +trait HasStaticReceiverEMT /** Node types with this marker trait are guaranteed to have the TYPE_DECL_FULL_NAME property. EMT stands for: "erased * marker trait", it exists only at compile time in order to improve type safety. diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Call.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Call.scala index 2537c9255..72368fb03 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Call.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Call.scala @@ -15,7 +15,7 @@ trait CallEMT with HasDynamicTypeHintFullNameEMT with HasMethodFullNameEMT with HasPossibleTypesEMT - with HasStaticBaseTypeEMT + with HasStaticReceiverEMT with HasTypeFullNameEMT trait CallBase extends AbstractNode with CallReprBase with ExpressionBase with StaticType[CallEMT] { @@ -39,7 +39,7 @@ trait CallBase extends AbstractNode with CallReprBase with ExpressionBase with S val tmpPossibleTypes = this.possibleTypes; if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) if (("": String) != this.signature) res.put("SIGNATURE", this.signature) - this.staticBaseType.foreach { p => res.put("STATIC_BASE_TYPE", p) } + this.staticReceiver.foreach { p => res.put("STATIC_RECEIVER", p) } if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) res } @@ -108,10 +108,10 @@ object Call { * enforce a strict format for the signature, that is, it can be chosen by the frontend implementor to fit the source * language. * - * ▸ StaticBaseType (String); Cardinality `ZeroOrOne` (optional); The `STATIC_BASE_TYPE` field is used to keep track of + * ▸ StaticReceiver (String); Cardinality `ZeroOrOne` (optional); The `STATIC_RECEIVER` field is used to keep track of * the type on which a static method is called for static methods which may be inherited. This information can then be * used to find the true `METHOD_FULL_NAME` of the method being called during call linking. For example, if a class - * `Foo` defines a static method `foo` and a class `Bar extends Foo`, then the `STATIC_BASE_TYPE` of a`Bar.foo()` call + * `Foo` defines a static method `foo` and a class `Bar extends Foo`, then the `STATIC_RECEIVER` of a`Bar.foo()` call * is `Bar` and the `METHOD_FULL_NAME` of the `foo` call is rewritten to `Foo.foo:`. * * ▸ TypeFullName (String); Cardinality `one` (mandatory with default value ``); This field contains the @@ -142,7 +142,7 @@ class Call(graph_4762: flatgraph.Graph, seq_4762: Int) case 11 => "order" case 12 => "possibleTypes" case 13 => "signature" - case 14 => "staticBaseType" + case 14 => "staticReceiver" case 15 => "typeFullName" case _ => "" } @@ -163,7 +163,7 @@ class Call(graph_4762: flatgraph.Graph, seq_4762: Int) case 11 => this.order case 12 => this.possibleTypes case 13 => this.signature - case 14 => this.staticBaseType + case 14 => this.staticReceiver case 15 => this.typeFullName case _ => null } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewCall.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewCall.scala index 4318633ea..aa4409ee6 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewCall.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewCall.scala @@ -1615,7 +1615,7 @@ object NewCall { } } } - object NewNodeInserter_Call_staticBaseType extends flatgraph.NewNodePropertyInsertionHelper { + object NewNodeInserter_Call_staticReceiver extends flatgraph.NewNodePropertyInsertionHelper { override def insertNewNodeProperties( newNodes: mutable.ArrayBuffer[flatgraph.DNode], dst: AnyRef, @@ -1630,7 +1630,7 @@ object NewCall { val nn = newNodes(idx) nn match { case generated: NewCall => - generated.staticBaseType match { + generated.staticReceiver match { case Some(item) => dstCast(offset) = item offset += 1 @@ -1697,7 +1697,7 @@ class NewCall extends NewNode(nodeKind = 7) with CallBase with CallReprNew with var order: Int = -1: Int var possibleTypes: IndexedSeq[String] = ArraySeq.empty var signature: String = "": String - var staticBaseType: Option[String] = None + var staticReceiver: Option[String] = None var typeFullName: String = "": String def argumentIndex(value: Int): this.type = { this.argumentIndex = value; this } def argumentName(value: Option[String]): this.type = { this.argumentName = value; this } @@ -1720,8 +1720,8 @@ class NewCall extends NewNode(nodeKind = 7) with CallBase with CallReprNew with def order(value: Int): this.type = { this.order = value; this } def possibleTypes(value: IterableOnce[String]): this.type = { this.possibleTypes = value.iterator.to(ArraySeq); this } def signature(value: String): this.type = { this.signature = value; this } - def staticBaseType(value: Option[String]): this.type = { this.staticBaseType = value; this } - def staticBaseType(value: String): this.type = { this.staticBaseType = Option(value); this } + def staticReceiver(value: Option[String]): this.type = { this.staticReceiver = value; this } + def staticReceiver(value: String): this.type = { this.staticReceiver = Option(value); this } def typeFullName(value: String): this.type = { this.typeFullName = value; this } override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { interface.countProperty(this, 1, 1) @@ -1738,7 +1738,7 @@ class NewCall extends NewNode(nodeKind = 7) with CallBase with CallReprNew with interface.countProperty(this, 40, 1) interface.countProperty(this, 43, possibleTypes.size) interface.countProperty(this, 45, 1) - interface.countProperty(this, 46, staticBaseType.size) + interface.countProperty(this, 46, staticReceiver.size) interface.countProperty(this, 48, 1) } @@ -1758,7 +1758,7 @@ class NewCall extends NewNode(nodeKind = 7) with CallBase with CallReprNew with newInstance.order = this.order newInstance.possibleTypes = this.possibleTypes newInstance.signature = this.signature - newInstance.staticBaseType = this.staticBaseType + newInstance.staticReceiver = this.staticReceiver newInstance.typeFullName = this.typeFullName newInstance.asInstanceOf[this.type] } @@ -1779,7 +1779,7 @@ class NewCall extends NewNode(nodeKind = 7) with CallBase with CallReprNew with case 11 => "order" case 12 => "possibleTypes" case 13 => "signature" - case 14 => "staticBaseType" + case 14 => "staticReceiver" case 15 => "typeFullName" case _ => "" } @@ -1800,7 +1800,7 @@ class NewCall extends NewNode(nodeKind = 7) with CallBase with CallReprNew with case 11 => this.order case 12 => this.possibleTypes case 13 => this.signature - case 14 => this.staticBaseType + case 14 => this.staticReceiver case 15 => this.typeFullName case _ => null } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallBase.scala index d78037101..cd477fbd7 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallBase.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallBase.scala @@ -149,35 +149,35 @@ final class TraversalCallBase[NodeType <: nodes.CallBase](val traversal: Iterato def possibleTypes: Iterator[String] = traversal.flatMap(_.possibleTypes) - /** Traverse to staticBaseType property */ - def staticBaseType: Iterator[String] = - traversal.flatMap(_.staticBaseType) + /** Traverse to staticReceiver property */ + def staticReceiver: Iterator[String] = + traversal.flatMap(_.staticReceiver) - /** Traverse to nodes where the staticBaseType matches the regular expression `value` + /** Traverse to nodes where the staticReceiver matches the regular expression `value` */ - def staticBaseType(pattern: String): Iterator[NodeType] = { + def staticReceiver(pattern: String): Iterator[NodeType] = { if (!flatgraph.misc.Regex.isRegex(pattern)) { - staticBaseTypeExact(pattern) + staticReceiverExact(pattern) } else { val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) traversal.filter { item => - val tmp = item.staticBaseType; tmp.isDefined && matcher.reset(tmp.get).matches + val tmp = item.staticReceiver; tmp.isDefined && matcher.reset(tmp.get).matches } } } - /** Traverse to nodes where the staticBaseType matches at least one of the regular expressions in `values` + /** Traverse to nodes where the staticReceiver matches at least one of the regular expressions in `values` */ - def staticBaseType(patterns: String*): Iterator[NodeType] = { + def staticReceiver(patterns: String*): Iterator[NodeType] = { val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) traversal.filter { item => - val tmp = item.staticBaseType; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + val tmp = item.staticReceiver; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } } } - /** Traverse to nodes where staticBaseType matches `value` exactly. + /** Traverse to nodes where staticReceiver matches `value` exactly. */ - def staticBaseTypeExact(value: String): Iterator[NodeType] = traversal match { + def staticReceiverExact(value: String): Iterator[NodeType] = traversal match { case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors @@ -185,40 +185,40 @@ final class TraversalCallBase[NodeType <: nodes.CallBase](val traversal: Iterato .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { node => - val tmp = node.staticBaseType; tmp.isDefined && tmp.get == value + val tmp = node.staticReceiver; tmp.isDefined && tmp.get == value } } - /** Traverse to nodes where staticBaseType matches one of the elements in `values` exactly. + /** Traverse to nodes where staticReceiver matches one of the elements in `values` exactly. */ - def staticBaseTypeExact(values: String*): Iterator[NodeType] = - if (values.length == 1) staticBaseTypeExact(values.head) + def staticReceiverExact(values: String*): Iterator[NodeType] = + if (values.length == 1) staticReceiverExact(values.head) else { val valueSet = values.toSet traversal.filter { item => - val tmp = item.staticBaseType; tmp.isDefined && valueSet.contains(tmp.get) + val tmp = item.staticReceiver; tmp.isDefined && valueSet.contains(tmp.get) } } - /** Traverse to nodes where staticBaseType does not match the regular expression `value`. + /** Traverse to nodes where staticReceiver does not match the regular expression `value`. */ - def staticBaseTypeNot(pattern: String): Iterator[NodeType] = { + def staticReceiverNot(pattern: String): Iterator[NodeType] = { if (!flatgraph.misc.Regex.isRegex(pattern)) { - traversal.filter { node => node.staticBaseType.isEmpty || node.staticBaseType.get != pattern } + traversal.filter { node => node.staticReceiver.isEmpty || node.staticReceiver.get != pattern } } else { val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) traversal.filterNot { item => - val tmp = item.staticBaseType; tmp.isDefined && matcher.reset(tmp.get).matches + val tmp = item.staticReceiver; tmp.isDefined && matcher.reset(tmp.get).matches } } } - /** Traverse to nodes where staticBaseType does not match any of the regular expressions in `values`. + /** Traverse to nodes where staticReceiver does not match any of the regular expressions in `values`. */ - def staticBaseTypeNot(patterns: String*): Iterator[NodeType] = { + def staticReceiverNot(patterns: String*): Iterator[NodeType] = { val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) traversal.filterNot { item => - val tmp = item.staticBaseType; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + val tmp = item.staticReceiver; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } } } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyStaticBaseType.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyStaticReceiver.scala similarity index 53% rename from domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyStaticBaseType.scala rename to domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyStaticReceiver.scala index d6c5d0d4a..8404054a2 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyStaticBaseType.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyStaticReceiver.scala @@ -3,40 +3,40 @@ package io.shiftleft.codepropertygraph.generated.traversals import io.shiftleft.codepropertygraph.generated.nodes import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* -final class TraversalPropertyStaticBaseType[ - NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasStaticBaseTypeEMT] +final class TraversalPropertyStaticReceiver[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasStaticReceiverEMT] ](val traversal: Iterator[NodeType]) extends AnyVal { - /** Traverse to staticBaseType property */ - def staticBaseType: Iterator[String] = - traversal.flatMap(_.staticBaseType) + /** Traverse to staticReceiver property */ + def staticReceiver: Iterator[String] = + traversal.flatMap(_.staticReceiver) - /** Traverse to nodes where the staticBaseType matches the regular expression `value` + /** Traverse to nodes where the staticReceiver matches the regular expression `value` */ - def staticBaseType(pattern: String): Iterator[NodeType] = { + def staticReceiver(pattern: String): Iterator[NodeType] = { if (!flatgraph.misc.Regex.isRegex(pattern)) { - staticBaseTypeExact(pattern) + staticReceiverExact(pattern) } else { val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) traversal.filter { item => - val tmp = item.staticBaseType; tmp.isDefined && matcher.reset(tmp.get).matches + val tmp = item.staticReceiver; tmp.isDefined && matcher.reset(tmp.get).matches } } } - /** Traverse to nodes where the staticBaseType matches at least one of the regular expressions in `values` + /** Traverse to nodes where the staticReceiver matches at least one of the regular expressions in `values` */ - def staticBaseType(patterns: String*): Iterator[NodeType] = { + def staticReceiver(patterns: String*): Iterator[NodeType] = { val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) traversal.filter { item => - val tmp = item.staticBaseType; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + val tmp = item.staticReceiver; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } } } - /** Traverse to nodes where staticBaseType matches `value` exactly. + /** Traverse to nodes where staticReceiver matches `value` exactly. */ - def staticBaseTypeExact(value: String): Iterator[NodeType] = traversal match { + def staticReceiverExact(value: String): Iterator[NodeType] = traversal match { case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext => val someNode = init.next flatgraph.Accessors @@ -44,40 +44,40 @@ final class TraversalPropertyStaticBaseType[ .asInstanceOf[Iterator[NodeType]] case _ => traversal.filter { node => - val tmp = node.staticBaseType; tmp.isDefined && tmp.get == value + val tmp = node.staticReceiver; tmp.isDefined && tmp.get == value } } - /** Traverse to nodes where staticBaseType matches one of the elements in `values` exactly. + /** Traverse to nodes where staticReceiver matches one of the elements in `values` exactly. */ - def staticBaseTypeExact(values: String*): Iterator[NodeType] = - if (values.length == 1) staticBaseTypeExact(values.head) + def staticReceiverExact(values: String*): Iterator[NodeType] = + if (values.length == 1) staticReceiverExact(values.head) else { val valueSet = values.toSet traversal.filter { item => - val tmp = item.staticBaseType; tmp.isDefined && valueSet.contains(tmp.get) + val tmp = item.staticReceiver; tmp.isDefined && valueSet.contains(tmp.get) } } - /** Traverse to nodes where staticBaseType does not match the regular expression `value`. + /** Traverse to nodes where staticReceiver does not match the regular expression `value`. */ - def staticBaseTypeNot(pattern: String): Iterator[NodeType] = { + def staticReceiverNot(pattern: String): Iterator[NodeType] = { if (!flatgraph.misc.Regex.isRegex(pattern)) { - traversal.filter { node => node.staticBaseType.isEmpty || node.staticBaseType.get != pattern } + traversal.filter { node => node.staticReceiver.isEmpty || node.staticReceiver.get != pattern } } else { val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) traversal.filterNot { item => - val tmp = item.staticBaseType; tmp.isDefined && matcher.reset(tmp.get).matches + val tmp = item.staticReceiver; tmp.isDefined && matcher.reset(tmp.get).matches } } } - /** Traverse to nodes where staticBaseType does not match any of the regular expressions in `values`. + /** Traverse to nodes where staticReceiver does not match any of the regular expressions in `values`. */ - def staticBaseTypeNot(patterns: String*): Iterator[NodeType] = { + def staticReceiverNot(patterns: String*): Iterator[NodeType] = { val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) traversal.filterNot { item => - val tmp = item.staticBaseType; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + val tmp = item.staticReceiver; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } } } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/package.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/package.scala index 6b16f958b..a5ddabeac 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/package.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/package.scala @@ -199,10 +199,10 @@ package object traversals { ](traversal: IterableOnce[NodeType]): TraversalPropertySignature[NodeType] = new TraversalPropertySignature( traversal.iterator ) - implicit def accessPropertyStaticBaseTypeTraversal[ - NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasStaticBaseTypeEMT] - ](traversal: IterableOnce[NodeType]): TraversalPropertyStaticBaseType[NodeType] = - new TraversalPropertyStaticBaseType(traversal.iterator) + implicit def accessPropertyStaticReceiverTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasStaticReceiverEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyStaticReceiver[NodeType] = + new TraversalPropertyStaticReceiver(traversal.iterator) implicit def accessPropertyTypeDeclFullNameTraversal[ NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasTypeDeclFullNameEMT] ](traversal: IterableOnce[NodeType]): TraversalPropertyTypeDeclFullName[NodeType] =