From fcf9dab963cb8adb189d51c92a9e456fed816669 Mon Sep 17 00:00:00 2001 From: Michael Pollmeier Date: Wed, 3 Jul 2024 17:34:48 +0200 Subject: [PATCH 01/13] upgrade codegen and adapt (type alias) (#1776) * upgrade codegen * adapt type alias * upgrade codegen --- build.sbt | 2 +- .../main/scala/io/shiftleft/passes/CpgPass.scala | 15 +++++++-------- .../generated/nodes/package.scala | 11 +++++++++++ project/plugins.sbt | 2 +- schema/build.sbt | 3 +-- 5 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/package.scala diff --git a/build.sbt b/build.sbt index f915cdff6..7602923de 100644 --- a/build.sbt +++ b/build.sbt @@ -2,7 +2,7 @@ name := "codepropertygraph" // parsed by project/Versions.scala, updated by updateDependencies.sh val overflowdbVersion = "1.192" -val overflowdbCodegenVersion = "2.110" +val overflowdbCodegenVersion = "2.112" inThisBuild( List( diff --git a/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala b/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala index b039add7a..b07b99fb2 100644 --- a/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala +++ b/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala @@ -2,9 +2,8 @@ package io.shiftleft.passes import com.google.protobuf.GeneratedMessageV3 import io.shiftleft.SerializedCpg -import io.shiftleft.codepropertygraph.generated.Cpg +import io.shiftleft.codepropertygraph.generated.{Cpg, DiffGraphBuilder} import org.slf4j.{Logger, LoggerFactory, MDC} -import overflowdb.BatchedUpdate import java.util.function.{BiConsumer, Supplier} import scala.annotation.nowarn @@ -19,11 +18,11 @@ import scala.util.{Failure, Success, Try} abstract class CpgPass(cpg: Cpg, outName: String = "", keyPool: Option[KeyPool] = None) extends ForkJoinParallelCpgPass[AnyRef](cpg, outName, keyPool) { - def run(builder: overflowdb.BatchedUpdate.DiffGraphBuilder): Unit + def run(builder: DiffGraphBuilder): Unit final override def generateParts(): Array[? <: AnyRef] = Array[AnyRef](null) - final override def runOnPart(builder: overflowdb.BatchedUpdate.DiffGraphBuilder, part: AnyRef): Unit = + final override def runOnPart(builder: DiffGraphBuilder, part: AnyRef): Unit = run(builder) override def isParallel: Boolean = false @@ -109,7 +108,7 @@ abstract class ForkJoinParallelCpgPass[T <: AnyRef]( * hierarchy. */ abstract class NewStyleCpgPassBase[T <: AnyRef] extends CpgPassBase { - type DiffGraphBuilder = overflowdb.BatchedUpdate.DiffGraphBuilder + type DiffGraphBuilder = io.shiftleft.codepropertygraph.generated.DiffGraphBuilder // generate Array of parts that can be processed in parallel def generateParts(): Array[? <: AnyRef] // setup large data structures, acquire external resources @@ -123,7 +122,7 @@ abstract class NewStyleCpgPassBase[T <: AnyRef] extends CpgPassBase { override def createAndApply(): Unit = createApplySerializeAndStore(null) - override def runWithBuilder(externalBuilder: BatchedUpdate.DiffGraphBuilder): Int = { + override def runWithBuilder(externalBuilder: DiffGraphBuilder): Int = { try { init() val parts = generateParts() @@ -185,12 +184,12 @@ trait CpgPassBase { * 1), where nParts is either the number of parallel parts, or the number of iterarator elements in case of legacy * passes. Includes init() and finish() logic. */ - def runWithBuilder(builder: overflowdb.BatchedUpdate.DiffGraphBuilder): Int + def runWithBuilder(builder: DiffGraphBuilder): Int /** Wraps runWithBuilder with logging, and swallows raised exceptions. Use with caution -- API is unstable. A return * value of -1 indicates failure, otherwise the return value of runWithBuilder is passed through. */ - def runWithBuilderLogged(builder: overflowdb.BatchedUpdate.DiffGraphBuilder): Int = { + def runWithBuilderLogged(builder: DiffGraphBuilder): Int = { baseLogger.info(s"Start of pass: $name") val nanoStart = System.nanoTime() val size0 = builder.size() diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/package.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/package.scala new file mode 100644 index 000000000..d26f72ded --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/package.scala @@ -0,0 +1,11 @@ +package io.shiftleft.codepropertygraph + +package object generated { + // some type aliases so that the domain-specific code can avoid referencing the `overflowdb` namespace + + object help { + type Doc = _root_.overflowdb.traversal.help.Doc + type Traversal = _root_.overflowdb.traversal.help.Traversal + type TraversalSource = _root_.overflowdb.traversal.help.TraversalSource + } +} diff --git a/project/plugins.sbt b/project/plugins.sbt index e62fe7b6a..039102043 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -4,5 +4,5 @@ addSbtPlugin("com.github.sbt" % "sbt-findbugs" % "2.0.0") addSbtPlugin("io.shiftleft" % "sbt-ci-release-early" % "2.0.18") addSbtPlugin("com.dwijnand" % "sbt-dynver" % "4.1.1") addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.5") -addSbtPlugin("io.shiftleft" % "sbt-overflowdb" % "2.106") +addSbtPlugin("io.shiftleft" % "sbt-overflowdb" % "2.112") diff --git a/schema/build.sbt b/schema/build.sbt index 89f17011d..4ed24c875 100644 --- a/schema/build.sbt +++ b/schema/build.sbt @@ -1,7 +1,6 @@ name := "codepropertygraph-schema" -// TODO change back to io.shiftleft after official releases are fixed, this is only temporary! -libraryDependencies += "com.michaelpollmeier" %% "overflowdb-codegen" % Versions.overflowdbCodegen +libraryDependencies += "io.shiftleft" %% "overflowdb-codegen" % Versions.overflowdbCodegen lazy val generatedSrcDir = settingKey[File]("root for generated sources - we want to check those in") enablePlugins(OdbCodegenSbtPlugin) From 231816ea8bde39e80cfdda3628a3e6ed71cba3af Mon Sep 17 00:00:00 2001 From: Michael Pollmeier Date: Thu, 11 Jul 2024 14:02:58 +0200 Subject: [PATCH 02/13] upgrade deps (#1777) --- build.sbt | 2 +- project/build.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 7602923de..e4c0bf3d1 100644 --- a/build.sbt +++ b/build.sbt @@ -1,7 +1,7 @@ name := "codepropertygraph" // parsed by project/Versions.scala, updated by updateDependencies.sh -val overflowdbVersion = "1.192" +val overflowdbVersion = "1.193" val overflowdbCodegenVersion = "2.112" inThisBuild( diff --git a/project/build.properties b/project/build.properties index 081fdbbc7..ee4c672cd 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.10.0 +sbt.version=1.10.1 From 88d9845b8927f186bdb5a3d3fcfa243db8bb1126 Mon Sep 17 00:00:00 2001 From: Michael Pollmeier Date: Tue, 16 Jul 2024 09:57:44 +0200 Subject: [PATCH 03/13] flatgraph (#1769) flatgraph port WIP squashed commits from michael/flatgraph.backup* --- .gitignore | 3 +- build.sbt | 3 +- codepropertygraph/build.sbt | 5 +- .../io/shiftleft/OverflowDbTestInstance.scala | 10 - .../io/shiftleft/codepropertygraph/Cpg.scala | 23 +- .../cpgloading/CpgLoader.scala | 152 +- .../cpgloading/CpgLoaderConfig.scala | 50 - .../cpgloading/NodeFilter.scala | 25 - .../cpgloading/ProtoCpgLoader.scala | 153 +- .../cpgloading/ProtoToCpg.scala | 95 - .../cpgloading/ProtoToGraphNodeMappings.scala | 77 + .../scala/io/shiftleft/passes/CpgPass.scala | 118 +- .../scala/io/shiftleft/passes/KeyPool.scala | 80 - .../io/shiftleft/passes/ParallelCpgPass.scala | 162 - .../scala/io/shiftleft/utils/IOUtils.scala | 5 +- codepropertygraph/src/test/resources/cpg.fg | Bin 0 -> 38590 bytes codepropertygraph/src/test/resources/cpg.odb | Bin 0 -> 20480 bytes .../codepropertygraph/StepsTest.scala | 50 + .../cpgloading/CpgLoaderTests.scala | 87 +- .../cpgloading/TestProtoCpg.scala | 5 +- .../io/shiftleft/passes/CpgPassNewTests.scala | 20 +- .../io/shiftleft/passes/KeyPoolTests.scala | 74 - .../passes/ParallelCpgPassNewTests.scala | 106 - domainClasses/build.sbt | 8 +- .../generated/ControlStructureTypes.java | 4 - .../codepropertygraph/generated/Cpg.scala | 1043 +- .../generated/DispatchTypes.java | 4 - .../generated/EdgeTypes.java | 4 - .../generated/EvaluationStrategies.java | 4 - .../generated/GraphSchema.scala | 1552 + .../generated/Languages.java | 4 - .../generated/ModifierTypes.java | 4 - .../generated/NodeTypes.java | 4 - .../generated/Operators.java | 4 - .../generated/Properties.scala | 375 +- .../generated/PropertyErrorRegister.scala | 13 + .../generated/PropertyNames.java | 9 +- .../generated/accessors/Accessors.scala | 1119 + .../generated/edges/AliasOf.scala | 39 - .../generated/edges/Argument.scala | 39 - .../generated/edges/Ast.scala | 39 - .../generated/edges/Binds.scala | 39 - .../generated/edges/BindsTo.scala | 39 - .../generated/edges/Call.scala | 39 - .../generated/edges/Capture.scala | 39 - .../generated/edges/CapturedBy.scala | 39 - .../generated/edges/Cdg.scala | 39 - .../generated/edges/Cfg.scala | 39 - .../generated/edges/Condition.scala | 39 - .../generated/edges/Contains.scala | 39 - .../generated/edges/Dominate.scala | 39 - .../generated/edges/EdgeTypes.scala | 195 + .../generated/edges/EvalType.scala | 39 - .../generated/edges/Imports.scala | 39 - .../generated/edges/InheritsFrom.scala | 39 - .../generated/edges/IsCallForImport.scala | 39 - .../generated/edges/ParameterLink.scala | 39 - .../generated/edges/PostDominate.scala | 39 - .../generated/edges/ReachingDef.scala | 45 - .../generated/edges/Receiver.scala | 39 - .../generated/edges/Ref.scala | 39 - .../generated/edges/SourceFile.scala | 39 - .../generated/edges/TaggedBy.scala | 39 - .../generated/edges/package.scala | 46 - .../generated/language.scala | 14 + .../neighboraccessors/Annotation.scala | 102 + .../neighboraccessors/AnnotationLiteral.scala | 25 + .../AnnotationParameter.scala | 25 + .../AnnotationParameterAssign.scala | 61 + .../neighboraccessors/ArrayInitializer.scala | 49 + .../generated/neighboraccessors/Binding.scala | 72 + .../generated/neighboraccessors/Block.scala | 961 + .../generated/neighboraccessors/Call.scala | 1209 + .../generated/neighboraccessors/CfgNode.scala | 102 + .../neighboraccessors/ClosureBinding.scala | 73 + .../generated/neighboraccessors/Comment.scala | 56 + .../neighboraccessors/ControlStructure.scala | 992 + .../neighboraccessors/Dependency.scala | 22 + .../neighboraccessors/Expression.scala | 46 + .../neighboraccessors/FieldIdentifier.scala | 709 + .../generated/neighboraccessors/File.scala | 147 + .../neighboraccessors/Identifier.scala | 944 + .../generated/neighboraccessors/Import.scala | 74 + .../neighboraccessors/JumpLabel.scala | 22 + .../neighboraccessors/JumpTarget.scala | 687 + .../generated/neighboraccessors/Literal.scala | 932 + .../generated/neighboraccessors/Local.scala | 125 + .../generated/neighboraccessors/Member.scala | 115 + .../generated/neighboraccessors/Method.scala | 634 + .../neighboraccessors/MethodParameterIn.scala | 245 + .../MethodParameterOut.scala | 247 + .../neighboraccessors/MethodRef.scala | 975 + .../neighboraccessors/MethodReturn.scala | 403 + .../neighboraccessors/Modifier.scala | 72 + .../neighboraccessors/Namespace.scala | 22 + .../neighboraccessors/NamespaceBlock.scala | 66 + .../generated/neighboraccessors/Return.scala | 933 + .../generated/neighboraccessors/Tag.scala | 208 + .../neighboraccessors/TemplateDom.scala | 78 + .../generated/neighboraccessors/Type.scala | 212 + .../neighboraccessors/TypeArgument.scala | 46 + .../neighboraccessors/TypeDecl.scala | 214 + .../neighboraccessors/TypeParameter.scala | 51 + .../generated/neighboraccessors/TypeRef.scala | 923 + .../generated/neighboraccessors/Unknown.scala | 913 + .../generated/neighboraccessors/package.scala | 332 + .../generated/nodes/Annotation.scala | 1981 +- .../generated/nodes/AnnotationLiteral.scala | 1862 +- .../generated/nodes/AnnotationParameter.scala | 1648 +- .../nodes/AnnotationParameterAssign.scala | 1678 +- .../generated/nodes/ArrayInitializer.scala | 1830 +- .../generated/nodes/AstNode.scala | 52 - .../generated/nodes/BaseTypes.scala | 395 + .../generated/nodes/Binding.scala | 372 +- .../generated/nodes/Block.scala | 2711 +- .../generated/nodes/Call.scala | 3142 +- .../generated/nodes/CallRepr.scala | 64 - .../generated/nodes/CfgNode.scala | 134 - .../generated/nodes/ClosureBinding.scala | 413 +- .../generated/nodes/Comment.scala | 1731 +- .../generated/nodes/ConfigFile.scala | 272 +- .../generated/nodes/ControlStructure.scala | 2639 +- .../generated/nodes/Declaration.scala | 36 - .../generated/nodes/Dependency.scala | 347 +- .../generated/nodes/Expression.scala | 128 - .../generated/nodes/FieldIdentifier.scala | 2359 +- .../generated/nodes/File.scala | 1893 +- .../generated/nodes/Finding.scala | 358 +- .../generated/nodes/Identifier.scala | 2782 +- .../generated/nodes/Import.scala | 2009 +- .../generated/nodes/JumpLabel.scala | 1754 +- .../generated/nodes/JumpTarget.scala | 2319 +- .../generated/nodes/KeyValuePair.scala | 268 +- .../generated/nodes/Literal.scala | 2702 +- .../generated/nodes/Local.scala | 2080 +- .../generated/nodes/Location.scala | 748 +- .../generated/nodes/Member.scala | 2131 +- .../generated/nodes/MetaData.scala | 490 +- .../generated/nodes/Method.scala | 2874 +- .../generated/nodes/MethodParameterIn.scala | 2392 +- .../generated/nodes/MethodParameterOut.scala | 2133 +- .../generated/nodes/MethodRef.scala | 2807 +- .../generated/nodes/MethodReturn.scala | 2204 +- .../generated/nodes/Modifier.scala | 1734 +- .../generated/nodes/Namespace.scala | 1698 +- .../generated/nodes/NamespaceBlock.scala | 1865 +- .../generated/nodes/NewNodes.scala | 46268 ---------------- .../generated/nodes/Return.scala | 2439 +- .../generated/nodes/RootTypes.scala | 271 +- .../generated/nodes/RootTypesTraversals.scala | 77 + .../generated/nodes/Tag.scala | 430 +- .../generated/nodes/TagNodePair.scala | 287 +- .../generated/nodes/TemplateDom.scala | 1922 +- .../generated/nodes/Type.scala | 507 +- .../generated/nodes/TypeArgument.scala | 1667 +- .../generated/nodes/TypeDecl.scala | 2474 +- .../generated/nodes/TypeParameter.scala | 1722 +- .../generated/nodes/TypeRef.scala | 2698 +- .../generated/nodes/Unknown.scala | 2814 +- .../generated/nodes/package.scala | 11 - .../codepropertygraph/generated/package.scala | 12 + .../generated/traversal/Annotation.scala | 424 - .../traversal/AnnotationLiteral.scala | 369 - .../traversal/AnnotationParameter.scala | 210 - .../traversal/AnnotationParameterAssign.scala | 210 - .../traversal/ArrayInitializer.scala | 312 - .../generated/traversal/AstNode.scala | 209 - .../generated/traversal/Binding.scala | 188 - .../generated/traversal/Block.scala | 384 - .../generated/traversal/Call.scala | 610 - .../generated/traversal/CallRepr.scala | 321 - .../generated/traversal/CfgNode.scala | 209 - .../generated/traversal/ClosureBinding.scala | 180 - .../generated/traversal/Comment.scala | 270 - .../generated/traversal/ConfigFile.scala | 121 - .../traversal/ControlStructure.scala | 430 - .../generated/traversal/Declaration.scala | 65 - .../generated/traversal/Dependency.scala | 176 - .../generated/traversal/Expression.scala | 312 - .../generated/traversal/FieldIdentifier.scala | 369 - .../generated/traversal/File.scala | 395 - .../generated/traversal/Finding.scala | 7 - .../generated/traversal/Identifier.scala | 433 - .../generated/traversal/Import.scala | 361 - .../generated/traversal/JumpLabel.scala | 322 - .../generated/traversal/JumpTarget.scala | 370 - .../generated/traversal/KeyValuePair.scala | 121 - .../generated/traversal/Literal.scala | 377 - .../generated/traversal/Local.scala | 406 - .../generated/traversal/Location.scala | 509 - .../generated/traversal/Member.scala | 462 - .../generated/traversal/MetaData.scala | 235 - .../generated/traversal/Method.scala | 846 - .../traversal/MethodParameterIn.scala | 537 - .../traversal/MethodParameterOut.scala | 463 - .../generated/traversal/MethodRef.scala | 441 - .../generated/traversal/MethodReturn.scala | 340 - .../generated/traversal/Modifier.scala | 266 - .../generated/traversal/Namespace.scala | 265 - .../generated/traversal/NamespaceBlock.scala | 377 - .../traversal/NodeTraversalImplicits.scala | 206 - .../generated/traversal/Return.scala | 312 - .../generated/traversal/Tag.scala | 121 - .../generated/traversal/TagNodePair.scala | 7 - .../generated/traversal/TemplateDom.scala | 368 - .../generated/traversal/Type.scala | 192 - .../generated/traversal/TypeArgument.scala | 209 - .../generated/traversal/TypeDecl.scala | 674 - .../generated/traversal/TypeParameter.scala | 265 - .../generated/traversal/TypeRef.scala | 377 - .../generated/traversal/Unknown.scala | 491 - .../generated/traversal/package.scala | 2 - .../traversals/TraversalAnnotationBase.scala | 127 + .../TraversalAnnotationliteralBase.scala | 68 + .../TraversalAnnotationparameterBase.scala | 8 + ...aversalAnnotationparameterassignBase.scala | 8 + .../TraversalArrayinitializerBase.scala | 7 + .../traversals/TraversalAstnodeBase.scala | 243 + .../traversals/TraversalBindingBase.scala | 185 + .../traversals/TraversalBlockBase.scala | 75 + .../traversals/TraversalCallBase.scala | 193 + .../traversals/TraversalCallreprBase.scala | 126 + .../traversals/TraversalCfgnodeBase.scala | 6 + .../TraversalClosurebindingBase.scala | 214 + .../traversals/TraversalCommentBase.scala | 67 + .../traversals/TraversalConfigfileBase.scala | 127 + .../TraversalControlstructureBase.scala | 127 + .../traversals/TraversalDeclarationBase.scala | 68 + .../traversals/TraversalDependencyBase.scala | 200 + .../traversals/TraversalExpressionBase.scala | 130 + .../TraversalFieldidentifierBase.scala | 68 + .../traversals/TraversalFileBase.scala | 199 + .../traversals/TraversalFindingBase.scala | 6 + .../traversals/TraversalIdentifierBase.scala | 135 + .../traversals/TraversalImportBase.scala | 181 + .../traversals/TraversalJumplabelBase.scala | 126 + .../traversals/TraversalJumptargetBase.scala | 175 + .../TraversalKeyvaluepairBase.scala | 127 + .../traversals/TraversalLiteralBase.scala | 75 + .../traversals/TraversalLocalBase.scala | 148 + .../traversals/TraversalLocationBase.scala | 544 + .../traversals/TraversalMemberBase.scala | 193 + .../traversals/TraversalMetadataBase.scala | 262 + .../traversals/TraversalMethodBase.scala | 641 + .../TraversalMethodparameterinBase.scala | 265 + .../TraversalMethodparameteroutBase.scala | 184 + .../traversals/TraversalMethodrefBase.scala | 134 + .../TraversalMethodreturnBase.scala | 135 + .../traversals/TraversalModifierBase.scala | 67 + .../traversals/TraversalNamespaceBase.scala | 67 + .../TraversalNamespaceblockBase.scala | 186 + .../TraversalPropertyAliasTypeFullName.scala | 84 + .../TraversalPropertyArgumentIndex.scala | 58 + .../TraversalPropertyArgumentName.scala | 83 + .../TraversalPropertyAstParentFullName.scala | 70 + .../TraversalPropertyAstParentType.scala | 69 + .../TraversalPropertyCanonicalName.scala | 69 + .../TraversalPropertyClassName.scala | 69 + .../TraversalPropertyClassShortName.scala | 70 + .../TraversalPropertyClosureBindingId.scala | 84 + ...TraversalPropertyClosureOriginalName.scala | 84 + .../traversals/TraversalPropertyCode.scala | 69 + .../TraversalPropertyColumnNumber.scala | 74 + .../TraversalPropertyColumnNumberEnd.scala | 75 + .../TraversalPropertyContainedRef.scala | 69 + .../traversals/TraversalPropertyContent.scala | 69 + ...raversalPropertyControlStructureType.scala | 70 + .../TraversalPropertyDependencyGroupId.scala | 84 + .../TraversalPropertyDispatchType.scala | 69 + ...ersalPropertyDynamicTypeHintFullName.scala | 15 + .../TraversalPropertyEvaluationStrategy.scala | 70 + .../TraversalPropertyExplicitAs.scala | 19 + .../TraversalPropertyFilename.scala | 69 + .../TraversalPropertyFullName.scala | 69 + .../traversals/TraversalPropertyHash.scala | 83 + .../TraversalPropertyImportedAs.scala | 83 + .../TraversalPropertyImportedEntity.scala | 84 + .../traversals/TraversalPropertyIndex.scala | 58 + ...rsalPropertyInheritsFromTypeFullName.scala | 15 + .../TraversalPropertyIsExplicit.scala | 19 + .../TraversalPropertyIsExternal.scala | 19 + .../TraversalPropertyIsVariadic.scala | 19 + .../TraversalPropertyIsWildcard.scala | 19 + .../traversals/TraversalPropertyKey.scala | 69 + .../TraversalPropertyLanguage.scala | 69 + .../TraversalPropertyLineNumber.scala | 74 + .../TraversalPropertyLineNumberEnd.scala | 74 + .../TraversalPropertyMethodFullName.scala | 70 + .../TraversalPropertyMethodShortName.scala | 70 + .../TraversalPropertyModifierType.scala | 69 + .../traversals/TraversalPropertyName.scala | 69 + .../TraversalPropertyNodeLabel.scala | 69 + .../traversals/TraversalPropertyOffset.scala | 74 + .../TraversalPropertyOffsetEnd.scala | 74 + .../traversals/TraversalPropertyOrder.scala | 58 + .../TraversalPropertyOverlays.scala | 14 + .../TraversalPropertyPackageName.scala | 69 + .../TraversalPropertyParserTypeName.scala | 70 + .../TraversalPropertyPossibleTypes.scala | 14 + .../traversals/TraversalPropertyRoot.scala | 69 + .../TraversalPropertySignature.scala | 69 + .../traversals/TraversalPropertySymbol.scala | 69 + .../TraversalPropertyTypeDeclFullName.scala | 70 + .../TraversalPropertyTypeFullName.scala | 69 + .../traversals/TraversalPropertyValue.scala | 69 + .../traversals/TraversalPropertyVersion.scala | 69 + .../traversals/TraversalReturnBase.scala | 6 + .../traversals/TraversalTagBase.scala | 126 + .../traversals/TraversalTagnodepairBase.scala | 7 + .../traversals/TraversalTemplatedomBase.scala | 68 + .../traversals/TraversalTypeBase.scala | 185 + .../TraversalTypeargumentBase.scala | 7 + .../traversals/TraversalTypedeclBase.scala | 517 + .../TraversalTypeparameterBase.scala | 68 + .../traversals/TraversalTyperefBase.scala | 75 + .../traversals/TraversalUnknownBase.scala | 193 + .../generated/traversals/package.scala | 395 + project/Versions.scala | 7 +- project/plugins.sbt | 3 +- project/project/Versions.scala | 20 + schema/build.sbt | 4 +- .../codepropertygraph/schema/Annotation.scala | 2 +- .../codepropertygraph/schema/Ast.scala | 21 +- .../codepropertygraph/schema/Base.scala | 4 +- .../codepropertygraph/schema/Binding.scala | 2 +- .../codepropertygraph/schema/CallGraph.scala | 6 +- .../codepropertygraph/schema/Cfg.scala | 6 +- .../codepropertygraph/schema/Codegen.scala | 12 - .../codepropertygraph/schema/Comment.scala | 10 +- .../schema/Configuration.scala | 2 +- .../codepropertygraph/schema/CpgSchema.scala | 4 +- .../codepropertygraph/schema/Dominators.scala | 2 +- .../codepropertygraph/schema/FileSystem.scala | 5 +- .../codepropertygraph/schema/Finding.scala | 4 +- .../codepropertygraph/schema/Hidden.scala | 13 +- .../codepropertygraph/schema/MetaData.scala | 4 +- .../codepropertygraph/schema/Method.scala | 6 +- .../codepropertygraph/schema/Namespace.scala | 4 +- .../codepropertygraph/schema/Operators.scala | 4 +- .../codepropertygraph/schema/Pdg.scala | 6 +- .../schema/ProtoSerialize.scala | 4 +- .../codepropertygraph/schema/Protogen.scala | 8 +- .../codepropertygraph/schema/Shortcuts.scala | 4 +- .../schema/TagsAndLocation.scala | 5 +- .../codepropertygraph/schema/Type.scala | 7 +- schema2json/build.sbt | 45 - schema2json/src/main/scala/Schema2Json.scala | 9 +- updateDependencies.sh | 6 +- 348 files changed, 86768 insertions(+), 86000 deletions(-) delete mode 100644 codepropertygraph/src/main/scala/io/shiftleft/OverflowDbTestInstance.scala delete mode 100644 codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/CpgLoaderConfig.scala delete mode 100644 codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/NodeFilter.scala delete mode 100644 codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/ProtoToCpg.scala create mode 100644 codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/ProtoToGraphNodeMappings.scala delete mode 100644 codepropertygraph/src/main/scala/io/shiftleft/passes/KeyPool.scala delete mode 100644 codepropertygraph/src/main/scala/io/shiftleft/passes/ParallelCpgPass.scala create mode 100644 codepropertygraph/src/test/resources/cpg.fg create mode 100644 codepropertygraph/src/test/resources/cpg.odb create mode 100644 codepropertygraph/src/test/scala/io/shiftleft/codepropertygraph/StepsTest.scala delete mode 100644 codepropertygraph/src/test/scala/io/shiftleft/passes/KeyPoolTests.scala delete mode 100644 codepropertygraph/src/test/scala/io/shiftleft/passes/ParallelCpgPassNewTests.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyErrorRegister.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/accessors/Accessors.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/AliasOf.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Argument.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Ast.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Binds.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/BindsTo.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Call.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Capture.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/CapturedBy.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Cdg.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Cfg.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Condition.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Contains.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Dominate.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/EdgeTypes.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/EvalType.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Imports.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/InheritsFrom.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/IsCallForImport.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/ParameterLink.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/PostDominate.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/ReachingDef.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Receiver.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Ref.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/SourceFile.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/TaggedBy.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/package.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/language.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Annotation.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/AnnotationLiteral.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/AnnotationParameter.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/AnnotationParameterAssign.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/ArrayInitializer.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Binding.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Block.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Call.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/CfgNode.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/ClosureBinding.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Comment.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/ControlStructure.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Dependency.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Expression.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/FieldIdentifier.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/File.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Identifier.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Import.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/JumpLabel.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/JumpTarget.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Literal.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Local.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Member.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Method.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodParameterIn.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodParameterOut.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodRef.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodReturn.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Modifier.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Namespace.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/NamespaceBlock.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Return.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Tag.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TemplateDom.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Type.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeArgument.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeDecl.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeParameter.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeRef.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Unknown.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/package.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AstNode.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/BaseTypes.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/CallRepr.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/CfgNode.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Declaration.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Expression.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewNodes.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/RootTypesTraversals.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/package.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/package.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Annotation.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AnnotationLiteral.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AnnotationParameter.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AnnotationParameterAssign.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ArrayInitializer.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AstNode.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Binding.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Block.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Call.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/CallRepr.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/CfgNode.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ClosureBinding.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Comment.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ConfigFile.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ControlStructure.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Declaration.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Dependency.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Expression.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/FieldIdentifier.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/File.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Finding.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Identifier.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Import.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/JumpLabel.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/JumpTarget.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/KeyValuePair.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Literal.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Local.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Location.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Member.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MetaData.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Method.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodParameterIn.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodParameterOut.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodRef.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodReturn.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Modifier.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Namespace.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/NamespaceBlock.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/NodeTraversalImplicits.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Return.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Tag.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TagNodePair.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TemplateDom.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Type.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeArgument.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeDecl.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeParameter.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeRef.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Unknown.scala delete mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/package.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationliteralBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationparameterBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationparameterassignBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalArrayinitializerBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAstnodeBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalBindingBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalBlockBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallreprBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCfgnodeBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalClosurebindingBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCommentBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalConfigfileBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalControlstructureBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalDeclarationBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalDependencyBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalExpressionBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalFieldidentifierBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalFileBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalFindingBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalIdentifierBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalImportBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalJumplabelBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalJumptargetBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalKeyvaluepairBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLiteralBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLocalBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLocationBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMemberBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMetadataBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodparameterinBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodparameteroutBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodrefBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodreturnBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalModifierBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalNamespaceBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalNamespaceblockBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyAliasTypeFullName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyArgumentIndex.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyArgumentName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyAstParentFullName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyAstParentType.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyCanonicalName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClassName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClassShortName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClosureBindingId.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClosureOriginalName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyCode.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyColumnNumber.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyColumnNumberEnd.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyContainedRef.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyContent.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyControlStructureType.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyDependencyGroupId.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyDispatchType.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyDynamicTypeHintFullName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyEvaluationStrategy.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyExplicitAs.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyFilename.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyFullName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyHash.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyImportedAs.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyImportedEntity.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIndex.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyInheritsFromTypeFullName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsExplicit.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsExternal.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsVariadic.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsWildcard.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyKey.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyLanguage.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyLineNumber.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyLineNumberEnd.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyMethodFullName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyMethodShortName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyModifierType.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyNodeLabel.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOffset.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOffsetEnd.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOrder.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOverlays.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyPackageName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyParserTypeName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyPossibleTypes.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyRoot.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertySignature.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertySymbol.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyTypeDeclFullName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyTypeFullName.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyValue.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyVersion.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalReturnBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTagBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTagnodepairBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTemplatedomBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeargumentBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypedeclBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeparameterBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTyperefBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalUnknownBase.scala create mode 100644 domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/package.scala create mode 100644 project/project/Versions.scala delete mode 100644 schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Codegen.scala diff --git a/.gitignore b/.gitignore index b9f506b96..261c8d7b7 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ target/ codepropertygraph/project/ /codepropertygraph/src/main/resources/cpg.json +/codepropertygraph/src/test/resources/cpg.odb.fg private-key.pem travis_wait_* **/*.pyc @@ -14,7 +15,7 @@ project/.bloop .project *.class /.classpath -/project/project/ +/project/project/target /project/target/ /target /foo.c diff --git a/build.sbt b/build.sbt index e4c0bf3d1..3f2c65897 100644 --- a/build.sbt +++ b/build.sbt @@ -1,8 +1,7 @@ name := "codepropertygraph" // parsed by project/Versions.scala, updated by updateDependencies.sh -val overflowdbVersion = "1.193" -val overflowdbCodegenVersion = "2.112" +val flatgraphVersion = "0.0.81" inThisBuild( List( diff --git a/codepropertygraph/build.sbt b/codepropertygraph/build.sbt index 3bbf39488..f335e1138 100644 --- a/codepropertygraph/build.sbt +++ b/codepropertygraph/build.sbt @@ -3,8 +3,9 @@ name := "codepropertygraph" dependsOn(Projects.protoBindings, Projects.domainClasses) libraryDependencies ++= Seq( - "io.shiftleft" %% "overflowdb-traversal" % Versions.overflowdb, - "io.shiftleft" %% "overflowdb-formats" % Versions.overflowdb, + "io.joern" %% "flatgraph-formats" % Versions.flatgraph, + "io.joern" %% "flatgraph-help" % Versions.flatgraph, + "io.joern" %% "flatgraph-odb-convert" % Versions.flatgraph, "com.github.scopt" %% "scopt" % "4.0.1", "com.github.pathikrit" %% "better-files" % "3.9.2", "org.slf4j" % "slf4j-api" % "2.0.6", diff --git a/codepropertygraph/src/main/scala/io/shiftleft/OverflowDbTestInstance.scala b/codepropertygraph/src/main/scala/io/shiftleft/OverflowDbTestInstance.scala deleted file mode 100644 index 12904a134..000000000 --- a/codepropertygraph/src/main/scala/io/shiftleft/OverflowDbTestInstance.scala +++ /dev/null @@ -1,10 +0,0 @@ -package io.shiftleft - -import io.shiftleft.codepropertygraph.generated.Cpg -import overflowdb.Graph - -object OverflowDbTestInstance { - - def create: Graph = Cpg.emptyGraph - -} diff --git a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/Cpg.scala b/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/Cpg.scala index 89a92c0e2..729689a3c 100644 --- a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/Cpg.scala +++ b/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/Cpg.scala @@ -1,23 +1,23 @@ package io.shiftleft.codepropertygraph -import overflowdb.Graph -import overflowdb.traversal.help.DocSearchPackages +import flatgraph.Graph +import flatgraph.help.DocSearchPackages +import io.shiftleft.codepropertygraph.generated /** TODO this is now being generated as well - for now we'll just forward calls to `generated.Cpg` next step is to * remove this class and move remove the `generated` part from the generated package */ object Cpg { - implicit val docSearchPackages: DocSearchPackages = - DocSearchPackages("io.shiftleft", "io.joern") + val defaultDocSearchPackage: DocSearchPackages = generated.Cpg.defaultDocSearchPackage /** Syntactic sugar for `new Cpg(graph)`. Usage: `Cpg(graph)` or simply `Cpg` if you have an `implicit Graph` in scope */ - def apply(implicit graph: Graph) = new Cpg(graph) + def apply(implicit graph: Graph) = generated.Cpg(graph) /** Create an empty code property graph */ - def emptyCpg: Cpg = - new Cpg(emptyGraph) + def emptyCpg: generated.Cpg = + generated.Cpg(emptyGraph) /** Instantiate cpg with storage. If the storage file already exists, it will load (a subset of) the data into memory. * Otherwise it will create an empty cpg. In either case, configuring storage means that OverflowDb will be stored to @@ -26,13 +26,10 @@ object Cpg { * @param path * to the storage file, e.g. /home/user1/overflowdb.bin */ - def withStorage(path: String): Cpg = - new Cpg(generated.Cpg.withStorage(path).graph) - - def withConfig(config: overflowdb.Config): Cpg = - Cpg(generated.Cpg.withConfig(config).graph) + def withStorage(path: String, deserializeOnClose: Boolean = true): generated.Cpg = + generated.Cpg.withStorage(java.nio.file.Paths.get(path), deserializeOnClose) def emptyGraph: Graph = - generated.Cpg.emptyGraph + generated.Cpg.empty.graph } diff --git a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/CpgLoader.scala b/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/CpgLoader.scala index 362e6419d..53cba2d4a 100644 --- a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/CpgLoader.scala +++ b/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/CpgLoader.scala @@ -1,91 +1,117 @@ package io.shiftleft.codepropertygraph.cpgloading -import better.files.File import io.shiftleft.codepropertygraph.generated.Cpg -import io.shiftleft.codepropertygraph.generated.PropertyNames import org.slf4j.{Logger, LoggerFactory} -import scala.util.Try +import java.io.FileNotFoundException +import java.nio.charset.StandardCharsets +import java.nio.file.{Files, Path, Paths} +import scala.util.Using object CpgLoader { + private val logger: Logger = LoggerFactory.getLogger(getClass) - private val logger: Logger = LoggerFactory.getLogger(classOf[CpgLoader]) + /** Load a Code Property Graph from the given file */ + def load(filename: String): Cpg = + load(Paths.get(filename)) - /** Load a Code Property Graph - * - * @param filename - * name of file that stores the code property graph - * @param config - * loader configuration + /** Load a Code Property Graph from the given file - persist in given second file. I.e. the given input file will not + * be modified, all changes will be written to the given 'persistTo' file. * */ - def load(filename: String, config: CpgLoaderConfig = CpgLoaderConfig()): Cpg = - new CpgLoader().load(filename, config) + def load(from: String, persistTo: String): Cpg = + load(Paths.get(from), Paths.get(persistTo)) - /** Load Code Property Graph from an overflow DB file - * - * @param config - * loader config + /** Load a Code Property Graph from the given file * - * This methods loads the CPG from an existing overflow DB file, specified in config.overflowDbConfig. In particular, - * this config specifies the filename. For example, to load the database at "foo.db", you can issue the following: - * - * val odbConfig = Config.withDefaults().withStorageLocation(config.spPath) val config = - * CpgLoaderConfig().withOverflowConfig(odbConfig) CpgLoader.loadFromOverflowDb(config) + * Notes: + * - detects the format as either flatgraph, overflowdb or proto + * - a flatgraph storage opened straight away + * - OverflowDb and proto formats are first converted to flatgraph, which is written to the `persistTo` file + * - OverflowDb and proto formats are first converted to flatgraph, and therefor we create a new flatgraph storage + * path, which can be obtained via `cpg.graph.storagePathMaybe` */ - def loadFromOverflowDb(config: CpgLoaderConfig = CpgLoaderConfig()): Cpg = { - new CpgLoader().loadFromOverflowDb(config) + def load(path: Path): Cpg = { + val absolutePath = path.toAbsolutePath + if (!Files.exists(absolutePath)) { + throw new FileNotFoundException(s"given input file $absolutePath does not exist") + } else if (isProtoFormat(absolutePath)) { + load(path, persistTo = absolutePath.resolveSibling(s"${path.getFileName}.fg")) + } else if (isOverflowDbFormat(absolutePath)) { + load(absolutePath, persistTo = path.resolveSibling(s"${path.getFileName}.fg")) + } else { + // assuming it's flatgraph format + Cpg.withStorage(absolutePath) + } } - /** Create any indexes necessary for quick access. - * - * @param cpg - * the CPG to create indexes in - */ - def createIndexes(cpg: Cpg): Unit = - new CpgLoader().createIndexes(cpg) - - /** Determine whether the CPG is a legacy (proto) CPG + /** Load a Code Property Graph from the given file, but persist it in the given second file. I.e. the given input file + * will not be modified, all changes will be written to the given 'persistTo' file. * - * @param filename - * name of the file to probe + * Notes: + * - if the given 'persistTo' file already exists, it will be overridden + * - detects the format as either flatgraph, overflowdb or proto + * - a flatgraph storage is copied to the `persistTo` file and then opened straight away + * - OverflowDb and proto formats are first converted to flatgraph, which is written to the `persistTo` file */ - def isLegacyCpg(filename: String): Boolean = - isLegacyCpg(File(filename)) - - /** Determine whether the CPG is a legacy (proto) CPG - * - * @param file - * file to probe - */ - def isLegacyCpg(file: File): Boolean = { - val bytes = file.bytes - Try { - bytes.next() == 'P' && bytes.next() == 'K' - }.getOrElse(false) + def load(from: Path, persistTo: Path): Cpg = { + val absolutePath = from.toAbsolutePath + if (persistTo != from) + Files.deleteIfExists(persistTo) + + if (!Files.exists(absolutePath)) { + throw new FileNotFoundException(s"given input file $absolutePath does not exist") + } else if (isProtoFormat(absolutePath)) { + logger.debug(s"Converting $from from proto cpg into new flatgraph storage: $persistTo") + ProtoCpgLoader.loadFromProtoZip(absolutePath.toString, Option(persistTo)) + } else if (isOverflowDbFormat(absolutePath)) { + loadFromOverflowDb(absolutePath, persistTo) + } else if (isFlatgraphFormat(absolutePath)) { + Files.copy(absolutePath, persistTo) + Cpg.withStorage(persistTo) + } else { + throw new AssertionError( + s"unknown file format - we probed the first bytes but it didn't look like one of our known formats (proto.zip, flatgraph, overflowdb)" + ) + } } -} + /** Determine whether the CPG is a legacy (proto) CPG */ + def isProtoFormat(path: Path): Boolean = + probeFirstBytes(path, "PK") -private class CpgLoader { + /** Determine whether the CPG is a proto CPG */ + def isProtoFormat(filename: String): Boolean = + isProtoFormat(Paths.get(filename)) - import CpgLoader.logger + def isOverflowDbFormat(path: Path): Boolean = + probeFirstBytes(path, "H:2") - def load(filename: String, config: CpgLoaderConfig = CpgLoaderConfig.withoutOverflow): Cpg = { - logger.debug("Loading " + filename) + def isFlatgraphFormat(path: Path): Boolean = + probeFirstBytes(path, "FLT GRPH") // flatgraph.storage.MagicBytesString - val cpg = - ProtoCpgLoader.loadFromProtoZip(filename, config.overflowDbConfig) - if (config.createIndexes) { createIndexes(cpg) } - cpg + /** Load Code Property Graph from an overflow DB file, by first converting it into a flatgraph binary */ + def loadFromOverflowDb(path: Path, persistTo: Path): Cpg = { + logger.info(s"Converting $path from overflowdb to new flatgraph storage: $persistTo") + flatgraph.convert.Convert.convertOdbToFlatgraph(overflowDbFile = path, outputFile = persistTo) + Cpg.withStorage(persistTo) } - def loadFromOverflowDb(config: CpgLoaderConfig = CpgLoaderConfig()): Cpg = { - val cpg = Cpg.withConfig(config.overflowDbConfig) - if (config.createIndexes) { createIndexes(cpg) } - cpg + /** Determine whether the CPG is a legacy (proto) CPG */ + @deprecated("use `isProtoCpg` instead") + def isLegacyCpg(filename: String): Boolean = + isProtoFormat(Paths.get(filename)) + + /** Determine whether the CPG is a legacy (proto) CPG */ + @deprecated("use `isProtoCpg` instead") + def isLegacyCpg(path: Path): Boolean = + isProtoFormat(path) + + private def probeFirstBytes(path: Path, probeFor: String): Boolean = { + Using(Files.newInputStream(path)) { is => + val buffer = new Array[Byte](probeFor.size) + is.read(buffer) + new String(buffer, StandardCharsets.UTF_8) == probeFor + }.getOrElse(false) } - def createIndexes(cpg: Cpg): Unit = - cpg.graph.indexManager.createNodePropertyIndex(PropertyNames.FULL_NAME) - } diff --git a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/CpgLoaderConfig.scala b/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/CpgLoaderConfig.scala deleted file mode 100644 index 09cf3523b..000000000 --- a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/CpgLoaderConfig.scala +++ /dev/null @@ -1,50 +0,0 @@ -package io.shiftleft.codepropertygraph.cpgloading -import overflowdb.Config - -object CpgLoaderConfig { - - /** Get a default object - */ - def apply(): CpgLoaderConfig = new CpgLoaderConfig() - - val withDefaults = CpgLoaderConfig() - - @deprecated("Use CpgLoaderConfig.withDefaults.withStorage instead", "") - def withStorage(path: String) = - new CpgLoaderConfig(overflowDbConfig = Config.withoutOverflow.withStorageLocation(path)) - - def withoutOverflow = - new CpgLoaderConfig(overflowDbConfig = Config.withoutOverflow) - -} - -/** Configuration for the CPG loader - * @param createIndexes - * indicate whether to create indices or not - * @param overflowDbConfig - * configuration for the on-disk-overflow feature - */ -class CpgLoaderConfig(var createIndexes: Boolean = true, var overflowDbConfig: Config = Config.withoutOverflow) { - - /** Existing configuration without indexing on load. - */ - def doNotCreateIndexesOnLoad: CpgLoaderConfig = { - this.createIndexes = false - this - } - - /** Existing configuration but with indexing on load. - */ - def createIndexesOnLoad: CpgLoaderConfig = { - this.createIndexes = true - this - } - - /** Return existing configuration but with overflowdb config set to `overflowConfig`. - */ - def withOverflowConfig(overflowConfig: Config): CpgLoaderConfig = { - this.overflowDbConfig = overflowConfig - this - } - -} diff --git a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/NodeFilter.scala b/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/NodeFilter.scala deleted file mode 100644 index 6d44c3cd2..000000000 --- a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/NodeFilter.scala +++ /dev/null @@ -1,25 +0,0 @@ -package io.shiftleft.codepropertygraph.cpgloading - -import io.shiftleft.proto.cpg.Cpg.CpgStruct.Node -import io.shiftleft.proto.cpg.Cpg.NodePropertyName - -import scala.collection.mutable -import scala.jdk.CollectionConverters._ - -/** Removes duplicate nodes to avoid uniqueness restriction for parallel frontends. - */ -class NodeFilter { - private val typeFullNames = mutable.Set[String]() - - def filterNode(protoNode: Node): Boolean = { - protoNode.getType match { - case Node.NodeType.TYPE => - val fullNameOption = protoNode.getPropertyList.asScala.collectFirst { - case prop if prop.getName == NodePropertyName.FULL_NAME => prop.getValue.getStringValue - } - if (fullNameOption.isDefined) typeFullNames.add(fullNameOption.get) else true - case _ => - true - } - } -} diff --git a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/ProtoCpgLoader.scala b/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/ProtoCpgLoader.scala index a60f65594..59008ff46 100644 --- a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/ProtoCpgLoader.scala +++ b/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/ProtoCpgLoader.scala @@ -1,70 +1,134 @@ package io.shiftleft.codepropertygraph.cpgloading import com.google.protobuf.GeneratedMessageV3 +import flatgraph.* +import flatgraph.misc.ConversionException +import flatgraph.misc.Conversions.toShortSafely import io.shiftleft.codepropertygraph.generated.Cpg -import io.shiftleft.proto.cpg.Cpg.CpgStruct.Edge -import io.shiftleft.proto.cpg.Cpg.CpgStruct.Edge.EdgeType -import io.shiftleft.proto.cpg.Cpg.{CpgOverlay, CpgStruct} +import io.shiftleft.proto.cpg.Cpg.PropertyValue.ValueCase.* +import io.shiftleft.proto.cpg.Cpg.{CpgOverlay, CpgStruct, PropertyValue} +import io.shiftleft.utils.StringInterner import org.slf4j.{Logger, LoggerFactory} -import overflowdb.Config import java.io.InputStream import java.nio.file.{Files, Path} -import java.util.{List => JList} -import scala.collection.mutable.ArrayDeque -import scala.jdk.CollectionConverters._ -import scala.util.{Failure, Success, Try, Using} - -// This class is used to temporarily store edges we have red from proto before we store them -// in the CPG. As usual proto is very memory inefficiet when it comes to memory and saving a -// few bytes adds up since we keep all graph edge in this intermediate representation before -// we start adding the edges to the CPG. -case class TmpEdge(dst: Long, src: Long, typ: Int, properties: List[Edge.Property]) { - def this(edge: Edge) = { - this(edge.getDst, edge.getSrc, edge.getTypeValue, List.from(edge.getPropertyList.asScala)) - } -} +import scala.jdk.CollectionConverters.* +import scala.util.{Try, Using} object ProtoCpgLoader { private val logger: Logger = LoggerFactory.getLogger(getClass) - def loadFromProtoZip(fileName: String, overflowDbConfig: Config = Config.withoutOverflow): Cpg = + def loadFromProtoZip(fileName: String, storagePath: Option[Path]): Cpg = { measureAndReport { - val builder = new ProtoToCpg(overflowDbConfig) Using.Manager { use => - val edges = ArrayDeque.empty[TmpEdge] - use(new ZipArchive(fileName)).entries.foreach { entry => - val inputStream = use(Files.newInputStream(entry)) - val cpgStruct = getNextProtoCpgFromStream(inputStream) - builder.addNodes(cpgStruct.getNodeList) - cpgStruct.getEdgeList.asScala.foreach { edge => - edges.append(new TmpEdge(edge)) + def cpgProtos: Iterator[CpgStruct] = { + use(new ZipArchive(fileName)).entries.iterator.map { entry => + val inputStream = use(Files.newInputStream(entry)) + CpgStruct.parseFrom(inputStream) } } - // We remove the edges while iterating so that the GC can already collect them. - while (edges.nonEmpty) { - val edge = edges.removeHead() - builder.addEdge(edge.dst, edge.src, EdgeType.forNumber(edge.typ), edge.properties) + loadFromListOfProtos(() => cpgProtos, storagePath) + }.get + } + } + + /** @param protoCpgs + * is a function because we need to run two passes due to flatgraph-specific implementation details: one to add the + * nodes, and one to add edges and set node properties + */ + def loadFromListOfProtos(protoCpgs: () => Iterator[CpgStruct], storagePath: Option[Path]): Cpg = { + // TODO use centralised string interner everywhere, maybe move to flatgraph core - keep in mind strong references / GC. + implicit val interner: StringInterner = StringInterner.makeStrongInterner() + val protoToGraphNodeMappings = new ProtoToGraphNodeMappings + val cpg = openOrCreateCpg(storagePath) + + // first pass: add the raw nodes without any properties or edges + protoCpgs().foreach { cpgProto => + addNodesRaw(nodesIter(cpgProto), cpg.graph, protoToGraphNodeMappings) + } + + // second pass: set node properties and add edges + val diffGraph = Cpg.newDiffGraphBuilder + protoCpgs().foreach { protoCpg => + nodesIter(protoCpg).foreach { protoNode => + val protoNodeId = protoNode.getKey + lazy val gNode = protoToGraphNodeMappings + .findGNode(protoNode) + .getOrElse(throw new ConversionException(s"node with proto node id=$protoNodeId not found in graph")) + protoNode.getPropertyList.iterator().asScala.foreach { protoProperty => + diffGraph.setNodeProperty(gNode, protoProperty.getName.name(), extractPropertyValue(protoProperty.getValue())) + } + } + + protoCpg.getEdgeList.iterator().asScala.foreach { protoEdge => + List(protoEdge.getSrc, protoEdge.getDst).map(protoToGraphNodeMappings.findGNode) match { + case List(Some(srcNode), Some(dstNode)) => + diffGraph.addEdge(srcNode, dstNode, protoEdge.getType.name(), extractEdgePropertyValue(protoEdge)) + case _ => // at least one of the nodes doesn't exist in the cpg, most likely because it was filtered out - ignore } - } match { - case Failure(exception) => throw exception - case Success(_) => builder.build() } } - def loadFromListOfProtos(cpgs: Seq[CpgStruct], overflowDbConfig: Config): Cpg = { - val builder = new ProtoToCpg(overflowDbConfig) - cpgs.foreach(cpg => builder.addNodes(cpg.getNodeList)) - cpgs.foreach { cpg => - cpg.getEdgeList.asScala.foreach { edge => - builder.addEdge(edge.getDst, edge.getSrc, edge.getType, edge.getPropertyList.asScala) + DiffGraphApplier.applyDiff(cpg.graph, diffGraph) + cpg + } + + def loadFromListOfProtos(cpgs: java.util.List[CpgStruct], storagePath: Option[Path]): Cpg = + loadFromListOfProtos(() => cpgs.asScala.iterator, storagePath) + + private def openOrCreateCpg(storagePath: Option[Path]): Cpg = { + storagePath match { + case Some(storagePath) => Cpg.withStorage(storagePath) + case None => Cpg.empty + } + } + + private def nodesIter(protoCpg: CpgStruct): Iterator[CpgStruct.Node] = + protoCpg.getNodeList.iterator().asScala + + private def addNodesRaw( + protoNodes: Iterator[CpgStruct.Node], + graph: Graph, + protoToGraphNodeMappings: ProtoToGraphNodeMappings + ): Unit = { + val diffGraph = Cpg.newDiffGraphBuilder + protoNodes.filterNot(protoToGraphNodeMappings.contains).foreach { protoNode => + val label = protoNode.getType.name() + graph.schema.getNodeKindByLabelMaybe(label) match { + case None => + logger.warn(s"nodeKind for label=`$label` not found - is this a valid proto cpg?") + case Some(nodeKind) => + val newNode = new GenericDNode(graph.schema.getNodeKindByLabel(protoNode.getType.name()).toShortSafely) + diffGraph.addNode(newNode) + protoToGraphNodeMappings.add(protoNode, newNode) } } - builder.build() + DiffGraphApplier.applyDiff(graph, diffGraph) } - def loadFromListOfProtos(cpgs: JList[CpgStruct], overflowDbConfig: Config): Cpg = - loadFromListOfProtos(cpgs.asScala.toSeq, overflowDbConfig) + private def extractPropertyValue(value: PropertyValue)(implicit interner: StringInterner): Any = { + value.getValueCase match { + case INT_VALUE => value.getIntValue + case BOOL_VALUE => value.getBoolValue + case STRING_VALUE => interner.intern(value.getStringValue) + case STRING_LIST => value.getStringList.getValuesList.asScala.map(interner.intern).toList + case VALUE_NOT_SET => null + case _ => throw new RuntimeException("Error: unsupported property case: " + value.getValueCase.name) + } + } + + /** flatgraph only supports 0..1 edge properties */ + private def extractEdgePropertyValue(protoEdge: CpgStruct.Edge)(implicit interner: StringInterner): Any = { + val protoProperties = protoEdge.getPropertyList.asScala + if (protoProperties.isEmpty) + null + else if (protoProperties.size == 1) + extractPropertyValue(protoProperties.head.getValue) + else + throw new IllegalArgumentException( + s"flatgraph only supports zero or one edge properties, but the given edge has ${protoProperties.size} properties: $protoProperties" + ) + } def loadOverlays(fileName: String): Try[Iterator[CpgOverlay]] = loadOverlays(fileName, CpgOverlay.parseFrom) @@ -89,9 +153,6 @@ object ProtoCpgLoader { file1Split(0).toInt < file2Split(0).toInt } - private def getNextProtoCpgFromStream(inputStream: InputStream) = - CpgStruct.parseFrom(inputStream) - private def measureAndReport[A](f: => A): A = { val start = System.currentTimeMillis() val result = f diff --git a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/ProtoToCpg.scala b/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/ProtoToCpg.scala deleted file mode 100644 index a5ce1a352..000000000 --- a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/ProtoToCpg.scala +++ /dev/null @@ -1,95 +0,0 @@ -package io.shiftleft.codepropertygraph.cpgloading - -import io.shiftleft.codepropertygraph.generated.Cpg -import io.shiftleft.proto.cpg.Cpg.CpgStruct.Edge.EdgeType -import io.shiftleft.proto.cpg.Cpg.CpgStruct.{Edge, Node} -import io.shiftleft.proto.cpg.Cpg.PropertyValue -import io.shiftleft.proto.cpg.Cpg.PropertyValue.ValueCase._ -import io.shiftleft.utils.StringInterner -import org.slf4j.{Logger, LoggerFactory} -import overflowdb._ - -import java.util.{Collection => JCollection, NoSuchElementException} -import scala.jdk.CollectionConverters._ - -object ProtoToCpg { - val logger: Logger = LoggerFactory.getLogger(classOf[ProtoToCpg]) - - def toProperty(keyValue: (String, PropertyValue))(implicit interner: StringInterner): Property[Any] = - new Property(keyValue._1, toRegularType(keyValue._2)) - - private def toRegularType(value: PropertyValue)(implicit interner: StringInterner): Any = - value.getValueCase match { - case INT_VALUE => value.getIntValue - case BOOL_VALUE => value.getBoolValue - case STRING_VALUE => interner.intern(value.getStringValue) - case STRING_LIST => value.getStringList.getValuesList.asScala.map(interner.intern).toList - case VALUE_NOT_SET => () - case _ => throw new RuntimeException("Error: unsupported property case: " + value.getValueCase.name) - } -} - -class ProtoToCpg(overflowConfig: Config = Config.withoutOverflow) { - import ProtoToCpg._ - private val nodeFilter = new NodeFilter - private val odbGraph = Cpg.withConfig(overflowConfig).graph - // TODO use centralised string interner everywhere, maybe move to odb core - keep in mind strong references / GC. - implicit private val interner: StringInterner = StringInterner.makeStrongInterner() - - def graph: Graph = odbGraph - - def addNodes(nodes: JCollection[Node]): Unit = - addNodes(nodes.asScala) - - def addNodes(nodes: Iterable[Node]): Unit = - nodes - .filter(nodeFilter.filterNode) - .foreach(addNodeToOdb) - - private def addNodeToOdb(node: Node) = { - val properties = node.getPropertyList.asScala.toSeq - .map(prop => (prop.getName.name, prop.getValue)) - .map(toProperty) - try { - if (node.getKey() == -1) { - throw new IllegalArgumentException("node has illegal key -1. Something is wrong with the cpg.") - } - odbGraph.+(node.getType.name, node.getKey, properties*) - } catch { - case e: Exception => - throw new RuntimeException("Failed to insert a node. proto:\n" + node, e) - } - } - - def addEdge(dst: Long, src: Long, typ: EdgeType, properties: Iterable[Edge.Property]): Unit = { - val srcNode = findNodeById(src, typ) - val dstNode = findNodeById(dst, typ) - val propertyPairs = properties.toSeq - .map(prop => (prop.getName.name, prop.getValue)) - .map(toProperty) - try { - srcNode.---(typ.name, propertyPairs*) --> dstNode - } catch { - case e: IllegalArgumentException => - val context = "label=" + typ.name + - ", srcNodeId=" + src + - ", dstNodeId=" + dst + - ", srcNode=" + srcNode + - ", dstNode=" + dstNode - logger.warn("Failed to insert an edge. context: " + context, e) - } - } - - def build(): Cpg = new Cpg(odbGraph) - - private def findNodeById(nodeId: Long, typ: EdgeType): overflowdb.Node = { - if (nodeId == -1) - throw new IllegalArgumentException("Illegal src|dst node ID -1 on edge of type " + typ.name) - odbGraph - .nodeOption(nodeId) - .getOrElse( - throw new NoSuchElementException("Couldn't find src|dst node " + nodeId + " for edge of type " + typ.name) - ) - } - -} diff --git a/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/ProtoToGraphNodeMappings.scala b/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/ProtoToGraphNodeMappings.scala new file mode 100644 index 000000000..de324dc17 --- /dev/null +++ b/codepropertygraph/src/main/scala/io/shiftleft/codepropertygraph/cpgloading/ProtoToGraphNodeMappings.scala @@ -0,0 +1,77 @@ +package io.shiftleft.codepropertygraph.cpgloading + +import flatgraph.* +import io.shiftleft.proto.cpg.Cpg.CpgStruct + +import scala.jdk.CollectionConverters.* + +/** Mutable datastructure to preserve mapping between proto and cpg nodes during ProtoToCpg import. + * + * Context: we need to run two passes: 1) add nodes and 2) set node properties and add edges (this is due to + * flatgraph-specific implementation details) + * + * Because of that, we need to remember the mapping from proto node id to gnode. Typically that's just a plain mapping, + * but there's one special case for TYPE nodes: some (parallel) frontends create duplicate TYPE nodes which we need to + * deduplicate... + */ +class ProtoToGraphNodeMappings { + private var protoNodeIdToGNode = Map.empty[Long, DNode] + private var typeFullNameToGNode = Map.empty[String, DNode] + + def addAll(other: ProtoToGraphNodeMappings): Unit = { + val intersection1 = this.protoNodeIdToGNode.keySet.intersect(other.protoNodeIdToGNode.keySet) + val intersection2 = this.typeFullNameToGNode.keySet.intersect(other.typeFullNameToGNode.keySet) + assert( + intersection1.isEmpty, + s"unexpected duplicate entries in protoNodeIdToGNode mappings. protoNodeIds: $intersection1" + ) + assert( + intersection2.isEmpty, + s"unexpected duplicate entries in typeFullNameToGNode mappings. FullNames: $intersection2" + ) + + this.protoNodeIdToGNode = this.protoNodeIdToGNode ++ other.protoNodeIdToGNode + this.typeFullNameToGNode = this.typeFullNameToGNode ++ other.typeFullNameToGNode + } + + def add(protoNode: CpgStruct.Node, node: DNode): Unit = { + protoNodeIdToGNode += protoNode.getKey -> node + typeFullNameMaybe(protoNode).foreach(typeFullName => typeFullNameToGNode += typeFullName -> node) + } + + def contains(protoNode: CpgStruct.Node): Boolean = + find(protoNode).isDefined + + def find(protoNode: CpgStruct.Node): Option[DNode] = { + protoNodeIdToGNode.get(protoNode.getKey).orElse { + typeFullNameMaybe(protoNode).flatMap(typeFullNameToGNode.get) + } + } + + /** This will fail hard if the DiffGraph hasn't been applied yet, which is the assumption for it's use case. In other + * words, we specifically don't want to invoke `find(protoNode).flatMap(_.storedRef)` here + */ + def findGNode(protoNode: CpgStruct.Node): Option[GNode] = + find(protoNode).map(_.storedRef.get) + + /** This will fail hard if the DiffGraph hasn't been applied yet, which is the assumption for it's use case. In other + * words, we specifically don't want to invoke `find(protoNode).flatMap(_.storedRef)` here + * + * Note that this doesn't (and cannot) check for duplicate nodes with the same TYPE.FULL_NAME, because we only have + * the protoNodeId and not the node itself. + */ + def findGNode(protoNodeId: Long): Option[GNode] = + protoNodeIdToGNode.get(protoNodeId).map(_.storedRef.get) + + private def typeFullNameMaybe(protoNode: CpgStruct.Node): Option[String] = { + if (protoNode.getType == CpgStruct.Node.NodeType.TYPE) { + protoNode.getPropertyList.asScala.collectFirst { + case prop if prop.getName == io.shiftleft.proto.cpg.Cpg.NodePropertyName.FULL_NAME => + prop.getValue.getStringValue + } + } else { + None + } + } + +} diff --git a/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala b/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala index b07b99fb2..39bf37e05 100644 --- a/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala +++ b/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala @@ -14,9 +14,7 @@ import scala.util.{Failure, Success, Try} * * Base class of a program which receives a CPG as input for the purpose of modifying it. * */ - -abstract class CpgPass(cpg: Cpg, outName: String = "", keyPool: Option[KeyPool] = None) - extends ForkJoinParallelCpgPass[AnyRef](cpg, outName, keyPool) { +abstract class CpgPass(cpg: Cpg, outName: String = "") extends ForkJoinParallelCpgPass[AnyRef](cpg, outName) { def run(builder: DiffGraphBuilder): Unit @@ -28,8 +26,7 @@ abstract class CpgPass(cpg: Cpg, outName: String = "", keyPool: Option[KeyPool] override def isParallel: Boolean = false } -@deprecated abstract class SimpleCpgPass(cpg: Cpg, outName: String = "", keyPool: Option[KeyPool] = None) - extends CpgPass(cpg, outName, keyPool) +@deprecated abstract class SimpleCpgPass(cpg: Cpg, outName: String = "") extends CpgPass(cpg, outName) /* ForkJoinParallelCpgPass is a possible replacement for CpgPass and ParallelCpgPass. * @@ -37,7 +34,7 @@ abstract class CpgPass(cpg: Cpg, outName: String = "", keyPool: Option[KeyPool] * of parts must live on the heap at the same time; on the other hand, there are no possible issues with iterator invalidation, * e.g. when running over all METHOD nodes and deleting some of them. * - * Instead of streaming writes as ParallelCpgPass or ConcurrentWriterCpgPass do, all `runOnPart` invocations read the initial state + * Instead of streaming writes as ParallelCpgPass do, all `runOnPart` invocations read the initial state * of the graph. Then all changes (accumulated in the DiffGraphBuilders) are merged into a single change, and applied in one go. * * In other words, the parallelism follows the fork/join parallel map-reduce (java: collect, scala: aggregate) model. @@ -46,68 +43,13 @@ abstract class CpgPass(cpg: Cpg, outName: String = "", keyPool: Option[KeyPool] * * This simplifies semantics and makes it easy to reason about possible races. * - * Note that ForkJoinParallelCpgPass never writes intermediate results, so one must consider peak memory consumption when - * porting from ParallelCpgPass. Consider ConcurrentWriterCpgPass when this is a problem. + * Note that ForkJoinParallelCpgPass never writes intermediate results, so one must consider peak memory consumption when porting from ParallelCpgPass. * * Initialization and cleanup of external resources or large datastructures can be done in the `init()` and `finish()` * methods. This may be better than using the constructor or GC, because e.g. SCPG chains of passes construct * passes eagerly, and releases them only when the entire chain has run. * */ -abstract class ForkJoinParallelCpgPass[T <: AnyRef]( - cpg: Cpg, - @nowarn outName: String = "", - keyPool: Option[KeyPool] = None -) extends NewStyleCpgPassBase[T] { - - override def createApplySerializeAndStore(serializedCpg: SerializedCpg, prefix: String = ""): Unit = { - baseLogger.info(s"Start of pass: $name") - val nanosStart = System.nanoTime() - var nParts = 0 - var nanosBuilt = -1L - var nDiff = -1 - var nDiffT = -1 - try { - val diffGraph = Cpg.newDiffGraphBuilder - nParts = runWithBuilder(diffGraph) - nanosBuilt = System.nanoTime() - nDiff = diffGraph.size() - - nDiffT = overflowdb.BatchedUpdate - .applyDiff(cpg.graph, diffGraph, keyPool.getOrElse(null), null) - .transitiveModifications() - - } catch { - case exc: Exception => - baseLogger.error(s"Pass ${name} failed", exc) - throw exc - } finally { - try { - finish() - } finally { - // the nested finally is somewhat ugly -- but we promised to clean up with finish(), we want to include finish() - // in the reported timings, and we must have our final log message if finish() throws - val nanosStop = System.nanoTime() - val fracRun = if (nanosBuilt == -1) 0.0 else (nanosStop - nanosBuilt) * 100.0 / (nanosStop - nanosStart + 1) - val serializationString = if (serializedCpg != null && !serializedCpg.isEmpty) { - " Diff serialized and stored." - } else "" - baseLogger.info( - f"Pass $name completed in ${(nanosStop - nanosStart) * 1e-6}%.0f ms (${fracRun}%.0f%% on mutations). ${nDiff}%d + ${nDiffT - nDiff}%d changes committed from ${nParts}%d parts.${serializationString}%s" - ) - } - } - } - -} - -/** NewStyleCpgPassBase is the shared base between ForkJoinParallelCpgPass and ConcurrentWriterCpgPass, containing - * shared boilerplate. We don't want ConcurrentWriterCpgPass as a subclass of ForkJoinParallelCpgPass because that - * would make it hard to whether an instance is non-racy. - * - * Please don't subclass this directly. The only reason it's not sealed is that this would mess with our file - * hierarchy. - */ -abstract class NewStyleCpgPassBase[T <: AnyRef] extends CpgPassBase { +abstract class ForkJoinParallelCpgPass[T <: AnyRef](cpg: Cpg, @nowarn outName: String = "") extends CpgPassBase { type DiffGraphBuilder = io.shiftleft.codepropertygraph.generated.DiffGraphBuilder // generate Array of parts that can be processed in parallel def generateParts(): Array[? <: AnyRef] @@ -162,15 +104,53 @@ abstract class NewStyleCpgPassBase[T <: AnyRef] extends CpgPassBase { finish() } } -} -object CpgPassBase { - private val baseLogger: Logger = LoggerFactory.getLogger(classOf[CpgPassBase]) + override def createApplySerializeAndStore(serializedCpg: SerializedCpg, prefix: String = ""): Unit = { + baseLogger.info(s"Start of pass: $name") + val nanosStart = System.nanoTime() + var nParts = 0 + var nanosBuilt = -1L + var nDiff = -1 + var nDiffT = -1 + try { + val diffGraph = Cpg.newDiffGraphBuilder + nParts = runWithBuilder(diffGraph) + nanosBuilt = System.nanoTime() + nDiff = diffGraph.size + + // TODO how about `nDiffT` which seems to count the number of modifications.. +// nDiffT = overflowdb.BatchedUpdate +// .applyDiff(cpg.graph, diffGraph, null) +// .transitiveModifications() + + flatgraph.DiffGraphApplier.applyDiff(cpg.graph, diffGraph) + } catch { + case exc: Exception => + baseLogger.error(s"Pass ${name} failed", exc) + throw exc + } finally { + try { + finish() + } finally { + // the nested finally is somewhat ugly -- but we promised to clean up with finish(), we want to include finish() + // in the reported timings, and we must have our final log message if finish() throws + val nanosStop = System.nanoTime() + val fracRun = if (nanosBuilt == -1) 0.0 else (nanosStop - nanosBuilt) * 100.0 / (nanosStop - nanosStart + 1) + val serializationString = if (serializedCpg != null && !serializedCpg.isEmpty) { + " Diff serialized and stored." + } else "" + baseLogger.info( + f"Pass $name completed in ${(nanosStop - nanosStart) * 1e-6}%.0f ms (${fracRun}%.0f%% on mutations). ${nDiff}%d + ${nDiffT - nDiff}%d changes committed from ${nParts}%d parts.${serializationString}%s" + ) + } + } + } + } trait CpgPassBase { - protected def baseLogger: Logger = CpgPassBase.baseLogger + protected def baseLogger: Logger = LoggerFactory.getLogger(getClass) def createAndApply(): Unit @@ -192,11 +172,11 @@ trait CpgPassBase { def runWithBuilderLogged(builder: DiffGraphBuilder): Int = { baseLogger.info(s"Start of pass: $name") val nanoStart = System.nanoTime() - val size0 = builder.size() + val size0 = builder.size Try(runWithBuilder(builder)) match { case Success(nParts) => baseLogger.info( - f"Pass ${name} completed in ${(System.nanoTime() - nanoStart) * 1e-6}%.0f ms. ${builder.size() - size0}%d changes generated from ${nParts}%d parts." + f"Pass ${name} completed in ${(System.nanoTime() - nanoStart) * 1e-6}%.0f ms. ${builder.size - size0}%d changes generated from ${nParts}%d parts." ) nParts case Failure(exception) => diff --git a/codepropertygraph/src/main/scala/io/shiftleft/passes/KeyPool.scala b/codepropertygraph/src/main/scala/io/shiftleft/passes/KeyPool.scala deleted file mode 100644 index c9cd4bfe7..000000000 --- a/codepropertygraph/src/main/scala/io/shiftleft/passes/KeyPool.scala +++ /dev/null @@ -1,80 +0,0 @@ -package io.shiftleft.passes - -import java.util.concurrent.atomic.{AtomicInteger, AtomicLong} - -/** A pool of long integers that serve as node ids. Using the method `next`, the pool provides the next id in a - * thread-safe manner. - */ -trait KeyPool extends overflowdb.BatchedUpdate.KeyPool {} - -/** A key pool that returns the integers of the interval [first, last] in a thread-safe manner. - */ -class IntervalKeyPool(val first: Long, val last: Long) extends KeyPool { - - /** Get next number in interval or raise if number is larger than `last` - */ - def next: Long = { - if (!valid) { - throw new IllegalStateException("Call to `next` on invalidated IntervalKeyPool.") - } - val n = cur.incrementAndGet() - if (n > last) { - throw new RuntimeException("Pool exhausted") - } else { - n - } - } - - /** Split key pool into `numberOfPartitions` partitions of mostly equal size. Invalidates the current pool to ensure - * that the user does not continue to use both the original pool and pools derived from it via `split`. - */ - def split(numberOfPartitions: Int): Iterator[IntervalKeyPool] = { - valid = false - if (numberOfPartitions == 0) { - Iterator() - } else { - val curFirst = cur.get() - val k = (last - curFirst) / numberOfPartitions - (1 to numberOfPartitions).map { i => - val poolFirst = curFirst + (i - 1) * k - new IntervalKeyPool(poolFirst, poolFirst + k - 1) - }.iterator - } - } - - private val cur: AtomicLong = new AtomicLong(first - 1) - private var valid: Boolean = true -} - -/** A key pool that returns elements of `seq` in order in a thread-safe manner. - */ -class SequenceKeyPool(seq: Seq[Long]) extends KeyPool { - - val seqLen: Int = seq.size - var cur = new AtomicInteger(-1) - - override def next: Long = { - val i = cur.incrementAndGet() - if (i >= seqLen) { - throw new RuntimeException("Pool exhausted") - } else { - seq(i) - } - } -} - -object KeyPoolCreator { - - /** Divide the keyspace into n intervals and return a list of corresponding key pools. - */ - def obtain(n: Long, minValue: Long = 0, maxValue: Long = Long.MaxValue): List[IntervalKeyPool] = { - val nIntervals = Math.max(n, 1) - val intervalLen: Long = (maxValue - minValue) / nIntervals - List.range(0L, nIntervals).map { i => - val first = i * intervalLen + minValue - val last = first + intervalLen - 1 - new IntervalKeyPool(first, last) - } - } - -} diff --git a/codepropertygraph/src/main/scala/io/shiftleft/passes/ParallelCpgPass.scala b/codepropertygraph/src/main/scala/io/shiftleft/passes/ParallelCpgPass.scala deleted file mode 100644 index 7551ff2f9..000000000 --- a/codepropertygraph/src/main/scala/io/shiftleft/passes/ParallelCpgPass.scala +++ /dev/null @@ -1,162 +0,0 @@ -package io.shiftleft.passes -import io.shiftleft.SerializedCpg -import io.shiftleft.codepropertygraph.generated.Cpg -import io.shiftleft.utils.ExecutionContextProvider -import org.slf4j.MDC - -import java.util.concurrent.LinkedBlockingQueue -import scala.annotation.nowarn -import scala.collection.mutable -import scala.concurrent.duration.Duration -import scala.concurrent.{Await, ExecutionContext, Future} - -/* ConcurrentWriterCpgPass is a possible replacement for ParallelCpgPass and NewStylePass. - * - * Instead of returning an Iterator, generateParts() returns an Array. This means that the entire collection - * of parts must live on the heap at the same time; on the other hand, there are no possible issues with iterator invalidation, - * e.g. when running over all METHOD nodes and deleting some of them. - * - * Changes are applied sequentially, in the same order as the output of `runOnParts`, as opposed to `ParallelCpgPass`, - * where the ordering of change application is non-deterministic. For this reason, ConcurrentWriterCpgPass only accepts a single KeyPool. - * - * However, as opposed to NewStylePass, changes are not buffered and applied in one go; instead, they are applied as the respective - * `runOnPart` finishes, concurrently with other `runOnPart` invocations. - * - * Compared to NewStylePass, this avoids excessive peak memory consumption. On the other hand, `runOnPart` sees the CPG - * in an intermediate state: No promises are made about which previous changes are already applied; and changes are - * applied concurrently, such that all reads from the graph are potential race conditions. Furthermore, this variant has - * higher constant overhead per part than NewStylePass, i.e. is better suited to passes that create few large diffs. - * - * - * Initialization and cleanup of external resources or large datastructures can be done in the `init()` and `finish()` - * methods. This may be better than using the constructor or GC, because e.g. SCPG chains of passes construct - * passes eagerly, and releases them only when the entire chain has run. - * */ -object ConcurrentWriterCpgPass { - private val writerQueueCapacity = 4 - private val producerQueueCapacity = 2 + 4 * Runtime.getRuntime().availableProcessors() -} -abstract class ConcurrentWriterCpgPass[T <: AnyRef]( - cpg: Cpg, - @nowarn outName: String = "", - keyPool: Option[KeyPool] = None -) extends NewStyleCpgPassBase[T] { - - @volatile var nDiffT = -1 - - /** WARNING: runOnPart is executed in parallel to committing of graph modifications. The upshot is that it is unsafe - * to read ANY data from cpg, on pain of bad race conditions - * - * Only use ConcurrentWriterCpgPass if you are _very_ sure that you avoid races. - * - * E.g. adding a CFG edge to node X races with reading an AST edge of node X. - */ - override def createApplySerializeAndStore(serializedCpg: SerializedCpg, prefix: String = ""): Unit = { - import ConcurrentWriterCpgPass.producerQueueCapacity - baseLogger.info(s"Start of enhancement: $name") - val nanosStart = System.nanoTime() - var nParts = 0 - var nDiff = 0 - nDiffT = -1 - init() - val parts = generateParts() - nParts = parts.size - val partIter = parts.iterator - val completionQueue = mutable.ArrayDeque[Future[overflowdb.BatchedUpdate.DiffGraph]]() - val writer = new Writer(MDC.getCopyOfContextMap()) - val writerThread = new Thread(writer) - writerThread.setName("Writer") - writerThread.start() - implicit val ec: ExecutionContext = ExecutionContextProvider.getExecutionContext - try { - try { - // The idea is that we have a ringbuffer completionQueue that contains the workunits that are currently in-flight. - // We add futures to the end of the ringbuffer, and take futures from the front. - // then we await the future from the front, and add it to the writer-queue. - // the end result is that we get deterministic output (esp. deterministic order of changes), while having up to one - // writer-thread and up to producerQueueCapacity many threads in-flight. - // as opposed to ParallelCpgPass, there is no race between diffgraph-generators to enqueue into the writer -- everything - // is nice and ordered. Downside is that a very slow part may gum up the works (i.e. the completionQueue fills up and threads go idle) - var done = false - while (!done && writer.raisedException == null) { - if (writer.raisedException != null) - throw writer.raisedException // will be wrapped with good stacktrace in the finally block - - if (completionQueue.size < producerQueueCapacity && partIter.hasNext) { - val next = partIter.next() - // todo: Verify that we get FIFO scheduling; otherwise, do something about it. - // if this e.g. used LIFO with 4 cores and 18 size of ringbuffer, then 3 cores may idle while we block on the front item. - completionQueue.append(Future.apply { - val builder = Cpg.newDiffGraphBuilder - runOnPart(builder, next.asInstanceOf[T]) - builder.build() - }) - } else if (completionQueue.nonEmpty) { - val future = completionQueue.removeHead() - val res = Await.result(future, Duration.Inf) - nDiff += res.size - writer.queue.put(Some(res)) - } else { - done = true - } - } - } finally { - try { - // if the writer died on us, then the queue might be full and we could deadlock - if (writer.raisedException == null) writer.queue.put(None) - writerThread.join() - // we need to reraise exceptions - if (writer.raisedException != null) - throw new RuntimeException("Failure in diffgraph application", writer.raisedException) - - } finally { finish() } - } - } finally { - // the nested finally is somewhat ugly -- but we promised to clean up with finish(), we want to include finish() - // in the reported timings, and we must have our final log message if finish() throws - - val nanosStop = System.nanoTime() - - baseLogger.info( - f"Enhancement $name completed in ${(nanosStop - nanosStart) * 1e-6}%.0f ms. ${nDiff}%d + ${nDiffT - nDiff}%d changes committed from ${nParts}%d parts." - ) - } - } - - private class Writer(mdc: java.util.Map[String, String]) extends Runnable { - - val queue = - new LinkedBlockingQueue[Option[overflowdb.BatchedUpdate.DiffGraph]](ConcurrentWriterCpgPass.writerQueueCapacity) - - @volatile var raisedException: Exception = null - - override def run(): Unit = { - try { - nDiffT = 0 - // logback chokes on null context maps - if (mdc != null) MDC.setContextMap(mdc) - var terminate = false - var index: Int = 0 - while (!terminate) { - queue.take() match { - case None => - baseLogger.debug("Shutting down WriterThread") - terminate = true - case Some(diffGraph) => - nDiffT += overflowdb.BatchedUpdate - .applyDiff(cpg.graph, diffGraph, keyPool.getOrElse(null), null) - .transitiveModifications() - index += 1 - } - } - } catch { - case exception: InterruptedException => baseLogger.warn("Interrupted WriterThread", exception) - case exc: Exception => - raisedException = exc - queue.clear() - throw exc - } - } - } - -} diff --git a/codepropertygraph/src/main/scala/io/shiftleft/utils/IOUtils.scala b/codepropertygraph/src/main/scala/io/shiftleft/utils/IOUtils.scala index f23f84835..01edcd22f 100644 --- a/codepropertygraph/src/main/scala/io/shiftleft/utils/IOUtils.scala +++ b/codepropertygraph/src/main/scala/io/shiftleft/utils/IOUtils.scala @@ -22,9 +22,8 @@ object IOUtils { * of this class are not safe for use by multiple concurrent threads.' (copied from: * [[java.nio.charset.CharsetDecoder]]) * - * As we are using it in a [[io.shiftleft.passes.ForkJoinParallelCpgPass]] or - * [[io.shiftleft.passes.ConcurrentWriterCpgPass]] a it needs to be thread-safe. Hence, we make sure to create a new - * instance everytime. + * As we are using it in a [[io.shiftleft.passes.ForkJoinParallelCpgPass]] it needs to be thread-safe. Hence, we make + * sure to create a new instance everytime. */ private def createDecoder(): CharsetDecoder = Codec.UTF8.decoder diff --git a/codepropertygraph/src/test/resources/cpg.fg b/codepropertygraph/src/test/resources/cpg.fg new file mode 100644 index 0000000000000000000000000000000000000000..7e61fd6d2c2014fb91c90d9aeb9c122a01860882 GIT binary patch literal 38590 zcmcIteT-aH6@S|g+O-81s0xC1I|8Xvb>8>9stMDb>2~Ps%sM-ZplOGePH{u+*4;%# z#B4PPLDKk#Sp2{Uio{3)C>0cfAE?o!iD;CBpr{bUU?CMq{D=ncc{A_rn|bHlch9`H zFL~M7dH3FTfA@UebI-lAz1kcdZ%pp^*6TI@+I;L?{~KMuN7IJHzi`9le>rlv`%mYO zwmEn}mWJwY68DPkU%#0R*J#?sLBm7Z{E@Z(*Q3AJw9kujeubeGE4!aoXrrHNKi4U; zp{;47(AElVadCKjm0vG^!I1Xj@I`C1oOllZu7MA$w2S_|SRDE3cjr2V$)1X`T6X}n z5%Jk?nk)_NpCWGP3;dOr76syMuPyeCE_?yk8RC|=2XEgbZg@NV^-H7eLCG~KONi>) zxruGa`vGmN585C{6-q&G;R52xM*&L3N=tZa5h`pJ9pC?E({%f5fEZY`V!mQ5R`aJ-y1gtZ$wLohfBlnmslZs5VS#(66Nwh z#sLA1QN2{atbSVr;YR@WYp)GyMi(|!PK@j-(XZ9whEavjop#%rHVQqCYTW=HNOj1Z zzJ8`k0`=F1ZQ?c{pl+v)4yC2oM4v$iK)Z0mXZg6k*1hDVhDAHCOKb~93T}B@>qH5- z<)vV>;jQvgFfMXE8c2~^DQHjr##2QJxaFmK#y;qRsMV>qYEwjG4Dj^yprL^2pxbcy zoq`5o^g@13SqiMb+y=uN;eu|2UFhi(AeKKpQ(8Bq9y(efpP*0WEz5g#mb6zJq)+87 zhZY0vv;3*NClF+I8YnKJt}Va>|>GIlAe)cl%%Z=NPTdJ(l5aX z;{g}+Bxy`Q8^G1UMfU;P3ali2mX8D26tL5wZISdAMink-b!mjVS z5?TvX(l?2cerxDcIiKgGb;A*hwLBzOn4wb=s|bY4M4eKknHEg{R)K117Mz}$p-mVm zg*M~NMzcgfUib@l5=#In1GgY_%cA}r&sly}he&x~c?%DsuRQvWX zJ@SQP554a{Pkz#G^NK%dKVPf;^fdE=(W{TIeE#a!?*Gl1&m6t_Ghcc9FF%|a`PrLu zkNxe|6IVR=!fA`zaP#YHk39R*xnnOKy8R~)-~Ht^XKlK9_~@~l9x4Ch<|qHTd-$8h z2Oj#?Eoa&5?%eRJUp@5KebXa1dhdMjenytzV)7`KU&eL-5*MGb2YtG?KFCAI?>8n@2{fn!=^1sKAo%5b8&z^JhEfe>@efPVr+CI7hWJHH#cF89&)-2BY!!Q9sT zmfXSFeeL<&)(>9if2!`;+dh!nnk&|7^=7eIsn>F%NVkkAy{~+p6`kosk+=VvVt4H9ES z4oMzPv~S74Dif3SMwD>LRW6yHm~2&x+saY?O75Uvtyyf0m!q#suD7#%dF#?*b-LV| zELL~}A6GKTV=n})$O8s7*s5@%Jh6?*Mnc~eTcu*N$l_d4Ye&5lsgkTZI#tAQcXh1L zbdmbW3=*qfpXQOg+d!kdJ@VdUP6?|Ctq|?80^)j!FV;0-fu<&lV>|^E)@t?ZbTd&4 zHOhU+lG(Xgj2fEcF%;!nwR&j)VQZErCac9}xmBu9u*lZDd@?$O$-@8@T0)Ubvu%!F zvs5073V1Si__ac5U}I}>`FOgvvsQn9l!Fnv?b?!S@4E`|&6eypJP$lJ_;yNkedgfo zH4DCH_mPEbb6c;=EnIu3Ej+rJgA3y6{KB5Oh5G*e^KDT^cedoNoc-{jx%T{gdtbGE z@T!Fm<+d8W{Kvo7jq8Og*q*uSLwjfEg#Q<|JlEde-?HhVE!!XfNXw3B`Ow_#q4pef z8FMUg%$;%XA{O0FMC=H8ioZV##0A0CNXsb@cOAkgjf+#DW;qnj7tn6`B8YT1uTEm! z6ayY_!Xyxzz&!~xPC~3gVclUdwZTDLK)Ko?5L<;r#9bG@hr~--kHOc5xonJW*jaNn zhMLRRhKnfg-f)oWw{FLP6VTndvvx6rLFw3QQ86~j*nyt*6x{<_P~zm zF+s#c`)t|EMQY1ImG|JJrjc`XnN>guF6){if7^M%aB+IeT9)%S37YMR**dDgWnEJR z4K7Hgpo0iX4}Wv1Y}=@b&H}K58Z24M2~@@a$5gk9F0%`$HzwXyh_mV;gj zCH0VbAT{O~s2a<{SUVOf(kWCp0i4U<4$txC%qAV&OsBxy2_%WRR1dAWkX;=WX(NN# zm5VE}6tk;j$SMNu;=Y(6G!W*Cai&);?swaSo98A^C{f5gmP*AZDcGnEGX(9^LM{-q zn87{oZiF<9WpyIEskq$ZYg$De?%`^3a2=kEo=trZ4`s>vsEXcZyM1yC)53`3l=_z}z=FLJ`uuZ;qBo}K6cHjD* z5^$5}VDW(CjuA(;cZDlLGty zDSj1;T&g(7L~e-^I-5v8V4@=g(l${#O4O4&!0PlwtyP=u=65A?tnHu^9*SdqHLOTS zyMX%BRMWzdQH5Ep)XE%?P9A4gLi=z)ItIFSlL5$jqvYr4CDYKc(5Znm)~85AhnQ;9 zvrSbR`o09uOgbJ;#%!e0)zeC4cP%{_+7#N=wOCT=&jEthCTLgJL8X$?u7#LT5-62* zt6Sht>JV&%ZY^+q-hO^1;c+!<0e5gEnnBq@7Vw3Z)HEzrL`rFMY)1=(Q^`;kY+Usa znw4TyikL1clBscW?MH!7JWQ0Bv*Q7nG_EVbuLI3PJTnuuLr~M>Mwt{vQ+X2N4G>OJ z*E}8`P)g0L%6@>6*E5-9A#7^o@r=sU;8@cuBTqOwOgY5))5vq9M2h^$_jHUr9u?x+ z4g#p2PpNZya_9mH3EZ8fhpq8OeR@)CTv9P5hK^?u(kzCWOA0b!F$vevig`Uts05gP z$f_F1(9^7|g-PucM%-7|v%z?2xiQt*a+x?G5fNQ^5c+(iKlikRSgQ22%9VG87Wj{ZDZnd4<H%REE6EXwKfss$p)jk zo+VZZm>@B3wIS(b+2nG735jiGA(#|BowR6!r0{-&qO4_Yd^w9rN(vtl8Bpg}8Xs4~ z5=$XWpcv0Ou-=f0XDO7O^!{>5oR*?AlXM_m59tZ%fi2DGBEfTlm=3<@P<@sa9(vKw ztRYM|=c5Tngd}_FL}ojaoD|g59uP%QuDv8yewZ*Zu60v;KomxGJK`>z*W;%3dX_d| z^mFR~zPgKhJ=|#}N=7$jNQ(xlY(rc;cbE&05XOR@a@|gbkZVN>1MKMz7$~A*F-jH) z{YonD{`d!tldE+K#D)@PxEV$1r3@0#DAo0jN1VWr0X`3Q-Ed5>Iu!@-UOn7<%}6pm z?)Ke&tYWP$JXe@0$IRowSEeU` z>sXO5i%X@lqb`HU2%wvJJpUsjlumk-om0K~nN^%800(yo|Fy-+>@o8$9#SU;o=VW7 z$m*fa0VCh8vzm^q{6r9|=1iD6Y|o49MsB(m0aj<9n1QGxoV==@kf{@fGaGX1_;fl8 za*oxRo{&lG)}Txa#kq)&U>Zc4C~ck@l#JkPi8Cpcbg$vC)=gMg3#d+_h7rjXB}EjL zQ&i)YrkP((*))Mi5y@B2rle7FHXN8HewIl_D#*lR&{+s*WvW%aOq{%1E5a#y$?k&b z;Y(pmO|*A*_JDX_&k1!Vwd;UrJDyWO5|cSmF)bo*i|7eQFfG{QzC0`&L8+{QEMD>` z2Pv_tkcA3TRzEhL1Cx1$ z2U%p~D0_s?7i$`*o{H~4?kXw?P_Db-;VYcf^n^3>@o-OuYMKnbh_mLqKM~MR*8yD( zD^KjnBs?JsG|tZAFk4)Tvm-Op5?OgXG*3~2!i%UZE6Tc-}%rML7jszZblHfve@ zBY*lAcak|-T_F=k1aZlVDP&=IPzh0|Dd|=4Q_w8Iz|7vD@`?h**Hq|0K|euBoXX0V zI7psyA9%a*EsGl%U;t!#!{RJ{T<_9crA$W~_aHK$Bi9?Wi9l}_An{{=G61QrbZqvT zuQClCd>L0AUN@Pe-wk4AwO9@@d!ZdO6d>XDIe3ncMA-Y~kpQV|AszfE8Lri!@UeGk zD&q4Uc=#PQUXqgK;u||Ng6ra&7MSF0b$?&3pK&93N<1ERiS^%XrYvpD83RsG#UoDAAh;#IQYRxPYa&XVSDz6{J;D>oMoxJe$-{RGW`z{rxGGWd z9Oh-FFNxns624wsUvRNvi*X{|1!dcAf~| z6TP665bi74I$^c4QMt-4y{&_sq~}*;dTr~(*-sJ`B+hW|jMt<{-wS?1HVn+5FTpce tU|R)hpKbVo#ie&_yLJH%iwt(ttQ7VV%k{3m{{O)Z^xOad literal 0 HcmV?d00001 diff --git a/codepropertygraph/src/test/resources/cpg.odb b/codepropertygraph/src/test/resources/cpg.odb new file mode 100644 index 0000000000000000000000000000000000000000..f78b226f0f3360dd596468b33b228a5d22479e47 GIT binary patch literal 20480 zcmeI4d30RGmH%(OrB`=L*1lO?uhm+ueY32^s@Lk)Vrwx{%S&vd*OFScuq?@1Yy$zx zHj5#U2_nE@`H>bFjDrIvVM%_;KpO~2ATyJNkT5{zwSk;uAYsffAshMq?rTZ5F=R5! zNoM{~pHtnhU)OtGeXHu$y`OJM?e&$#gJTmzyX&hKUi(Hb3)NSYmzNh0?V26mjUNw< zg@WVt6~#kSq2NqtxW1xpsH&!VxGuD|u6Sf(YEN(mKin6ZnjW1P$Lb?vp_!pwp{e?{ z!&MbS)zvmwek@yH*#gTJShm2j1(q$aY=LD9EL&jN0?QUyw!pFlmM!o?gUs{UOXN;FoW+WgF8dh^>xKl6B9G_)wo5VysEakI#@h2x(BxmtQk7H z3812Qa&)|9Vs?C{zMTFA9>$h}E8#mt64H|GwVfT_UbT1Yz$SlhUq?@O-+;e6K%Hsj z0~5F@VPtG#|L|bx^vuK*w!XAyc(9M#h&@%etV!-tw+wXn>?wVLo?f-hKhWCK+oc8~ zo1ONgzCdqBciTXqXP~1y5H4AnX-=|} zki)_pIoj>t+#=4ASGvn~P3*}ImF<}<+c-6GNoZ(hx@>ya=*Y}iXk@1Bl8MmNcxeSU zr<4qhjh0PM4VBG=rf15gLemqoQ$wL?&FLDN7!H+*DBT5U&eeu#(0>f-b~SzbtZ+ zNMyR6)X6%05guXR6iSEcb>UHXfG4oSkz^-H6eMoq*vbQ@r0bJuZCtn7BP9iOIW1Pjk+mzhlXL)@0k;H&Ieb`r9bUkhsYR_YO~ z+`&9xrXF&sHJAZmdK;EMu<_Ia-r0=>X|IKU)xT-V5RjSvg35G z@?D+^K+Ew=x!7kpy-+-Pw4Wqgcbx-pioKGNu%<* z?BsDgm*)uBBQ!^loutR99J#k29@V9vvQx?k#IwCo7y);VXz}7)S3CRtIquKUi_x?N zXs3(7fhC1rBz=LzWnM#jgP(%^hwj#;tfJKKhG)m_8vY(pbI2E$Ei#AE)D|4^S%Q-Hfe_%gL%%3ACThzWl z>%>&w3~q?p6B?g!KS*9#eL5liG)X&@O7~&!JnXaziBbYj)f&}F&kW3rI>7>Hz*o*W@ zIDQ(QX0=I0bL8>HiOJAZ5dGS^(%|&;=+1E#Wj(Mucb}y%pawcx27Dd4j|+j8cBNEz zl$nKMA(^M}L`_z%g#`lE=?`;z8h(T<59Sts-Vzc!ehGdOUwAgjDPQJaBP}w z)gABXD@y6xLK;t}Z!?;Hq;dc$ zDEwBS!UtxToGxd`nR1rAO3s#DGL;qCE$7G{Iakh;^W_4UTqqaGtL0+3L@t%fC13Ub-f|_!G@D%xmfEAkm#hkzOf5hZHs@7GA!BYxha{7+6f90k`gy1d57~|yb06Jq zHqVJXE6ipWs*~(#!^3paYOqEV8^9LLYY<$VDh*6l8eo-b16R-%g$6vZViRpjL)2!2 zY(<4^S}S~p(BLmldEr?25A+e7WRJj8QQ_@`(edHYDO|x?M?+)7>JTnZ(`-O@d{s}W zQ$7?F?xv^k_IE@+OG*`8{-&3JgN5if?|tYHp&wFFa*`5vnfgNHDV)S#WnX7iXp1VML!w8xMg*;2ZC4^;B(?TJuinOfY^>meHrrDZVbHVDcE9V}~Me&%LnTyb3 z&2<{S!Yx$c7Um}TC7K(XS7|H?y3nSRBvwdPm1>2-?aZUDq3bog%D$;A>AGYbq{iav zIhlQSam5w9adCy8URS>q8>o-xmd~e}Yv$lt3=_VnlL8uKE^P~x>-k%hb!-bY>5eTl zjcp-YEA+fA!2@)wX4Y4HN=s+k$o5J-Z`;8+x}96}6+3tayO?aP((^73K0tREwYD3z z#LVj2L%BZyq8y3}pUd%*8ty(RdTZpX*($mrYX5Q6@=bW~)EUZ1EvJ&X8dvKpYtxRL zR#vldcNqo*y7RJ}4}s{3SBkFrF%I5Z8T|nOOMYVYU%0h@9G}t?(g#Yd+jTA$!Wrn))#E)p=?PJ^dRo$_@EC z7Mzh*VzwvxjrCJy!)%*f4fxx(+T&Y0{GC2pOy9xq%5Li2-rCXW*O;W{Lof;zFsKu^ zOUjmtrBW$TN|BPKN-0&!lnSNt?j9*!Dv)xeJjePC(rU>ql}WYjZBhxEuhuapW(ig1 zMS~7;lkE2msC_$iu$$0s9f7R_JkHg(BWAmy4vgKm1pK|-YNytzcDMCoR6f+%(QWZB zS_4gKr>fPr1H(bJ^WrW)%d!T$`~h{qrv_9SF9+IteD-*5whx@`Bzt0brC@Z1la7km zNg-;XCFTK~@%_Es+gU#BWRhty%A|vq4Lf>zeQ5W1bR&JVO28hcH&f=^*6VNG-rLg? z2=;Zfb*r?Q__wnx2;#-D02A#EHl17xBN`sv>RL)ix}*dtzEjGPYP`})DMRu|t5hjX zDoT+QsiMQ*D&XL3F2^BXIb2s4wu#lll|AvXS!{wedRRVO+6r7`td8 zJvh&K7?}pHwGS>i6U;h3$;aRlObq98&iz==y9n1OoYO}3P=ga6C-ouYwu?(P;OSaC zjdR<`YXtl@!%(%^mOs^vg_`2mk#R85JLax3L2DtY8 zH()^Gg)m^vT+*#{*fkiO4$YB=h9<^mrY6P=STaYB&0LC^MQ9AEz>qmOHnwvrIJt}F zh=$i;G_z-V+8_z+Jd&_9zb&-V`Vo+jASOyp+{@c|C#R&5*O7Woy^C-m_Z(cf^Bi1g zybvzz{TN)h@lV4AChPDGctlNFfD6wq!39~2!G-WQpn-iu<|GCfnm-9JH0#hyAH#&_ zF&#SDai!J(3?~&;w_RbC76Aiai}BZ0;pe5#6N57x{s?EdLao#@uYhx$;hID_(Ets+ zp5*hjqJ<+?;0@Hy{zk-1$3*WIOuUiCW0YHD$sEjNKW9IJEcdjG8Htc6uxhD^6mWrk zpZy(H`3$iJ+mS+i9l}ZxJ8?dVc;e5JhzVs22FNvZKOl+tmX>T57fA%Y9PE*=frYLx znKA8M&5P-0g-XN{A-G=~rvZ%hJ3(a6(ZlX!o+^?iQm7umlhxvoK_;$?Jfr^7$Q!~) zFk}q3j6#2qEGbw#Skka$X>!Y|oTm;AK_hJhn)5uSp|b`Fc^e*$ zO6%1UWnKEFB=du_qdG8ZpNzVEhEP3)Y zdE(IHn03kY|B41Id8R}_PQv%`C&+4~B)``R>CwoWkm%kTeiK%POGpz^k~fi(j6w<< zrOj`^tC%ZejRbcaB-7Kh>jyW$)s$@@kO zleA!#E|`mj76C9x7Ya#JPC2CIm>|vlcaY-V0lD5CI=Ku?>@KLM>8b-7s2TgIP-qsC zSuVEaG`SzA=p=%buPuO;zs1D;41$%rb@>cl*U8$wZ$qOy9j{2@okJt``ALJem=|da z-j?!9(c;DI3%WQZ+(uHgX>>)?YQ<2lQVhsm_91(@6q4wr>Q~sMIUj(eJ+EbHhc)XP zWCCNtM1c|nGq-p&`ZvCMY+N^K77pJ$T&I=dNP2^$7W(2NcNiGy0KEqkQf57@t-Vla6q4v&LbIHD@O_}%6xxO64PA#%!2|OAqy-_3TZUAAi?-(A zel*9;^l6X}?hif}?to(t?1xOgDe@5M>;y2acixUG@WX$eB4u7kk(`8+{}45j<$4^r z4OCoVxavld#+${ogDji{sXAC87oUiwm=*(aCCmdw?B{Y}Epbo=NYbR#*yJoQhn?gk zF__a~WKOZN#GJ1F_n6cF`9$V)++a?oVquXv8N*q-NoXWl^cwA9J|&uwL4_ZJEThm| z`g0;=vWKt(vNV&l*GYC~25W)PFB=7|&K_pBMoASODdkxIUC5d*M~2cCEXPYSv^JPj zC}bEVJcFJD3!Pzi>ad4gnWgPHbrj~+EQB_DmH^go#reIadb%E`kchr!HLe?(N|-+h zd-(+H)!vrp_ZoOhH(dsqVJvhFWYA*=?*fxf4YGPWu6Mrxn_G?wx4X^A zM>k+O1FP{hoB7at&c8l?BV^-8+5FR@kjhiTS3)Yi5)}7Q-Lzl$J)uJt&%{S=Mh(G% z<*7G>s!zme;i#huahi<&3)dN?kr@uGEyoYp^v76^if-O4555|?Ay^(+p`D4W01x{k zJ}bJo!hK6rFws75+TyQCCCx+|z-i_r<4RQC*Yas_upcS=j-JHMmKbA=SAPjy-ZRQ? zsCe~F;0o^m7u`Ys7Q{nm!b4HhgwW+K^ZxPFI2`r9qwZ$YF zx*MqbpUHuo!C&|%;n;mewA=d@u3}EQ3G7ivSj#4+V)vXeYw*W(DtR~#W?P;B&uQ^# z@Pzkzf8sF%3C^euWWOhBZ2%{mjEW8JlQ{bNTkiG$Lj5%4s1FW5itjInoOvH)hey1E z=cmympLi3=tx)|Sde{Q}JA)(r0GR24;pC6dKf#yTnoFd_yvpbI3(e*fc8z@0kVlf3 zl^ic>En?33Cr7T4kH;jD)^Fc8IQ-!?ry-ryj=YKE%3y{$C2(AwI>!usUl@KW#tcI{ zpfLAhWQK%LdW&d4L*+Z9IbZvs`W;>PAvWlT-Xpr{2kHjV%*8}1q2CaV8H3C0#W99h zN<*y1V2E_YRmMq^YaMUqE!@Z3c?a*}7x7-+#{;~dZ{nL>7=hMtmACQ@yoWEuC<^y* z3tz(-_w)6HcT$q$v=_fF2de0eDN-&fMG1TrCjBGlk<5b9KSwgX zM+<&Gf5%5i<^*$zq>fap--ntUi%^Z6`!wAJh&FdAH?my@+T2Ccbn`A!$WhmQ)AkQS zp78Jr*M;(eTrW4sjdGK`PHskAqq=0T+#>sAzuYRf$?bB7yk6cQcgkIIx7;IdlrM70 zy>g!%ko)CL@@6L)tvH8d7f6(ALGb)!USh}>l7aQjVe@&vrwFX!ber*eaIhdOSxYTu zN{Y}>yAZ?fUUI!-99irho}r;085yT90|MDgq?i;yM>T}9yR>u-LEFnvN_U&rBAYdM z3;kUbbC?_BO|`s?m-7l<$*VZ2GuP;X6KYYS3K+b$fnFN5Ped)-;K5VZ6ERVjJ|!A? zpSqWjL}d?-+uI0|+oC-O|X)_sjs}*ib;~edFn}>@*W;xY{hPlLNP3) zMpYXFpMZ0AI8P#(cM%o3$Rhb+?rhEh^GMAPji8QGbY+qs!LFau6+Y&l39qaayu zZi)hzc@52!ZX-=;*G3&ZI+Q7h@07Zvk85)%4h}kCe!yU0xuMkcm~f_L{RA+V(&WTT8#Ui67HR>h}z1~sb$eiX%>j; zT0tcjVU~6g>!t~yhRyC1n07alCg#LcF#ye4K)nVptJEC<5VQbPh69-8Vqr}S7wD#d zNLl7#b{u>CbK%}oA3_tZ@=f%+q(hBne<(C@2|Z0cwHW?qK9_zkm~X}#I?3mVH|qMb z5k`LbTo~yS>1lmMrgG9|I3qv$9CSk{L$}fh_~{M!dIPkuKa#LdlMkLG7$}~=bN@to zTY{UT?i0{QH$opE#$#jC4j_ zPhLBDO2l4DSn59&Fq}=)|i!nNvAPXm>Qe7~g*m%YLHvM6>aoYMgli%kykld!Ali@OfdQ?}(q| zy=H!Nar;BNZe7?cfJ$n7z6R#pj3YnznfU(w&l$;RZZ)iK{R231Uj!$1rIS6Ur9%n^ z!`KJji+n$GrJ}V8*hU;?8}qIMGO|}YNxZ$9?{wxJy6A&u>U)bEA>KaC$Nr55=ug`| z&~2~LtcVXg`Fd!fzR-G_N_`N}e0t9H%m+T|dy|BSw?B3QEqXn)Q{OXZu+FBXIvv#a z1}P=p%?oupu}&BD9qJ~N$m_tJT(TeuagaCsJ)XeVW8b5mbCS?x(hiXd0h_j<2=%nu zlejhYPYXlVbHWgB__mh>PTNace zT%rD5r6^wW^>lS~qeOI8GTO(6X@bzUHOLaReAAL{)U3o`pc`#4bfbP)(2dr8vT`JO zrFug>GUTJRhJX~)j~Y-xYC2Ctx;@nN%tJ@vZn7%^~xI!CyaC|J; ze7M)IwzM1D(0u;ZnEYg3(x2!mGpc?=eLelX^b*O?>bA2MnP`#c00eX+i*dq6*G%1v%d@fX_q!!er)<`O9Q;kydf<9HZq)-VGPBb7D>9Q0j zT$QXX!C!mgIsK*{_Zy@pe{6?}u|>k3tqUnhA9uUc_9R_!C7j(jvJLU)c4Hw%d5)A0 z=@7!-7q=p&yl+FHd^-j}D6^shwgW2^1({6!w&BorV@rcmCOB_J!6^&eN^sd189DlNmVjNacCj|nfXt4IQ5^xAR?dF)|g1X+G;AGg4_Uurl z$tl%IF?kOS6FP8CymV+umj9CC2UXl8RNqRp!w%ffxuEXEc6U;TWo&d`s0;UYmTOjN zqp_!x+UYS;Uqxlxc^f`)Y))#cNL?`-5pcIBh4c${d(Mu}P8 + cpg.graph.nodes("METHOD").size shouldBe 1 } + } - "throw an appropriate exception if the provided filename that refers to a non-existing file" in { - an[Exception] should be thrownBy CpgLoader.load("invalid/path/cpg.bin.zip") + "allow loading of CPG in overflowdb format" in { + val odbCpg = ProjectRoot.relativise("codepropertygraph/src/test/resources/cpg.odb") + Using.resource(CpgLoader.load(odbCpg)) { cpg => + cpg.graph.nodes("METHOD").size shouldBe 7 } + } - /** By default, the CPG returned by the CpgLoader will NOT be backed by overflowdb - * - limiting usage to graphs that fit into RAM. Overflowdb can be enabled by passing a CpgLoaderConfig as - * follows. - */ - "allow disabling the overflowdb backend" in { - val config = new CpgLoaderConfig(overflowDbConfig = new Config()) - val cpg = CpgLoader.load(zipFile.pathAsString, config) - cpg.graph.nodes.hasNext shouldBe true + "allow loading of CPG in flatgraph format" in { + val flatgraphCpg = ProjectRoot.relativise("codepropertygraph/src/test/resources/cpg.fg") + Using.resource(CpgLoader.load(flatgraphCpg)) { cpg => + // the test graph was created by c2cpg for https://github.com/joernio/joern/blob/master/tests/code/c/test.c + cpg.graph.nodes("METHOD").size shouldBe 4 } + } - /** By default, indexes will be created for the CPG in order to increase performance of traversals. The downside is - * that graph modifications become more expensive as indexes need to be updated on each modification. If a large - * number of updates is to be performed on the CPG after loading it, it may make sense to defer creation of indexes - * such that is is performed after modifications have been made. - */ - "allow late creation of indexes" in { - // Do not create indexes on load - val config = new CpgLoaderConfig(createIndexes = false) - val cpg = CpgLoader.load(zipFile.pathAsString, config) + "allow loading of CPG in flatgraph format and persist changes to separate file" in { + val flatgraphCpg = Paths.get(ProjectRoot.relativise("codepropertygraph/src/test/resources/cpg.fg")) + val persistTo = Files.createTempFile(getClass.getSimpleName, "persistToTest") - // ... execute lots of operations on the graph - cpg.graph.addNode("METHOD") - // ... + Using.resource(CpgLoader.load(flatgraphCpg, persistTo)) { cpg => + DiffGraphApplier.applyDiff(cpg.graph, Cpg.newDiffGraphBuilder.addNode(NewMethod())) + } + + Using.resource(CpgLoader.load(persistTo)) { cpg => + cpg.graph.nodes("METHOD").size shouldBe 5 + } - cpg.graph.indexManager.getIndexedNodeProperties.size shouldBe 0 - // Now create indexes - CpgLoader.createIndexes(cpg) - cpg.graph.indexManager.getIndexedNodeProperties.toArray shouldBe Array("FULL_NAME") + Using.resource(CpgLoader.load(flatgraphCpg)) { cpg => + // original cpg should be unchanged + cpg.graph.nodes("METHOD").size shouldBe 4 } + } + "throw an appropriate exception if the provided filename that refers to a non-existing file" in { + a[FileNotFoundException] should be thrownBy CpgLoader.load("invalid/path/cpg.bin.zip") } } diff --git a/codepropertygraph/src/test/scala/io/shiftleft/codepropertygraph/cpgloading/TestProtoCpg.scala b/codepropertygraph/src/test/scala/io/shiftleft/codepropertygraph/cpgloading/TestProtoCpg.scala index 7649f012e..9bb1c4fae 100644 --- a/codepropertygraph/src/test/scala/io/shiftleft/codepropertygraph/cpgloading/TestProtoCpg.scala +++ b/codepropertygraph/src/test/scala/io/shiftleft/codepropertygraph/cpgloading/TestProtoCpg.scala @@ -5,10 +5,11 @@ import io.shiftleft.proto.cpg.Cpg import io.shiftleft.proto.cpg.Cpg.CpgStruct import java.io.FileOutputStream +import java.nio.file.{Files, Path} object TestProtoCpg { - def createTestProtoCpg: File = { + def createTestProtoCpg: Path = { val outDir = better.files.File.newTemporaryDirectory("cpgloadertests") val outStream = new FileOutputStream((outDir / "1.proto").pathAsString) CpgStruct @@ -39,7 +40,7 @@ object TestProtoCpg { val zipFile = better.files.File.newTemporaryFile("cpgloadertests", ".bin.zip") outDir.zipTo(zipFile) outDir.delete() - zipFile + zipFile.path } } diff --git a/codepropertygraph/src/test/scala/io/shiftleft/passes/CpgPassNewTests.scala b/codepropertygraph/src/test/scala/io/shiftleft/passes/CpgPassNewTests.scala index ff3144d4c..ac7f1b468 100644 --- a/codepropertygraph/src/test/scala/io/shiftleft/passes/CpgPassNewTests.scala +++ b/codepropertygraph/src/test/scala/io/shiftleft/passes/CpgPassNewTests.scala @@ -1,21 +1,22 @@ package io.shiftleft.passes import better.files.File +import flatgraph.SchemaViolationException import io.shiftleft.SerializedCpg import io.shiftleft.codepropertygraph.generated.Cpg import io.shiftleft.codepropertygraph.generated.nodes.NewFile +import io.shiftleft.codepropertygraph.generated.language.* import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec import java.nio.file.Files -import scala.jdk.CollectionConverters._ class CpgPassNewTests extends AnyWordSpec with Matchers { private object Fixture { - def apply(keyPool: Option[KeyPool] = None)(f: (Cpg, CpgPassBase) => Unit): Unit = { + def apply(f: (Cpg, CpgPassBase) => Unit): Unit = { val cpg = Cpg.empty - class MyPass(cpg: Cpg) extends SimpleCpgPass(cpg, "MyPass", keyPool) { + class MyPass(cpg: Cpg) extends SimpleCpgPass(cpg, "MyPass") { override def run(builder: DiffGraphBuilder): Unit = { val builder2 = Cpg.newDiffGraphBuilder builder.addNode(NewFile().name("foo")) @@ -29,12 +30,12 @@ class CpgPassNewTests extends AnyWordSpec with Matchers { } "SimpleCpgPass" should { - "allow creating and applying result of pass" in Fixture() { (cpg, pass) => + "allow creating and applying result of pass" in Fixture { (cpg, pass) => pass.createAndApply() - cpg.graph.V().asScala.map(_.label).toSet shouldBe Set("FILE") + cpg.all.label.toSet shouldBe Set("FILE") } - "produce a serialized CPG file" in Fixture() { (_, pass) => + "produce a serialized CPG file" in Fixture { (_, pass) => File.usingTemporaryFile("pass", ".zip") { file => file.delete() val filename = file.path.toString @@ -46,11 +47,6 @@ class CpgPassNewTests extends AnyWordSpec with Matchers { } } - "take into account KeyPool for createAndApply" in Fixture(Some(new IntervalKeyPool(100, 120))) { (cpg, pass) => - pass.createAndApply() - cpg.graph.V.asScala.map(_.id()).toSet shouldBe Set(100, 101) - } - "fail for schema violations" in { val cpg = Cpg.empty val pass = new SimpleCpgPass(cpg, "pass1") { @@ -65,7 +61,7 @@ class CpgPassNewTests extends AnyWordSpec with Matchers { } // the above DiffGraph is not schema conform, applying it must throw an exception - intercept[Exception] { + intercept[SchemaViolationException] { pass.createAndApply() } } diff --git a/codepropertygraph/src/test/scala/io/shiftleft/passes/KeyPoolTests.scala b/codepropertygraph/src/test/scala/io/shiftleft/passes/KeyPoolTests.scala deleted file mode 100644 index fa63866a2..000000000 --- a/codepropertygraph/src/test/scala/io/shiftleft/passes/KeyPoolTests.scala +++ /dev/null @@ -1,74 +0,0 @@ -package io.shiftleft.passes - -import org.scalatest.matchers.should.Matchers -import org.scalatest.wordspec.AnyWordSpec - -class KeyPoolTests extends AnyWordSpec with Matchers { - - "IntervalKeyPool" should { - "return [first, ..., last] and then raise" in { - val keyPool = new IntervalKeyPool(10, 19) - List.range(0, 10).map(_ => keyPool.next) shouldBe List.range(10, 20) - assertThrows[RuntimeException] { keyPool.next } - assertThrows[RuntimeException] { keyPool.next } - } - - "allow splitting into multiple pools" in { - val keyPool = new IntervalKeyPool(1, 1000) - val pools = keyPool.split(11).toList - assertThrows[IllegalStateException] { keyPool.next } - pools.size shouldBe 11 - // Pools should all have the same size - pools - .map { x => - (x.last - x.first) - } - .distinct - .size shouldBe 1 - // Pools should be pairwise disjoint - val keySets = pools.map { x => - (x.first to x.last).toSet - } - keySets.combinations(2).foreach { - case List(x: Set[Long], y: Set[Long]) => - x.intersect(y).isEmpty shouldBe true - case _ => - fail() - } - } - - "return empty iterator when asked to create 0 partitions" in { - val keyPool = new IntervalKeyPool(1, 1000) - keyPool.split(0).hasNext shouldBe false - } - - } - - "SequenceKeyPool" should { - "return elements of sequence one by one and then raise" in { - val seq = List[Long](1, 2, 3) - val keyPool = new SequenceKeyPool(seq) - List.range(0, 3).map(_ => keyPool.next) shouldBe seq - assertThrows[RuntimeException] { keyPool.next } - assertThrows[RuntimeException] { keyPool.next } - } - } - - "KeyPoolCreator" should { - "split into n pools and honor minimum value" in { - val minValue = 10 - val pools = KeyPoolCreator.obtain(3, minValue) - pools.size shouldBe 3 - pools match { - case List(pool1, pool2, pool3) => - pool1.first shouldBe minValue - pool1.last should be < pool2.first - pool2.last should be < pool3.first - pool3.last shouldBe Long.MaxValue - 1 - case _ => fail() - } - } - - } - -} diff --git a/codepropertygraph/src/test/scala/io/shiftleft/passes/ParallelCpgPassNewTests.scala b/codepropertygraph/src/test/scala/io/shiftleft/passes/ParallelCpgPassNewTests.scala deleted file mode 100644 index 96992544b..000000000 --- a/codepropertygraph/src/test/scala/io/shiftleft/passes/ParallelCpgPassNewTests.scala +++ /dev/null @@ -1,106 +0,0 @@ -package io.shiftleft.passes - -import better.files.File -import io.shiftleft.SerializedCpg -import io.shiftleft.codepropertygraph.generated.Cpg -import io.shiftleft.codepropertygraph.generated.Properties -import io.shiftleft.codepropertygraph.generated.nodes.{NewCall, NewFile} -import org.scalatest.matchers.should.Matchers -import org.scalatest.wordspec.AnyWordSpec -import overflowdb.traversal._ - -import java.nio.file.Files -import scala.jdk.CollectionConverters._ - -class ParallelCpgPassNewTests extends AnyWordSpec with Matchers { - - private object Fixture { - def apply(keyPools: Option[Iterator[KeyPool]] = None)(f: (Cpg, CpgPassBase) => Unit): Unit = { - val cpg = Cpg.empty - val pool = keyPools.flatMap(_.nextOption()) - class MyPass(cpg: Cpg) extends ConcurrentWriterCpgPass[String](cpg, "MyPass", pool) { - override def generateParts(): Array[String] = Array("foo", "bar") - - override def runOnPart(diffGraph: DiffGraphBuilder, part: String): Unit = { - diffGraph.addNode(NewFile().name(part)) - } - } - val pass = new MyPass(cpg) - f(cpg, pass) - } - } - - "ConcurrentWriterCpgPass" should { - "allow creating and applying result of pass" in Fixture() { (cpg, pass) => - pass.createAndApply() - cpg.graph.nodes.map(_.property(Properties.Name)).toSetMutable shouldBe Set("foo", "bar") - } - - "produce a serialized CPG file" in Fixture() { (_, pass) => - File.usingTemporaryFile("pass", ".zip") { file => - file.delete() - val filename = file.path.toString - val serializedCpg = new SerializedCpg(filename) - pass.createApplySerializeAndStore(serializedCpg) - serializedCpg.close() - file.exists shouldBe true - Files.size(file.path) should not be 0 - } - } - - val keyPools = Iterator(new IntervalKeyPool(10, 20), new IntervalKeyPool(30, 40)) - - "use only the first KeyPool for createAndApply" in Fixture(Some(keyPools)) { (cpg, pass) => - pass.createAndApply() - cpg.graph.V.asScala.map(_.id()).toSet shouldBe Set(10, 11) - } - - "fail for schema violations" in { - val cpg = Cpg.empty - val pass = new ConcurrentWriterCpgPass[String](cpg, "pass2") { - override def generateParts() = Array("a", "b") - override def runOnPart(diffGraph: DiffGraphBuilder, part: String): Unit = - part match { - case "a" => - // this is fine - diffGraph.addNode(NewFile().name(part)) - case "b" => - // schema violation - val file1 = NewFile().name("foo") - val file2 = NewFile().name("bar") - diffGraph - .addNode(file1) - .addNode(file2) - .addEdge(file1, file2, "illegal_edge_label") - - } - } - - // the above DiffGraph (part "b") is not schema conform, applying it must throw an exception - intercept[Exception] { - pass.createAndApply() - } - } - - "add NewNodes that are referenced in different parts only once" in { - val cpg = Cpg.empty - val pass = new ConcurrentWriterCpgPass[String](cpg, "pass2") { - val call1 = NewCall().name("call1") - val call2 = NewCall().name("call2") - val call3 = NewCall().name("call3") - - override def generateParts() = Array("a", "b") - override def runOnPart(diffGraph: DiffGraphBuilder, part: String): Unit = - part match { - case "a" => - diffGraph.addEdge(call1, call2, "AST") - case "b" => - diffGraph.addEdge(call2, call3, "AST") - } - } - pass.createAndApply() - cpg.graph.nodeCount() shouldBe 3 - } - } - -} diff --git a/domainClasses/build.sbt b/domainClasses/build.sbt index 8c81dcd04..57b8b1875 100644 --- a/domainClasses/build.sbt +++ b/domainClasses/build.sbt @@ -1,6 +1,9 @@ name := "codepropertygraph-domain-classes" -libraryDependencies += "io.shiftleft" %% "overflowdb-traversal" % Versions.overflowdb +libraryDependencies ++= Seq( + "io.joern" %% "flatgraph-core" % Versions.flatgraph, + "io.joern" %% "flatgraph-help" % Versions.flatgraph, +) lazy val generatedSrcDir = settingKey[File]("root for generated sources - we want to check those in") generatedSrcDir := (Compile/sourceDirectory).value / "generated" @@ -9,8 +12,7 @@ Compile/compile := (Compile/compile).dependsOn(Projects.schema/Compile/generateD /* generated sources occasionally have some warnings.. * we're trying to minimise them on a best effort basis, but don't want - * to fail the build because of them - */ + * to fail the build because of them */ Compile / scalacOptions --= Seq("-Wconf:cat=deprecation:w,any:e", "-Wunused", "-Ywarn-unused") // TODO uncomment, or rather find a better way to delete the generated files on `sbt clean`... diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/ControlStructureTypes.java b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/ControlStructureTypes.java index 218d44401..5de64e163 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/ControlStructureTypes.java +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/ControlStructureTypes.java @@ -1,8 +1,5 @@ package io.shiftleft.codepropertygraph.generated; -import overflowdb.*; - -import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -55,7 +52,6 @@ public class ControlStructureTypes { /** Represents a finally clause */ public static final String FINALLY = "FINALLY"; - public static Set ALL = new HashSet() {{ add(BREAK); add(CONTINUE); diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Cpg.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Cpg.scala index 824afa67d..9fbea453d 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Cpg.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Cpg.scala @@ -1,369 +1,800 @@ package io.shiftleft.codepropertygraph.generated - -import java.nio.file.{Path, Paths} -import overflowdb.{Config, Graph} -import overflowdb.traversal.help.{DocSearchPackages, TraversalHelp} -import overflowdb.traversal.help.Table.AvailableWidthProvider -import scala.jdk.javaapi.CollectionConverters.asJava +import flatgraph.{DiffGraphApplier, DiffGraphBuilder} +import flatgraph.help.DocSearchPackages +import flatgraph.help.Table.AvailableWidthProvider +import io.shiftleft.codepropertygraph.generated.language.* object Cpg { - implicit val defaultDocSearchPackage: DocSearchPackages = DocSearchPackages(getClass.getPackage.getName) - - /** Syntactic sugar for `new Cpg(graph)`. Usage: `Cpg(graph)` or simply `Cpg` if you have an `implicit Graph` in scope - */ - def apply(implicit graph: Graph) = new Cpg(graph) - - def empty: Cpg = - new Cpg(emptyGraph) + val defaultDocSearchPackage = DocSearchPackages.default.withAdditionalPackage(getClass.getPackage.getName) + + @scala.annotation.implicitNotFound("""If you're using flatgraph purely without a schema and associated generated domain classes, you can + |start with `given DocSearchPackages = DocSearchPackages.default`. + |If you have generated domain classes, use `given DocSearchPackages = MyDomain.defaultDocSearchPackage`. + |If you have additional custom extension steps that specify help texts via @Doc annotations, use `given DocSearchPackages = MyDomain.defaultDocSearchPackage.withAdditionalPackage("my.custom.package)"` + |""".stripMargin) + def help(implicit searchPackageNames: DocSearchPackages, availableWidthProvider: AvailableWidthProvider) = + flatgraph.help.TraversalHelp(searchPackageNames).forTraversalSources(verbose = false) + + @scala.annotation.implicitNotFound("""If you're using flatgraph purely without a schema and associated generated domain classes, you can + |start with `given DocSearchPackages = DocSearchPackages.default`. + |If you have generated domain classes, use `given DocSearchPackages = MyDomain.defaultDocSearchPackage`. + |If you have additional custom extension steps that specify help texts via @Doc annotations, use `given DocSearchPackages = MyDomain.defaultDocSearchPackage.withAdditionalPackage("my.custom.package)"` + |""".stripMargin) + def helpVerbose(implicit searchPackageNames: DocSearchPackages, availableWidthProvider: AvailableWidthProvider) = + flatgraph.help.TraversalHelp(searchPackageNames).forTraversalSources(verbose = true) + + def empty: Cpg = new Cpg(new flatgraph.Graph(GraphSchema)) + + def from(initialElements: DiffGraphBuilder => DiffGraphBuilder): Cpg = { + val graph = new flatgraph.Graph(GraphSchema) + DiffGraphApplier.applyDiff(graph, initialElements(new DiffGraphBuilder(GraphSchema))) + new Cpg(graph) + } - /** Instantiate Cpg with storage. If the storage file already exists, it will load (a subset of) the data into memory. - * Otherwise it will create an empty Cpg. In either case, configuring storage means that OverflowDb will be stored to - * disk on shutdown (`close`). I.e. if you want to preserve state between sessions, just use this method to - * instantiate the Cpg and ensure to properly `close` it at the end. - * @param path - * to the storage file, e.g. /home/user1/overflowdb.bin + /** Instantiate a new graph with storage. If the file already exists, this will deserialize the given file into + * memory. `Graph.close` will serialise graph to that given file (and override whatever was there before), unless you + * specify `persistOnClose = false`. */ - def withStorage(path: Path): Cpg = - withConfig(Config.withoutOverflow.withStorageLocation(path)) - - def withStorage(path: String): Cpg = - withStorage(Paths.get(path)) - - def withConfig(config: overflowdb.Config): Cpg = - new Cpg(Graph.open(config, nodes.Factories.allAsJava, edges.Factories.allAsJava, convertPropertyForPersistence)) - - def emptyGraph: Graph = - Graph.open( - Config.withoutOverflow, - nodes.Factories.allAsJava, - edges.Factories.allAsJava, - convertPropertyForPersistence - ) - - def convertPropertyForPersistence(property: Any): Any = - property match { - case arraySeq: scala.collection.immutable.ArraySeq[_] => arraySeq.unsafeArray - case coll: IterableOnce[Any] => asJava(coll.iterator.toArray) - case other => other - } + def withStorage(storagePath: java.nio.file.Path, persistOnClose: Boolean = true): Cpg = { + val graph = flatgraph.Graph.withStorage(GraphSchema, storagePath, persistOnClose) + new Cpg(graph) + } - def newDiffGraphBuilder: DiffGraphBuilder = new DiffGraphBuilder + def newDiffGraphBuilder: DiffGraphBuilder = new DiffGraphBuilder(GraphSchema) } -/** Domain-specific wrapper for graph, starting point for traversals. - * @param graph - * the underlying graph. An empty graph is created if this parameter is omitted. - */ -class Cpg(private val _graph: Graph = Cpg.emptyGraph) extends AutoCloseable { - def graph: Graph = _graph +class Cpg(private val _graph: flatgraph.Graph = new flatgraph.Graph(GraphSchema)) extends AutoCloseable { + def graph: flatgraph.Graph = _graph - def help(implicit searchPackageNames: DocSearchPackages, availableWidthProvider: AvailableWidthProvider): String = - new TraversalHelp(searchPackageNames).forTraversalSources + def help(implicit searchPackageNames: DocSearchPackages, availableWidthProvider: AvailableWidthProvider) = + Cpg.help + def helpVerbose(implicit searchPackageNames: DocSearchPackages, availableWidthProvider: AvailableWidthProvider) = + Cpg.helpVerbose override def close(): Unit = - graph.close + _graph.close() override def toString(): String = - String.format("Cpg (%s)", graph) + String.format("Cpg[%s]", graph) } -class GeneratedNodeStarterExt(val wrapper: Cpg) extends AnyVal { - import scala.jdk.CollectionConverters.IteratorHasAsScala - @overflowdb.traversal.help.Doc(info = "All nodes of type Annotation, i.e. with label ANNOTATION") - def annotation: Iterator[nodes.Annotation] = - overflowdb.traversal.InitialTraversal.from[nodes.Annotation](wrapper.graph, "ANNOTATION") +@flatgraph.help.TraversalSource +class CpgNodeStarters(val wrappedCpg: Cpg) { - @overflowdb.traversal.help.Doc(info = "All nodes of type AnnotationLiteral, i.e. with label ANNOTATION_LITERAL") - def annotationLiteral: Iterator[nodes.AnnotationLiteral] = - overflowdb.traversal.InitialTraversal.from[nodes.AnnotationLiteral](wrapper.graph, "ANNOTATION_LITERAL") + @flatgraph.help.Doc(info = "all nodes") + def all: Iterator[nodes.StoredNode] = wrappedCpg.graph.allNodes.asInstanceOf[Iterator[nodes.StoredNode]] - @overflowdb.traversal.help.Doc(info = "All nodes of type AnnotationParameter, i.e. with label ANNOTATION_PARAMETER") - def annotationParameter: Iterator[nodes.AnnotationParameter] = - overflowdb.traversal.InitialTraversal.from[nodes.AnnotationParameter](wrapper.graph, "ANNOTATION_PARAMETER") + def id(nodeId: Long): Iterator[nodes.StoredNode] = + Option(wrappedCpg.graph.node(nodeId)).iterator.asInstanceOf[Iterator[nodes.StoredNode]] - @overflowdb.traversal.help.Doc(info = - "All nodes of type AnnotationParameterAssign, i.e. with label ANNOTATION_PARAMETER_ASSIGN" - ) - def annotationParameterAssign: Iterator[nodes.AnnotationParameterAssign] = overflowdb.traversal.InitialTraversal - .from[nodes.AnnotationParameterAssign](wrapper.graph, "ANNOTATION_PARAMETER_ASSIGN") + def ids(nodeIds: Long*): Iterator[nodes.StoredNode] = nodeIds.iterator.flatMap(id) - @overflowdb.traversal.help.Doc(info = "All nodes of type ArrayInitializer, i.e. with label ARRAY_INITIALIZER") - def arrayInitializer: Iterator[nodes.ArrayInitializer] = - overflowdb.traversal.InitialTraversal.from[nodes.ArrayInitializer](wrapper.graph, "ARRAY_INITIALIZER") + /** A method annotation. The semantics of the FULL_NAME property on this node differ from the usual FULL_NAME + * semantics in the sense that FULL_NAME describes the represented annotation class/interface itself and not the + * ANNOTATION node. + */ + @flatgraph.help.Doc(info = """A method annotation. +The semantics of the FULL_NAME property on this node differ from the usual FULL_NAME +semantics in the sense that FULL_NAME describes the represented annotation class/interface +itself and not the ANNOTATION node.""") + def annotation: Iterator[nodes.Annotation] = wrappedCpg.graph._nodes(0).asInstanceOf[Iterator[nodes.Annotation]] + + /** A literal value assigned to an ANNOTATION_PARAMETER */ + @flatgraph.help.Doc(info = """A literal value assigned to an ANNOTATION_PARAMETER""") + def annotationLiteral: Iterator[nodes.AnnotationLiteral] = + wrappedCpg.graph._nodes(1).asInstanceOf[Iterator[nodes.AnnotationLiteral]] - @overflowdb.traversal.help.Doc(info = "All nodes of type Binding, i.e. with label BINDING") - def binding: Iterator[nodes.Binding] = - overflowdb.traversal.InitialTraversal.from[nodes.Binding](wrapper.graph, "BINDING") + /** Formal annotation parameter */ + @flatgraph.help.Doc(info = """Formal annotation parameter""") + def annotationParameter: Iterator[nodes.AnnotationParameter] = + wrappedCpg.graph._nodes(2).asInstanceOf[Iterator[nodes.AnnotationParameter]] - @overflowdb.traversal.help.Doc(info = "All nodes of type Block, i.e. with label BLOCK") - def block: Iterator[nodes.Block] = overflowdb.traversal.InitialTraversal.from[nodes.Block](wrapper.graph, "BLOCK") + /** Assignment of annotation argument to annotation parameter */ + @flatgraph.help.Doc(info = """Assignment of annotation argument to annotation parameter""") + def annotationParameterAssign: Iterator[nodes.AnnotationParameterAssign] = + wrappedCpg.graph._nodes(3).asInstanceOf[Iterator[nodes.AnnotationParameterAssign]] - @overflowdb.traversal.help.Doc(info = "All nodes of type Call, i.e. with label CALL") - def call: Iterator[nodes.Call] = overflowdb.traversal.InitialTraversal.from[nodes.Call](wrapper.graph, "CALL") + /** Initialization construct for arrays */ + @flatgraph.help.Doc(info = """Initialization construct for arrays""") + def arrayInitializer: Iterator[nodes.ArrayInitializer] = + wrappedCpg.graph._nodes(4).asInstanceOf[Iterator[nodes.ArrayInitializer]] - @overflowdb.traversal.help.Doc(info = "All nodes of type ClosureBinding, i.e. with label CLOSURE_BINDING") + /** `BINDING` nodes represent name-signature pairs that can be resolved at a type declaration (`TYPE_DECL`). They are + * connected to `TYPE_DECL` nodes via incoming `BINDS` edges. The bound method is either associated with an outgoing + * `REF` edge to a `METHOD` or with the `METHOD_FULL_NAME` property. The `REF` edge if present has priority. + */ + @flatgraph.help.Doc(info = """`BINDING` nodes represent name-signature pairs that can be resolved at a +type declaration (`TYPE_DECL`). They are connected to `TYPE_DECL` nodes via +incoming `BINDS` edges. The bound method is either associated with an outgoing +`REF` edge to a `METHOD` or with the `METHOD_FULL_NAME` property. The `REF` edge +if present has priority.""") + def binding: Iterator[nodes.Binding] = wrappedCpg.graph._nodes(5).asInstanceOf[Iterator[nodes.Binding]] + + /** This node represents a compound statement. Compound statements are used in many languages to allow grouping a + * sequence of statements. For example, in C and Java, compound statements are statements enclosed by curly braces. + * Function/Method bodies are compound statements. We do not use the term "compound statement" because "statement" + * would imply that the block does not yield a value upon evaluation, that is, that it is not an expression. This is + * true in languages such as C and Java, but not for languages such as Scala where the value of the block is given by + * that of the last expression it contains. In fact, the Scala grammar uses the term "BlockExpr" (short for "block + * expression") to describe what in the CPG we call "Block". + */ + @flatgraph.help.Doc(info = + """This node represents a compound statement. Compound statements are used in many languages to allow +grouping a sequence of statements. For example, in C and Java, compound statements +are statements enclosed by curly braces. Function/Method bodies are compound +statements. We do not use the term "compound statement" because "statement" would +imply that the block does not yield a value upon evaluation, that is, that it is +not an expression. This is true in languages such as C and Java, but not for languages +such as Scala where the value of the block is given by that of the last expression it +contains. In fact, the Scala grammar uses the term "BlockExpr" (short for +"block expression") to describe what in the CPG we call "Block".""" + ) + def block: Iterator[nodes.Block] = wrappedCpg.graph._nodes(6).asInstanceOf[Iterator[nodes.Block]] + + /** A (function/method/procedure) call. The `METHOD_FULL_NAME` property is the name of the invoked method (the callee) + * while the `TYPE_FULL_NAME` is its return type, and therefore, the return type of the call when viewing it as an + * expression. For languages like Javascript, it is common that we may know the (short-) name of the invoked method, + * but we do not know at compile time which method will actually be invoked, e.g., because it depends on a dynamic + * import. In this case, we leave `METHOD_FULL_NAME` blank but at least fill out `NAME`, which contains the method's + * (short-) name and `SIGNATURE`, which contains any information we may have about the types of arguments and return + * value. + */ + @flatgraph.help.Doc(info = """A (function/method/procedure) call. The `METHOD_FULL_NAME` property is the name of the +invoked method (the callee) while the `TYPE_FULL_NAME` is its return type, and +therefore, the return type of the call when viewing it as an expression. For +languages like Javascript, it is common that we may know the (short-) name +of the invoked method, but we do not know at compile time which method +will actually be invoked, e.g., because it depends on a dynamic import. +In this case, we leave `METHOD_FULL_NAME` blank but at least fill out `NAME`, +which contains the method's (short-) name and `SIGNATURE`, which contains +any information we may have about the types of arguments and return value.""") + def call: Iterator[nodes.Call] = wrappedCpg.graph._nodes(7).asInstanceOf[Iterator[nodes.Call]] + + /** Shorthand for call.name */ + def call(name: String): Iterator[nodes.Call] = call.name(name) + + /** Represents the binding of a LOCAL or METHOD_PARAMETER_IN into the closure of a method */ + @flatgraph.help.Doc(info = + """Represents the binding of a LOCAL or METHOD_PARAMETER_IN into the closure of a method""" + ) def closureBinding: Iterator[nodes.ClosureBinding] = - overflowdb.traversal.InitialTraversal.from[nodes.ClosureBinding](wrapper.graph, "CLOSURE_BINDING") + wrappedCpg.graph._nodes(8).asInstanceOf[Iterator[nodes.ClosureBinding]] - @overflowdb.traversal.help.Doc(info = "All nodes of type Comment, i.e. with label COMMENT") - def comment: Iterator[nodes.Comment] = - overflowdb.traversal.InitialTraversal.from[nodes.Comment](wrapper.graph, "COMMENT") + /** A source code comment */ + @flatgraph.help.Doc(info = """A source code comment""") + def comment: Iterator[nodes.Comment] = wrappedCpg.graph._nodes(9).asInstanceOf[Iterator[nodes.Comment]] - @overflowdb.traversal.help.Doc(info = "All nodes of type ConfigFile, i.e. with label CONFIG_FILE") - def configFile: Iterator[nodes.ConfigFile] = - overflowdb.traversal.InitialTraversal.from[nodes.ConfigFile](wrapper.graph, "CONFIG_FILE") + /** Shorthand for comment.code */ + def comment(code: String): Iterator[nodes.Comment] = comment.code(code) - @overflowdb.traversal.help.Doc(info = "All nodes of type ControlStructure, i.e. with label CONTROL_STRUCTURE") + /** This node type represent a configuration file, where `NAME` is the name of the file and `content` is its content. + * The exact representation of the name is left undefined and can be chosen as required by consumers of the + * corresponding configuration files. + */ + @flatgraph.help.Doc(info = """This node type represent a configuration file, where `NAME` is the name +of the file and `content` is its content. The exact representation of the +name is left undefined and can be chosen as required by consumers of +the corresponding configuration files.""") + def configFile: Iterator[nodes.ConfigFile] = wrappedCpg.graph._nodes(10).asInstanceOf[Iterator[nodes.ConfigFile]] + + /** This node represents a control structure as introduced by control structure statements as well as conditional and + * unconditional jumps. Its type is stored in the `CONTROL_STRUCTURE_TYPE` field to be one of several pre-defined + * types. These types are used in the construction of the control flow layer, making it possible to generate the + * control flow layer from the abstract syntax tree layer automatically. + * + * In addition to the `CONTROL_STRUCTURE_TYPE` field, the `PARSER_TYPE_NAME` field MAY be used by frontends to store + * the name of the control structure as emitted by the parser or disassembler, however, the value of this field is + * not relevant for construction of the control flow layer. + */ + @flatgraph.help.Doc(info = """This node represents a control structure as introduced by control structure +statements as well as conditional and unconditional jumps. Its type is stored in the +`CONTROL_STRUCTURE_TYPE` field to be one of several pre-defined types. These types + are used in the construction of the control flow layer, making it possible to + generate the control flow layer from the abstract syntax tree layer automatically. + +In addition to the `CONTROL_STRUCTURE_TYPE` field, the `PARSER_TYPE_NAME` field +MAY be used by frontends to store the name of the control structure as emitted by +the parser or disassembler, however, the value of this field is not relevant +for construction of the control flow layer.""") def controlStructure: Iterator[nodes.ControlStructure] = - overflowdb.traversal.InitialTraversal.from[nodes.ControlStructure](wrapper.graph, "CONTROL_STRUCTURE") - - @overflowdb.traversal.help.Doc(info = "All nodes of type Dependency, i.e. with label DEPENDENCY") - def dependency: Iterator[nodes.Dependency] = - overflowdb.traversal.InitialTraversal.from[nodes.Dependency](wrapper.graph, "DEPENDENCY") - - @overflowdb.traversal.help.Doc(info = "All nodes of type FieldIdentifier, i.e. with label FIELD_IDENTIFIER") - def fieldIdentifier: Iterator[nodes.FieldIdentifier] = - overflowdb.traversal.InitialTraversal.from[nodes.FieldIdentifier](wrapper.graph, "FIELD_IDENTIFIER") - - @overflowdb.traversal.help.Doc(info = "All nodes of type File, i.e. with label FILE") - def file: Iterator[nodes.File] = overflowdb.traversal.InitialTraversal.from[nodes.File](wrapper.graph, "FILE") + wrappedCpg.graph._nodes(11).asInstanceOf[Iterator[nodes.ControlStructure]] - @overflowdb.traversal.help.Doc(info = "All nodes of type Finding, i.e. with label FINDING") - def finding: Iterator[nodes.Finding] = - overflowdb.traversal.InitialTraversal.from[nodes.Finding](wrapper.graph, "FINDING") + /** This node represents a dependency */ + @flatgraph.help.Doc(info = """This node represents a dependency""") + def dependency: Iterator[nodes.Dependency] = wrappedCpg.graph._nodes(12).asInstanceOf[Iterator[nodes.Dependency]] - @overflowdb.traversal.help.Doc(info = "All nodes of type Identifier, i.e. with label IDENTIFIER") - def identifier: Iterator[nodes.Identifier] = - overflowdb.traversal.InitialTraversal.from[nodes.Identifier](wrapper.graph, "IDENTIFIER") + /** Shorthand for dependency.name */ + def dependency(name: String): Iterator[nodes.Dependency] = dependency.name(name) - @overflowdb.traversal.help.Doc(info = "All nodes of type Import, i.e. with label IMPORT") - def imports: Iterator[nodes.Import] = - overflowdb.traversal.InitialTraversal.from[nodes.Import](wrapper.graph, "IMPORT") - - @overflowdb.traversal.help.Doc(info = "All nodes of type JumpLabel, i.e. with label JUMP_LABEL") - def jumpLabel: Iterator[nodes.JumpLabel] = - overflowdb.traversal.InitialTraversal.from[nodes.JumpLabel](wrapper.graph, "JUMP_LABEL") + /** This node represents the field accessed in a field access, e.g., in `a.b`, it represents `b`. The field name as it + * occurs in the code is stored in the `CODE` field. This may mean that the `CODE` field holds an expression. The + * `CANONICAL_NAME` field MAY contain the same value is the `CODE` field but SHOULD contain the normalized name that + * results from evaluating `CODE` as an expression if such an evaluation is possible for the language frontend. The + * objective is to store an identifier in `CANONICAL_NAME` that is the same for two nodes iff they refer to the same + * field, regardless of whether they use the same expression to reference it. + */ + @flatgraph.help.Doc(info = """This node represents the field accessed in a field access, e.g., in +`a.b`, it represents `b`. The field name as it occurs in the code is +stored in the `CODE` field. This may mean that the `CODE` field holds +an expression. The `CANONICAL_NAME` field MAY contain the same value is +the `CODE` field but SHOULD contain the normalized name that results +from evaluating `CODE` as an expression if such an evaluation is +possible for the language frontend. The objective is to store an identifier +in `CANONICAL_NAME` that is the same for two nodes iff they refer to the +same field, regardless of whether they use the same expression to reference +it.""") + def fieldIdentifier: Iterator[nodes.FieldIdentifier] = + wrappedCpg.graph._nodes(13).asInstanceOf[Iterator[nodes.FieldIdentifier]] + + /** File nodes represent source files or a shared objects from which the CPG was generated. File nodes serve as + * indices, that is, they allow looking up all elements of the code by file. + * + * For each file, the graph CAN contain exactly one File node, if not File nodes are created as indicated by + * `FILENAME` property of other nodes. As file nodes are root nodes of abstract syntax tress, they are AstNodes and + * their order field is set to 0. This is because they have no sibling nodes, not because they are the first node of + * the AST. + */ + @flatgraph.help.Doc(info = """File nodes represent source files or a shared objects from which the CPG +was generated. File nodes serve as indices, that is, they allow looking up all +elements of the code by file. + +For each file, the graph CAN contain exactly one File node, if not File nodes +are created as indicated by `FILENAME` property of other nodes. +As file nodes are root nodes of abstract syntax tress, they are AstNodes and +their order field is set to 0. This is because they have no sibling nodes, +not because they are the first node of the AST.""") + def file: Iterator[nodes.File] = wrappedCpg.graph._nodes(14).asInstanceOf[Iterator[nodes.File]] + + /** Shorthand for file.name */ + def file(name: String): Iterator[nodes.File] = file.name(name) + + /** Finding nodes may be used to store analysis results in the graph that are to be exposed to an end-user, e.g., + * information about potential vulnerabilities or dangerous programming practices. A Finding node may contain an + * abitrary list of key value pairs that characterize the finding, as well as a list of nodes that serve as evidence + * for the finding. + */ + @flatgraph.help.Doc(info = """Finding nodes may be used to store analysis results in the graph +that are to be exposed to an end-user, e.g., information about +potential vulnerabilities or dangerous programming practices. +A Finding node may contain an abitrary list of key value pairs +that characterize the finding, as well as a list of nodes that +serve as evidence for the finding.""") + def finding: Iterator[nodes.Finding] = wrappedCpg.graph._nodes(15).asInstanceOf[Iterator[nodes.Finding]] + + /** This node represents an identifier as used when referring to a variable by name. It holds the identifier's name in + * the `NAME` field and its fully-qualified type name in `TYPE_FULL_NAME`. + */ + @flatgraph.help.Doc(info = """This node represents an identifier as used when referring to a variable by name. +It holds the identifier's name in the `NAME` field and its fully-qualified type +name in `TYPE_FULL_NAME`.""") + def identifier: Iterator[nodes.Identifier] = wrappedCpg.graph._nodes(16).asInstanceOf[Iterator[nodes.Identifier]] - @overflowdb.traversal.help.Doc(info = "All nodes of type JumpTarget, i.e. with label JUMP_TARGET") - def jumpTarget: Iterator[nodes.JumpTarget] = - overflowdb.traversal.InitialTraversal.from[nodes.JumpTarget](wrapper.graph, "JUMP_TARGET") + /** Shorthand for identifier.name */ + def identifier(name: String): Iterator[nodes.Identifier] = identifier.name(name) - @overflowdb.traversal.help.Doc(info = "All nodes of type KeyValuePair, i.e. with label KEY_VALUE_PAIR") + /** Declarative import as it is found in statically typed languages like Java. This kind of node is not supposed to be + * used for imports in dynamically typed languages like Javascript. + */ + @flatgraph.help.Doc(info = """Declarative import as it is found in statically typed languages like Java. +This kind of node is not supposed to be used for imports in dynamically typed +languages like Javascript.""") + def imports: Iterator[nodes.Import] = wrappedCpg.graph._nodes(17).asInstanceOf[Iterator[nodes.Import]] + + /** A jump label specifies the label and thus the JUMP_TARGET of control structures BREAK and CONTINUE. The `NAME` + * field holds the name of the label while the `PARSER_TYPE_NAME` field holds the name of language construct that + * this jump label is created from, e.g., "Label". + */ + @flatgraph.help.Doc(info = """A jump label specifies the label and thus the JUMP_TARGET of control structures +BREAK and CONTINUE. The `NAME` field holds the name of the label while the +`PARSER_TYPE_NAME` field holds the name of language construct that this jump +label is created from, e.g., "Label".""") + def jumpLabel: Iterator[nodes.JumpLabel] = wrappedCpg.graph._nodes(18).asInstanceOf[Iterator[nodes.JumpLabel]] + + /** A jump target is any location in the code that has been specifically marked as the target of a jump, e.g., via a + * label. The `NAME` field holds the name of the label while the `PARSER_TYPE_NAME` field holds the name of language + * construct that this jump target is created from, e.g., "Label". + */ + @flatgraph.help.Doc(info = """A jump target is any location in the code that has been specifically marked +as the target of a jump, e.g., via a label. The `NAME` field holds the name of +the label while the `PARSER_TYPE_NAME` field holds the name of language construct +that this jump target is created from, e.g., "Label".""") + def jumpTarget: Iterator[nodes.JumpTarget] = wrappedCpg.graph._nodes(19).asInstanceOf[Iterator[nodes.JumpTarget]] + + /** This node represents a key value pair, where both the key and the value are strings. */ + @flatgraph.help.Doc(info = """This node represents a key value pair, where both the key and the value are strings.""") def keyValuePair: Iterator[nodes.KeyValuePair] = - overflowdb.traversal.InitialTraversal.from[nodes.KeyValuePair](wrapper.graph, "KEY_VALUE_PAIR") + wrappedCpg.graph._nodes(20).asInstanceOf[Iterator[nodes.KeyValuePair]] - @overflowdb.traversal.help.Doc(info = "All nodes of type Literal, i.e. with label LITERAL") - def literal: Iterator[nodes.Literal] = - overflowdb.traversal.InitialTraversal.from[nodes.Literal](wrapper.graph, "LITERAL") - - @overflowdb.traversal.help.Doc(info = "All nodes of type Local, i.e. with label LOCAL") - def local: Iterator[nodes.Local] = overflowdb.traversal.InitialTraversal.from[nodes.Local](wrapper.graph, "LOCAL") - - @overflowdb.traversal.help.Doc(info = "All nodes of type Location, i.e. with label LOCATION") - def location: Iterator[nodes.Location] = - overflowdb.traversal.InitialTraversal.from[nodes.Location](wrapper.graph, "LOCATION") - - @overflowdb.traversal.help.Doc(info = "All nodes of type Member, i.e. with label MEMBER") - def member: Iterator[nodes.Member] = overflowdb.traversal.InitialTraversal.from[nodes.Member](wrapper.graph, "MEMBER") + /** This node represents a literal such as an integer or string constant. Literals are symbols included in the code in + * verbatim form and which are immutable. The `TYPE_FULL_NAME` field stores the literal's fully-qualified type name, + * e.g., `java.lang.Integer`. + */ + @flatgraph.help.Doc(info = """This node represents a literal such as an integer or string constant. Literals +are symbols included in the code in verbatim form and which are immutable. +The `TYPE_FULL_NAME` field stores the literal's fully-qualified type name, +e.g., `java.lang.Integer`.""") + def literal: Iterator[nodes.Literal] = wrappedCpg.graph._nodes(21).asInstanceOf[Iterator[nodes.Literal]] + + /** Shorthand for literal.code */ + def literal(code: String): Iterator[nodes.Literal] = literal.code(code) + + /** This node represents a local variable. Its fully qualified type name is stored in the `TYPE_FULL_NAME` field and + * its name in the `NAME` field. The `CODE` field contains the entire local variable declaration without + * initialization, e.g., for `int x = 10;`, it contains `int x`. + */ + @flatgraph.help.Doc(info = """This node represents a local variable. Its fully qualified type name is stored +in the `TYPE_FULL_NAME` field and its name in the `NAME` field. The `CODE` field +contains the entire local variable declaration without initialization, e.g., for +`int x = 10;`, it contains `int x`.""") + def local: Iterator[nodes.Local] = wrappedCpg.graph._nodes(22).asInstanceOf[Iterator[nodes.Local]] - @overflowdb.traversal.help.Doc(info = "All nodes of type MetaData, i.e. with label META_DATA") - def metaData: Iterator[nodes.MetaData] = - overflowdb.traversal.InitialTraversal.from[nodes.MetaData](wrapper.graph, "META_DATA") + /** Shorthand for local.name */ + def local(name: String): Iterator[nodes.Local] = local.name(name) - @overflowdb.traversal.help.Doc(info = "All nodes of type Method, i.e. with label METHOD") - def method: Iterator[nodes.Method] = overflowdb.traversal.InitialTraversal.from[nodes.Method](wrapper.graph, "METHOD") + /** A location node summarizes a source code location. */ + @flatgraph.help.Doc(info = """A location node summarizes a source code location.""") + def location: Iterator[nodes.Location] = wrappedCpg.graph._nodes(23).asInstanceOf[Iterator[nodes.Location]] - @overflowdb.traversal.help.Doc(info = "All nodes of type MethodParameterIn, i.e. with label METHOD_PARAMETER_IN") + /** This node represents a type member of a class, struct or union, e.g., for the type declaration `class Foo{ int i ; + * }`, it represents the declaration of the variable `i`. + */ + @flatgraph.help.Doc(info = """This node represents a type member of a class, struct or union, e.g., for the + type declaration `class Foo{ int i ; }`, it represents the declaration of the + variable `i`.""") + def member: Iterator[nodes.Member] = wrappedCpg.graph._nodes(24).asInstanceOf[Iterator[nodes.Member]] + + /** Shorthand for member.name */ + def member(name: String): Iterator[nodes.Member] = member.name(name) + + /** This node contains the CPG meta data. Exactly one node of this type MUST exist per CPG. The `HASH` property MAY + * contain a hash value calculated over the source files this CPG was generated from. The `VERSION` MUST be set to + * the version of the specification ("1.1"). The language field indicates which language frontend was used to + * generate the CPG and the list property `OVERLAYS` specifies which overlays have been applied to the CPG. + */ + @flatgraph.help.Doc(info = """This node contains the CPG meta data. Exactly one node of this type +MUST exist per CPG. The `HASH` property MAY contain a hash value calculated +over the source files this CPG was generated from. The `VERSION` MUST be +set to the version of the specification ("1.1"). The language field indicates +which language frontend was used to generate the CPG and the list property +`OVERLAYS` specifies which overlays have been applied to the CPG.""") + def metaData: Iterator[nodes.MetaData] = wrappedCpg.graph._nodes(25).asInstanceOf[Iterator[nodes.MetaData]] + + /** Programming languages offer many closely-related concepts for describing blocks of code that can be executed with + * input parameters and return output parameters, possibly causing side effects. In the CPG specification, we refer + * to all of these concepts (procedures, functions, methods, etc.) as methods. A single METHOD node must exist for + * each method found in the source program. + * + * The `FULL_NAME` field specifies the method's fully-qualified name, including information about the namespace it is + * contained in if applicable, the name field is the function's short name. The field `IS_EXTERNAL` indicates whether + * it was possible to identify a method body for the method. This is true for methods that are defined in the source + * program, and false for methods that are dynamically linked to the program, that is, methods that exist in an + * external dependency. + * + * Line and column number information is specified in the optional fields `LINE_NUMBER`, `COLUMN_NUMBER`, + * `LINE_NUMBER_END`, and `COLUMN_NUMBER_END` and the name of the source file is specified in `FILENAME`. An optional + * hash value MAY be calculated over the function contents and included in the `HASH` field. + * + * The optional `OFFSET` and `OFFSET_END` specify the start and exclusive end position of the code belonging to a + * method within the corresponding `FILE` nodes `CONTENT` property. + * + * Finally, the fully qualified name of the program constructs that the method is immediately contained in is stored + * in the `AST_PARENT_FULL_NAME` field and its type is indicated in the `AST_PARENT_TYPE` field to be one of + * `METHOD`, `TYPE_DECL` or `NAMESPACE_BLOCK`. + */ + @flatgraph.help.Doc(info = """Programming languages offer many closely-related concepts for describing blocks +of code that can be executed with input parameters and return output parameters, +possibly causing side effects. In the CPG specification, we refer to all of these +concepts (procedures, functions, methods, etc.) as methods. A single METHOD node +must exist for each method found in the source program. + +The `FULL_NAME` field specifies the method's fully-qualified name, including +information about the namespace it is contained in if applicable, the name field +is the function's short name. The field `IS_EXTERNAL` indicates whether it was +possible to identify a method body for the method. This is true for methods that +are defined in the source program, and false for methods that are dynamically +linked to the program, that is, methods that exist in an external dependency. + +Line and column number information is specified in the optional fields +`LINE_NUMBER`, `COLUMN_NUMBER`, `LINE_NUMBER_END`, and `COLUMN_NUMBER_END` and +the name of the source file is specified in `FILENAME`. An optional hash value +MAY be calculated over the function contents and included in the `HASH` field. + +The optional `OFFSET` and `OFFSET_END` specify the start +and exclusive end position of the code belonging to a method within the corresponding +`FILE` nodes `CONTENT` property. + +Finally, the fully qualified name of the program constructs that the method +is immediately contained in is stored in the `AST_PARENT_FULL_NAME` field +and its type is indicated in the `AST_PARENT_TYPE` field to be one of +`METHOD`, `TYPE_DECL` or `NAMESPACE_BLOCK`.""") + def method: Iterator[nodes.Method] = wrappedCpg.graph._nodes(26).asInstanceOf[Iterator[nodes.Method]] + + /** Shorthand for method.name */ + def method(name: String): Iterator[nodes.Method] = method.name(name) + + /** This node represents a formal input parameter. The field `NAME` contains its name, while the field + * `TYPE_FULL_NAME` contains the fully qualified type name. + */ + @flatgraph.help.Doc(info = """This node represents a formal input parameter. The field `NAME` contains its +name, while the field `TYPE_FULL_NAME` contains the fully qualified type name.""") def methodParameterIn: Iterator[nodes.MethodParameterIn] = - overflowdb.traversal.InitialTraversal.from[nodes.MethodParameterIn](wrapper.graph, "METHOD_PARAMETER_IN") + wrappedCpg.graph._nodes(27).asInstanceOf[Iterator[nodes.MethodParameterIn]] - @overflowdb.traversal.help.Doc(info = "All nodes of type MethodParameterOut, i.e. with label METHOD_PARAMETER_OUT") - def methodParameterOut: Iterator[nodes.MethodParameterOut] = - overflowdb.traversal.InitialTraversal.from[nodes.MethodParameterOut](wrapper.graph, "METHOD_PARAMETER_OUT") + /** Shorthand for methodParameterIn.name */ + def methodParameterIn(name: String): Iterator[nodes.MethodParameterIn] = methodParameterIn.name(name) - @overflowdb.traversal.help.Doc(info = "All nodes of type MethodRef, i.e. with label METHOD_REF") - def methodRef: Iterator[nodes.MethodRef] = - overflowdb.traversal.InitialTraversal.from[nodes.MethodRef](wrapper.graph, "METHOD_REF") + /** This node represents a formal output parameter. Corresponding output parameters for input parameters MUST NOT be + * created by the frontend as they are automatically created upon first loading the CPG. + */ + @flatgraph.help.Doc(info = """This node represents a formal output parameter. Corresponding output parameters +for input parameters MUST NOT be created by the frontend as they are automatically +created upon first loading the CPG.""") + def methodParameterOut: Iterator[nodes.MethodParameterOut] = + wrappedCpg.graph._nodes(28).asInstanceOf[Iterator[nodes.MethodParameterOut]] - @overflowdb.traversal.help.Doc(info = "All nodes of type MethodReturn, i.e. with label METHOD_RETURN") + /** This node represents a reference to a method/function/procedure as it appears when a method is passed as an + * argument in a call. The `METHOD_FULL_NAME` field holds the fully-qualified name of the referenced method and the + * `TYPE_FULL_NAME` holds its fully-qualified type name. + */ + @flatgraph.help.Doc(info = """This node represents a reference to a method/function/procedure as it +appears when a method is passed as an argument in a call. The `METHOD_FULL_NAME` +field holds the fully-qualified name of the referenced method and the +`TYPE_FULL_NAME` holds its fully-qualified type name.""") + def methodRef: Iterator[nodes.MethodRef] = wrappedCpg.graph._nodes(29).asInstanceOf[Iterator[nodes.MethodRef]] + + /** This node represents an (unnamed) formal method return parameter. It carries its fully qualified type name in + * `TYPE_FULL_NAME`. The `CODE` field MAY be set freely, e.g., to the constant `RET`, however, subsequent layer + * creators MUST NOT depend on this value. + */ + @flatgraph.help.Doc(info = """This node represents an (unnamed) formal method return parameter. It carries its +fully qualified type name in `TYPE_FULL_NAME`. The `CODE` field MAY be set freely, +e.g., to the constant `RET`, however, subsequent layer creators MUST NOT depend +on this value.""") def methodReturn: Iterator[nodes.MethodReturn] = - overflowdb.traversal.InitialTraversal.from[nodes.MethodReturn](wrapper.graph, "METHOD_RETURN") + wrappedCpg.graph._nodes(30).asInstanceOf[Iterator[nodes.MethodReturn]] - @overflowdb.traversal.help.Doc(info = "All nodes of type Modifier, i.e. with label MODIFIER") - def modifier: Iterator[nodes.Modifier] = - overflowdb.traversal.InitialTraversal.from[nodes.Modifier](wrapper.graph, "MODIFIER") + /** This field represents a (language-dependent) modifier such as `static`, `private` or `public`. Unlike most other + * AST nodes, it is NOT an expression, that is, it cannot be evaluated and cannot be passed as an argument in + * function calls. + */ + @flatgraph.help.Doc(info = """This field represents a (language-dependent) modifier such as `static`, `private` +or `public`. Unlike most other AST nodes, it is NOT an expression, that is, it +cannot be evaluated and cannot be passed as an argument in function calls.""") + def modifier: Iterator[nodes.Modifier] = wrappedCpg.graph._nodes(31).asInstanceOf[Iterator[nodes.Modifier]] + + /** This node represents a namespace. Similar to FILE nodes, NAMESPACE nodes serve as indices that allow all + * definitions inside a namespace to be obtained by following outgoing edges from a NAMESPACE node. + * + * NAMESPACE nodes MUST NOT be created by language frontends. Instead, they are generated from NAMESPACE_BLOCK nodes + * automatically upon first loading of the CPG. + */ + @flatgraph.help.Doc(info = """This node represents a namespace. Similar to FILE nodes, NAMESPACE nodes +serve as indices that allow all definitions inside a namespace to be +obtained by following outgoing edges from a NAMESPACE node. + +NAMESPACE nodes MUST NOT be created by language frontends. Instead, +they are generated from NAMESPACE_BLOCK nodes automatically upon +first loading of the CPG.""") + def namespace: Iterator[nodes.Namespace] = wrappedCpg.graph._nodes(32).asInstanceOf[Iterator[nodes.Namespace]] + + /** Shorthand for namespace.name */ + def namespace(name: String): Iterator[nodes.Namespace] = namespace.name(name) + + /** A reference to a namespace. We borrow the concept of a "namespace block" from C++, that is, a namespace block is a + * block of code that has been placed in the same namespace by a programmer. This block may be introduced via a + * `package` statement in Java or a `namespace{ }` statement in C++. + * + * The `FULL_NAME` field contains a unique identifier to represent the namespace block itself not just the namespace + * it references. So in addition to the namespace name it can be useful to use the containing file name to derive a + * unique identifier. + * + * The `NAME` field contains the namespace name in a human-readable format. The name should be given in dot-separated + * form where a dot indicates that the right hand side is a sub namespace of the left hand side, e.g., `foo.bar` + * denotes the namespace `bar` contained in the namespace `foo`. + */ + @flatgraph.help.Doc(info = """A reference to a namespace. +We borrow the concept of a "namespace block" from C++, that is, a namespace block +is a block of code that has been placed in the same namespace by a programmer. +This block may be introduced via a `package` statement in Java or +a `namespace{ }` statement in C++. + +The `FULL_NAME` field contains a unique identifier to represent the namespace block +itself not just the namespace it references. So in addition to the namespace name +it can be useful to use the containing file name to derive a unique identifier. + +The `NAME` field contains the namespace name in a human-readable format. +The name should be given in dot-separated form where a dot indicates +that the right hand side is a sub namespace of the left hand side, e.g., +`foo.bar` denotes the namespace `bar` contained in the namespace `foo`.""") + def namespaceBlock: Iterator[nodes.NamespaceBlock] = + wrappedCpg.graph._nodes(33).asInstanceOf[Iterator[nodes.NamespaceBlock]] - @overflowdb.traversal.help.Doc(info = "All nodes of type Namespace, i.e. with label NAMESPACE") - def namespace: Iterator[nodes.Namespace] = - overflowdb.traversal.InitialTraversal.from[nodes.Namespace](wrapper.graph, "NAMESPACE") + /** Shorthand for namespaceBlock.name */ + def namespaceBlock(name: String): Iterator[nodes.NamespaceBlock] = namespaceBlock.name(name) - @overflowdb.traversal.help.Doc(info = "All nodes of type NamespaceBlock, i.e. with label NAMESPACE_BLOCK") - def namespaceBlock: Iterator[nodes.NamespaceBlock] = - overflowdb.traversal.InitialTraversal.from[nodes.NamespaceBlock](wrapper.graph, "NAMESPACE_BLOCK") + /** This node represents a return instruction, e.g., `return x`. Note that it does NOT represent a formal return + * parameter as formal return parameters are represented via `METHOD_RETURN` nodes. + */ + @flatgraph.help.Doc(info = """This node represents a return instruction, e.g., `return x`. Note that it does +NOT represent a formal return parameter as formal return parameters are +represented via `METHOD_RETURN` nodes.""") + def ret: Iterator[nodes.Return] = wrappedCpg.graph._nodes(34).asInstanceOf[Iterator[nodes.Return]] - @overflowdb.traversal.help.Doc(info = "All nodes of type Return, i.e. with label RETURN") - def ret: Iterator[nodes.Return] = overflowdb.traversal.InitialTraversal.from[nodes.Return](wrapper.graph, "RETURN") + /** Shorthand for ret.code */ + def ret(code: String): Iterator[nodes.Return] = ret.code(code) - @overflowdb.traversal.help.Doc(info = "All nodes of type Tag, i.e. with label TAG") - def tag: Iterator[nodes.Tag] = overflowdb.traversal.InitialTraversal.from[nodes.Tag](wrapper.graph, "TAG") + /** This node represents a tag. */ + @flatgraph.help.Doc(info = """This node represents a tag.""") + def tag: Iterator[nodes.Tag] = wrappedCpg.graph._nodes(35).asInstanceOf[Iterator[nodes.Tag]] - @overflowdb.traversal.help.Doc(info = "All nodes of type TagNodePair, i.e. with label TAG_NODE_PAIR") - def tagNodePair: Iterator[nodes.TagNodePair] = - overflowdb.traversal.InitialTraversal.from[nodes.TagNodePair](wrapper.graph, "TAG_NODE_PAIR") + /** Shorthand for tag.name */ + def tag(name: String): Iterator[nodes.Tag] = tag.name(name) - @overflowdb.traversal.help.Doc(info = "All nodes of type TemplateDom, i.e. with label TEMPLATE_DOM") - def templateDom: Iterator[nodes.TemplateDom] = - overflowdb.traversal.InitialTraversal.from[nodes.TemplateDom](wrapper.graph, "TEMPLATE_DOM") + /** This node contains an arbitrary node and an associated tag node. */ + @flatgraph.help.Doc(info = """This node contains an arbitrary node and an associated tag node.""") + def tagNodePair: Iterator[nodes.TagNodePair] = wrappedCpg.graph._nodes(36).asInstanceOf[Iterator[nodes.TagNodePair]] - @overflowdb.traversal.help.Doc(info = "All nodes of type Type, i.e. with label TYPE") - def typ: Iterator[nodes.Type] = overflowdb.traversal.InitialTraversal.from[nodes.Type](wrapper.graph, "TYPE") + /** This node represents a DOM node used in template languages, e.g., JSX/TSX */ + @flatgraph.help.Doc(info = """This node represents a DOM node used in template languages, e.g., JSX/TSX""") + def templateDom: Iterator[nodes.TemplateDom] = wrappedCpg.graph._nodes(37).asInstanceOf[Iterator[nodes.TemplateDom]] - @overflowdb.traversal.help.Doc(info = "All nodes of type TypeArgument, i.e. with label TYPE_ARGUMENT") - def typeArgument: Iterator[nodes.TypeArgument] = - overflowdb.traversal.InitialTraversal.from[nodes.TypeArgument](wrapper.graph, "TYPE_ARGUMENT") + /** This node represents a type instance, that is, a concrete instantiation of a type declaration. + */ + @flatgraph.help.Doc(info = """This node represents a type instance, that is, a concrete instantiation +of a type declaration.""") + def typ: Iterator[nodes.Type] = wrappedCpg.graph._nodes(38).asInstanceOf[Iterator[nodes.Type]] - @overflowdb.traversal.help.Doc(info = "All nodes of type TypeDecl, i.e. with label TYPE_DECL") - def typeDecl: Iterator[nodes.TypeDecl] = - overflowdb.traversal.InitialTraversal.from[nodes.TypeDecl](wrapper.graph, "TYPE_DECL") + /** Shorthand for typ.name */ + def typ(name: String): Iterator[nodes.Type] = typ.name(name) - @overflowdb.traversal.help.Doc(info = "All nodes of type TypeParameter, i.e. with label TYPE_PARAMETER") + /** An (actual) type argument as used to instantiate a parametrized type, in the same way an (actual) arguments + * provides concrete values for a parameter at method call sites. As it true for arguments, the method is not + * expected to interpret the type argument. It MUST however store its code in the `CODE` field. + */ + @flatgraph.help.Doc(info = """An (actual) type argument as used to instantiate a parametrized type, in the +same way an (actual) arguments provides concrete values for a parameter +at method call sites. As it true for arguments, the method is not expected +to interpret the type argument. It MUST however store its code in the +`CODE` field.""") + def typeArgument: Iterator[nodes.TypeArgument] = + wrappedCpg.graph._nodes(39).asInstanceOf[Iterator[nodes.TypeArgument]] + + /** This node represents a type declaration as for example given by a class-, struct-, or union declaration. In + * contrast to a `TYPE` node, this node does not represent a concrete instantiation of a type, e.g., for the + * parametrized type `List[T]`, it represents `List[T]`, but not `List[Integer]` where `Integer` is a concrete type. + * + * The language frontend MUST create type declarations for all types declared in the source program and MAY provide + * type declarations for types that are not declared but referenced by the source program. If a declaration is + * present in the source program, the field `IS_EXTERNAL` is set to `false`. Otherwise, it is set to `true`. + * + * The `FULL_NAME` field specifies the type's fully-qualified name, including information about the namespace it is + * contained in if applicable, the name field is the type's short name. Line and column number information is + * specified in the optional fields `LINE_NUMBER`, `COLUMN_NUMBER`, `LINE_NUMBER_END`, and `COLUMN_NUMBER_END` and + * the name of the source file is specified in `FILENAME`. + * + * Base types can be specified via the `INHERITS_FROM_TYPE_FULL_NAME` list, where each entry contains the + * fully-qualified name of a base type. If the type is known to be an alias of another type (as for example + * introduced via the C `typedef` statement), the name of the alias is stored in `ALIAS_TYPE_FULL_NAME`. + * + * The optional `OFFSET` and `OFFSET_END` specify the start and exclusive end position of the code belonging to a + * `TYPE_DECL` within the corresponding `FILE` nodes `CONTENT` property. + * + * Finally, the fully qualified name of the program constructs that the type declaration is immediately contained in + * is stored in the `AST_PARENT_FULL_NAME` field and its type is indicated in the `AST_PARENT_TYPE` field to be one + * of `METHOD`, `TYPE_DECL` or `NAMESPACE_BLOCK`. + */ + @flatgraph.help.Doc(info = """This node represents a type declaration as for example given by a class-, struct-, +or union declaration. In contrast to a `TYPE` node, this node does not represent a +concrete instantiation of a type, e.g., for the parametrized type `List[T]`, it represents +`List[T]`, but not `List[Integer]` where `Integer` is a concrete type. + +The language frontend MUST create type declarations for all types declared in the +source program and MAY provide type declarations for types that are not declared +but referenced by the source program. If a declaration is present in the source +program, the field `IS_EXTERNAL` is set to `false`. Otherwise, it is set to `true`. + +The `FULL_NAME` field specifies the type's fully-qualified name, including +information about the namespace it is contained in if applicable, the name field +is the type's short name. Line and column number information is specified in the +optional fields `LINE_NUMBER`, `COLUMN_NUMBER`, `LINE_NUMBER_END`, and +`COLUMN_NUMBER_END` and the name of the source file is specified in `FILENAME`. + +Base types can be specified via the `INHERITS_FROM_TYPE_FULL_NAME` list, where +each entry contains the fully-qualified name of a base type. If the type is +known to be an alias of another type (as for example introduced via the C +`typedef` statement), the name of the alias is stored in `ALIAS_TYPE_FULL_NAME`. + +The optional `OFFSET` and `OFFSET_END` specify the start +and exclusive end position of the code belonging to a `TYPE_DECL` within the corresponding +`FILE` nodes `CONTENT` property. + +Finally, the fully qualified name of the program constructs that the type declaration +is immediately contained in is stored in the `AST_PARENT_FULL_NAME` field +and its type is indicated in the `AST_PARENT_TYPE` field to be one of +`METHOD`, `TYPE_DECL` or `NAMESPACE_BLOCK`.""") + def typeDecl: Iterator[nodes.TypeDecl] = wrappedCpg.graph._nodes(40).asInstanceOf[Iterator[nodes.TypeDecl]] + + /** Shorthand for typeDecl.name */ + def typeDecl(name: String): Iterator[nodes.TypeDecl] = typeDecl.name(name) + + /** This node represents a formal type parameter, that is, the type parameter as given in a type-parametrized method + * or type declaration. Examples for languages that support type parameters are Java (via Generics) and C++ (via + * templates). Apart from the standard fields of AST nodes, the type parameter carries only a `NAME` field that holds + * the parameters name. + */ + @flatgraph.help.Doc(info = """This node represents a formal type parameter, that is, the type parameter +as given in a type-parametrized method or type declaration. Examples for +languages that support type parameters are Java (via Generics) and C++ +(via templates). Apart from the standard fields of AST nodes, the type +parameter carries only a `NAME` field that holds the parameters name.""") def typeParameter: Iterator[nodes.TypeParameter] = - overflowdb.traversal.InitialTraversal.from[nodes.TypeParameter](wrapper.graph, "TYPE_PARAMETER") - - @overflowdb.traversal.help.Doc(info = "All nodes of type TypeRef, i.e. with label TYPE_REF") - def typeRef: Iterator[nodes.TypeRef] = - overflowdb.traversal.InitialTraversal.from[nodes.TypeRef](wrapper.graph, "TYPE_REF") + wrappedCpg.graph._nodes(41).asInstanceOf[Iterator[nodes.TypeParameter]] - @overflowdb.traversal.help.Doc(info = "All nodes of type Unknown, i.e. with label UNKNOWN") - def unknown: Iterator[nodes.Unknown] = - overflowdb.traversal.InitialTraversal.from[nodes.Unknown](wrapper.graph, "UNKNOWN") + /** Reference to a type/class */ + @flatgraph.help.Doc(info = """Reference to a type/class""") + def typeRef: Iterator[nodes.TypeRef] = wrappedCpg.graph._nodes(42).asInstanceOf[Iterator[nodes.TypeRef]] - @overflowdb.traversal.help.Doc(info = - "All nodes of type AstNode, i.e. with label in ANNOTATION, ANNOTATION_LITERAL, ANNOTATION_PARAMETER, ANNOTATION_PARAMETER_ASSIGN, ARRAY_INITIALIZER, BLOCK, CALL, COMMENT, CONTROL_STRUCTURE, FIELD_IDENTIFIER, FILE, IDENTIFIER, IMPORT, JUMP_LABEL, JUMP_TARGET, LITERAL, LOCAL, MEMBER, METHOD, METHOD_PARAMETER_IN, METHOD_PARAMETER_OUT, METHOD_REF, METHOD_RETURN, MODIFIER, NAMESPACE, NAMESPACE_BLOCK, RETURN, TEMPLATE_DOM, TYPE_ARGUMENT, TYPE_DECL, TYPE_PARAMETER, TYPE_REF, UNKNOWN" - ) - def astNode: Iterator[nodes.AstNode] = wrapper.graph - .nodes( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "COMMENT", - "CONTROL_STRUCTURE", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - .asScala - .asInstanceOf[Iterator[nodes.AstNode]] - - @overflowdb.traversal.help.Doc(info = "All nodes of type CallRepr, i.e. with label in CALL") - def callRepr: Iterator[nodes.CallRepr] = wrapper.graph.nodes("CALL").asScala.asInstanceOf[Iterator[nodes.CallRepr]] - - @overflowdb.traversal.help.Doc(info = - "All nodes of type CfgNode, i.e. with label in ANNOTATION, ANNOTATION_LITERAL, ARRAY_INITIALIZER, BLOCK, CALL, CONTROL_STRUCTURE, FIELD_IDENTIFIER, IDENTIFIER, JUMP_TARGET, LITERAL, METHOD, METHOD_PARAMETER_IN, METHOD_PARAMETER_OUT, METHOD_REF, METHOD_RETURN, RETURN, TEMPLATE_DOM, TYPE_REF, UNKNOWN" + /** Any AST node that the frontend would like to include in the AST but for which no suitable AST node is specified in + * the CPG specification may be included using a node of type `UNKNOWN`. + */ + @flatgraph.help.Doc(info = """Any AST node that the frontend would like to include in the AST but for +which no suitable AST node is specified in the CPG specification may be +included using a node of type `UNKNOWN`.""") + def unknown: Iterator[nodes.Unknown] = wrappedCpg.graph._nodes(43).asInstanceOf[Iterator[nodes.Unknown]] + + /** This is the base type for all nodes of the abstract syntax tree (AST). An AST node has a `CODE` and an `ORDER` + * field. The `CODE` field contains the code (verbatim) represented by the AST node. The `ORDER` field contains the + * nodes position among its siblings, encoded as an integer where the left most sibling has the position `0`. + * + * AST nodes contain optional `LINE_NUMBER` and `COLUMN_NUMBER` fields. For source-based frontends, these fields + * contain the start line number and start column number of the code represented by the node. For machine-code-based + * and bytecode-based frontends, `LINE_NUMBER` contains the address at which the code starts while `COLUMN_NUMBER` is + * undefined. subtypes: ANNOTATION, ANNOTATION_LITERAL, ANNOTATION_PARAMETER, ANNOTATION_PARAMETER_ASSIGN, + * ARRAY_INITIALIZER, BLOCK, CALL, COMMENT, CONTROL_STRUCTURE, FIELD_IDENTIFIER, FILE, IDENTIFIER, IMPORT, + * JUMP_LABEL, JUMP_TARGET, LITERAL, LOCAL, MEMBER, METHOD, METHOD_PARAMETER_IN, METHOD_PARAMETER_OUT, METHOD_REF, + * METHOD_RETURN, MODIFIER, NAMESPACE, NAMESPACE_BLOCK, RETURN, TEMPLATE_DOM, TYPE_ARGUMENT, TYPE_DECL, + * TYPE_PARAMETER, TYPE_REF, UNKNOWN + */ + @flatgraph.help.Doc( + info = """This is the base type for all nodes of the abstract syntax tree (AST). An AST +node has a `CODE` and an `ORDER` field. The `CODE` field contains the +code (verbatim) represented by the AST node. The `ORDER` field contains the +nodes position among its siblings, encoded as an integer where the left most +sibling has the position `0`. + +AST nodes contain optional `LINE_NUMBER` and `COLUMN_NUMBER` fields. For +source-based frontends, these fields contain the start line number and +start column number of the code represented by the node. +For machine-code-based and bytecode-based frontends, `LINE_NUMBER` contains +the address at which the code starts while `COLUMN_NUMBER` is undefined.""", + longInfo = + """subtypes: ANNOTATION, ANNOTATION_LITERAL, ANNOTATION_PARAMETER, ANNOTATION_PARAMETER_ASSIGN, ARRAY_INITIALIZER, BLOCK, CALL, COMMENT, CONTROL_STRUCTURE, FIELD_IDENTIFIER, FILE, IDENTIFIER, IMPORT, JUMP_LABEL, JUMP_TARGET, LITERAL, LOCAL, MEMBER, METHOD, METHOD_PARAMETER_IN, METHOD_PARAMETER_OUT, METHOD_REF, METHOD_RETURN, MODIFIER, NAMESPACE, NAMESPACE_BLOCK, RETURN, TEMPLATE_DOM, TYPE_ARGUMENT, TYPE_DECL, TYPE_PARAMETER, TYPE_REF, UNKNOWN""" ) - def cfgNode: Iterator[nodes.CfgNode] = wrapper.graph - .nodes( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CONTROL_STRUCTURE", - "FIELD_IDENTIFIER", - "IDENTIFIER", - "JUMP_TARGET", - "LITERAL", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "RETURN", - "TEMPLATE_DOM", - "TYPE_REF", - "UNKNOWN" - ) - .asScala - .asInstanceOf[Iterator[nodes.CfgNode]] - - @overflowdb.traversal.help.Doc(info = - "All nodes of type Declaration, i.e. with label in LOCAL, MEMBER, METHOD, METHOD_PARAMETER_IN, METHOD_PARAMETER_OUT" + def astNode: Iterator[nodes.AstNode] = Iterator( + this.annotation, + this.annotationLiteral, + this.annotationParameter, + this.annotationParameterAssign, + this.arrayInitializer, + this.block, + this.call, + this.comment, + this.controlStructure, + this.fieldIdentifier, + this.file, + this.identifier, + this.imports, + this.jumpLabel, + this.jumpTarget, + this.literal, + this.local, + this.member, + this.method, + this.methodParameterIn, + this.methodParameterOut, + this.methodRef, + this.methodReturn, + this.modifier, + this.namespace, + this.namespaceBlock, + this.ret, + this.templateDom, + this.typeArgument, + this.typeDecl, + this.typeParameter, + this.typeRef, + this.unknown + ).flatten + + /** This is the base class of `CALL` that language implementers may safely ignore. subtypes: CALL + */ + @flatgraph.help.Doc( + info = """This is the base class of `CALL` that language implementers may safely ignore.""", + longInfo = """subtypes: CALL""" ) - def declaration: Iterator[nodes.Declaration] = wrapper.graph - .nodes("LOCAL", "MEMBER", "METHOD", "METHOD_PARAMETER_IN", "METHOD_PARAMETER_OUT") - .asScala - .asInstanceOf[Iterator[nodes.Declaration]] + def callRepr: Iterator[nodes.CallRepr] = Iterator(this.call).flatten - @overflowdb.traversal.help.Doc(info = - "All nodes of type Expression, i.e. with label in ANNOTATION, ANNOTATION_LITERAL, ARRAY_INITIALIZER, BLOCK, CALL, CONTROL_STRUCTURE, FIELD_IDENTIFIER, IDENTIFIER, LITERAL, METHOD_REF, RETURN, TEMPLATE_DOM, TYPE_REF, UNKNOWN" + /** This is the base class for all control flow nodes. It is itself a child class of `AST_NODE`, that is, all control + * flow graph nodes are also syntax tree nodes in the CPG specification. subtypes: ANNOTATION, ANNOTATION_LITERAL, + * ARRAY_INITIALIZER, BLOCK, CALL, CONTROL_STRUCTURE, FIELD_IDENTIFIER, IDENTIFIER, JUMP_TARGET, LITERAL, METHOD, + * METHOD_PARAMETER_IN, METHOD_PARAMETER_OUT, METHOD_REF, METHOD_RETURN, RETURN, TEMPLATE_DOM, TYPE_REF, UNKNOWN + */ + @flatgraph.help.Doc( + info = """This is the base class for all control flow nodes. It is itself +a child class of `AST_NODE`, that is, all control flow graph nodes +are also syntax tree nodes in the CPG specification.""", + longInfo = + """subtypes: ANNOTATION, ANNOTATION_LITERAL, ARRAY_INITIALIZER, BLOCK, CALL, CONTROL_STRUCTURE, FIELD_IDENTIFIER, IDENTIFIER, JUMP_TARGET, LITERAL, METHOD, METHOD_PARAMETER_IN, METHOD_PARAMETER_OUT, METHOD_REF, METHOD_RETURN, RETURN, TEMPLATE_DOM, TYPE_REF, UNKNOWN""" ) - def expression: Iterator[nodes.Expression] = wrapper.graph - .nodes( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CONTROL_STRUCTURE", - "FIELD_IDENTIFIER", - "IDENTIFIER", - "LITERAL", - "METHOD_REF", - "RETURN", - "TEMPLATE_DOM", - "TYPE_REF", - "UNKNOWN" - ) - .asScala - .asInstanceOf[Iterator[nodes.Expression]] -} + def cfgNode: Iterator[nodes.CfgNode] = Iterator( + this.annotation, + this.annotationLiteral, + this.arrayInitializer, + this.block, + this.call, + this.controlStructure, + this.fieldIdentifier, + this.identifier, + this.jumpTarget, + this.literal, + this.method, + this.methodParameterIn, + this.methodParameterOut, + this.methodRef, + this.methodReturn, + this.ret, + this.templateDom, + this.typeRef, + this.unknown + ).flatten + + /** This is the base node class for all declarations. subtypes: LOCAL, MEMBER, METHOD, METHOD_PARAMETER_IN, + * METHOD_PARAMETER_OUT + */ + @flatgraph.help.Doc( + info = """This is the base node class for all declarations.""", + longInfo = """subtypes: LOCAL, MEMBER, METHOD, METHOD_PARAMETER_IN, METHOD_PARAMETER_OUT""" + ) + def declaration: Iterator[nodes.Declaration] = + Iterator(this.local, this.member, this.method, this.methodParameterIn, this.methodParameterOut).flatten + + /** `EXPRESSION` is the base class for all nodes that represent code pieces that can be evaluated. + * + * Expression may be arguments in method calls. For method calls that do not involved named parameters, the + * `ARGUMENT_INDEX` field indicates at which position in the argument list the expression occurs, e.g., an + * `ARGUMENT_INDEX` of 1 indicates that the expression is the first argument in a method call. For calls that employ + * named parameters, `ARGUMENT_INDEX` is set to -1 and the `ARGUMENT_NAME` fields holds the name of the parameter. + * subtypes: ANNOTATION, ANNOTATION_LITERAL, ARRAY_INITIALIZER, BLOCK, CALL, CONTROL_STRUCTURE, FIELD_IDENTIFIER, + * IDENTIFIER, LITERAL, METHOD_REF, RETURN, TEMPLATE_DOM, TYPE_REF, UNKNOWN + */ + @flatgraph.help.Doc( + info = """`EXPRESSION` is the base class for all nodes that represent code pieces +that can be evaluated. + + Expression may be arguments in method calls. For method calls that do + not involved named parameters, the `ARGUMENT_INDEX` field indicates at + which position in the argument list the expression occurs, e.g., an + `ARGUMENT_INDEX` of 1 indicates that the expression is the first argument + in a method call. For calls that employ named parameters, `ARGUMENT_INDEX` + is set to -1 and the `ARGUMENT_NAME` fields holds the name of the parameter.""", + longInfo = + """subtypes: ANNOTATION, ANNOTATION_LITERAL, ARRAY_INITIALIZER, BLOCK, CALL, CONTROL_STRUCTURE, FIELD_IDENTIFIER, IDENTIFIER, LITERAL, METHOD_REF, RETURN, TEMPLATE_DOM, TYPE_REF, UNKNOWN""" + ) + def expression: Iterator[nodes.Expression] = Iterator( + this.annotation, + this.annotationLiteral, + this.arrayInitializer, + this.block, + this.call, + this.controlStructure, + this.fieldIdentifier, + this.identifier, + this.literal, + this.methodRef, + this.ret, + this.templateDom, + this.typeRef, + this.unknown + ).flatten -/** Domain-specific version of diffgraph builder. This is to allow schema checking before diffgraph application in the - * future, as well as a schema-aware point for providing backwards compatibility in odbv2. - */ -class DiffGraphBuilder extends overflowdb.BatchedUpdate.DiffGraphBuilder { - override def absorb(other: overflowdb.BatchedUpdate.DiffGraphBuilder): this.type = { super.absorb(other); this } - override def addNode(node: overflowdb.DetachedNodeData): this.type = { super.addNode(node); this } - override def addNode(label: String, keyvalues: Any*): this.type = { super.addNode(label, keyvalues: _*); this } - override def addEdge( - src: overflowdb.NodeOrDetachedNode, - dst: overflowdb.NodeOrDetachedNode, - label: String - ): this.type = { super.addEdge(src, dst, label); this } - override def addEdge( - src: overflowdb.NodeOrDetachedNode, - dst: overflowdb.NodeOrDetachedNode, - label: String, - properties: Any* - ): this.type = { super.addEdge(src, dst, label, properties: _*); this } - override def setNodeProperty(node: overflowdb.Node, label: String, property: Any): this.type = { - super.setNodeProperty(node, label, property); this - } - override def removeNode(node: overflowdb.Node): this.type = { super.removeNode(node); this } - override def removeEdge(edge: overflowdb.Edge): this.type = { super.removeEdge(edge); this } } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/DispatchTypes.java b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/DispatchTypes.java index 981aa4327..151e9ee20 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/DispatchTypes.java +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/DispatchTypes.java @@ -1,8 +1,5 @@ package io.shiftleft.codepropertygraph.generated; -import overflowdb.*; - -import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -17,7 +14,6 @@ public class DispatchTypes { /** For macro expansions, code is inlined. */ public static final String INLINED = "INLINED"; - public static Set ALL = new HashSet() {{ add(STATIC_DISPATCH); add(DYNAMIC_DISPATCH); diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/EdgeTypes.java b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/EdgeTypes.java index 6bacc71bd..5de3dfe23 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/EdgeTypes.java +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/EdgeTypes.java @@ -1,8 +1,5 @@ package io.shiftleft.codepropertygraph.generated; -import overflowdb.*; - -import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -107,7 +104,6 @@ other words, there is a (name, signature) pair that can be resolved for the type /** Edges from nodes to the tags they are tagged by. */ public static final String TAGGED_BY = "TAGGED_BY"; - public static Set ALL = new HashSet() {{ add(ALIAS_OF); add(ARGUMENT); diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/EvaluationStrategies.java b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/EvaluationStrategies.java index bad48184c..34f39d1c9 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/EvaluationStrategies.java +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/EvaluationStrategies.java @@ -1,8 +1,5 @@ package io.shiftleft.codepropertygraph.generated; -import overflowdb.*; - -import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -17,7 +14,6 @@ public class EvaluationStrategies { /** A parameter or return of a function passed by value which means a flat copy is used */ public static final String BY_VALUE = "BY_VALUE"; - public static Set ALL = new HashSet() {{ add(BY_REFERENCE); add(BY_SHARING); diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala new file mode 100644 index 000000000..98dc997a4 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala @@ -0,0 +1,1552 @@ +package io.shiftleft.codepropertygraph.generated + +import flatgraph.FormalQtyType + +object GraphSchema extends flatgraph.Schema { + private val nodeLabels = IndexedSeq( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CLOSURE_BINDING", + "COMMENT", + "CONFIG_FILE", + "CONTROL_STRUCTURE", + "DEPENDENCY", + "FIELD_IDENTIFIER", + "FILE", + "FINDING", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "KEY_VALUE_PAIR", + "LITERAL", + "LOCAL", + "LOCATION", + "MEMBER", + "META_DATA", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TAG", + "TAG_NODE_PAIR", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + val nodeKindByLabel = nodeLabels.zipWithIndex.toMap + val edgeLabels = Array( + "ALIAS_OF", + "ARGUMENT", + "AST", + "BINDS", + "BINDS_TO", + "CALL", + "CAPTURE", + "CAPTURED_BY", + "CDG", + "CFG", + "CONDITION", + "CONTAINS", + "DOMINATE", + "EVAL_TYPE", + "IMPORTS", + "INHERITS_FROM", + "IS_CALL_FOR_IMPORT", + "PARAMETER_LINK", + "POST_DOMINATE", + "REACHING_DEF", + "RECEIVER", + "REF", + "SOURCE_FILE", + "TAGGED_BY" + ) + val edgeKindByLabel = edgeLabels.zipWithIndex.toMap + val edgePropertyAllocators: Array[Int => Array[?]] = Array( + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => null, + size => Array.fill(size)("") /* label = REACHING_DEF, id = 19 */, + size => null, + size => null, + size => null, + size => null + ) + val nodeFactories: Array[(flatgraph.Graph, Int) => nodes.StoredNode] = Array( + (g, seq) => new nodes.Annotation(g, seq), + (g, seq) => new nodes.AnnotationLiteral(g, seq), + (g, seq) => new nodes.AnnotationParameter(g, seq), + (g, seq) => new nodes.AnnotationParameterAssign(g, seq), + (g, seq) => new nodes.ArrayInitializer(g, seq), + (g, seq) => new nodes.Binding(g, seq), + (g, seq) => new nodes.Block(g, seq), + (g, seq) => new nodes.Call(g, seq), + (g, seq) => new nodes.ClosureBinding(g, seq), + (g, seq) => new nodes.Comment(g, seq), + (g, seq) => new nodes.ConfigFile(g, seq), + (g, seq) => new nodes.ControlStructure(g, seq), + (g, seq) => new nodes.Dependency(g, seq), + (g, seq) => new nodes.FieldIdentifier(g, seq), + (g, seq) => new nodes.File(g, seq), + (g, seq) => new nodes.Finding(g, seq), + (g, seq) => new nodes.Identifier(g, seq), + (g, seq) => new nodes.Import(g, seq), + (g, seq) => new nodes.JumpLabel(g, seq), + (g, seq) => new nodes.JumpTarget(g, seq), + (g, seq) => new nodes.KeyValuePair(g, seq), + (g, seq) => new nodes.Literal(g, seq), + (g, seq) => new nodes.Local(g, seq), + (g, seq) => new nodes.Location(g, seq), + (g, seq) => new nodes.Member(g, seq), + (g, seq) => new nodes.MetaData(g, seq), + (g, seq) => new nodes.Method(g, seq), + (g, seq) => new nodes.MethodParameterIn(g, seq), + (g, seq) => new nodes.MethodParameterOut(g, seq), + (g, seq) => new nodes.MethodRef(g, seq), + (g, seq) => new nodes.MethodReturn(g, seq), + (g, seq) => new nodes.Modifier(g, seq), + (g, seq) => new nodes.Namespace(g, seq), + (g, seq) => new nodes.NamespaceBlock(g, seq), + (g, seq) => new nodes.Return(g, seq), + (g, seq) => new nodes.Tag(g, seq), + (g, seq) => new nodes.TagNodePair(g, seq), + (g, seq) => new nodes.TemplateDom(g, seq), + (g, seq) => new nodes.Type(g, seq), + (g, seq) => new nodes.TypeArgument(g, seq), + (g, seq) => new nodes.TypeDecl(g, seq), + (g, seq) => new nodes.TypeParameter(g, seq), + (g, seq) => new nodes.TypeRef(g, seq), + (g, seq) => new nodes.Unknown(g, seq) + ) + val edgeFactories: Array[(flatgraph.GNode, flatgraph.GNode, Int, Any) => flatgraph.Edge] = Array( + (s, d, subseq, p) => new edges.AliasOf(s, d, subseq, p), + (s, d, subseq, p) => new edges.Argument(s, d, subseq, p), + (s, d, subseq, p) => new edges.Ast(s, d, subseq, p), + (s, d, subseq, p) => new edges.Binds(s, d, subseq, p), + (s, d, subseq, p) => new edges.BindsTo(s, d, subseq, p), + (s, d, subseq, p) => new edges.Call(s, d, subseq, p), + (s, d, subseq, p) => new edges.Capture(s, d, subseq, p), + (s, d, subseq, p) => new edges.CapturedBy(s, d, subseq, p), + (s, d, subseq, p) => new edges.Cdg(s, d, subseq, p), + (s, d, subseq, p) => new edges.Cfg(s, d, subseq, p), + (s, d, subseq, p) => new edges.Condition(s, d, subseq, p), + (s, d, subseq, p) => new edges.Contains(s, d, subseq, p), + (s, d, subseq, p) => new edges.Dominate(s, d, subseq, p), + (s, d, subseq, p) => new edges.EvalType(s, d, subseq, p), + (s, d, subseq, p) => new edges.Imports(s, d, subseq, p), + (s, d, subseq, p) => new edges.InheritsFrom(s, d, subseq, p), + (s, d, subseq, p) => new edges.IsCallForImport(s, d, subseq, p), + (s, d, subseq, p) => new edges.ParameterLink(s, d, subseq, p), + (s, d, subseq, p) => new edges.PostDominate(s, d, subseq, p), + (s, d, subseq, p) => new edges.ReachingDef(s, d, subseq, p), + (s, d, subseq, p) => new edges.Receiver(s, d, subseq, p), + (s, d, subseq, p) => new edges.Ref(s, d, subseq, p), + (s, d, subseq, p) => new edges.SourceFile(s, d, subseq, p), + (s, d, subseq, p) => new edges.TaggedBy(s, d, subseq, p) + ) + val nodePropertyAllocators: Array[Int => Array[?]] = Array( + size => new Array[String](size), + size => new Array[Int](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[Int](size), + size => new Array[Int](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[Boolean](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[Int](size), + size => new Array[String](size), + size => new Array[Boolean](size), + size => new Array[Boolean](size), + size => new Array[Boolean](size), + size => new Array[Boolean](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[Int](size), + size => new Array[Int](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[Int](size), + size => new Array[Int](size), + size => new Array[Int](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + size => new Array[String](size), + 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), + size => new Array[flatgraph.GNode](size) + ) + val normalNodePropertyNames = Array( + "ALIAS_TYPE_FULL_NAME", + "ARGUMENT_INDEX", + "ARGUMENT_NAME", + "AST_PARENT_FULL_NAME", + "AST_PARENT_TYPE", + "CANONICAL_NAME", + "CLASS_NAME", + "CLASS_SHORT_NAME", + "CLOSURE_BINDING_ID", + "CLOSURE_ORIGINAL_NAME", + "CODE", + "COLUMN_NUMBER", + "COLUMN_NUMBER_END", + "CONTAINED_REF", + "CONTENT", + "CONTROL_STRUCTURE_TYPE", + "DEPENDENCY_GROUP_ID", + "DISPATCH_TYPE", + "DYNAMIC_TYPE_HINT_FULL_NAME", + "EVALUATION_STRATEGY", + "EXPLICIT_AS", + "FILENAME", + "FULL_NAME", + "HASH", + "IMPORTED_AS", + "IMPORTED_ENTITY", + "INDEX", + "INHERITS_FROM_TYPE_FULL_NAME", + "IS_EXPLICIT", + "IS_EXTERNAL", + "IS_VARIADIC", + "IS_WILDCARD", + "KEY", + "LANGUAGE", + "LINE_NUMBER", + "LINE_NUMBER_END", + "METHOD_FULL_NAME", + "METHOD_SHORT_NAME", + "MODIFIER_TYPE", + "NAME", + "NODE_LABEL", + "OFFSET", + "OFFSET_END", + "ORDER", + "OVERLAYS", + "PACKAGE_NAME", + "PARSER_TYPE_NAME", + "POSSIBLE_TYPES", + "ROOT", + "SIGNATURE", + "SYMBOL", + "TYPE_DECL_FULL_NAME", + "TYPE_FULL_NAME", + "VALUE", + "VERSION" + ) + val nodePropertyByLabel = normalNodePropertyNames.zipWithIndex.toMap + .updated("evidence", 55) + .updated("keyValuePairs", 56) + .updated("node", 57) + .updated("tag", 58) + val nodePropertyDescriptors: Array[FormalQtyType.FormalQuantity | FormalQtyType.FormalType] = { + val nodePropertyDescriptors = new Array[FormalQtyType.FormalQuantity | FormalQtyType.FormalType](5192) + for (idx <- Range(0, 5192)) { + nodePropertyDescriptors(idx) = + if ((idx & 1) == 0) FormalQtyType.NothingType + else FormalQtyType.QtyNone + } + + nodePropertyDescriptors(88) = FormalQtyType.IntType // ANNOTATION.ARGUMENT_INDEX + nodePropertyDescriptors(89) = FormalQtyType.QtyOne + nodePropertyDescriptors(176) = FormalQtyType.StringType // ANNOTATION.ARGUMENT_NAME + nodePropertyDescriptors(177) = FormalQtyType.QtyOption + nodePropertyDescriptors(880) = FormalQtyType.StringType // ANNOTATION.CODE + nodePropertyDescriptors(881) = FormalQtyType.QtyOne + nodePropertyDescriptors(968) = FormalQtyType.IntType // ANNOTATION.COLUMN_NUMBER + nodePropertyDescriptors(969) = FormalQtyType.QtyOption + nodePropertyDescriptors(1936) = FormalQtyType.StringType // ANNOTATION.FULL_NAME + nodePropertyDescriptors(1937) = FormalQtyType.QtyOne + nodePropertyDescriptors(2992) = FormalQtyType.IntType // ANNOTATION.LINE_NUMBER + nodePropertyDescriptors(2993) = FormalQtyType.QtyOption + nodePropertyDescriptors(3432) = FormalQtyType.StringType // ANNOTATION.NAME + nodePropertyDescriptors(3433) = FormalQtyType.QtyOne + nodePropertyDescriptors(3784) = FormalQtyType.IntType // ANNOTATION.ORDER + nodePropertyDescriptors(3785) = FormalQtyType.QtyOne + nodePropertyDescriptors(90) = FormalQtyType.IntType // ANNOTATION_LITERAL.ARGUMENT_INDEX + nodePropertyDescriptors(91) = FormalQtyType.QtyOne + nodePropertyDescriptors(178) = FormalQtyType.StringType // ANNOTATION_LITERAL.ARGUMENT_NAME + nodePropertyDescriptors(179) = FormalQtyType.QtyOption + nodePropertyDescriptors(882) = FormalQtyType.StringType // ANNOTATION_LITERAL.CODE + nodePropertyDescriptors(883) = FormalQtyType.QtyOne + nodePropertyDescriptors(970) = FormalQtyType.IntType // ANNOTATION_LITERAL.COLUMN_NUMBER + nodePropertyDescriptors(971) = FormalQtyType.QtyOption + nodePropertyDescriptors(2994) = FormalQtyType.IntType // ANNOTATION_LITERAL.LINE_NUMBER + nodePropertyDescriptors(2995) = FormalQtyType.QtyOption + nodePropertyDescriptors(3434) = FormalQtyType.StringType // ANNOTATION_LITERAL.NAME + nodePropertyDescriptors(3435) = FormalQtyType.QtyOne + nodePropertyDescriptors(3786) = FormalQtyType.IntType // ANNOTATION_LITERAL.ORDER + nodePropertyDescriptors(3787) = FormalQtyType.QtyOne + nodePropertyDescriptors(884) = FormalQtyType.StringType // ANNOTATION_PARAMETER.CODE + nodePropertyDescriptors(885) = FormalQtyType.QtyOne + nodePropertyDescriptors(972) = FormalQtyType.IntType // ANNOTATION_PARAMETER.COLUMN_NUMBER + nodePropertyDescriptors(973) = FormalQtyType.QtyOption + nodePropertyDescriptors(2996) = FormalQtyType.IntType // ANNOTATION_PARAMETER.LINE_NUMBER + nodePropertyDescriptors(2997) = FormalQtyType.QtyOption + nodePropertyDescriptors(3788) = FormalQtyType.IntType // ANNOTATION_PARAMETER.ORDER + nodePropertyDescriptors(3789) = FormalQtyType.QtyOne + nodePropertyDescriptors(886) = FormalQtyType.StringType // ANNOTATION_PARAMETER_ASSIGN.CODE + nodePropertyDescriptors(887) = FormalQtyType.QtyOne + nodePropertyDescriptors(974) = FormalQtyType.IntType // ANNOTATION_PARAMETER_ASSIGN.COLUMN_NUMBER + nodePropertyDescriptors(975) = FormalQtyType.QtyOption + nodePropertyDescriptors(2998) = FormalQtyType.IntType // ANNOTATION_PARAMETER_ASSIGN.LINE_NUMBER + nodePropertyDescriptors(2999) = FormalQtyType.QtyOption + nodePropertyDescriptors(3790) = FormalQtyType.IntType // ANNOTATION_PARAMETER_ASSIGN.ORDER + nodePropertyDescriptors(3791) = FormalQtyType.QtyOne + nodePropertyDescriptors(96) = FormalQtyType.IntType // ARRAY_INITIALIZER.ARGUMENT_INDEX + nodePropertyDescriptors(97) = FormalQtyType.QtyOne + nodePropertyDescriptors(184) = FormalQtyType.StringType // ARRAY_INITIALIZER.ARGUMENT_NAME + nodePropertyDescriptors(185) = FormalQtyType.QtyOption + nodePropertyDescriptors(888) = FormalQtyType.StringType // ARRAY_INITIALIZER.CODE + nodePropertyDescriptors(889) = FormalQtyType.QtyOne + nodePropertyDescriptors(976) = FormalQtyType.IntType // ARRAY_INITIALIZER.COLUMN_NUMBER + nodePropertyDescriptors(977) = FormalQtyType.QtyOption + nodePropertyDescriptors(3000) = FormalQtyType.IntType // ARRAY_INITIALIZER.LINE_NUMBER + nodePropertyDescriptors(3001) = FormalQtyType.QtyOption + nodePropertyDescriptors(3792) = FormalQtyType.IntType // ARRAY_INITIALIZER.ORDER + nodePropertyDescriptors(3793) = FormalQtyType.QtyOne + nodePropertyDescriptors(3178) = FormalQtyType.StringType // BINDING.METHOD_FULL_NAME + nodePropertyDescriptors(3179) = FormalQtyType.QtyOne + nodePropertyDescriptors(3442) = FormalQtyType.StringType // BINDING.NAME + nodePropertyDescriptors(3443) = FormalQtyType.QtyOne + nodePropertyDescriptors(4322) = FormalQtyType.StringType // BINDING.SIGNATURE + nodePropertyDescriptors(4323) = FormalQtyType.QtyOne + nodePropertyDescriptors(100) = FormalQtyType.IntType // BLOCK.ARGUMENT_INDEX + nodePropertyDescriptors(101) = FormalQtyType.QtyOne + nodePropertyDescriptors(188) = FormalQtyType.StringType // BLOCK.ARGUMENT_NAME + nodePropertyDescriptors(189) = FormalQtyType.QtyOption + nodePropertyDescriptors(892) = FormalQtyType.StringType // BLOCK.CODE + nodePropertyDescriptors(893) = FormalQtyType.QtyOne + nodePropertyDescriptors(980) = FormalQtyType.IntType // BLOCK.COLUMN_NUMBER + nodePropertyDescriptors(981) = FormalQtyType.QtyOption + nodePropertyDescriptors(1596) = FormalQtyType.StringType // BLOCK.DYNAMIC_TYPE_HINT_FULL_NAME + nodePropertyDescriptors(1597) = FormalQtyType.QtyMulti + nodePropertyDescriptors(3004) = FormalQtyType.IntType // BLOCK.LINE_NUMBER + nodePropertyDescriptors(3005) = FormalQtyType.QtyOption + nodePropertyDescriptors(3796) = FormalQtyType.IntType // BLOCK.ORDER + nodePropertyDescriptors(3797) = FormalQtyType.QtyOne + nodePropertyDescriptors(4148) = FormalQtyType.StringType // BLOCK.POSSIBLE_TYPES + nodePropertyDescriptors(4149) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4588) = FormalQtyType.StringType // BLOCK.TYPE_FULL_NAME + nodePropertyDescriptors(4589) = FormalQtyType.QtyOne + nodePropertyDescriptors(102) = FormalQtyType.IntType // CALL.ARGUMENT_INDEX + nodePropertyDescriptors(103) = FormalQtyType.QtyOne + nodePropertyDescriptors(190) = FormalQtyType.StringType // CALL.ARGUMENT_NAME + nodePropertyDescriptors(191) = FormalQtyType.QtyOption + nodePropertyDescriptors(894) = FormalQtyType.StringType // CALL.CODE + nodePropertyDescriptors(895) = FormalQtyType.QtyOne + nodePropertyDescriptors(982) = FormalQtyType.IntType // CALL.COLUMN_NUMBER + nodePropertyDescriptors(983) = FormalQtyType.QtyOption + nodePropertyDescriptors(1510) = FormalQtyType.StringType // CALL.DISPATCH_TYPE + nodePropertyDescriptors(1511) = FormalQtyType.QtyOne + nodePropertyDescriptors(1598) = FormalQtyType.StringType // CALL.DYNAMIC_TYPE_HINT_FULL_NAME + nodePropertyDescriptors(1599) = FormalQtyType.QtyMulti + nodePropertyDescriptors(3006) = FormalQtyType.IntType // CALL.LINE_NUMBER + nodePropertyDescriptors(3007) = FormalQtyType.QtyOption + nodePropertyDescriptors(3182) = FormalQtyType.StringType // CALL.METHOD_FULL_NAME + nodePropertyDescriptors(3183) = FormalQtyType.QtyOne + nodePropertyDescriptors(3446) = FormalQtyType.StringType // CALL.NAME + nodePropertyDescriptors(3447) = FormalQtyType.QtyOne + nodePropertyDescriptors(3798) = FormalQtyType.IntType // CALL.ORDER + nodePropertyDescriptors(3799) = FormalQtyType.QtyOne + nodePropertyDescriptors(4150) = FormalQtyType.StringType // CALL.POSSIBLE_TYPES + nodePropertyDescriptors(4151) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4326) = FormalQtyType.StringType // CALL.SIGNATURE + nodePropertyDescriptors(4327) = FormalQtyType.QtyOne + nodePropertyDescriptors(4590) = FormalQtyType.StringType // CALL.TYPE_FULL_NAME + nodePropertyDescriptors(4591) = FormalQtyType.QtyOne + nodePropertyDescriptors(720) = FormalQtyType.StringType // CLOSURE_BINDING.CLOSURE_BINDING_ID + nodePropertyDescriptors(721) = FormalQtyType.QtyOption + nodePropertyDescriptors(808) = FormalQtyType.StringType // CLOSURE_BINDING.CLOSURE_ORIGINAL_NAME + nodePropertyDescriptors(809) = FormalQtyType.QtyOption + nodePropertyDescriptors(1688) = FormalQtyType.StringType // CLOSURE_BINDING.EVALUATION_STRATEGY + nodePropertyDescriptors(1689) = FormalQtyType.QtyOne + nodePropertyDescriptors(898) = FormalQtyType.StringType // COMMENT.CODE + nodePropertyDescriptors(899) = FormalQtyType.QtyOne + nodePropertyDescriptors(986) = FormalQtyType.IntType // COMMENT.COLUMN_NUMBER + nodePropertyDescriptors(987) = FormalQtyType.QtyOption + nodePropertyDescriptors(1866) = FormalQtyType.StringType // COMMENT.FILENAME + nodePropertyDescriptors(1867) = FormalQtyType.QtyOne + nodePropertyDescriptors(3010) = FormalQtyType.IntType // COMMENT.LINE_NUMBER + nodePropertyDescriptors(3011) = FormalQtyType.QtyOption + nodePropertyDescriptors(3802) = FormalQtyType.IntType // COMMENT.ORDER + nodePropertyDescriptors(3803) = FormalQtyType.QtyOne + nodePropertyDescriptors(1252) = FormalQtyType.StringType // CONFIG_FILE.CONTENT + nodePropertyDescriptors(1253) = FormalQtyType.QtyOne + nodePropertyDescriptors(3452) = FormalQtyType.StringType // CONFIG_FILE.NAME + nodePropertyDescriptors(3453) = FormalQtyType.QtyOne + nodePropertyDescriptors(110) = FormalQtyType.IntType // CONTROL_STRUCTURE.ARGUMENT_INDEX + nodePropertyDescriptors(111) = FormalQtyType.QtyOne + nodePropertyDescriptors(198) = FormalQtyType.StringType // CONTROL_STRUCTURE.ARGUMENT_NAME + nodePropertyDescriptors(199) = FormalQtyType.QtyOption + nodePropertyDescriptors(902) = FormalQtyType.StringType // CONTROL_STRUCTURE.CODE + nodePropertyDescriptors(903) = FormalQtyType.QtyOne + nodePropertyDescriptors(990) = FormalQtyType.IntType // CONTROL_STRUCTURE.COLUMN_NUMBER + nodePropertyDescriptors(991) = FormalQtyType.QtyOption + nodePropertyDescriptors(1342) = FormalQtyType.StringType // CONTROL_STRUCTURE.CONTROL_STRUCTURE_TYPE + nodePropertyDescriptors(1343) = FormalQtyType.QtyOne + nodePropertyDescriptors(3014) = FormalQtyType.IntType // CONTROL_STRUCTURE.LINE_NUMBER + nodePropertyDescriptors(3015) = FormalQtyType.QtyOption + nodePropertyDescriptors(3806) = FormalQtyType.IntType // CONTROL_STRUCTURE.ORDER + nodePropertyDescriptors(3807) = FormalQtyType.QtyOne + nodePropertyDescriptors(4070) = FormalQtyType.StringType // CONTROL_STRUCTURE.PARSER_TYPE_NAME + nodePropertyDescriptors(4071) = FormalQtyType.QtyOne + nodePropertyDescriptors(1432) = FormalQtyType.StringType // DEPENDENCY.DEPENDENCY_GROUP_ID + nodePropertyDescriptors(1433) = FormalQtyType.QtyOption + nodePropertyDescriptors(3456) = FormalQtyType.StringType // DEPENDENCY.NAME + nodePropertyDescriptors(3457) = FormalQtyType.QtyOne + nodePropertyDescriptors(4776) = FormalQtyType.StringType // DEPENDENCY.VERSION + nodePropertyDescriptors(4777) = FormalQtyType.QtyOne + nodePropertyDescriptors(114) = FormalQtyType.IntType // FIELD_IDENTIFIER.ARGUMENT_INDEX + nodePropertyDescriptors(115) = FormalQtyType.QtyOne + nodePropertyDescriptors(202) = FormalQtyType.StringType // FIELD_IDENTIFIER.ARGUMENT_NAME + nodePropertyDescriptors(203) = FormalQtyType.QtyOption + nodePropertyDescriptors(466) = FormalQtyType.StringType // FIELD_IDENTIFIER.CANONICAL_NAME + nodePropertyDescriptors(467) = FormalQtyType.QtyOne + nodePropertyDescriptors(906) = FormalQtyType.StringType // FIELD_IDENTIFIER.CODE + nodePropertyDescriptors(907) = FormalQtyType.QtyOne + nodePropertyDescriptors(994) = FormalQtyType.IntType // FIELD_IDENTIFIER.COLUMN_NUMBER + nodePropertyDescriptors(995) = FormalQtyType.QtyOption + nodePropertyDescriptors(3018) = FormalQtyType.IntType // FIELD_IDENTIFIER.LINE_NUMBER + nodePropertyDescriptors(3019) = FormalQtyType.QtyOption + nodePropertyDescriptors(3810) = FormalQtyType.IntType // FIELD_IDENTIFIER.ORDER + nodePropertyDescriptors(3811) = FormalQtyType.QtyOne + nodePropertyDescriptors(908) = FormalQtyType.StringType // FILE.CODE + nodePropertyDescriptors(909) = FormalQtyType.QtyOne + nodePropertyDescriptors(996) = FormalQtyType.IntType // FILE.COLUMN_NUMBER + nodePropertyDescriptors(997) = FormalQtyType.QtyOption + nodePropertyDescriptors(1260) = FormalQtyType.StringType // FILE.CONTENT + nodePropertyDescriptors(1261) = FormalQtyType.QtyOne + nodePropertyDescriptors(2052) = FormalQtyType.StringType // FILE.HASH + nodePropertyDescriptors(2053) = FormalQtyType.QtyOption + nodePropertyDescriptors(3020) = FormalQtyType.IntType // FILE.LINE_NUMBER + nodePropertyDescriptors(3021) = FormalQtyType.QtyOption + nodePropertyDescriptors(3460) = FormalQtyType.StringType // FILE.NAME + nodePropertyDescriptors(3461) = FormalQtyType.QtyOne + nodePropertyDescriptors(3812) = FormalQtyType.IntType // FILE.ORDER + nodePropertyDescriptors(3813) = FormalQtyType.QtyOne + nodePropertyDescriptors(4870) = FormalQtyType.RefType // FINDING.evidence + nodePropertyDescriptors(4871) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4958) = FormalQtyType.RefType // FINDING.keyValuePairs + nodePropertyDescriptors(4959) = FormalQtyType.QtyMulti + nodePropertyDescriptors(120) = FormalQtyType.IntType // IDENTIFIER.ARGUMENT_INDEX + nodePropertyDescriptors(121) = FormalQtyType.QtyOne + nodePropertyDescriptors(208) = FormalQtyType.StringType // IDENTIFIER.ARGUMENT_NAME + nodePropertyDescriptors(209) = FormalQtyType.QtyOption + nodePropertyDescriptors(912) = FormalQtyType.StringType // IDENTIFIER.CODE + nodePropertyDescriptors(913) = FormalQtyType.QtyOne + nodePropertyDescriptors(1000) = FormalQtyType.IntType // IDENTIFIER.COLUMN_NUMBER + nodePropertyDescriptors(1001) = FormalQtyType.QtyOption + nodePropertyDescriptors(1616) = FormalQtyType.StringType // IDENTIFIER.DYNAMIC_TYPE_HINT_FULL_NAME + nodePropertyDescriptors(1617) = FormalQtyType.QtyMulti + nodePropertyDescriptors(3024) = FormalQtyType.IntType // IDENTIFIER.LINE_NUMBER + nodePropertyDescriptors(3025) = FormalQtyType.QtyOption + nodePropertyDescriptors(3464) = FormalQtyType.StringType // IDENTIFIER.NAME + nodePropertyDescriptors(3465) = FormalQtyType.QtyOne + nodePropertyDescriptors(3816) = FormalQtyType.IntType // IDENTIFIER.ORDER + nodePropertyDescriptors(3817) = FormalQtyType.QtyOne + nodePropertyDescriptors(4168) = FormalQtyType.StringType // IDENTIFIER.POSSIBLE_TYPES + nodePropertyDescriptors(4169) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4608) = FormalQtyType.StringType // IDENTIFIER.TYPE_FULL_NAME + nodePropertyDescriptors(4609) = FormalQtyType.QtyOne + nodePropertyDescriptors(914) = FormalQtyType.StringType // IMPORT.CODE + nodePropertyDescriptors(915) = FormalQtyType.QtyOne + nodePropertyDescriptors(1002) = FormalQtyType.IntType // IMPORT.COLUMN_NUMBER + nodePropertyDescriptors(1003) = FormalQtyType.QtyOption + nodePropertyDescriptors(1794) = FormalQtyType.BoolType // IMPORT.EXPLICIT_AS + nodePropertyDescriptors(1795) = FormalQtyType.QtyOption + nodePropertyDescriptors(2146) = FormalQtyType.StringType // IMPORT.IMPORTED_AS + nodePropertyDescriptors(2147) = FormalQtyType.QtyOption + nodePropertyDescriptors(2234) = FormalQtyType.StringType // IMPORT.IMPORTED_ENTITY + nodePropertyDescriptors(2235) = FormalQtyType.QtyOption + nodePropertyDescriptors(2498) = FormalQtyType.BoolType // IMPORT.IS_EXPLICIT + nodePropertyDescriptors(2499) = FormalQtyType.QtyOption + nodePropertyDescriptors(2762) = FormalQtyType.BoolType // IMPORT.IS_WILDCARD + nodePropertyDescriptors(2763) = FormalQtyType.QtyOption + nodePropertyDescriptors(3026) = FormalQtyType.IntType // IMPORT.LINE_NUMBER + nodePropertyDescriptors(3027) = FormalQtyType.QtyOption + nodePropertyDescriptors(3818) = FormalQtyType.IntType // IMPORT.ORDER + nodePropertyDescriptors(3819) = FormalQtyType.QtyOne + nodePropertyDescriptors(916) = FormalQtyType.StringType // JUMP_LABEL.CODE + nodePropertyDescriptors(917) = FormalQtyType.QtyOne + nodePropertyDescriptors(1004) = FormalQtyType.IntType // JUMP_LABEL.COLUMN_NUMBER + nodePropertyDescriptors(1005) = FormalQtyType.QtyOption + nodePropertyDescriptors(3028) = FormalQtyType.IntType // JUMP_LABEL.LINE_NUMBER + nodePropertyDescriptors(3029) = FormalQtyType.QtyOption + nodePropertyDescriptors(3468) = FormalQtyType.StringType // JUMP_LABEL.NAME + nodePropertyDescriptors(3469) = FormalQtyType.QtyOne + nodePropertyDescriptors(3820) = FormalQtyType.IntType // JUMP_LABEL.ORDER + nodePropertyDescriptors(3821) = FormalQtyType.QtyOne + nodePropertyDescriptors(4084) = FormalQtyType.StringType // JUMP_LABEL.PARSER_TYPE_NAME + nodePropertyDescriptors(4085) = FormalQtyType.QtyOne + nodePropertyDescriptors(126) = FormalQtyType.IntType // JUMP_TARGET.ARGUMENT_INDEX + nodePropertyDescriptors(127) = FormalQtyType.QtyOne + nodePropertyDescriptors(918) = FormalQtyType.StringType // JUMP_TARGET.CODE + nodePropertyDescriptors(919) = FormalQtyType.QtyOne + nodePropertyDescriptors(1006) = FormalQtyType.IntType // JUMP_TARGET.COLUMN_NUMBER + nodePropertyDescriptors(1007) = FormalQtyType.QtyOption + nodePropertyDescriptors(3030) = FormalQtyType.IntType // JUMP_TARGET.LINE_NUMBER + nodePropertyDescriptors(3031) = FormalQtyType.QtyOption + nodePropertyDescriptors(3470) = FormalQtyType.StringType // JUMP_TARGET.NAME + nodePropertyDescriptors(3471) = FormalQtyType.QtyOne + nodePropertyDescriptors(3822) = FormalQtyType.IntType // JUMP_TARGET.ORDER + nodePropertyDescriptors(3823) = FormalQtyType.QtyOne + nodePropertyDescriptors(4086) = FormalQtyType.StringType // JUMP_TARGET.PARSER_TYPE_NAME + nodePropertyDescriptors(4087) = FormalQtyType.QtyOne + nodePropertyDescriptors(2856) = FormalQtyType.StringType // KEY_VALUE_PAIR.KEY + nodePropertyDescriptors(2857) = FormalQtyType.QtyOne + nodePropertyDescriptors(4704) = FormalQtyType.StringType // KEY_VALUE_PAIR.VALUE + nodePropertyDescriptors(4705) = FormalQtyType.QtyOne + nodePropertyDescriptors(130) = FormalQtyType.IntType // LITERAL.ARGUMENT_INDEX + nodePropertyDescriptors(131) = FormalQtyType.QtyOne + nodePropertyDescriptors(218) = FormalQtyType.StringType // LITERAL.ARGUMENT_NAME + nodePropertyDescriptors(219) = FormalQtyType.QtyOption + nodePropertyDescriptors(922) = FormalQtyType.StringType // LITERAL.CODE + nodePropertyDescriptors(923) = FormalQtyType.QtyOne + nodePropertyDescriptors(1010) = FormalQtyType.IntType // LITERAL.COLUMN_NUMBER + nodePropertyDescriptors(1011) = FormalQtyType.QtyOption + nodePropertyDescriptors(1626) = FormalQtyType.StringType // LITERAL.DYNAMIC_TYPE_HINT_FULL_NAME + nodePropertyDescriptors(1627) = FormalQtyType.QtyMulti + nodePropertyDescriptors(3034) = FormalQtyType.IntType // LITERAL.LINE_NUMBER + nodePropertyDescriptors(3035) = FormalQtyType.QtyOption + nodePropertyDescriptors(3826) = FormalQtyType.IntType // LITERAL.ORDER + nodePropertyDescriptors(3827) = FormalQtyType.QtyOne + nodePropertyDescriptors(4178) = FormalQtyType.StringType // LITERAL.POSSIBLE_TYPES + nodePropertyDescriptors(4179) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4618) = FormalQtyType.StringType // LITERAL.TYPE_FULL_NAME + nodePropertyDescriptors(4619) = FormalQtyType.QtyOne + nodePropertyDescriptors(748) = FormalQtyType.StringType // LOCAL.CLOSURE_BINDING_ID + nodePropertyDescriptors(749) = FormalQtyType.QtyOption + nodePropertyDescriptors(924) = FormalQtyType.StringType // LOCAL.CODE + nodePropertyDescriptors(925) = FormalQtyType.QtyOne + nodePropertyDescriptors(1012) = FormalQtyType.IntType // LOCAL.COLUMN_NUMBER + nodePropertyDescriptors(1013) = FormalQtyType.QtyOption + nodePropertyDescriptors(1628) = FormalQtyType.StringType // LOCAL.DYNAMIC_TYPE_HINT_FULL_NAME + nodePropertyDescriptors(1629) = FormalQtyType.QtyMulti + nodePropertyDescriptors(3036) = FormalQtyType.IntType // LOCAL.LINE_NUMBER + nodePropertyDescriptors(3037) = FormalQtyType.QtyOption + nodePropertyDescriptors(3476) = FormalQtyType.StringType // LOCAL.NAME + nodePropertyDescriptors(3477) = FormalQtyType.QtyOne + nodePropertyDescriptors(3828) = FormalQtyType.IntType // LOCAL.ORDER + nodePropertyDescriptors(3829) = FormalQtyType.QtyOne + nodePropertyDescriptors(4180) = FormalQtyType.StringType // LOCAL.POSSIBLE_TYPES + nodePropertyDescriptors(4181) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4620) = FormalQtyType.StringType // LOCAL.TYPE_FULL_NAME + nodePropertyDescriptors(4621) = FormalQtyType.QtyOne + nodePropertyDescriptors(574) = FormalQtyType.StringType // LOCATION.CLASS_NAME + nodePropertyDescriptors(575) = FormalQtyType.QtyOne + nodePropertyDescriptors(662) = FormalQtyType.StringType // LOCATION.CLASS_SHORT_NAME + nodePropertyDescriptors(663) = FormalQtyType.QtyOne + nodePropertyDescriptors(1894) = FormalQtyType.StringType // LOCATION.FILENAME + nodePropertyDescriptors(1895) = FormalQtyType.QtyOne + nodePropertyDescriptors(3038) = FormalQtyType.IntType // LOCATION.LINE_NUMBER + nodePropertyDescriptors(3039) = FormalQtyType.QtyOption + nodePropertyDescriptors(3214) = FormalQtyType.StringType // LOCATION.METHOD_FULL_NAME + nodePropertyDescriptors(3215) = FormalQtyType.QtyOne + nodePropertyDescriptors(3302) = FormalQtyType.StringType // LOCATION.METHOD_SHORT_NAME + nodePropertyDescriptors(3303) = FormalQtyType.QtyOne + nodePropertyDescriptors(3566) = FormalQtyType.StringType // LOCATION.NODE_LABEL + nodePropertyDescriptors(3567) = FormalQtyType.QtyOne + nodePropertyDescriptors(4006) = FormalQtyType.StringType // LOCATION.PACKAGE_NAME + nodePropertyDescriptors(4007) = FormalQtyType.QtyOne + nodePropertyDescriptors(4446) = FormalQtyType.StringType // LOCATION.SYMBOL + nodePropertyDescriptors(4447) = FormalQtyType.QtyOne + nodePropertyDescriptors(5062) = FormalQtyType.RefType // LOCATION.node + nodePropertyDescriptors(5063) = FormalQtyType.QtyOption + nodePropertyDescriptors(312) = FormalQtyType.StringType // MEMBER.AST_PARENT_FULL_NAME + nodePropertyDescriptors(313) = FormalQtyType.QtyOne + nodePropertyDescriptors(400) = FormalQtyType.StringType // MEMBER.AST_PARENT_TYPE + nodePropertyDescriptors(401) = FormalQtyType.QtyOne + nodePropertyDescriptors(928) = FormalQtyType.StringType // MEMBER.CODE + nodePropertyDescriptors(929) = FormalQtyType.QtyOne + nodePropertyDescriptors(1016) = FormalQtyType.IntType // MEMBER.COLUMN_NUMBER + nodePropertyDescriptors(1017) = FormalQtyType.QtyOption + nodePropertyDescriptors(1632) = FormalQtyType.StringType // MEMBER.DYNAMIC_TYPE_HINT_FULL_NAME + nodePropertyDescriptors(1633) = FormalQtyType.QtyMulti + nodePropertyDescriptors(3040) = FormalQtyType.IntType // MEMBER.LINE_NUMBER + nodePropertyDescriptors(3041) = FormalQtyType.QtyOption + nodePropertyDescriptors(3480) = FormalQtyType.StringType // MEMBER.NAME + nodePropertyDescriptors(3481) = FormalQtyType.QtyOne + nodePropertyDescriptors(3832) = FormalQtyType.IntType // MEMBER.ORDER + nodePropertyDescriptors(3833) = FormalQtyType.QtyOne + nodePropertyDescriptors(4184) = FormalQtyType.StringType // MEMBER.POSSIBLE_TYPES + nodePropertyDescriptors(4185) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4624) = FormalQtyType.StringType // MEMBER.TYPE_FULL_NAME + nodePropertyDescriptors(4625) = FormalQtyType.QtyOne + nodePropertyDescriptors(2074) = FormalQtyType.StringType // META_DATA.HASH + nodePropertyDescriptors(2075) = FormalQtyType.QtyOption + nodePropertyDescriptors(2954) = FormalQtyType.StringType // META_DATA.LANGUAGE + nodePropertyDescriptors(2955) = FormalQtyType.QtyOne + nodePropertyDescriptors(3922) = FormalQtyType.StringType // META_DATA.OVERLAYS + nodePropertyDescriptors(3923) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4274) = FormalQtyType.StringType // META_DATA.ROOT + nodePropertyDescriptors(4275) = FormalQtyType.QtyOne + nodePropertyDescriptors(4802) = FormalQtyType.StringType // META_DATA.VERSION + nodePropertyDescriptors(4803) = FormalQtyType.QtyOne + nodePropertyDescriptors(316) = FormalQtyType.StringType // METHOD.AST_PARENT_FULL_NAME + nodePropertyDescriptors(317) = FormalQtyType.QtyOne + nodePropertyDescriptors(404) = FormalQtyType.StringType // METHOD.AST_PARENT_TYPE + nodePropertyDescriptors(405) = FormalQtyType.QtyOne + nodePropertyDescriptors(932) = FormalQtyType.StringType // METHOD.CODE + nodePropertyDescriptors(933) = FormalQtyType.QtyOne + nodePropertyDescriptors(1020) = FormalQtyType.IntType // METHOD.COLUMN_NUMBER + nodePropertyDescriptors(1021) = FormalQtyType.QtyOption + nodePropertyDescriptors(1108) = FormalQtyType.IntType // METHOD.COLUMN_NUMBER_END + nodePropertyDescriptors(1109) = FormalQtyType.QtyOption + nodePropertyDescriptors(1900) = FormalQtyType.StringType // METHOD.FILENAME + nodePropertyDescriptors(1901) = FormalQtyType.QtyOne + nodePropertyDescriptors(1988) = FormalQtyType.StringType // METHOD.FULL_NAME + nodePropertyDescriptors(1989) = FormalQtyType.QtyOne + nodePropertyDescriptors(2076) = FormalQtyType.StringType // METHOD.HASH + nodePropertyDescriptors(2077) = FormalQtyType.QtyOption + nodePropertyDescriptors(2604) = FormalQtyType.BoolType // METHOD.IS_EXTERNAL + nodePropertyDescriptors(2605) = FormalQtyType.QtyOne + nodePropertyDescriptors(3044) = FormalQtyType.IntType // METHOD.LINE_NUMBER + nodePropertyDescriptors(3045) = FormalQtyType.QtyOption + nodePropertyDescriptors(3132) = FormalQtyType.IntType // METHOD.LINE_NUMBER_END + nodePropertyDescriptors(3133) = FormalQtyType.QtyOption + nodePropertyDescriptors(3484) = FormalQtyType.StringType // METHOD.NAME + nodePropertyDescriptors(3485) = FormalQtyType.QtyOne + nodePropertyDescriptors(3660) = FormalQtyType.IntType // METHOD.OFFSET + nodePropertyDescriptors(3661) = FormalQtyType.QtyOption + nodePropertyDescriptors(3748) = FormalQtyType.IntType // METHOD.OFFSET_END + nodePropertyDescriptors(3749) = FormalQtyType.QtyOption + nodePropertyDescriptors(3836) = FormalQtyType.IntType // METHOD.ORDER + nodePropertyDescriptors(3837) = FormalQtyType.QtyOne + nodePropertyDescriptors(4364) = FormalQtyType.StringType // METHOD.SIGNATURE + nodePropertyDescriptors(4365) = FormalQtyType.QtyOne + nodePropertyDescriptors(758) = FormalQtyType.StringType // METHOD_PARAMETER_IN.CLOSURE_BINDING_ID + nodePropertyDescriptors(759) = FormalQtyType.QtyOption + nodePropertyDescriptors(934) = FormalQtyType.StringType // METHOD_PARAMETER_IN.CODE + nodePropertyDescriptors(935) = FormalQtyType.QtyOne + nodePropertyDescriptors(1022) = FormalQtyType.IntType // METHOD_PARAMETER_IN.COLUMN_NUMBER + nodePropertyDescriptors(1023) = FormalQtyType.QtyOption + nodePropertyDescriptors(1638) = FormalQtyType.StringType // METHOD_PARAMETER_IN.DYNAMIC_TYPE_HINT_FULL_NAME + nodePropertyDescriptors(1639) = FormalQtyType.QtyMulti + nodePropertyDescriptors(1726) = FormalQtyType.StringType // METHOD_PARAMETER_IN.EVALUATION_STRATEGY + nodePropertyDescriptors(1727) = FormalQtyType.QtyOne + nodePropertyDescriptors(2342) = FormalQtyType.IntType // METHOD_PARAMETER_IN.INDEX + nodePropertyDescriptors(2343) = FormalQtyType.QtyOne + nodePropertyDescriptors(2694) = FormalQtyType.BoolType // METHOD_PARAMETER_IN.IS_VARIADIC + nodePropertyDescriptors(2695) = FormalQtyType.QtyOne + nodePropertyDescriptors(3046) = FormalQtyType.IntType // METHOD_PARAMETER_IN.LINE_NUMBER + nodePropertyDescriptors(3047) = FormalQtyType.QtyOption + nodePropertyDescriptors(3486) = FormalQtyType.StringType // METHOD_PARAMETER_IN.NAME + nodePropertyDescriptors(3487) = FormalQtyType.QtyOne + nodePropertyDescriptors(3838) = FormalQtyType.IntType // METHOD_PARAMETER_IN.ORDER + nodePropertyDescriptors(3839) = FormalQtyType.QtyOne + nodePropertyDescriptors(4190) = FormalQtyType.StringType // METHOD_PARAMETER_IN.POSSIBLE_TYPES + nodePropertyDescriptors(4191) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4630) = FormalQtyType.StringType // METHOD_PARAMETER_IN.TYPE_FULL_NAME + nodePropertyDescriptors(4631) = FormalQtyType.QtyOne + nodePropertyDescriptors(936) = FormalQtyType.StringType // METHOD_PARAMETER_OUT.CODE + nodePropertyDescriptors(937) = FormalQtyType.QtyOne + nodePropertyDescriptors(1024) = FormalQtyType.IntType // METHOD_PARAMETER_OUT.COLUMN_NUMBER + nodePropertyDescriptors(1025) = FormalQtyType.QtyOption + nodePropertyDescriptors(1728) = FormalQtyType.StringType // METHOD_PARAMETER_OUT.EVALUATION_STRATEGY + nodePropertyDescriptors(1729) = FormalQtyType.QtyOne + nodePropertyDescriptors(2344) = FormalQtyType.IntType // METHOD_PARAMETER_OUT.INDEX + nodePropertyDescriptors(2345) = FormalQtyType.QtyOne + nodePropertyDescriptors(2696) = FormalQtyType.BoolType // METHOD_PARAMETER_OUT.IS_VARIADIC + nodePropertyDescriptors(2697) = FormalQtyType.QtyOne + nodePropertyDescriptors(3048) = FormalQtyType.IntType // METHOD_PARAMETER_OUT.LINE_NUMBER + nodePropertyDescriptors(3049) = FormalQtyType.QtyOption + nodePropertyDescriptors(3488) = FormalQtyType.StringType // METHOD_PARAMETER_OUT.NAME + nodePropertyDescriptors(3489) = FormalQtyType.QtyOne + nodePropertyDescriptors(3840) = FormalQtyType.IntType // METHOD_PARAMETER_OUT.ORDER + nodePropertyDescriptors(3841) = FormalQtyType.QtyOne + nodePropertyDescriptors(4632) = FormalQtyType.StringType // METHOD_PARAMETER_OUT.TYPE_FULL_NAME + nodePropertyDescriptors(4633) = FormalQtyType.QtyOne + nodePropertyDescriptors(146) = FormalQtyType.IntType // METHOD_REF.ARGUMENT_INDEX + nodePropertyDescriptors(147) = FormalQtyType.QtyOne + nodePropertyDescriptors(234) = FormalQtyType.StringType // METHOD_REF.ARGUMENT_NAME + nodePropertyDescriptors(235) = FormalQtyType.QtyOption + nodePropertyDescriptors(938) = FormalQtyType.StringType // METHOD_REF.CODE + nodePropertyDescriptors(939) = FormalQtyType.QtyOne + nodePropertyDescriptors(1026) = FormalQtyType.IntType // METHOD_REF.COLUMN_NUMBER + nodePropertyDescriptors(1027) = FormalQtyType.QtyOption + nodePropertyDescriptors(1642) = FormalQtyType.StringType // METHOD_REF.DYNAMIC_TYPE_HINT_FULL_NAME + nodePropertyDescriptors(1643) = FormalQtyType.QtyMulti + nodePropertyDescriptors(3050) = FormalQtyType.IntType // METHOD_REF.LINE_NUMBER + nodePropertyDescriptors(3051) = FormalQtyType.QtyOption + nodePropertyDescriptors(3226) = FormalQtyType.StringType // METHOD_REF.METHOD_FULL_NAME + nodePropertyDescriptors(3227) = FormalQtyType.QtyOne + nodePropertyDescriptors(3842) = FormalQtyType.IntType // METHOD_REF.ORDER + nodePropertyDescriptors(3843) = FormalQtyType.QtyOne + nodePropertyDescriptors(4194) = FormalQtyType.StringType // METHOD_REF.POSSIBLE_TYPES + nodePropertyDescriptors(4195) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4634) = FormalQtyType.StringType // METHOD_REF.TYPE_FULL_NAME + nodePropertyDescriptors(4635) = FormalQtyType.QtyOne + nodePropertyDescriptors(940) = FormalQtyType.StringType // METHOD_RETURN.CODE + nodePropertyDescriptors(941) = FormalQtyType.QtyOne + nodePropertyDescriptors(1028) = FormalQtyType.IntType // METHOD_RETURN.COLUMN_NUMBER + nodePropertyDescriptors(1029) = FormalQtyType.QtyOption + nodePropertyDescriptors(1644) = FormalQtyType.StringType // METHOD_RETURN.DYNAMIC_TYPE_HINT_FULL_NAME + nodePropertyDescriptors(1645) = FormalQtyType.QtyMulti + nodePropertyDescriptors(1732) = FormalQtyType.StringType // METHOD_RETURN.EVALUATION_STRATEGY + nodePropertyDescriptors(1733) = FormalQtyType.QtyOne + nodePropertyDescriptors(3052) = FormalQtyType.IntType // METHOD_RETURN.LINE_NUMBER + nodePropertyDescriptors(3053) = FormalQtyType.QtyOption + nodePropertyDescriptors(3844) = FormalQtyType.IntType // METHOD_RETURN.ORDER + nodePropertyDescriptors(3845) = FormalQtyType.QtyOne + nodePropertyDescriptors(4196) = FormalQtyType.StringType // METHOD_RETURN.POSSIBLE_TYPES + nodePropertyDescriptors(4197) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4636) = FormalQtyType.StringType // METHOD_RETURN.TYPE_FULL_NAME + nodePropertyDescriptors(4637) = FormalQtyType.QtyOne + nodePropertyDescriptors(942) = FormalQtyType.StringType // MODIFIER.CODE + nodePropertyDescriptors(943) = FormalQtyType.QtyOne + nodePropertyDescriptors(1030) = FormalQtyType.IntType // MODIFIER.COLUMN_NUMBER + nodePropertyDescriptors(1031) = FormalQtyType.QtyOption + nodePropertyDescriptors(3054) = FormalQtyType.IntType // MODIFIER.LINE_NUMBER + nodePropertyDescriptors(3055) = FormalQtyType.QtyOption + nodePropertyDescriptors(3406) = FormalQtyType.StringType // MODIFIER.MODIFIER_TYPE + nodePropertyDescriptors(3407) = FormalQtyType.QtyOne + nodePropertyDescriptors(3846) = FormalQtyType.IntType // MODIFIER.ORDER + nodePropertyDescriptors(3847) = FormalQtyType.QtyOne + nodePropertyDescriptors(944) = FormalQtyType.StringType // NAMESPACE.CODE + nodePropertyDescriptors(945) = FormalQtyType.QtyOne + nodePropertyDescriptors(1032) = FormalQtyType.IntType // NAMESPACE.COLUMN_NUMBER + nodePropertyDescriptors(1033) = FormalQtyType.QtyOption + nodePropertyDescriptors(3056) = FormalQtyType.IntType // NAMESPACE.LINE_NUMBER + nodePropertyDescriptors(3057) = FormalQtyType.QtyOption + nodePropertyDescriptors(3496) = FormalQtyType.StringType // NAMESPACE.NAME + nodePropertyDescriptors(3497) = FormalQtyType.QtyOne + nodePropertyDescriptors(3848) = FormalQtyType.IntType // NAMESPACE.ORDER + nodePropertyDescriptors(3849) = FormalQtyType.QtyOne + nodePropertyDescriptors(946) = FormalQtyType.StringType // NAMESPACE_BLOCK.CODE + nodePropertyDescriptors(947) = FormalQtyType.QtyOne + nodePropertyDescriptors(1034) = FormalQtyType.IntType // NAMESPACE_BLOCK.COLUMN_NUMBER + nodePropertyDescriptors(1035) = FormalQtyType.QtyOption + nodePropertyDescriptors(1914) = FormalQtyType.StringType // NAMESPACE_BLOCK.FILENAME + nodePropertyDescriptors(1915) = FormalQtyType.QtyOne + nodePropertyDescriptors(2002) = FormalQtyType.StringType // NAMESPACE_BLOCK.FULL_NAME + nodePropertyDescriptors(2003) = FormalQtyType.QtyOne + nodePropertyDescriptors(3058) = FormalQtyType.IntType // NAMESPACE_BLOCK.LINE_NUMBER + nodePropertyDescriptors(3059) = FormalQtyType.QtyOption + nodePropertyDescriptors(3498) = FormalQtyType.StringType // NAMESPACE_BLOCK.NAME + nodePropertyDescriptors(3499) = FormalQtyType.QtyOne + nodePropertyDescriptors(3850) = FormalQtyType.IntType // NAMESPACE_BLOCK.ORDER + nodePropertyDescriptors(3851) = FormalQtyType.QtyOne + nodePropertyDescriptors(156) = FormalQtyType.IntType // RETURN.ARGUMENT_INDEX + nodePropertyDescriptors(157) = FormalQtyType.QtyOne + nodePropertyDescriptors(244) = FormalQtyType.StringType // RETURN.ARGUMENT_NAME + nodePropertyDescriptors(245) = FormalQtyType.QtyOption + nodePropertyDescriptors(948) = FormalQtyType.StringType // RETURN.CODE + nodePropertyDescriptors(949) = FormalQtyType.QtyOne + nodePropertyDescriptors(1036) = FormalQtyType.IntType // RETURN.COLUMN_NUMBER + nodePropertyDescriptors(1037) = FormalQtyType.QtyOption + nodePropertyDescriptors(3060) = FormalQtyType.IntType // RETURN.LINE_NUMBER + nodePropertyDescriptors(3061) = FormalQtyType.QtyOption + nodePropertyDescriptors(3852) = FormalQtyType.IntType // RETURN.ORDER + nodePropertyDescriptors(3853) = FormalQtyType.QtyOne + nodePropertyDescriptors(3502) = FormalQtyType.StringType // TAG.NAME + nodePropertyDescriptors(3503) = FormalQtyType.QtyOne + nodePropertyDescriptors(4734) = FormalQtyType.StringType // TAG.VALUE + nodePropertyDescriptors(4735) = FormalQtyType.QtyOne + nodePropertyDescriptors(5088) = FormalQtyType.RefType // TAG_NODE_PAIR.node + nodePropertyDescriptors(5089) = FormalQtyType.QtyOne + nodePropertyDescriptors(5176) = FormalQtyType.RefType // TAG_NODE_PAIR.tag + nodePropertyDescriptors(5177) = FormalQtyType.QtyOne + nodePropertyDescriptors(162) = FormalQtyType.IntType // TEMPLATE_DOM.ARGUMENT_INDEX + nodePropertyDescriptors(163) = FormalQtyType.QtyOne + nodePropertyDescriptors(250) = FormalQtyType.StringType // TEMPLATE_DOM.ARGUMENT_NAME + nodePropertyDescriptors(251) = FormalQtyType.QtyOption + nodePropertyDescriptors(954) = FormalQtyType.StringType // TEMPLATE_DOM.CODE + nodePropertyDescriptors(955) = FormalQtyType.QtyOne + nodePropertyDescriptors(1042) = FormalQtyType.IntType // TEMPLATE_DOM.COLUMN_NUMBER + nodePropertyDescriptors(1043) = FormalQtyType.QtyOption + nodePropertyDescriptors(3066) = FormalQtyType.IntType // TEMPLATE_DOM.LINE_NUMBER + nodePropertyDescriptors(3067) = FormalQtyType.QtyOption + nodePropertyDescriptors(3506) = FormalQtyType.StringType // TEMPLATE_DOM.NAME + nodePropertyDescriptors(3507) = FormalQtyType.QtyOne + nodePropertyDescriptors(3858) = FormalQtyType.IntType // TEMPLATE_DOM.ORDER + nodePropertyDescriptors(3859) = FormalQtyType.QtyOne + nodePropertyDescriptors(2012) = FormalQtyType.StringType // TYPE.FULL_NAME + nodePropertyDescriptors(2013) = FormalQtyType.QtyOne + nodePropertyDescriptors(3508) = FormalQtyType.StringType // TYPE.NAME + nodePropertyDescriptors(3509) = FormalQtyType.QtyOne + nodePropertyDescriptors(4564) = FormalQtyType.StringType // TYPE.TYPE_DECL_FULL_NAME + nodePropertyDescriptors(4565) = FormalQtyType.QtyOne + nodePropertyDescriptors(958) = FormalQtyType.StringType // TYPE_ARGUMENT.CODE + nodePropertyDescriptors(959) = FormalQtyType.QtyOne + nodePropertyDescriptors(1046) = FormalQtyType.IntType // TYPE_ARGUMENT.COLUMN_NUMBER + nodePropertyDescriptors(1047) = FormalQtyType.QtyOption + nodePropertyDescriptors(3070) = FormalQtyType.IntType // TYPE_ARGUMENT.LINE_NUMBER + nodePropertyDescriptors(3071) = FormalQtyType.QtyOption + nodePropertyDescriptors(3862) = FormalQtyType.IntType // TYPE_ARGUMENT.ORDER + nodePropertyDescriptors(3863) = FormalQtyType.QtyOne + nodePropertyDescriptors(80) = FormalQtyType.StringType // TYPE_DECL.ALIAS_TYPE_FULL_NAME + nodePropertyDescriptors(81) = FormalQtyType.QtyOption + nodePropertyDescriptors(344) = FormalQtyType.StringType // TYPE_DECL.AST_PARENT_FULL_NAME + nodePropertyDescriptors(345) = FormalQtyType.QtyOne + nodePropertyDescriptors(432) = FormalQtyType.StringType // TYPE_DECL.AST_PARENT_TYPE + nodePropertyDescriptors(433) = FormalQtyType.QtyOne + nodePropertyDescriptors(960) = FormalQtyType.StringType // TYPE_DECL.CODE + nodePropertyDescriptors(961) = FormalQtyType.QtyOne + nodePropertyDescriptors(1048) = FormalQtyType.IntType // TYPE_DECL.COLUMN_NUMBER + nodePropertyDescriptors(1049) = FormalQtyType.QtyOption + nodePropertyDescriptors(1928) = FormalQtyType.StringType // TYPE_DECL.FILENAME + nodePropertyDescriptors(1929) = FormalQtyType.QtyOne + nodePropertyDescriptors(2016) = FormalQtyType.StringType // TYPE_DECL.FULL_NAME + nodePropertyDescriptors(2017) = FormalQtyType.QtyOne + nodePropertyDescriptors(2456) = FormalQtyType.StringType // TYPE_DECL.INHERITS_FROM_TYPE_FULL_NAME + nodePropertyDescriptors(2457) = FormalQtyType.QtyMulti + nodePropertyDescriptors(2632) = FormalQtyType.BoolType // TYPE_DECL.IS_EXTERNAL + nodePropertyDescriptors(2633) = FormalQtyType.QtyOne + nodePropertyDescriptors(3072) = FormalQtyType.IntType // TYPE_DECL.LINE_NUMBER + nodePropertyDescriptors(3073) = FormalQtyType.QtyOption + nodePropertyDescriptors(3512) = FormalQtyType.StringType // TYPE_DECL.NAME + nodePropertyDescriptors(3513) = FormalQtyType.QtyOne + nodePropertyDescriptors(3688) = FormalQtyType.IntType // TYPE_DECL.OFFSET + nodePropertyDescriptors(3689) = FormalQtyType.QtyOption + nodePropertyDescriptors(3776) = FormalQtyType.IntType // TYPE_DECL.OFFSET_END + nodePropertyDescriptors(3777) = FormalQtyType.QtyOption + nodePropertyDescriptors(3864) = FormalQtyType.IntType // TYPE_DECL.ORDER + nodePropertyDescriptors(3865) = FormalQtyType.QtyOne + nodePropertyDescriptors(962) = FormalQtyType.StringType // TYPE_PARAMETER.CODE + nodePropertyDescriptors(963) = FormalQtyType.QtyOne + nodePropertyDescriptors(1050) = FormalQtyType.IntType // TYPE_PARAMETER.COLUMN_NUMBER + nodePropertyDescriptors(1051) = FormalQtyType.QtyOption + nodePropertyDescriptors(3074) = FormalQtyType.IntType // TYPE_PARAMETER.LINE_NUMBER + nodePropertyDescriptors(3075) = FormalQtyType.QtyOption + nodePropertyDescriptors(3514) = FormalQtyType.StringType // TYPE_PARAMETER.NAME + nodePropertyDescriptors(3515) = FormalQtyType.QtyOne + nodePropertyDescriptors(3866) = FormalQtyType.IntType // TYPE_PARAMETER.ORDER + nodePropertyDescriptors(3867) = FormalQtyType.QtyOne + nodePropertyDescriptors(172) = FormalQtyType.IntType // TYPE_REF.ARGUMENT_INDEX + nodePropertyDescriptors(173) = FormalQtyType.QtyOne + nodePropertyDescriptors(260) = FormalQtyType.StringType // TYPE_REF.ARGUMENT_NAME + nodePropertyDescriptors(261) = FormalQtyType.QtyOption + nodePropertyDescriptors(964) = FormalQtyType.StringType // TYPE_REF.CODE + nodePropertyDescriptors(965) = FormalQtyType.QtyOne + nodePropertyDescriptors(1052) = FormalQtyType.IntType // TYPE_REF.COLUMN_NUMBER + nodePropertyDescriptors(1053) = FormalQtyType.QtyOption + nodePropertyDescriptors(1668) = FormalQtyType.StringType // TYPE_REF.DYNAMIC_TYPE_HINT_FULL_NAME + nodePropertyDescriptors(1669) = FormalQtyType.QtyMulti + nodePropertyDescriptors(3076) = FormalQtyType.IntType // TYPE_REF.LINE_NUMBER + nodePropertyDescriptors(3077) = FormalQtyType.QtyOption + nodePropertyDescriptors(3868) = FormalQtyType.IntType // TYPE_REF.ORDER + nodePropertyDescriptors(3869) = FormalQtyType.QtyOne + nodePropertyDescriptors(4220) = FormalQtyType.StringType // TYPE_REF.POSSIBLE_TYPES + nodePropertyDescriptors(4221) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4660) = FormalQtyType.StringType // TYPE_REF.TYPE_FULL_NAME + nodePropertyDescriptors(4661) = FormalQtyType.QtyOne + nodePropertyDescriptors(174) = FormalQtyType.IntType // UNKNOWN.ARGUMENT_INDEX + nodePropertyDescriptors(175) = FormalQtyType.QtyOne + nodePropertyDescriptors(262) = FormalQtyType.StringType // UNKNOWN.ARGUMENT_NAME + nodePropertyDescriptors(263) = FormalQtyType.QtyOption + nodePropertyDescriptors(966) = FormalQtyType.StringType // UNKNOWN.CODE + nodePropertyDescriptors(967) = FormalQtyType.QtyOne + nodePropertyDescriptors(1054) = FormalQtyType.IntType // UNKNOWN.COLUMN_NUMBER + nodePropertyDescriptors(1055) = FormalQtyType.QtyOption + nodePropertyDescriptors(1230) = FormalQtyType.StringType // UNKNOWN.CONTAINED_REF + nodePropertyDescriptors(1231) = FormalQtyType.QtyOne + nodePropertyDescriptors(1670) = FormalQtyType.StringType // UNKNOWN.DYNAMIC_TYPE_HINT_FULL_NAME + nodePropertyDescriptors(1671) = FormalQtyType.QtyMulti + nodePropertyDescriptors(3078) = FormalQtyType.IntType // UNKNOWN.LINE_NUMBER + nodePropertyDescriptors(3079) = FormalQtyType.QtyOption + nodePropertyDescriptors(3870) = FormalQtyType.IntType // UNKNOWN.ORDER + nodePropertyDescriptors(3871) = FormalQtyType.QtyOne + nodePropertyDescriptors(4134) = FormalQtyType.StringType // UNKNOWN.PARSER_TYPE_NAME + nodePropertyDescriptors(4135) = FormalQtyType.QtyOne + nodePropertyDescriptors(4222) = FormalQtyType.StringType // UNKNOWN.POSSIBLE_TYPES + nodePropertyDescriptors(4223) = FormalQtyType.QtyMulti + nodePropertyDescriptors(4662) = FormalQtyType.StringType // UNKNOWN.TYPE_FULL_NAME + nodePropertyDescriptors(4663) = FormalQtyType.QtyOne + nodePropertyDescriptors + } + private val newNodeInsertionHelpers: Array[flatgraph.NewNodePropertyInsertionHelper] = { + val _newNodeInserters = new Array[flatgraph.NewNodePropertyInsertionHelper](5192) + _newNodeInserters(88) = nodes.NewAnnotation.InsertionHelpers.NewNodeInserter_Annotation_argumentIndex + _newNodeInserters(176) = nodes.NewAnnotation.InsertionHelpers.NewNodeInserter_Annotation_argumentName + _newNodeInserters(880) = nodes.NewAnnotation.InsertionHelpers.NewNodeInserter_Annotation_code + _newNodeInserters(968) = nodes.NewAnnotation.InsertionHelpers.NewNodeInserter_Annotation_columnNumber + _newNodeInserters(1936) = nodes.NewAnnotation.InsertionHelpers.NewNodeInserter_Annotation_fullName + _newNodeInserters(2992) = nodes.NewAnnotation.InsertionHelpers.NewNodeInserter_Annotation_lineNumber + _newNodeInserters(3432) = nodes.NewAnnotation.InsertionHelpers.NewNodeInserter_Annotation_name + _newNodeInserters(3784) = nodes.NewAnnotation.InsertionHelpers.NewNodeInserter_Annotation_order + _newNodeInserters(90) = nodes.NewAnnotationLiteral.InsertionHelpers.NewNodeInserter_AnnotationLiteral_argumentIndex + _newNodeInserters(178) = nodes.NewAnnotationLiteral.InsertionHelpers.NewNodeInserter_AnnotationLiteral_argumentName + _newNodeInserters(882) = nodes.NewAnnotationLiteral.InsertionHelpers.NewNodeInserter_AnnotationLiteral_code + _newNodeInserters(970) = nodes.NewAnnotationLiteral.InsertionHelpers.NewNodeInserter_AnnotationLiteral_columnNumber + _newNodeInserters(2994) = nodes.NewAnnotationLiteral.InsertionHelpers.NewNodeInserter_AnnotationLiteral_lineNumber + _newNodeInserters(3434) = nodes.NewAnnotationLiteral.InsertionHelpers.NewNodeInserter_AnnotationLiteral_name + _newNodeInserters(3786) = nodes.NewAnnotationLiteral.InsertionHelpers.NewNodeInserter_AnnotationLiteral_order + _newNodeInserters(884) = nodes.NewAnnotationParameter.InsertionHelpers.NewNodeInserter_AnnotationParameter_code + _newNodeInserters(972) = + nodes.NewAnnotationParameter.InsertionHelpers.NewNodeInserter_AnnotationParameter_columnNumber + _newNodeInserters(2996) = + nodes.NewAnnotationParameter.InsertionHelpers.NewNodeInserter_AnnotationParameter_lineNumber + _newNodeInserters(3788) = nodes.NewAnnotationParameter.InsertionHelpers.NewNodeInserter_AnnotationParameter_order + _newNodeInserters(886) = + nodes.NewAnnotationParameterAssign.InsertionHelpers.NewNodeInserter_AnnotationParameterAssign_code + _newNodeInserters(974) = + nodes.NewAnnotationParameterAssign.InsertionHelpers.NewNodeInserter_AnnotationParameterAssign_columnNumber + _newNodeInserters(2998) = + nodes.NewAnnotationParameterAssign.InsertionHelpers.NewNodeInserter_AnnotationParameterAssign_lineNumber + _newNodeInserters(3790) = + nodes.NewAnnotationParameterAssign.InsertionHelpers.NewNodeInserter_AnnotationParameterAssign_order + _newNodeInserters(96) = nodes.NewArrayInitializer.InsertionHelpers.NewNodeInserter_ArrayInitializer_argumentIndex + _newNodeInserters(184) = nodes.NewArrayInitializer.InsertionHelpers.NewNodeInserter_ArrayInitializer_argumentName + _newNodeInserters(888) = nodes.NewArrayInitializer.InsertionHelpers.NewNodeInserter_ArrayInitializer_code + _newNodeInserters(976) = nodes.NewArrayInitializer.InsertionHelpers.NewNodeInserter_ArrayInitializer_columnNumber + _newNodeInserters(3000) = nodes.NewArrayInitializer.InsertionHelpers.NewNodeInserter_ArrayInitializer_lineNumber + _newNodeInserters(3792) = nodes.NewArrayInitializer.InsertionHelpers.NewNodeInserter_ArrayInitializer_order + _newNodeInserters(3178) = nodes.NewBinding.InsertionHelpers.NewNodeInserter_Binding_methodFullName + _newNodeInserters(3442) = nodes.NewBinding.InsertionHelpers.NewNodeInserter_Binding_name + _newNodeInserters(4322) = nodes.NewBinding.InsertionHelpers.NewNodeInserter_Binding_signature + _newNodeInserters(100) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_argumentIndex + _newNodeInserters(188) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_argumentName + _newNodeInserters(892) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_code + _newNodeInserters(980) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_columnNumber + _newNodeInserters(1596) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_dynamicTypeHintFullName + _newNodeInserters(3004) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_lineNumber + _newNodeInserters(3796) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_order + _newNodeInserters(4148) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_possibleTypes + _newNodeInserters(4588) = nodes.NewBlock.InsertionHelpers.NewNodeInserter_Block_typeFullName + _newNodeInserters(102) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_argumentIndex + _newNodeInserters(190) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_argumentName + _newNodeInserters(894) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_code + _newNodeInserters(982) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_columnNumber + _newNodeInserters(1510) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_dispatchType + _newNodeInserters(1598) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_dynamicTypeHintFullName + _newNodeInserters(3006) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_lineNumber + _newNodeInserters(3182) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_methodFullName + _newNodeInserters(3446) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_name + _newNodeInserters(3798) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_order + _newNodeInserters(4150) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_possibleTypes + _newNodeInserters(4326) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_signature + _newNodeInserters(4590) = nodes.NewCall.InsertionHelpers.NewNodeInserter_Call_typeFullName + _newNodeInserters(720) = nodes.NewClosureBinding.InsertionHelpers.NewNodeInserter_ClosureBinding_closureBindingId + _newNodeInserters(808) = nodes.NewClosureBinding.InsertionHelpers.NewNodeInserter_ClosureBinding_closureOriginalName + _newNodeInserters(1688) = nodes.NewClosureBinding.InsertionHelpers.NewNodeInserter_ClosureBinding_evaluationStrategy + _newNodeInserters(898) = nodes.NewComment.InsertionHelpers.NewNodeInserter_Comment_code + _newNodeInserters(986) = nodes.NewComment.InsertionHelpers.NewNodeInserter_Comment_columnNumber + _newNodeInserters(1866) = nodes.NewComment.InsertionHelpers.NewNodeInserter_Comment_filename + _newNodeInserters(3010) = nodes.NewComment.InsertionHelpers.NewNodeInserter_Comment_lineNumber + _newNodeInserters(3802) = nodes.NewComment.InsertionHelpers.NewNodeInserter_Comment_order + _newNodeInserters(1252) = nodes.NewConfigFile.InsertionHelpers.NewNodeInserter_ConfigFile_content + _newNodeInserters(3452) = nodes.NewConfigFile.InsertionHelpers.NewNodeInserter_ConfigFile_name + _newNodeInserters(110) = nodes.NewControlStructure.InsertionHelpers.NewNodeInserter_ControlStructure_argumentIndex + _newNodeInserters(198) = nodes.NewControlStructure.InsertionHelpers.NewNodeInserter_ControlStructure_argumentName + _newNodeInserters(902) = nodes.NewControlStructure.InsertionHelpers.NewNodeInserter_ControlStructure_code + _newNodeInserters(990) = nodes.NewControlStructure.InsertionHelpers.NewNodeInserter_ControlStructure_columnNumber + _newNodeInserters(1342) = + nodes.NewControlStructure.InsertionHelpers.NewNodeInserter_ControlStructure_controlStructureType + _newNodeInserters(3014) = nodes.NewControlStructure.InsertionHelpers.NewNodeInserter_ControlStructure_lineNumber + _newNodeInserters(3806) = nodes.NewControlStructure.InsertionHelpers.NewNodeInserter_ControlStructure_order + _newNodeInserters(4070) = nodes.NewControlStructure.InsertionHelpers.NewNodeInserter_ControlStructure_parserTypeName + _newNodeInserters(1432) = nodes.NewDependency.InsertionHelpers.NewNodeInserter_Dependency_dependencyGroupId + _newNodeInserters(3456) = nodes.NewDependency.InsertionHelpers.NewNodeInserter_Dependency_name + _newNodeInserters(4776) = nodes.NewDependency.InsertionHelpers.NewNodeInserter_Dependency_version + _newNodeInserters(114) = nodes.NewFieldIdentifier.InsertionHelpers.NewNodeInserter_FieldIdentifier_argumentIndex + _newNodeInserters(202) = nodes.NewFieldIdentifier.InsertionHelpers.NewNodeInserter_FieldIdentifier_argumentName + _newNodeInserters(466) = nodes.NewFieldIdentifier.InsertionHelpers.NewNodeInserter_FieldIdentifier_canonicalName + _newNodeInserters(906) = nodes.NewFieldIdentifier.InsertionHelpers.NewNodeInserter_FieldIdentifier_code + _newNodeInserters(994) = nodes.NewFieldIdentifier.InsertionHelpers.NewNodeInserter_FieldIdentifier_columnNumber + _newNodeInserters(3018) = nodes.NewFieldIdentifier.InsertionHelpers.NewNodeInserter_FieldIdentifier_lineNumber + _newNodeInserters(3810) = nodes.NewFieldIdentifier.InsertionHelpers.NewNodeInserter_FieldIdentifier_order + _newNodeInserters(908) = nodes.NewFile.InsertionHelpers.NewNodeInserter_File_code + _newNodeInserters(996) = nodes.NewFile.InsertionHelpers.NewNodeInserter_File_columnNumber + _newNodeInserters(1260) = nodes.NewFile.InsertionHelpers.NewNodeInserter_File_content + _newNodeInserters(2052) = nodes.NewFile.InsertionHelpers.NewNodeInserter_File_hash + _newNodeInserters(3020) = nodes.NewFile.InsertionHelpers.NewNodeInserter_File_lineNumber + _newNodeInserters(3460) = nodes.NewFile.InsertionHelpers.NewNodeInserter_File_name + _newNodeInserters(3812) = nodes.NewFile.InsertionHelpers.NewNodeInserter_File_order + _newNodeInserters(4870) = nodes.NewFinding.InsertionHelpers.NewNodeInserter_Finding_evidence + _newNodeInserters(4958) = nodes.NewFinding.InsertionHelpers.NewNodeInserter_Finding_keyValuePairs + _newNodeInserters(120) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_argumentIndex + _newNodeInserters(208) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_argumentName + _newNodeInserters(912) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_code + _newNodeInserters(1000) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_columnNumber + _newNodeInserters(1616) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_dynamicTypeHintFullName + _newNodeInserters(3024) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_lineNumber + _newNodeInserters(3464) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_name + _newNodeInserters(3816) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_order + _newNodeInserters(4168) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_possibleTypes + _newNodeInserters(4608) = nodes.NewIdentifier.InsertionHelpers.NewNodeInserter_Identifier_typeFullName + _newNodeInserters(914) = nodes.NewImport.InsertionHelpers.NewNodeInserter_Import_code + _newNodeInserters(1002) = nodes.NewImport.InsertionHelpers.NewNodeInserter_Import_columnNumber + _newNodeInserters(1794) = nodes.NewImport.InsertionHelpers.NewNodeInserter_Import_explicitAs + _newNodeInserters(2146) = nodes.NewImport.InsertionHelpers.NewNodeInserter_Import_importedAs + _newNodeInserters(2234) = nodes.NewImport.InsertionHelpers.NewNodeInserter_Import_importedEntity + _newNodeInserters(2498) = nodes.NewImport.InsertionHelpers.NewNodeInserter_Import_isExplicit + _newNodeInserters(2762) = nodes.NewImport.InsertionHelpers.NewNodeInserter_Import_isWildcard + _newNodeInserters(3026) = nodes.NewImport.InsertionHelpers.NewNodeInserter_Import_lineNumber + _newNodeInserters(3818) = nodes.NewImport.InsertionHelpers.NewNodeInserter_Import_order + _newNodeInserters(916) = nodes.NewJumpLabel.InsertionHelpers.NewNodeInserter_JumpLabel_code + _newNodeInserters(1004) = nodes.NewJumpLabel.InsertionHelpers.NewNodeInserter_JumpLabel_columnNumber + _newNodeInserters(3028) = nodes.NewJumpLabel.InsertionHelpers.NewNodeInserter_JumpLabel_lineNumber + _newNodeInserters(3468) = nodes.NewJumpLabel.InsertionHelpers.NewNodeInserter_JumpLabel_name + _newNodeInserters(3820) = nodes.NewJumpLabel.InsertionHelpers.NewNodeInserter_JumpLabel_order + _newNodeInserters(4084) = nodes.NewJumpLabel.InsertionHelpers.NewNodeInserter_JumpLabel_parserTypeName + _newNodeInserters(126) = nodes.NewJumpTarget.InsertionHelpers.NewNodeInserter_JumpTarget_argumentIndex + _newNodeInserters(918) = nodes.NewJumpTarget.InsertionHelpers.NewNodeInserter_JumpTarget_code + _newNodeInserters(1006) = nodes.NewJumpTarget.InsertionHelpers.NewNodeInserter_JumpTarget_columnNumber + _newNodeInserters(3030) = nodes.NewJumpTarget.InsertionHelpers.NewNodeInserter_JumpTarget_lineNumber + _newNodeInserters(3470) = nodes.NewJumpTarget.InsertionHelpers.NewNodeInserter_JumpTarget_name + _newNodeInserters(3822) = nodes.NewJumpTarget.InsertionHelpers.NewNodeInserter_JumpTarget_order + _newNodeInserters(4086) = nodes.NewJumpTarget.InsertionHelpers.NewNodeInserter_JumpTarget_parserTypeName + _newNodeInserters(2856) = nodes.NewKeyValuePair.InsertionHelpers.NewNodeInserter_KeyValuePair_key + _newNodeInserters(4704) = nodes.NewKeyValuePair.InsertionHelpers.NewNodeInserter_KeyValuePair_value + _newNodeInserters(130) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_argumentIndex + _newNodeInserters(218) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_argumentName + _newNodeInserters(922) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_code + _newNodeInserters(1010) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_columnNumber + _newNodeInserters(1626) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_dynamicTypeHintFullName + _newNodeInserters(3034) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_lineNumber + _newNodeInserters(3826) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_order + _newNodeInserters(4178) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_possibleTypes + _newNodeInserters(4618) = nodes.NewLiteral.InsertionHelpers.NewNodeInserter_Literal_typeFullName + _newNodeInserters(748) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_closureBindingId + _newNodeInserters(924) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_code + _newNodeInserters(1012) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_columnNumber + _newNodeInserters(1628) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_dynamicTypeHintFullName + _newNodeInserters(3036) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_lineNumber + _newNodeInserters(3476) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_name + _newNodeInserters(3828) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_order + _newNodeInserters(4180) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_possibleTypes + _newNodeInserters(4620) = nodes.NewLocal.InsertionHelpers.NewNodeInserter_Local_typeFullName + _newNodeInserters(574) = nodes.NewLocation.InsertionHelpers.NewNodeInserter_Location_className + _newNodeInserters(662) = nodes.NewLocation.InsertionHelpers.NewNodeInserter_Location_classShortName + _newNodeInserters(1894) = nodes.NewLocation.InsertionHelpers.NewNodeInserter_Location_filename + _newNodeInserters(3038) = nodes.NewLocation.InsertionHelpers.NewNodeInserter_Location_lineNumber + _newNodeInserters(3214) = nodes.NewLocation.InsertionHelpers.NewNodeInserter_Location_methodFullName + _newNodeInserters(3302) = nodes.NewLocation.InsertionHelpers.NewNodeInserter_Location_methodShortName + _newNodeInserters(3566) = nodes.NewLocation.InsertionHelpers.NewNodeInserter_Location_nodeLabel + _newNodeInserters(4006) = nodes.NewLocation.InsertionHelpers.NewNodeInserter_Location_packageName + _newNodeInserters(4446) = nodes.NewLocation.InsertionHelpers.NewNodeInserter_Location_symbol + _newNodeInserters(5062) = nodes.NewLocation.InsertionHelpers.NewNodeInserter_Location_node + _newNodeInserters(312) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_astParentFullName + _newNodeInserters(400) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_astParentType + _newNodeInserters(928) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_code + _newNodeInserters(1016) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_columnNumber + _newNodeInserters(1632) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_dynamicTypeHintFullName + _newNodeInserters(3040) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_lineNumber + _newNodeInserters(3480) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_name + _newNodeInserters(3832) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_order + _newNodeInserters(4184) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_possibleTypes + _newNodeInserters(4624) = nodes.NewMember.InsertionHelpers.NewNodeInserter_Member_typeFullName + _newNodeInserters(2074) = nodes.NewMetaData.InsertionHelpers.NewNodeInserter_MetaData_hash + _newNodeInserters(2954) = nodes.NewMetaData.InsertionHelpers.NewNodeInserter_MetaData_language + _newNodeInserters(3922) = nodes.NewMetaData.InsertionHelpers.NewNodeInserter_MetaData_overlays + _newNodeInserters(4274) = nodes.NewMetaData.InsertionHelpers.NewNodeInserter_MetaData_root + _newNodeInserters(4802) = nodes.NewMetaData.InsertionHelpers.NewNodeInserter_MetaData_version + _newNodeInserters(316) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_astParentFullName + _newNodeInserters(404) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_astParentType + _newNodeInserters(932) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_code + _newNodeInserters(1020) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_columnNumber + _newNodeInserters(1108) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_columnNumberEnd + _newNodeInserters(1900) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_filename + _newNodeInserters(1988) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_fullName + _newNodeInserters(2076) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_hash + _newNodeInserters(2604) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_isExternal + _newNodeInserters(3044) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_lineNumber + _newNodeInserters(3132) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_lineNumberEnd + _newNodeInserters(3484) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_name + _newNodeInserters(3660) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_offset + _newNodeInserters(3748) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_offsetEnd + _newNodeInserters(3836) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_order + _newNodeInserters(4364) = nodes.NewMethod.InsertionHelpers.NewNodeInserter_Method_signature + _newNodeInserters(758) = + nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_closureBindingId + _newNodeInserters(934) = nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_code + _newNodeInserters(1022) = nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_columnNumber + _newNodeInserters(1638) = + nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_dynamicTypeHintFullName + _newNodeInserters(1726) = + nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_evaluationStrategy + _newNodeInserters(2342) = nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_index + _newNodeInserters(2694) = nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_isVariadic + _newNodeInserters(3046) = nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_lineNumber + _newNodeInserters(3486) = nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_name + _newNodeInserters(3838) = nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_order + _newNodeInserters(4190) = + nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_possibleTypes + _newNodeInserters(4630) = nodes.NewMethodParameterIn.InsertionHelpers.NewNodeInserter_MethodParameterIn_typeFullName + _newNodeInserters(936) = nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_code + _newNodeInserters(1024) = + nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_columnNumber + _newNodeInserters(1728) = + nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_evaluationStrategy + _newNodeInserters(2344) = nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_index + _newNodeInserters(2696) = nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_isVariadic + _newNodeInserters(3048) = nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_lineNumber + _newNodeInserters(3488) = nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_name + _newNodeInserters(3840) = nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_order + _newNodeInserters(4632) = + nodes.NewMethodParameterOut.InsertionHelpers.NewNodeInserter_MethodParameterOut_typeFullName + _newNodeInserters(146) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_argumentIndex + _newNodeInserters(234) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_argumentName + _newNodeInserters(938) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_code + _newNodeInserters(1026) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_columnNumber + _newNodeInserters(1642) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_dynamicTypeHintFullName + _newNodeInserters(3050) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_lineNumber + _newNodeInserters(3226) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_methodFullName + _newNodeInserters(3842) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_order + _newNodeInserters(4194) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_possibleTypes + _newNodeInserters(4634) = nodes.NewMethodRef.InsertionHelpers.NewNodeInserter_MethodRef_typeFullName + _newNodeInserters(940) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_code + _newNodeInserters(1028) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_columnNumber + _newNodeInserters(1644) = + nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_dynamicTypeHintFullName + _newNodeInserters(1732) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_evaluationStrategy + _newNodeInserters(3052) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_lineNumber + _newNodeInserters(3844) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_order + _newNodeInserters(4196) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_possibleTypes + _newNodeInserters(4636) = nodes.NewMethodReturn.InsertionHelpers.NewNodeInserter_MethodReturn_typeFullName + _newNodeInserters(942) = nodes.NewModifier.InsertionHelpers.NewNodeInserter_Modifier_code + _newNodeInserters(1030) = nodes.NewModifier.InsertionHelpers.NewNodeInserter_Modifier_columnNumber + _newNodeInserters(3054) = nodes.NewModifier.InsertionHelpers.NewNodeInserter_Modifier_lineNumber + _newNodeInserters(3406) = nodes.NewModifier.InsertionHelpers.NewNodeInserter_Modifier_modifierType + _newNodeInserters(3846) = nodes.NewModifier.InsertionHelpers.NewNodeInserter_Modifier_order + _newNodeInserters(944) = nodes.NewNamespace.InsertionHelpers.NewNodeInserter_Namespace_code + _newNodeInserters(1032) = nodes.NewNamespace.InsertionHelpers.NewNodeInserter_Namespace_columnNumber + _newNodeInserters(3056) = nodes.NewNamespace.InsertionHelpers.NewNodeInserter_Namespace_lineNumber + _newNodeInserters(3496) = nodes.NewNamespace.InsertionHelpers.NewNodeInserter_Namespace_name + _newNodeInserters(3848) = nodes.NewNamespace.InsertionHelpers.NewNodeInserter_Namespace_order + _newNodeInserters(946) = nodes.NewNamespaceBlock.InsertionHelpers.NewNodeInserter_NamespaceBlock_code + _newNodeInserters(1034) = nodes.NewNamespaceBlock.InsertionHelpers.NewNodeInserter_NamespaceBlock_columnNumber + _newNodeInserters(1914) = nodes.NewNamespaceBlock.InsertionHelpers.NewNodeInserter_NamespaceBlock_filename + _newNodeInserters(2002) = nodes.NewNamespaceBlock.InsertionHelpers.NewNodeInserter_NamespaceBlock_fullName + _newNodeInserters(3058) = nodes.NewNamespaceBlock.InsertionHelpers.NewNodeInserter_NamespaceBlock_lineNumber + _newNodeInserters(3498) = nodes.NewNamespaceBlock.InsertionHelpers.NewNodeInserter_NamespaceBlock_name + _newNodeInserters(3850) = nodes.NewNamespaceBlock.InsertionHelpers.NewNodeInserter_NamespaceBlock_order + _newNodeInserters(156) = nodes.NewReturn.InsertionHelpers.NewNodeInserter_Return_argumentIndex + _newNodeInserters(244) = nodes.NewReturn.InsertionHelpers.NewNodeInserter_Return_argumentName + _newNodeInserters(948) = nodes.NewReturn.InsertionHelpers.NewNodeInserter_Return_code + _newNodeInserters(1036) = nodes.NewReturn.InsertionHelpers.NewNodeInserter_Return_columnNumber + _newNodeInserters(3060) = nodes.NewReturn.InsertionHelpers.NewNodeInserter_Return_lineNumber + _newNodeInserters(3852) = nodes.NewReturn.InsertionHelpers.NewNodeInserter_Return_order + _newNodeInserters(3502) = nodes.NewTag.InsertionHelpers.NewNodeInserter_Tag_name + _newNodeInserters(4734) = nodes.NewTag.InsertionHelpers.NewNodeInserter_Tag_value + _newNodeInserters(5088) = nodes.NewTagNodePair.InsertionHelpers.NewNodeInserter_TagNodePair_node + _newNodeInserters(5176) = nodes.NewTagNodePair.InsertionHelpers.NewNodeInserter_TagNodePair_tag + _newNodeInserters(162) = nodes.NewTemplateDom.InsertionHelpers.NewNodeInserter_TemplateDom_argumentIndex + _newNodeInserters(250) = nodes.NewTemplateDom.InsertionHelpers.NewNodeInserter_TemplateDom_argumentName + _newNodeInserters(954) = nodes.NewTemplateDom.InsertionHelpers.NewNodeInserter_TemplateDom_code + _newNodeInserters(1042) = nodes.NewTemplateDom.InsertionHelpers.NewNodeInserter_TemplateDom_columnNumber + _newNodeInserters(3066) = nodes.NewTemplateDom.InsertionHelpers.NewNodeInserter_TemplateDom_lineNumber + _newNodeInserters(3506) = nodes.NewTemplateDom.InsertionHelpers.NewNodeInserter_TemplateDom_name + _newNodeInserters(3858) = nodes.NewTemplateDom.InsertionHelpers.NewNodeInserter_TemplateDom_order + _newNodeInserters(2012) = nodes.NewType.InsertionHelpers.NewNodeInserter_Type_fullName + _newNodeInserters(3508) = nodes.NewType.InsertionHelpers.NewNodeInserter_Type_name + _newNodeInserters(4564) = nodes.NewType.InsertionHelpers.NewNodeInserter_Type_typeDeclFullName + _newNodeInserters(958) = nodes.NewTypeArgument.InsertionHelpers.NewNodeInserter_TypeArgument_code + _newNodeInserters(1046) = nodes.NewTypeArgument.InsertionHelpers.NewNodeInserter_TypeArgument_columnNumber + _newNodeInserters(3070) = nodes.NewTypeArgument.InsertionHelpers.NewNodeInserter_TypeArgument_lineNumber + _newNodeInserters(3862) = nodes.NewTypeArgument.InsertionHelpers.NewNodeInserter_TypeArgument_order + _newNodeInserters(80) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_aliasTypeFullName + _newNodeInserters(344) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_astParentFullName + _newNodeInserters(432) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_astParentType + _newNodeInserters(960) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_code + _newNodeInserters(1048) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_columnNumber + _newNodeInserters(1928) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_filename + _newNodeInserters(2016) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_fullName + _newNodeInserters(2456) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_inheritsFromTypeFullName + _newNodeInserters(2632) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_isExternal + _newNodeInserters(3072) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_lineNumber + _newNodeInserters(3512) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_name + _newNodeInserters(3688) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_offset + _newNodeInserters(3776) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_offsetEnd + _newNodeInserters(3864) = nodes.NewTypeDecl.InsertionHelpers.NewNodeInserter_TypeDecl_order + _newNodeInserters(962) = nodes.NewTypeParameter.InsertionHelpers.NewNodeInserter_TypeParameter_code + _newNodeInserters(1050) = nodes.NewTypeParameter.InsertionHelpers.NewNodeInserter_TypeParameter_columnNumber + _newNodeInserters(3074) = nodes.NewTypeParameter.InsertionHelpers.NewNodeInserter_TypeParameter_lineNumber + _newNodeInserters(3514) = nodes.NewTypeParameter.InsertionHelpers.NewNodeInserter_TypeParameter_name + _newNodeInserters(3866) = nodes.NewTypeParameter.InsertionHelpers.NewNodeInserter_TypeParameter_order + _newNodeInserters(172) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_argumentIndex + _newNodeInserters(260) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_argumentName + _newNodeInserters(964) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_code + _newNodeInserters(1052) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_columnNumber + _newNodeInserters(1668) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_dynamicTypeHintFullName + _newNodeInserters(3076) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_lineNumber + _newNodeInserters(3868) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_order + _newNodeInserters(4220) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_possibleTypes + _newNodeInserters(4660) = nodes.NewTypeRef.InsertionHelpers.NewNodeInserter_TypeRef_typeFullName + _newNodeInserters(174) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_argumentIndex + _newNodeInserters(262) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_argumentName + _newNodeInserters(966) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_code + _newNodeInserters(1054) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_columnNumber + _newNodeInserters(1230) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_containedRef + _newNodeInserters(1670) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_dynamicTypeHintFullName + _newNodeInserters(3078) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_lineNumber + _newNodeInserters(3870) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_order + _newNodeInserters(4134) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_parserTypeName + _newNodeInserters(4222) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_possibleTypes + _newNodeInserters(4662) = nodes.NewUnknown.InsertionHelpers.NewNodeInserter_Unknown_typeFullName + _newNodeInserters + } + override def getNumberOfNodeKinds: Int = 44 + override def getNumberOfEdgeKinds: Int = 24 + override def getNodeLabel(nodeKind: Int): String = nodeLabels(nodeKind) + override def getNodeKindByLabel(label: String): Int = nodeKindByLabel.getOrElse(label, flatgraph.Schema.UndefinedKind) + override def getEdgeLabel(nodeKind: Int, edgeKind: Int): String = edgeLabels(edgeKind) + override def getEdgeKindByLabel(label: String): Int = edgeKindByLabel.getOrElse(label, flatgraph.Schema.UndefinedKind) + override def getNodePropertyNames(nodeLabel: String): Set[String] = { + nodeLabel match { + case "ANNOTATION" => + Set("ARGUMENT_INDEX", "ARGUMENT_NAME", "CODE", "COLUMN_NUMBER", "FULL_NAME", "LINE_NUMBER", "NAME", "ORDER") + case "ANNOTATION_LITERAL" => + Set("ARGUMENT_INDEX", "ARGUMENT_NAME", "CODE", "COLUMN_NUMBER", "LINE_NUMBER", "NAME", "ORDER") + case "ANNOTATION_PARAMETER" => Set("CODE", "COLUMN_NUMBER", "LINE_NUMBER", "ORDER") + case "ANNOTATION_PARAMETER_ASSIGN" => Set("CODE", "COLUMN_NUMBER", "LINE_NUMBER", "ORDER") + case "ARRAY_INITIALIZER" => + Set("ARGUMENT_INDEX", "ARGUMENT_NAME", "CODE", "COLUMN_NUMBER", "LINE_NUMBER", "ORDER") + case "BINDING" => Set("METHOD_FULL_NAME", "NAME", "SIGNATURE") + case "BLOCK" => + Set( + "ARGUMENT_INDEX", + "ARGUMENT_NAME", + "CODE", + "COLUMN_NUMBER", + "DYNAMIC_TYPE_HINT_FULL_NAME", + "LINE_NUMBER", + "ORDER", + "POSSIBLE_TYPES", + "TYPE_FULL_NAME" + ) + case "CALL" => + Set( + "ARGUMENT_INDEX", + "ARGUMENT_NAME", + "CODE", + "COLUMN_NUMBER", + "DISPATCH_TYPE", + "DYNAMIC_TYPE_HINT_FULL_NAME", + "LINE_NUMBER", + "METHOD_FULL_NAME", + "NAME", + "ORDER", + "POSSIBLE_TYPES", + "SIGNATURE", + "TYPE_FULL_NAME" + ) + case "CLOSURE_BINDING" => Set("CLOSURE_BINDING_ID", "CLOSURE_ORIGINAL_NAME", "EVALUATION_STRATEGY") + case "COMMENT" => Set("CODE", "COLUMN_NUMBER", "FILENAME", "LINE_NUMBER", "ORDER") + case "CONFIG_FILE" => Set("CONTENT", "NAME") + case "CONTROL_STRUCTURE" => + Set( + "ARGUMENT_INDEX", + "ARGUMENT_NAME", + "CODE", + "COLUMN_NUMBER", + "CONTROL_STRUCTURE_TYPE", + "LINE_NUMBER", + "ORDER", + "PARSER_TYPE_NAME" + ) + case "DEPENDENCY" => Set("DEPENDENCY_GROUP_ID", "NAME", "VERSION") + case "FIELD_IDENTIFIER" => + Set("ARGUMENT_INDEX", "ARGUMENT_NAME", "CANONICAL_NAME", "CODE", "COLUMN_NUMBER", "LINE_NUMBER", "ORDER") + case "FILE" => Set("CODE", "COLUMN_NUMBER", "CONTENT", "HASH", "LINE_NUMBER", "NAME", "ORDER") + case "FINDING" => Set() + case "IDENTIFIER" => + Set( + "ARGUMENT_INDEX", + "ARGUMENT_NAME", + "CODE", + "COLUMN_NUMBER", + "DYNAMIC_TYPE_HINT_FULL_NAME", + "LINE_NUMBER", + "NAME", + "ORDER", + "POSSIBLE_TYPES", + "TYPE_FULL_NAME" + ) + case "IMPORT" => + Set( + "CODE", + "COLUMN_NUMBER", + "EXPLICIT_AS", + "IMPORTED_AS", + "IMPORTED_ENTITY", + "IS_EXPLICIT", + "IS_WILDCARD", + "LINE_NUMBER", + "ORDER" + ) + case "JUMP_LABEL" => Set("CODE", "COLUMN_NUMBER", "LINE_NUMBER", "NAME", "ORDER", "PARSER_TYPE_NAME") + case "JUMP_TARGET" => + Set("ARGUMENT_INDEX", "CODE", "COLUMN_NUMBER", "LINE_NUMBER", "NAME", "ORDER", "PARSER_TYPE_NAME") + case "KEY_VALUE_PAIR" => Set("KEY", "VALUE") + case "LITERAL" => + Set( + "ARGUMENT_INDEX", + "ARGUMENT_NAME", + "CODE", + "COLUMN_NUMBER", + "DYNAMIC_TYPE_HINT_FULL_NAME", + "LINE_NUMBER", + "ORDER", + "POSSIBLE_TYPES", + "TYPE_FULL_NAME" + ) + case "LOCAL" => + Set( + "CLOSURE_BINDING_ID", + "CODE", + "COLUMN_NUMBER", + "DYNAMIC_TYPE_HINT_FULL_NAME", + "LINE_NUMBER", + "NAME", + "ORDER", + "POSSIBLE_TYPES", + "TYPE_FULL_NAME" + ) + case "LOCATION" => + Set( + "CLASS_NAME", + "CLASS_SHORT_NAME", + "FILENAME", + "LINE_NUMBER", + "METHOD_FULL_NAME", + "METHOD_SHORT_NAME", + "NODE_LABEL", + "PACKAGE_NAME", + "SYMBOL" + ) + case "MEMBER" => + Set( + "AST_PARENT_FULL_NAME", + "AST_PARENT_TYPE", + "CODE", + "COLUMN_NUMBER", + "DYNAMIC_TYPE_HINT_FULL_NAME", + "LINE_NUMBER", + "NAME", + "ORDER", + "POSSIBLE_TYPES", + "TYPE_FULL_NAME" + ) + case "META_DATA" => Set("HASH", "LANGUAGE", "OVERLAYS", "ROOT", "VERSION") + case "METHOD" => + Set( + "AST_PARENT_FULL_NAME", + "AST_PARENT_TYPE", + "CODE", + "COLUMN_NUMBER", + "COLUMN_NUMBER_END", + "FILENAME", + "FULL_NAME", + "HASH", + "IS_EXTERNAL", + "LINE_NUMBER", + "LINE_NUMBER_END", + "NAME", + "OFFSET", + "OFFSET_END", + "ORDER", + "SIGNATURE" + ) + case "METHOD_PARAMETER_IN" => + Set( + "CLOSURE_BINDING_ID", + "CODE", + "COLUMN_NUMBER", + "DYNAMIC_TYPE_HINT_FULL_NAME", + "EVALUATION_STRATEGY", + "INDEX", + "IS_VARIADIC", + "LINE_NUMBER", + "NAME", + "ORDER", + "POSSIBLE_TYPES", + "TYPE_FULL_NAME" + ) + case "METHOD_PARAMETER_OUT" => + Set( + "CODE", + "COLUMN_NUMBER", + "EVALUATION_STRATEGY", + "INDEX", + "IS_VARIADIC", + "LINE_NUMBER", + "NAME", + "ORDER", + "TYPE_FULL_NAME" + ) + case "METHOD_REF" => + Set( + "ARGUMENT_INDEX", + "ARGUMENT_NAME", + "CODE", + "COLUMN_NUMBER", + "DYNAMIC_TYPE_HINT_FULL_NAME", + "LINE_NUMBER", + "METHOD_FULL_NAME", + "ORDER", + "POSSIBLE_TYPES", + "TYPE_FULL_NAME" + ) + case "METHOD_RETURN" => + Set( + "CODE", + "COLUMN_NUMBER", + "DYNAMIC_TYPE_HINT_FULL_NAME", + "EVALUATION_STRATEGY", + "LINE_NUMBER", + "ORDER", + "POSSIBLE_TYPES", + "TYPE_FULL_NAME" + ) + case "MODIFIER" => Set("CODE", "COLUMN_NUMBER", "LINE_NUMBER", "MODIFIER_TYPE", "ORDER") + case "NAMESPACE" => Set("CODE", "COLUMN_NUMBER", "LINE_NUMBER", "NAME", "ORDER") + case "NAMESPACE_BLOCK" => Set("CODE", "COLUMN_NUMBER", "FILENAME", "FULL_NAME", "LINE_NUMBER", "NAME", "ORDER") + case "RETURN" => Set("ARGUMENT_INDEX", "ARGUMENT_NAME", "CODE", "COLUMN_NUMBER", "LINE_NUMBER", "ORDER") + case "TAG" => Set("NAME", "VALUE") + case "TAG_NODE_PAIR" => Set() + case "TEMPLATE_DOM" => + Set("ARGUMENT_INDEX", "ARGUMENT_NAME", "CODE", "COLUMN_NUMBER", "LINE_NUMBER", "NAME", "ORDER") + case "TYPE" => Set("FULL_NAME", "NAME", "TYPE_DECL_FULL_NAME") + case "TYPE_ARGUMENT" => Set("CODE", "COLUMN_NUMBER", "LINE_NUMBER", "ORDER") + case "TYPE_DECL" => + Set( + "ALIAS_TYPE_FULL_NAME", + "AST_PARENT_FULL_NAME", + "AST_PARENT_TYPE", + "CODE", + "COLUMN_NUMBER", + "FILENAME", + "FULL_NAME", + "INHERITS_FROM_TYPE_FULL_NAME", + "IS_EXTERNAL", + "LINE_NUMBER", + "NAME", + "OFFSET", + "OFFSET_END", + "ORDER" + ) + case "TYPE_PARAMETER" => Set("CODE", "COLUMN_NUMBER", "LINE_NUMBER", "NAME", "ORDER") + case "TYPE_REF" => + Set( + "ARGUMENT_INDEX", + "ARGUMENT_NAME", + "CODE", + "COLUMN_NUMBER", + "DYNAMIC_TYPE_HINT_FULL_NAME", + "LINE_NUMBER", + "ORDER", + "POSSIBLE_TYPES", + "TYPE_FULL_NAME" + ) + case "UNKNOWN" => + Set( + "ARGUMENT_INDEX", + "ARGUMENT_NAME", + "CODE", + "COLUMN_NUMBER", + "CONTAINED_REF", + "DYNAMIC_TYPE_HINT_FULL_NAME", + "LINE_NUMBER", + "ORDER", + "PARSER_TYPE_NAME", + "POSSIBLE_TYPES", + "TYPE_FULL_NAME" + ) + case _ => Set.empty + } + } + override def getEdgePropertyName(label: String): Option[String] = { + label match { + case "REACHING_DEF" => Some("VARIABLE") + case _ => None + } + } + + override def getPropertyLabel(nodeKind: Int, propertyKind: Int): String = { + if (propertyKind < 55) normalNodePropertyNames(propertyKind) + else if (propertyKind == 55 && nodeKind == 15) "evidence" /*on node FINDING*/ + else if (propertyKind == 56 && nodeKind == 15) "keyValuePairs" /*on node FINDING*/ + else if (propertyKind == 57 && nodeKind == 23) "node" /*on node LOCATION*/ + else if (propertyKind == 57 && nodeKind == 36) "node" /*on node TAG_NODE_PAIR*/ + else if (propertyKind == 58 && nodeKind == 36) "tag" /*on node TAG_NODE_PAIR*/ + else null + } + + override def getPropertyKindByName(label: String): Int = + nodePropertyByLabel.getOrElse(label, flatgraph.Schema.UndefinedKind) + override def getNumberOfPropertyKinds: Int = 59 + override def makeNode(graph: flatgraph.Graph, nodeKind: Short, seq: Int): nodes.StoredNode = + nodeFactories(nodeKind)(graph, seq) + override def makeEdge( + src: flatgraph.GNode, + dst: flatgraph.GNode, + edgeKind: Short, + subSeq: Int, + property: Any + ): flatgraph.Edge = edgeFactories(edgeKind)(src, dst, subSeq, property) + override def allocateEdgeProperty( + nodeKind: Int, + direction: flatgraph.Edge.Direction, + edgeKind: Int, + size: Int + ): Array[?] = edgePropertyAllocators(edgeKind)(size) + override def getNodePropertyFormalType(nodeKind: Int, propertyKind: Int): FormalQtyType.FormalType = + nodePropertyDescriptors(propertyOffsetArrayIndex(nodeKind, propertyKind)).asInstanceOf[FormalQtyType.FormalType] + override def getNodePropertyFormalQuantity(nodeKind: Int, propertyKind: Int): FormalQtyType.FormalQuantity = + nodePropertyDescriptors(1 + propertyOffsetArrayIndex(nodeKind, propertyKind)) + .asInstanceOf[FormalQtyType.FormalQuantity] + + override def getNewNodePropertyInserter(nodeKind: Int, propertyKind: Int): flatgraph.NewNodePropertyInsertionHelper = + newNodeInsertionHelpers(propertyOffsetArrayIndex(nodeKind, propertyKind)) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Languages.java b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Languages.java index 14e92c4e7..5be3dac83 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Languages.java +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Languages.java @@ -1,8 +1,5 @@ package io.shiftleft.codepropertygraph.generated; -import overflowdb.*; - -import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -65,7 +62,6 @@ public class Languages { /** Source-based frontend for C# and .NET */ public static final String CSHARPSRC = "CSHARPSRC"; - public static Set ALL = new HashSet() {{ add(JAVA); add(JAVASCRIPT); diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/ModifierTypes.java b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/ModifierTypes.java index 88481f4e7..e0d963442 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/ModifierTypes.java +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/ModifierTypes.java @@ -1,8 +1,5 @@ package io.shiftleft.codepropertygraph.generated; -import overflowdb.*; - -import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -47,7 +44,6 @@ public class ModifierTypes { /** Indicate that a method is an anonymous function, lambda, or closure */ public static final String LAMBDA = "LAMBDA"; - public static Set ALL = new HashSet() {{ add(STATIC); add(PUBLIC); diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/NodeTypes.java b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/NodeTypes.java index b3404f71c..3de54af72 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/NodeTypes.java +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/NodeTypes.java @@ -1,8 +1,5 @@ package io.shiftleft.codepropertygraph.generated; -import overflowdb.*; - -import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -316,7 +313,6 @@ languages that support type parameters are Java (via Generics) and C++ included using a node of type `UNKNOWN`. */ public static final String UNKNOWN = "UNKNOWN"; - public static Set ALL = new HashSet() {{ add(ANNOTATION); add(ANNOTATION_LITERAL); diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Operators.java b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Operators.java index da3fa6652..6c14be713 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Operators.java +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Operators.java @@ -1,8 +1,5 @@ package io.shiftleft.codepropertygraph.generated; -import overflowdb.*; - -import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -227,7 +224,6 @@ public class Operators { /** Allocates memory for an object of a specific type */ public static final String alloc = ".alloc"; - public static Set ALL = new HashSet() {{ add(addition); add(subtraction); 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 2154aecbe..953c10a67 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Properties.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Properties.scala @@ -1,117 +1,268 @@ package io.shiftleft.codepropertygraph.generated object Properties { - val AliasTypeFullName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("ALIAS_TYPE_FULL_NAME") - val ArgumentIndex: overflowdb.PropertyKey[scala.Int] = new overflowdb.PropertyKey("ARGUMENT_INDEX") - - val ArgumentName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("ARGUMENT_NAME") - - val AstParentFullName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("AST_PARENT_FULL_NAME") - - val AstParentType: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("AST_PARENT_TYPE") - - val CanonicalName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("CANONICAL_NAME") - - val ClassName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("CLASS_NAME") - - val ClassShortName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("CLASS_SHORT_NAME") - - val ClosureBindingId: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("CLOSURE_BINDING_ID") - - val ClosureOriginalName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("CLOSURE_ORIGINAL_NAME") - - val Code: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("CODE") - - val ColumnNumber: overflowdb.PropertyKey[scala.Int] = new overflowdb.PropertyKey("COLUMN_NUMBER") - - val ColumnNumberEnd: overflowdb.PropertyKey[scala.Int] = new overflowdb.PropertyKey("COLUMN_NUMBER_END") - - val ContainedRef: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("CONTAINED_REF") - - val Content: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("CONTENT") - - val ControlStructureType: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("CONTROL_STRUCTURE_TYPE") - - val DependencyGroupId: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("DEPENDENCY_GROUP_ID") - - val DispatchType: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("DISPATCH_TYPE") - - val DynamicTypeHintFullName: overflowdb.PropertyKey[IndexedSeq[String]] = - new overflowdb.PropertyKey("DYNAMIC_TYPE_HINT_FULL_NAME") - - val EvaluationStrategy: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("EVALUATION_STRATEGY") - - val ExplicitAs: overflowdb.PropertyKey[Boolean] = new overflowdb.PropertyKey("EXPLICIT_AS") - - val Filename: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("FILENAME") - - val FullName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("FULL_NAME") - - val Hash: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("HASH") - - val ImportedAs: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("IMPORTED_AS") - - val ImportedEntity: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("IMPORTED_ENTITY") - - val Index: overflowdb.PropertyKey[scala.Int] = new overflowdb.PropertyKey("INDEX") - - val InheritsFromTypeFullName: overflowdb.PropertyKey[IndexedSeq[String]] = - new overflowdb.PropertyKey("INHERITS_FROM_TYPE_FULL_NAME") - - val IsExplicit: overflowdb.PropertyKey[Boolean] = new overflowdb.PropertyKey("IS_EXPLICIT") - - val IsExternal: overflowdb.PropertyKey[Boolean] = new overflowdb.PropertyKey("IS_EXTERNAL") - - val IsVariadic: overflowdb.PropertyKey[Boolean] = new overflowdb.PropertyKey("IS_VARIADIC") - - val IsWildcard: overflowdb.PropertyKey[Boolean] = new overflowdb.PropertyKey("IS_WILDCARD") - - val Key: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("KEY") - - val Language: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("LANGUAGE") - - val LineNumber: overflowdb.PropertyKey[scala.Int] = new overflowdb.PropertyKey("LINE_NUMBER") - - val LineNumberEnd: overflowdb.PropertyKey[scala.Int] = new overflowdb.PropertyKey("LINE_NUMBER_END") - - val MethodFullName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("METHOD_FULL_NAME") - - val MethodShortName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("METHOD_SHORT_NAME") - - val ModifierType: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("MODIFIER_TYPE") - - val Name: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("NAME") - - val NodeLabel: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("NODE_LABEL") - - val Offset: overflowdb.PropertyKey[scala.Int] = new overflowdb.PropertyKey("OFFSET") - - val OffsetEnd: overflowdb.PropertyKey[scala.Int] = new overflowdb.PropertyKey("OFFSET_END") - - val Order: overflowdb.PropertyKey[scala.Int] = new overflowdb.PropertyKey("ORDER") - - val Overlays: overflowdb.PropertyKey[IndexedSeq[String]] = new overflowdb.PropertyKey("OVERLAYS") - - val PackageName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("PACKAGE_NAME") - - val ParserTypeName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("PARSER_TYPE_NAME") - - val PossibleTypes: overflowdb.PropertyKey[IndexedSeq[String]] = new overflowdb.PropertyKey("POSSIBLE_TYPES") - - val Root: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("ROOT") - - val Signature: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("SIGNATURE") - - val Symbol: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("SYMBOL") - - val TypeDeclFullName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("TYPE_DECL_FULL_NAME") - - val TypeFullName: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("TYPE_FULL_NAME") - - val Value: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("VALUE") - - val Variable: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("VARIABLE") - - val Version: overflowdb.PropertyKey[String] = new overflowdb.PropertyKey("VERSION") + /** This property holds the fully qualified name of the type that the node is a type alias of. + */ + val AliasTypeFullName = flatgraph.OptionalPropertyKey[String](kind = 0, name = "ALIAS_TYPE_FULL_NAME") + + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of BLOCK + * nodes may have an argument index as well; in this case, the last argument index determines the return expression + * of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is ignored. It is + * suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by the + * expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") + + /** This field holds the FULL_NAME of the AST parent of an entity. */ + val AstParentFullName = + flatgraph.SinglePropertyKey[String](kind = 3, name = "AST_PARENT_FULL_NAME", default = "") + + /** The type of the AST parent. Since this is only used in some parts of the graph, the list does not include all + * possible parents by intention. Possible parents: METHOD, TYPE_DECL, NAMESPACE_BLOCK. + */ + val AstParentType = flatgraph.SinglePropertyKey[String](kind = 4, name = "AST_PARENT_TYPE", default = "") + + /** This field holds the canonical name of a `FIELD_IDENTIFIER`. It is typically identical to the CODE field, but + * canonicalized according to source language semantics. Human readable names are preferable. `FIELD_IDENTIFIER` + * nodes must share identical `CANONICAL_NAME` if and only if they alias, e.g., in C-style unions (if the aliasing + * relationship is unknown or there are partial overlaps, then one must make a reasonable guess, and trade off + * between false negatives and false positives). + */ + val CanonicalName = flatgraph.SinglePropertyKey[String](kind = 5, name = "CANONICAL_NAME", default = "") + + val ClassName = flatgraph.SinglePropertyKey[String](kind = 6, name = "CLASS_NAME", default = "") + + val ClassShortName = flatgraph.SinglePropertyKey[String](kind = 7, name = "CLASS_SHORT_NAME", default = "") + + /** Identifier which uniquely describes a CLOSURE_BINDING. This property is used to match captured LOCAL nodes with + * the corresponding CLOSURE_BINDING nodes + */ + val ClosureBindingId = flatgraph.OptionalPropertyKey[String](kind = 8, name = "CLOSURE_BINDING_ID") + + /** The original name of the (potentially mangled) captured variable */ + val ClosureOriginalName = flatgraph.OptionalPropertyKey[String](kind = 9, name = "CLOSURE_ORIGINAL_NAME") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** This optional fields provides the column number at which the program construct represented by the node ends. + */ + val ColumnNumberEnd = flatgraph.OptionalPropertyKey[Int](kind = 12, name = "COLUMN_NUMBER_END") + + /** References to other nodes. This is not a real property; it exists here for the sake of proto serialization only. + * valueType and cardinality are meaningless. + */ + val ContainedRef = flatgraph.SinglePropertyKey[String](kind = 13, name = "CONTAINED_REF", default = "") + + /** Certain files, e.g., configuration files, may be included in the CPG as-is. For such files, the `CONTENT` field + * contains the files content. + */ + val Content = flatgraph.SinglePropertyKey[String](kind = 14, name = "CONTENT", default = "") + + /** The `CONTROL_STRUCTURE_TYPE` field indicates which kind of control structure a `CONTROL_STRUCTURE` node + * represents. The available types are the following: BREAK, CONTINUE, DO, WHILE, FOR, GOTO, IF, ELSE, TRY, THROW and + * SWITCH. + */ + val ControlStructureType = + flatgraph.SinglePropertyKey[String](kind = 15, name = "CONTROL_STRUCTURE_TYPE", default = "") + + /** The group ID for a dependency */ + val DependencyGroupId = flatgraph.OptionalPropertyKey[String](kind = 16, name = "DEPENDENCY_GROUP_ID") + + /** This field holds the dispatch type of a call, which is either `STATIC_DISPATCH` or `DYNAMIC_DISPATCH`. For + * statically dispatched method calls, the call target is known at compile time while for dynamically dispatched + * calls, it can only be determined at runtime as it may depend on the type of an object (as is the case for virtual + * method calls) or calculation of an offset. + */ + val DispatchType = flatgraph.SinglePropertyKey[String](kind = 17, name = "DISPATCH_TYPE", default = "") + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ + val DynamicTypeHintFullName = flatgraph.MultiPropertyKey[String](kind = 18, name = "DYNAMIC_TYPE_HINT_FULL_NAME") + + /** For formal method input parameters, output parameters, and return parameters, this field holds the evaluation + * strategy, which is one of the following: 1) `BY_REFERENCE` indicates that the parameter is passed by reference, 2) + * `BY_VALUE` indicates that it is passed by value, that is, a copy is made, 3) `BY_SHARING` the parameter is a + * pointer/reference and it is shared with the caller/callee. While a copy of the pointer is made, a copy of the + * object that it points to is not made. + */ + val EvaluationStrategy = + flatgraph.SinglePropertyKey[String](kind = 19, name = "EVALUATION_STRATEGY", default = "") + + /** Specifies whether the IMPORTED_AS property was explicitly present in the code. For languages like Java which do + * not allow a renaming during import this is always false. For e.g. Kotlin it depends on the existence of the "as" + * keyword. + */ + val ExplicitAs = flatgraph.OptionalPropertyKey[Boolean](kind = 20, name = "EXPLICIT_AS") + + /** The path of the source file this node was generated from, relative to the root path in the meta data node. This + * field must be set but may be set to the value `` to indicate that no source file can be associated with + * the node, e.g., because the node represents an entity known to exist because it is referenced, but for which the + * file that is is declared in is unknown. + */ + val Filename = flatgraph.SinglePropertyKey[String](kind = 21, name = "FILENAME", default = "") + + /** This is the fully-qualified name of an entity, e.g., the fully-qualified name of a method or type. The details of + * what constitutes a fully-qualified name are language specific. This field SHOULD be human readable. + */ + val FullName = flatgraph.SinglePropertyKey[String](kind = 22, name = "FULL_NAME", default = "") + + /** This property contains a hash value in the form of a string. Hashes can be used to summarize data, e.g., to + * summarize the contents of source files or sub graphs. Such summaries are useful to determine whether code has + * already been analyzed in incremental analysis pipelines. This property is optional to allow its calculation to be + * deferred or skipped if the hash is not needed. + */ + val Hash = flatgraph.OptionalPropertyKey[String](kind = 23, name = "HASH") + + /** The identifier under which the import can be accessed in the importing context. For a Java import this is always + * identical to the class name. But e.g. for a Kotlin import like "import java.nio.ByteBuffer as BBuffer" this would + * be "BBuffer". This property is ignored if IS_WILDCARD is true. + */ + val ImportedAs = flatgraph.OptionalPropertyKey[String](kind = 24, name = "IMPORTED_AS") + + /** The identifying string of the imported entity. For a Java import like "import java.nio.ByteBuffer;" this would be + * "java.nio.ByteBuffer". + */ + val ImportedEntity = flatgraph.OptionalPropertyKey[String](kind = 25, name = "IMPORTED_ENTITY") + + /** Specifies an index, e.g., for a parameter or argument. Explicit parameters are numbered from 1 to N, while index 0 + * is reserved for implicit self / this parameter. + */ + val Index = flatgraph.SinglePropertyKey[Int](kind = 26, name = "INDEX", default = -1: Int) + + /** The static types a TYPE_DECL inherits from. This property is matched against the FULL_NAME of TYPE nodes and thus + * it is required to have at least one TYPE node for each TYPE_FULL_NAME + */ + val InheritsFromTypeFullName = flatgraph.MultiPropertyKey[String](kind = 27, name = "INHERITS_FROM_TYPE_FULL_NAME") + + /** Specifies whether this is an explicit import. Most languages have implicit default imports of some standard + * library elements and this flag is used to distinguish those from explicit imports found in the code base. + */ + val IsExplicit = flatgraph.OptionalPropertyKey[Boolean](kind = 28, name = "IS_EXPLICIT") + + /** Indicates that the construct (METHOD or TYPE_DECL) is external, that is, it is referenced but not defined in the + * code (applies both to insular parsing and to library functions where we have header files only) + */ + val IsExternal = flatgraph.SinglePropertyKey[Boolean](kind = 29, name = "IS_EXTERNAL", default = false) + + /** Specifies whether a parameter is the variadic argument handling parameter of a variadic method. Only one parameter + * of a method is allowed to have this property set to true. + */ + val IsVariadic = flatgraph.SinglePropertyKey[Boolean](kind = 30, name = "IS_VARIADIC", default = false) + + /** Specifies whether this is a wildcard import. For a Java import like "import java.nio.*;" IS_WILDCARD would be + * "true" and IMPORTED_ENTITY would be "java.nio". For wildcard imports the IMPORTED_AS property is ignored. + */ + val IsWildcard = flatgraph.OptionalPropertyKey[Boolean](kind = 31, name = "IS_WILDCARD") + + /** This property denotes a key of a key-value pair. */ + val Key = flatgraph.SinglePropertyKey[String](kind = 32, name = "KEY", default = "") + + /** This field indicates which CPG language frontend generated the CPG. Frontend developers may freely choose a value + * that describes their frontend so long as it is not used by an existing frontend. Reserved values are to date: C, + * LLVM, GHIDRA, PHP. + */ + val Language = flatgraph.SinglePropertyKey[String](kind = 33, name = "LANGUAGE", default = "") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** This optional fields provides the line number at which the program construct represented by the node ends. + */ + val LineNumberEnd = flatgraph.OptionalPropertyKey[Int](kind = 35, name = "LINE_NUMBER_END") + + /** The FULL_NAME of a method. Used to link CALL and METHOD nodes. It is required to have exactly one METHOD node for + * each METHOD_FULL_NAME + */ + val MethodFullName = flatgraph.SinglePropertyKey[String](kind = 36, name = "METHOD_FULL_NAME", default = "") + + val MethodShortName = flatgraph.SinglePropertyKey[String](kind = 37, name = "METHOD_SHORT_NAME", default = "") + + /** The modifier type is a free-form string. The following are known modifier types: `STATIC`, `PUBLIC`, `PROTECTED`, + * `PRIVATE`, `ABSTRACT`, `NATIVE`, `CONSTRUCTOR`, `VIRTUAL`. + */ + val ModifierType = flatgraph.SinglePropertyKey[String](kind = 38, name = "MODIFIER_TYPE", default = "") + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") + + val NodeLabel = flatgraph.SinglePropertyKey[String](kind = 40, name = "NODE_LABEL", default = "") + + /** Start offset into the CONTENT property of the corresponding FILE node. The offset is such that parts of the + * content can easily be accessed via `content.substring(offset, offsetEnd)`. This means that the offset must be + * measured in utf16 encoding (i.e. neither in characters/codeunits nor in byte-offsets into a utf8 encoding). E.g. + * for METHOD nodes this start offset points to the start of the methods source code in the string holding the source + * code of the entire file. + */ + val Offset = flatgraph.OptionalPropertyKey[Int](kind = 41, name = "OFFSET") + + /** End offset (exclusive) into the CONTENT property of the corresponding FILE node. See OFFSET documentation for + * finer details. E.g. for METHOD nodes this end offset points to the first code position which is not part of the + * method. + */ + val OffsetEnd = flatgraph.OptionalPropertyKey[Int](kind = 42, name = "OFFSET_END") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order of + * 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** The field contains the names of the overlays applied to this CPG, in order of their application. Names are + * free-form strings, that is, this specification does not dictate them but rather requires tool producers and + * consumers to communicate them between each other. + */ + val Overlays = flatgraph.MultiPropertyKey[String](kind = 44, name = "OVERLAYS") + + val PackageName = flatgraph.SinglePropertyKey[String](kind = 45, name = "PACKAGE_NAME", default = "") + + /** AST node type name emitted by parser. */ + val ParserTypeName = flatgraph.SinglePropertyKey[String](kind = 46, name = "PARSER_TYPE_NAME", default = "") + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = flatgraph.MultiPropertyKey[String](kind = 47, name = "POSSIBLE_TYPES") + + /** The path to the root directory of the source/binary this CPG is generated from. */ + val Root = flatgraph.SinglePropertyKey[String](kind = 48, name = "ROOT", default = "") + + /** The method signature encodes the types of parameters in a string. The string SHOULD be human readable and suitable + * for differentiating methods with different parameter types sufficiently to allow for resolving of function + * overloading. The present specification does not enforce a strict format for the signature, that is, it can be + * chosen by the frontend implementor to fit the source language. + */ + val Signature = flatgraph.SinglePropertyKey[String](kind = 49, name = "SIGNATURE", default = "") + + val Symbol = flatgraph.SinglePropertyKey[String](kind = 50, name = "SYMBOL", default = "") + + /** 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 = 51, 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 = 52, name = "TYPE_FULL_NAME", default = "") + + /** This property denotes a string value as used in a key-value pair. */ + val Value = flatgraph.SinglePropertyKey[String](kind = 53, 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 = 54, name = "VERSION", default = "") } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyErrorRegister.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyErrorRegister.scala new file mode 100644 index 000000000..899880bb9 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyErrorRegister.scala @@ -0,0 +1,13 @@ +package io.shiftleft.codepropertygraph.generated + +object PropertyErrorRegister { + private var errorMap = Set.empty[(Class[?], String)] + private val logger = org.slf4j.LoggerFactory.getLogger(getClass) + + def logPropertyErrorIfFirst(clazz: Class[?], propertyName: String): Unit = { + if (!errorMap.contains((clazz, propertyName))) { + logger.warn("Property " + propertyName + " is deprecated for " + clazz.getName + ".") + errorMap += ((clazz, propertyName)) + } + } +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyNames.java b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyNames.java index 323d04bbc..37b948af8 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyNames.java +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/PropertyNames.java @@ -1,8 +1,5 @@ package io.shiftleft.codepropertygraph.generated; -import overflowdb.*; - -import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -240,6 +237,10 @@ This means that the offset must be measured in utf16 encoding (i.e. neither in /** The path to the root directory of the source/binary this CPG is generated from. */ public static final String ROOT = "ROOT"; +/** ID from a different context, e.g. if the graph was imported from a different format, +we can use this to preserve the link to the original */ +public static final String SECONDARY_ID = "SECONDARY_ID"; + /** The method signature encodes the types of parameters in a string. The string SHOULD be human readable and suitable for differentiating methods with different parameter types sufficiently to allow for resolving of @@ -272,7 +273,6 @@ This means that the offset must be measured in utf16 encoding (i.e. neither in indicate which version of the CPG spec this CPG conforms to */ public static final String VERSION = "VERSION"; - public static Set ALL = new HashSet() {{ add(ALIAS_TYPE_FULL_NAME); add(ARGUMENT_INDEX); @@ -323,6 +323,7 @@ This means that the offset must be measured in utf16 encoding (i.e. neither in add(PARSER_TYPE_NAME); add(POSSIBLE_TYPES); add(ROOT); +add(SECONDARY_ID); add(SIGNATURE); add(SYMBOL); add(TYPE_DECL_FULL_NAME); 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 new file mode 100644 index 000000000..02195f058 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/accessors/Accessors.scala @@ -0,0 +1,1119 @@ +package io.shiftleft.codepropertygraph.generated.accessors +import io.shiftleft.codepropertygraph.generated.nodes +import scala.collection.immutable.IndexedSeq + +/** not supposed to be used directly by users, hence the `bootstrap` in the name */ +object languagebootstrap extends ConcreteStoredConversions + +object Accessors { + /* accessors for concrete stored nodes start */ + final class AccessPropertyAliasTypeFullName(val node: nodes.StoredNode) extends AnyVal { + def aliasTypeFullName: Option[String] = + flatgraph.Accessors.getNodePropertyOption[String](node.graph, node.nodeKind, 0, node.seq) + } + final class AccessPropertyArgumentIndex(val node: nodes.StoredNode) extends AnyVal { + def argumentIndex: Int = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 1, node.seq(), -1: Int) + } + final class AccessPropertyArgumentName(val node: nodes.StoredNode) extends AnyVal { + def argumentName: Option[String] = + flatgraph.Accessors.getNodePropertyOption[String](node.graph, node.nodeKind, 2, node.seq) + } + final class AccessPropertyAstParentFullName(val node: nodes.StoredNode) extends AnyVal { + def astParentFullName: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 3, node.seq(), "": String) + } + final class AccessPropertyAstParentType(val node: nodes.StoredNode) extends AnyVal { + def astParentType: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 4, node.seq(), "": String) + } + final class AccessPropertyCanonicalName(val node: nodes.StoredNode) extends AnyVal { + def canonicalName: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 5, node.seq(), "": String) + } + final class AccessPropertyClassName(val node: nodes.StoredNode) extends AnyVal { + def className: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 6, node.seq(), "": String) + } + final class AccessPropertyClassShortName(val node: nodes.StoredNode) extends AnyVal { + def classShortName: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 7, node.seq(), "": String) + } + final class AccessPropertyClosureBindingId(val node: nodes.StoredNode) extends AnyVal { + def closureBindingId: Option[String] = + flatgraph.Accessors.getNodePropertyOption[String](node.graph, node.nodeKind, 8, node.seq) + } + final class AccessPropertyClosureOriginalName(val node: nodes.StoredNode) extends AnyVal { + def closureOriginalName: Option[String] = + flatgraph.Accessors.getNodePropertyOption[String](node.graph, node.nodeKind, 9, node.seq) + } + final class AccessPropertyCode(val node: nodes.StoredNode) extends AnyVal { + def code: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 10, node.seq(), "": String) + } + final class AccessPropertyColumnNumber(val node: nodes.StoredNode) extends AnyVal { + def columnNumber: Option[Int] = + flatgraph.Accessors.getNodePropertyOption[Int](node.graph, node.nodeKind, 11, node.seq) + } + final class AccessPropertyColumnNumberEnd(val node: nodes.StoredNode) extends AnyVal { + def columnNumberEnd: Option[Int] = + flatgraph.Accessors.getNodePropertyOption[Int](node.graph, node.nodeKind, 12, node.seq) + } + final class AccessPropertyContainedRef(val node: nodes.StoredNode) extends AnyVal { + def containedRef: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 13, node.seq(), "": String) + } + final class AccessPropertyContent(val node: nodes.StoredNode) extends AnyVal { + def content: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 14, node.seq(), "": String) + } + final class AccessPropertyControlStructureType(val node: nodes.StoredNode) extends AnyVal { + def controlStructureType: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 15, node.seq(), "": String) + } + final class AccessPropertyDependencyGroupId(val node: nodes.StoredNode) extends AnyVal { + def dependencyGroupId: Option[String] = + flatgraph.Accessors.getNodePropertyOption[String](node.graph, node.nodeKind, 16, node.seq) + } + final class AccessPropertyDispatchType(val node: nodes.StoredNode) extends AnyVal { + def dispatchType: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 17, node.seq(), "": String) + } + final class AccessPropertyDynamicTypeHintFullName(val node: nodes.StoredNode) extends AnyVal { + def dynamicTypeHintFullName: IndexedSeq[String] = + flatgraph.Accessors.getNodePropertyMulti[String](node.graph, node.nodeKind, 18, node.seq) + } + final class AccessPropertyEvaluationStrategy(val node: nodes.StoredNode) extends AnyVal { + def evaluationStrategy: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 19, node.seq(), "": String) + } + final class AccessPropertyExplicitAs(val node: nodes.StoredNode) extends AnyVal { + def explicitAs: Option[Boolean] = + flatgraph.Accessors.getNodePropertyOption[Boolean](node.graph, node.nodeKind, 20, node.seq) + } + final class AccessPropertyFilename(val node: nodes.StoredNode) extends AnyVal { + def filename: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 21, node.seq(), "": String) + } + final class AccessPropertyFullName(val node: nodes.StoredNode) extends AnyVal { + def fullName: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 22, node.seq(), "": String) + } + final class AccessPropertyHash(val node: nodes.StoredNode) extends AnyVal { + def hash: Option[String] = + flatgraph.Accessors.getNodePropertyOption[String](node.graph, node.nodeKind, 23, node.seq) + } + final class AccessPropertyImportedAs(val node: nodes.StoredNode) extends AnyVal { + def importedAs: Option[String] = + flatgraph.Accessors.getNodePropertyOption[String](node.graph, node.nodeKind, 24, node.seq) + } + final class AccessPropertyImportedEntity(val node: nodes.StoredNode) extends AnyVal { + def importedEntity: Option[String] = + flatgraph.Accessors.getNodePropertyOption[String](node.graph, node.nodeKind, 25, node.seq) + } + final class AccessPropertyIndex(val node: nodes.StoredNode) extends AnyVal { + def index: Int = flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 26, node.seq(), -1: Int) + } + final class AccessPropertyInheritsFromTypeFullName(val node: nodes.StoredNode) extends AnyVal { + def inheritsFromTypeFullName: IndexedSeq[String] = + flatgraph.Accessors.getNodePropertyMulti[String](node.graph, node.nodeKind, 27, node.seq) + } + final class AccessPropertyIsExplicit(val node: nodes.StoredNode) extends AnyVal { + def isExplicit: Option[Boolean] = + flatgraph.Accessors.getNodePropertyOption[Boolean](node.graph, node.nodeKind, 28, node.seq) + } + final class AccessPropertyIsExternal(val node: nodes.StoredNode) extends AnyVal { + def isExternal: Boolean = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 29, node.seq(), false: Boolean) + } + final class AccessPropertyIsVariadic(val node: nodes.StoredNode) extends AnyVal { + def isVariadic: Boolean = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 30, node.seq(), false: Boolean) + } + final class AccessPropertyIsWildcard(val node: nodes.StoredNode) extends AnyVal { + def isWildcard: Option[Boolean] = + flatgraph.Accessors.getNodePropertyOption[Boolean](node.graph, node.nodeKind, 31, node.seq) + } + final class AccessPropertyKey(val node: nodes.StoredNode) extends AnyVal { + def key: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 32, node.seq(), "": String) + } + final class AccessPropertyLanguage(val node: nodes.StoredNode) extends AnyVal { + def language: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 33, node.seq(), "": String) + } + final class AccessPropertyLineNumber(val node: nodes.StoredNode) extends AnyVal { + def lineNumber: Option[Int] = + flatgraph.Accessors.getNodePropertyOption[Int](node.graph, node.nodeKind, 34, node.seq) + } + final class AccessPropertyLineNumberEnd(val node: nodes.StoredNode) extends AnyVal { + def lineNumberEnd: Option[Int] = + flatgraph.Accessors.getNodePropertyOption[Int](node.graph, node.nodeKind, 35, node.seq) + } + final class AccessPropertyMethodFullName(val node: nodes.StoredNode) extends AnyVal { + def methodFullName: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 36, node.seq(), "": String) + } + final class AccessPropertyMethodShortName(val node: nodes.StoredNode) extends AnyVal { + def methodShortName: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 37, node.seq(), "": String) + } + final class AccessPropertyModifierType(val node: nodes.StoredNode) extends AnyVal { + def modifierType: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 38, node.seq(), "": String) + } + final class AccessPropertyName(val node: nodes.StoredNode) extends AnyVal { + def name: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 39, node.seq(), "": String) + } + final class AccessPropertyNodeLabel(val node: nodes.StoredNode) extends AnyVal { + def nodeLabel: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 40, node.seq(), "": String) + } + final class AccessPropertyOffset(val node: nodes.StoredNode) extends AnyVal { + def offset: Option[Int] = flatgraph.Accessors.getNodePropertyOption[Int](node.graph, node.nodeKind, 41, node.seq) + } + final class AccessPropertyOffsetEnd(val node: nodes.StoredNode) extends AnyVal { + def offsetEnd: Option[Int] = flatgraph.Accessors.getNodePropertyOption[Int](node.graph, node.nodeKind, 42, node.seq) + } + final class AccessPropertyOrder(val node: nodes.StoredNode) extends AnyVal { + def order: Int = flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 43, node.seq(), -1: Int) + } + final class AccessPropertyOverlays(val node: nodes.StoredNode) extends AnyVal { + def overlays: IndexedSeq[String] = + flatgraph.Accessors.getNodePropertyMulti[String](node.graph, node.nodeKind, 44, node.seq) + } + final class AccessPropertyPackageName(val node: nodes.StoredNode) extends AnyVal { + def packageName: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 45, node.seq(), "": String) + } + final class AccessPropertyParserTypeName(val node: nodes.StoredNode) extends AnyVal { + def parserTypeName: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 46, node.seq(), "": String) + } + final class AccessPropertyPossibleTypes(val node: nodes.StoredNode) extends AnyVal { + def possibleTypes: IndexedSeq[String] = + flatgraph.Accessors.getNodePropertyMulti[String](node.graph, node.nodeKind, 47, node.seq) + } + final class AccessPropertyRoot(val node: nodes.StoredNode) extends AnyVal { + def root: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 48, node.seq(), "": String) + } + final class AccessPropertySignature(val node: nodes.StoredNode) extends AnyVal { + def signature: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 49, node.seq(), "": String) + } + final class AccessPropertySymbol(val node: nodes.StoredNode) extends AnyVal { + def symbol: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 50, node.seq(), "": String) + } + final class AccessPropertyTypeDeclFullName(val node: nodes.StoredNode) extends AnyVal { + def typeDeclFullName: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 51, node.seq(), "": String) + } + final class AccessPropertyTypeFullName(val node: nodes.StoredNode) extends AnyVal { + def typeFullName: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 52, node.seq(), "": String) + } + final class AccessPropertyValue(val node: nodes.StoredNode) extends AnyVal { + def value: String = flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 53, node.seq(), "": String) + } + final class AccessPropertyVersion(val node: nodes.StoredNode) extends AnyVal { + def version: String = + flatgraph.Accessors.getNodePropertySingle(node.graph, node.nodeKind, 54, node.seq(), "": String) + } + /* accessors for concrete stored nodes end */ + + /* accessors for base nodes start */ + final class AccessAnnotationBase(val node: nodes.AnnotationBase) extends AnyVal { + def fullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyFullName(stored).fullName + case newNode: nodes.NewAnnotation => newNode.fullName + } + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewAnnotation => newNode.name + } + } + final class AccessAnnotationliteralBase(val node: nodes.AnnotationLiteralBase) extends AnyVal { + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewAnnotationLiteral => newNode.name + } + } + final class AccessAnnotationparameterBase(val node: nodes.AnnotationParameterBase) extends AnyVal {} + final class AccessAnnotationparameterassignBase(val node: nodes.AnnotationParameterAssignBase) extends AnyVal {} + final class AccessArrayinitializerBase(val node: nodes.ArrayInitializerBase) extends AnyVal {} + final class AccessBindingBase(val node: nodes.BindingBase) extends AnyVal { + def methodFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyMethodFullName(stored).methodFullName + case newNode: nodes.NewBinding => newNode.methodFullName + } + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewBinding => newNode.name + } + def signature: String = node match { + case stored: nodes.StoredNode => new AccessPropertySignature(stored).signature + case newNode: nodes.NewBinding => newNode.signature + } + } + final class AccessBlockBase(val node: nodes.BlockBase) extends AnyVal { + def dynamicTypeHintFullName: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyDynamicTypeHintFullName(stored).dynamicTypeHintFullName + case newNode: nodes.NewBlock => newNode.dynamicTypeHintFullName + } + def possibleTypes: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes + case newNode: nodes.NewBlock => newNode.possibleTypes + } + def typeFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName + case newNode: nodes.NewBlock => newNode.typeFullName + } + } + final class AccessCallBase(val node: nodes.CallBase) extends AnyVal { + def dispatchType: String = node match { + case stored: nodes.StoredNode => new AccessPropertyDispatchType(stored).dispatchType + case newNode: nodes.NewCall => newNode.dispatchType + } + def dynamicTypeHintFullName: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyDynamicTypeHintFullName(stored).dynamicTypeHintFullName + case newNode: nodes.NewCall => newNode.dynamicTypeHintFullName + } + def methodFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyMethodFullName(stored).methodFullName + case newNode: nodes.NewCall => newNode.methodFullName + } + def possibleTypes: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes + case newNode: nodes.NewCall => newNode.possibleTypes + } + def typeFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName + case newNode: nodes.NewCall => newNode.typeFullName + } + } + final class AccessClosurebindingBase(val node: nodes.ClosureBindingBase) extends AnyVal { + def closureBindingId: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyClosureBindingId(stored).closureBindingId + case newNode: nodes.NewClosureBinding => newNode.closureBindingId + } + def closureOriginalName: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyClosureOriginalName(stored).closureOriginalName + case newNode: nodes.NewClosureBinding => newNode.closureOriginalName + } + def evaluationStrategy: String = node match { + case stored: nodes.StoredNode => new AccessPropertyEvaluationStrategy(stored).evaluationStrategy + case newNode: nodes.NewClosureBinding => newNode.evaluationStrategy + } + } + final class AccessCommentBase(val node: nodes.CommentBase) extends AnyVal { + def filename: String = node match { + case stored: nodes.StoredNode => new AccessPropertyFilename(stored).filename + case newNode: nodes.NewComment => newNode.filename + } + } + final class AccessConfigfileBase(val node: nodes.ConfigFileBase) extends AnyVal { + def content: String = node match { + case stored: nodes.StoredNode => new AccessPropertyContent(stored).content + case newNode: nodes.NewConfigFile => newNode.content + } + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewConfigFile => newNode.name + } + } + final class AccessControlstructureBase(val node: nodes.ControlStructureBase) extends AnyVal { + def controlStructureType: String = node match { + case stored: nodes.StoredNode => new AccessPropertyControlStructureType(stored).controlStructureType + case newNode: nodes.NewControlStructure => newNode.controlStructureType + } + def parserTypeName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyParserTypeName(stored).parserTypeName + case newNode: nodes.NewControlStructure => newNode.parserTypeName + } + } + final class AccessDependencyBase(val node: nodes.DependencyBase) extends AnyVal { + def dependencyGroupId: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyDependencyGroupId(stored).dependencyGroupId + case newNode: nodes.NewDependency => newNode.dependencyGroupId + } + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewDependency => newNode.name + } + def version: String = node match { + case stored: nodes.StoredNode => new AccessPropertyVersion(stored).version + case newNode: nodes.NewDependency => newNode.version + } + } + final class AccessFieldidentifierBase(val node: nodes.FieldIdentifierBase) extends AnyVal { + def canonicalName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyCanonicalName(stored).canonicalName + case newNode: nodes.NewFieldIdentifier => newNode.canonicalName + } + } + final class AccessFileBase(val node: nodes.FileBase) extends AnyVal { + def content: String = node match { + case stored: nodes.StoredNode => new AccessPropertyContent(stored).content + case newNode: nodes.NewFile => newNode.content + } + def hash: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyHash(stored).hash + case newNode: nodes.NewFile => newNode.hash + } + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewFile => newNode.name + } + } + final class AccessFindingBase(val node: nodes.FindingBase) extends AnyVal {} + final class AccessIdentifierBase(val node: nodes.IdentifierBase) extends AnyVal { + def dynamicTypeHintFullName: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyDynamicTypeHintFullName(stored).dynamicTypeHintFullName + case newNode: nodes.NewIdentifier => newNode.dynamicTypeHintFullName + } + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewIdentifier => newNode.name + } + def possibleTypes: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes + case newNode: nodes.NewIdentifier => newNode.possibleTypes + } + def typeFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName + case newNode: nodes.NewIdentifier => newNode.typeFullName + } + } + final class AccessImportBase(val node: nodes.ImportBase) extends AnyVal { + def explicitAs: Option[Boolean] = node match { + case stored: nodes.StoredNode => new AccessPropertyExplicitAs(stored).explicitAs + case newNode: nodes.NewImport => newNode.explicitAs + } + def importedAs: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyImportedAs(stored).importedAs + case newNode: nodes.NewImport => newNode.importedAs + } + def importedEntity: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyImportedEntity(stored).importedEntity + case newNode: nodes.NewImport => newNode.importedEntity + } + def isExplicit: Option[Boolean] = node match { + case stored: nodes.StoredNode => new AccessPropertyIsExplicit(stored).isExplicit + case newNode: nodes.NewImport => newNode.isExplicit + } + def isWildcard: Option[Boolean] = node match { + case stored: nodes.StoredNode => new AccessPropertyIsWildcard(stored).isWildcard + case newNode: nodes.NewImport => newNode.isWildcard + } + } + final class AccessJumplabelBase(val node: nodes.JumpLabelBase) extends AnyVal { + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewJumpLabel => newNode.name + } + def parserTypeName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyParserTypeName(stored).parserTypeName + case newNode: nodes.NewJumpLabel => newNode.parserTypeName + } + } + final class AccessJumptargetBase(val node: nodes.JumpTargetBase) extends AnyVal { + def argumentIndex: Int = node match { + case stored: nodes.StoredNode => new AccessPropertyArgumentIndex(stored).argumentIndex + case newNode: nodes.NewJumpTarget => newNode.argumentIndex + } + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewJumpTarget => newNode.name + } + def parserTypeName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyParserTypeName(stored).parserTypeName + case newNode: nodes.NewJumpTarget => newNode.parserTypeName + } + } + final class AccessKeyvaluepairBase(val node: nodes.KeyValuePairBase) extends AnyVal { + def key: String = node match { + case stored: nodes.StoredNode => new AccessPropertyKey(stored).key + case newNode: nodes.NewKeyValuePair => newNode.key + } + def value: String = node match { + case stored: nodes.StoredNode => new AccessPropertyValue(stored).value + case newNode: nodes.NewKeyValuePair => newNode.value + } + } + final class AccessLiteralBase(val node: nodes.LiteralBase) extends AnyVal { + def dynamicTypeHintFullName: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyDynamicTypeHintFullName(stored).dynamicTypeHintFullName + case newNode: nodes.NewLiteral => newNode.dynamicTypeHintFullName + } + def possibleTypes: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes + case newNode: nodes.NewLiteral => newNode.possibleTypes + } + def typeFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName + case newNode: nodes.NewLiteral => newNode.typeFullName + } + } + final class AccessLocalBase(val node: nodes.LocalBase) extends AnyVal { + def closureBindingId: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyClosureBindingId(stored).closureBindingId + case newNode: nodes.NewLocal => newNode.closureBindingId + } + def dynamicTypeHintFullName: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyDynamicTypeHintFullName(stored).dynamicTypeHintFullName + case newNode: nodes.NewLocal => newNode.dynamicTypeHintFullName + } + def possibleTypes: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes + case newNode: nodes.NewLocal => newNode.possibleTypes + } + def typeFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName + case newNode: nodes.NewLocal => newNode.typeFullName + } + } + final class AccessLocationBase(val node: nodes.LocationBase) extends AnyVal { + def className: String = node match { + case stored: nodes.StoredNode => new AccessPropertyClassName(stored).className + case newNode: nodes.NewLocation => newNode.className + } + def classShortName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyClassShortName(stored).classShortName + case newNode: nodes.NewLocation => newNode.classShortName + } + def filename: String = node match { + case stored: nodes.StoredNode => new AccessPropertyFilename(stored).filename + case newNode: nodes.NewLocation => newNode.filename + } + def lineNumber: Option[Int] = node match { + case stored: nodes.StoredNode => new AccessPropertyLineNumber(stored).lineNumber + case newNode: nodes.NewLocation => newNode.lineNumber + } + def methodFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyMethodFullName(stored).methodFullName + case newNode: nodes.NewLocation => newNode.methodFullName + } + def methodShortName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyMethodShortName(stored).methodShortName + case newNode: nodes.NewLocation => newNode.methodShortName + } + def nodeLabel: String = node match { + case stored: nodes.StoredNode => new AccessPropertyNodeLabel(stored).nodeLabel + case newNode: nodes.NewLocation => newNode.nodeLabel + } + def packageName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyPackageName(stored).packageName + case newNode: nodes.NewLocation => newNode.packageName + } + def symbol: String = node match { + case stored: nodes.StoredNode => new AccessPropertySymbol(stored).symbol + case newNode: nodes.NewLocation => newNode.symbol + } + } + final class AccessMemberBase(val node: nodes.MemberBase) extends AnyVal { + def astParentFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyAstParentFullName(stored).astParentFullName + case newNode: nodes.NewMember => newNode.astParentFullName + } + def astParentType: String = node match { + case stored: nodes.StoredNode => new AccessPropertyAstParentType(stored).astParentType + case newNode: nodes.NewMember => newNode.astParentType + } + def dynamicTypeHintFullName: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyDynamicTypeHintFullName(stored).dynamicTypeHintFullName + case newNode: nodes.NewMember => newNode.dynamicTypeHintFullName + } + def possibleTypes: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes + case newNode: nodes.NewMember => newNode.possibleTypes + } + def typeFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName + case newNode: nodes.NewMember => newNode.typeFullName + } + } + final class AccessMetadataBase(val node: nodes.MetaDataBase) extends AnyVal { + def hash: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyHash(stored).hash + case newNode: nodes.NewMetaData => newNode.hash + } + def language: String = node match { + case stored: nodes.StoredNode => new AccessPropertyLanguage(stored).language + case newNode: nodes.NewMetaData => newNode.language + } + def overlays: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyOverlays(stored).overlays + case newNode: nodes.NewMetaData => newNode.overlays + } + def root: String = node match { + case stored: nodes.StoredNode => new AccessPropertyRoot(stored).root + case newNode: nodes.NewMetaData => newNode.root + } + def version: String = node match { + case stored: nodes.StoredNode => new AccessPropertyVersion(stored).version + case newNode: nodes.NewMetaData => newNode.version + } + } + final class AccessMethodBase(val node: nodes.MethodBase) extends AnyVal { + def astParentFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyAstParentFullName(stored).astParentFullName + case newNode: nodes.NewMethod => newNode.astParentFullName + } + def astParentType: String = node match { + case stored: nodes.StoredNode => new AccessPropertyAstParentType(stored).astParentType + case newNode: nodes.NewMethod => newNode.astParentType + } + def columnNumberEnd: Option[Int] = node match { + case stored: nodes.StoredNode => new AccessPropertyColumnNumberEnd(stored).columnNumberEnd + case newNode: nodes.NewMethod => newNode.columnNumberEnd + } + def filename: String = node match { + case stored: nodes.StoredNode => new AccessPropertyFilename(stored).filename + case newNode: nodes.NewMethod => newNode.filename + } + def fullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyFullName(stored).fullName + case newNode: nodes.NewMethod => newNode.fullName + } + def hash: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyHash(stored).hash + case newNode: nodes.NewMethod => newNode.hash + } + def isExternal: Boolean = node match { + case stored: nodes.StoredNode => new AccessPropertyIsExternal(stored).isExternal + case newNode: nodes.NewMethod => newNode.isExternal + } + def lineNumberEnd: Option[Int] = node match { + case stored: nodes.StoredNode => new AccessPropertyLineNumberEnd(stored).lineNumberEnd + case newNode: nodes.NewMethod => newNode.lineNumberEnd + } + def offset: Option[Int] = node match { + case stored: nodes.StoredNode => new AccessPropertyOffset(stored).offset + case newNode: nodes.NewMethod => newNode.offset + } + def offsetEnd: Option[Int] = node match { + case stored: nodes.StoredNode => new AccessPropertyOffsetEnd(stored).offsetEnd + case newNode: nodes.NewMethod => newNode.offsetEnd + } + def signature: String = node match { + case stored: nodes.StoredNode => new AccessPropertySignature(stored).signature + case newNode: nodes.NewMethod => newNode.signature + } + } + final class AccessMethodparameterinBase(val node: nodes.MethodParameterInBase) extends AnyVal { + def closureBindingId: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyClosureBindingId(stored).closureBindingId + case newNode: nodes.NewMethodParameterIn => newNode.closureBindingId + } + def dynamicTypeHintFullName: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyDynamicTypeHintFullName(stored).dynamicTypeHintFullName + case newNode: nodes.NewMethodParameterIn => newNode.dynamicTypeHintFullName + } + def evaluationStrategy: String = node match { + case stored: nodes.StoredNode => new AccessPropertyEvaluationStrategy(stored).evaluationStrategy + case newNode: nodes.NewMethodParameterIn => newNode.evaluationStrategy + } + def index: Int = node match { + case stored: nodes.StoredNode => new AccessPropertyIndex(stored).index + case newNode: nodes.NewMethodParameterIn => newNode.index + } + def isVariadic: Boolean = node match { + case stored: nodes.StoredNode => new AccessPropertyIsVariadic(stored).isVariadic + case newNode: nodes.NewMethodParameterIn => newNode.isVariadic + } + def possibleTypes: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes + case newNode: nodes.NewMethodParameterIn => newNode.possibleTypes + } + def typeFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName + case newNode: nodes.NewMethodParameterIn => newNode.typeFullName + } + } + final class AccessMethodparameteroutBase(val node: nodes.MethodParameterOutBase) extends AnyVal { + def evaluationStrategy: String = node match { + case stored: nodes.StoredNode => new AccessPropertyEvaluationStrategy(stored).evaluationStrategy + case newNode: nodes.NewMethodParameterOut => newNode.evaluationStrategy + } + def index: Int = node match { + case stored: nodes.StoredNode => new AccessPropertyIndex(stored).index + case newNode: nodes.NewMethodParameterOut => newNode.index + } + def isVariadic: Boolean = node match { + case stored: nodes.StoredNode => new AccessPropertyIsVariadic(stored).isVariadic + case newNode: nodes.NewMethodParameterOut => newNode.isVariadic + } + def typeFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName + case newNode: nodes.NewMethodParameterOut => newNode.typeFullName + } + } + final class AccessMethodrefBase(val node: nodes.MethodRefBase) extends AnyVal { + def dynamicTypeHintFullName: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyDynamicTypeHintFullName(stored).dynamicTypeHintFullName + case newNode: nodes.NewMethodRef => newNode.dynamicTypeHintFullName + } + def methodFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyMethodFullName(stored).methodFullName + case newNode: nodes.NewMethodRef => newNode.methodFullName + } + def possibleTypes: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes + case newNode: nodes.NewMethodRef => newNode.possibleTypes + } + def typeFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName + case newNode: nodes.NewMethodRef => newNode.typeFullName + } + } + final class AccessMethodreturnBase(val node: nodes.MethodReturnBase) extends AnyVal { + def dynamicTypeHintFullName: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyDynamicTypeHintFullName(stored).dynamicTypeHintFullName + case newNode: nodes.NewMethodReturn => newNode.dynamicTypeHintFullName + } + def evaluationStrategy: String = node match { + case stored: nodes.StoredNode => new AccessPropertyEvaluationStrategy(stored).evaluationStrategy + case newNode: nodes.NewMethodReturn => newNode.evaluationStrategy + } + def possibleTypes: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes + case newNode: nodes.NewMethodReturn => newNode.possibleTypes + } + def typeFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName + case newNode: nodes.NewMethodReturn => newNode.typeFullName + } + } + final class AccessModifierBase(val node: nodes.ModifierBase) extends AnyVal { + def modifierType: String = node match { + case stored: nodes.StoredNode => new AccessPropertyModifierType(stored).modifierType + case newNode: nodes.NewModifier => newNode.modifierType + } + } + final class AccessNamespaceBase(val node: nodes.NamespaceBase) extends AnyVal { + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewNamespace => newNode.name + } + } + final class AccessNamespaceblockBase(val node: nodes.NamespaceBlockBase) extends AnyVal { + def filename: String = node match { + case stored: nodes.StoredNode => new AccessPropertyFilename(stored).filename + case newNode: nodes.NewNamespaceBlock => newNode.filename + } + def fullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyFullName(stored).fullName + case newNode: nodes.NewNamespaceBlock => newNode.fullName + } + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewNamespaceBlock => newNode.name + } + } + final class AccessReturnBase(val node: nodes.ReturnBase) extends AnyVal {} + final class AccessTagBase(val node: nodes.TagBase) extends AnyVal { + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewTag => newNode.name + } + def value: String = node match { + case stored: nodes.StoredNode => new AccessPropertyValue(stored).value + case newNode: nodes.NewTag => newNode.value + } + } + final class AccessTagnodepairBase(val node: nodes.TagNodePairBase) extends AnyVal {} + final class AccessTemplatedomBase(val node: nodes.TemplateDomBase) extends AnyVal { + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewTemplateDom => newNode.name + } + } + final class AccessTypeBase(val node: nodes.TypeBase) extends AnyVal { + def fullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyFullName(stored).fullName + case newNode: nodes.NewType => newNode.fullName + } + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewType => newNode.name + } + def typeDeclFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeDeclFullName(stored).typeDeclFullName + case newNode: nodes.NewType => newNode.typeDeclFullName + } + } + final class AccessTypeargumentBase(val node: nodes.TypeArgumentBase) extends AnyVal {} + final class AccessTypedeclBase(val node: nodes.TypeDeclBase) extends AnyVal { + def aliasTypeFullName: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyAliasTypeFullName(stored).aliasTypeFullName + case newNode: nodes.NewTypeDecl => newNode.aliasTypeFullName + } + def astParentFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyAstParentFullName(stored).astParentFullName + case newNode: nodes.NewTypeDecl => newNode.astParentFullName + } + def astParentType: String = node match { + case stored: nodes.StoredNode => new AccessPropertyAstParentType(stored).astParentType + case newNode: nodes.NewTypeDecl => newNode.astParentType + } + def filename: String = node match { + case stored: nodes.StoredNode => new AccessPropertyFilename(stored).filename + case newNode: nodes.NewTypeDecl => newNode.filename + } + def fullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyFullName(stored).fullName + case newNode: nodes.NewTypeDecl => newNode.fullName + } + def inheritsFromTypeFullName: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyInheritsFromTypeFullName(stored).inheritsFromTypeFullName + case newNode: nodes.NewTypeDecl => newNode.inheritsFromTypeFullName + } + def isExternal: Boolean = node match { + case stored: nodes.StoredNode => new AccessPropertyIsExternal(stored).isExternal + case newNode: nodes.NewTypeDecl => newNode.isExternal + } + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewTypeDecl => newNode.name + } + def offset: Option[Int] = node match { + case stored: nodes.StoredNode => new AccessPropertyOffset(stored).offset + case newNode: nodes.NewTypeDecl => newNode.offset + } + def offsetEnd: Option[Int] = node match { + case stored: nodes.StoredNode => new AccessPropertyOffsetEnd(stored).offsetEnd + case newNode: nodes.NewTypeDecl => newNode.offsetEnd + } + } + final class AccessTypeparameterBase(val node: nodes.TypeParameterBase) extends AnyVal { + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.NewTypeParameter => newNode.name + } + } + final class AccessTyperefBase(val node: nodes.TypeRefBase) extends AnyVal { + def dynamicTypeHintFullName: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyDynamicTypeHintFullName(stored).dynamicTypeHintFullName + case newNode: nodes.NewTypeRef => newNode.dynamicTypeHintFullName + } + def possibleTypes: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes + case newNode: nodes.NewTypeRef => newNode.possibleTypes + } + def typeFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName + case newNode: nodes.NewTypeRef => newNode.typeFullName + } + } + final class AccessUnknownBase(val node: nodes.UnknownBase) extends AnyVal { + def containedRef: String = node match { + case stored: nodes.StoredNode => new AccessPropertyContainedRef(stored).containedRef + case newNode: nodes.NewUnknown => newNode.containedRef + } + def dynamicTypeHintFullName: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyDynamicTypeHintFullName(stored).dynamicTypeHintFullName + case newNode: nodes.NewUnknown => newNode.dynamicTypeHintFullName + } + def parserTypeName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyParserTypeName(stored).parserTypeName + case newNode: nodes.NewUnknown => newNode.parserTypeName + } + def possibleTypes: IndexedSeq[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyPossibleTypes(stored).possibleTypes + case newNode: nodes.NewUnknown => newNode.possibleTypes + } + def typeFullName: String = node match { + case stored: nodes.StoredNode => new AccessPropertyTypeFullName(stored).typeFullName + case newNode: nodes.NewUnknown => newNode.typeFullName + } + } + final class AccessAstnodeBase(val node: nodes.AstNodeBase) extends AnyVal { + def code: String = node match { + case stored: nodes.StoredNode => new AccessPropertyCode(stored).code + case newNode: nodes.AstNodeNew => newNode.code + } + def columnNumber: Option[Int] = node match { + case stored: nodes.StoredNode => new AccessPropertyColumnNumber(stored).columnNumber + case newNode: nodes.AstNodeNew => newNode.columnNumber + } + def lineNumber: Option[Int] = node match { + case stored: nodes.StoredNode => new AccessPropertyLineNumber(stored).lineNumber + case newNode: nodes.AstNodeNew => newNode.lineNumber + } + def order: Int = node match { + case stored: nodes.StoredNode => new AccessPropertyOrder(stored).order + case newNode: nodes.AstNodeNew => newNode.order + } + } + final class AccessCallreprBase(val node: nodes.CallReprBase) extends AnyVal { + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.CallReprNew => newNode.name + } + def signature: String = node match { + case stored: nodes.StoredNode => new AccessPropertySignature(stored).signature + case newNode: nodes.CallReprNew => newNode.signature + } + } + final class AccessCfgnodeBase(val node: nodes.CfgNodeBase) extends AnyVal {} + final class AccessExpressionBase(val node: nodes.ExpressionBase) extends AnyVal { + def argumentIndex: Int = node match { + case stored: nodes.StoredNode => new AccessPropertyArgumentIndex(stored).argumentIndex + case newNode: nodes.ExpressionNew => newNode.argumentIndex + } + def argumentName: Option[String] = node match { + case stored: nodes.StoredNode => new AccessPropertyArgumentName(stored).argumentName + case newNode: nodes.ExpressionNew => newNode.argumentName + } + } + final class AccessDeclarationBase(val node: nodes.DeclarationBase) extends AnyVal { + def name: String = node match { + case stored: nodes.StoredNode => new AccessPropertyName(stored).name + case newNode: nodes.DeclarationNew => newNode.name + } + } + /* accessors for base nodes end */ +} + +import Accessors.* +trait ConcreteStoredConversions extends ConcreteBaseConversions { + implicit def accessPropertyAliasTypeFullName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasAliasTypeFullNameEMT] + ): AccessPropertyAliasTypeFullName = new AccessPropertyAliasTypeFullName(node) + implicit def accessPropertyArgumentIndex( + node: nodes.StoredNode & nodes.StaticType[nodes.HasArgumentIndexEMT] + ): AccessPropertyArgumentIndex = new AccessPropertyArgumentIndex(node) + implicit def accessPropertyArgumentName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasArgumentNameEMT] + ): AccessPropertyArgumentName = new AccessPropertyArgumentName(node) + implicit def accessPropertyAstParentFullName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasAstParentFullNameEMT] + ): AccessPropertyAstParentFullName = new AccessPropertyAstParentFullName(node) + implicit def accessPropertyAstParentType( + node: nodes.StoredNode & nodes.StaticType[nodes.HasAstParentTypeEMT] + ): AccessPropertyAstParentType = new AccessPropertyAstParentType(node) + implicit def accessPropertyCanonicalName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasCanonicalNameEMT] + ): AccessPropertyCanonicalName = new AccessPropertyCanonicalName(node) + implicit def accessPropertyClassName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasClassNameEMT] + ): AccessPropertyClassName = new AccessPropertyClassName(node) + implicit def accessPropertyClassShortName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasClassShortNameEMT] + ): AccessPropertyClassShortName = new AccessPropertyClassShortName(node) + implicit def accessPropertyClosureBindingId( + node: nodes.StoredNode & nodes.StaticType[nodes.HasClosureBindingIdEMT] + ): AccessPropertyClosureBindingId = new AccessPropertyClosureBindingId(node) + implicit def accessPropertyClosureOriginalName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasClosureOriginalNameEMT] + ): AccessPropertyClosureOriginalName = new AccessPropertyClosureOriginalName(node) + implicit def accessPropertyCode(node: nodes.StoredNode & nodes.StaticType[nodes.HasCodeEMT]): AccessPropertyCode = + new AccessPropertyCode(node) + implicit def accessPropertyColumnNumber( + node: nodes.StoredNode & nodes.StaticType[nodes.HasColumnNumberEMT] + ): AccessPropertyColumnNumber = new AccessPropertyColumnNumber(node) + implicit def accessPropertyColumnNumberEnd( + node: nodes.StoredNode & nodes.StaticType[nodes.HasColumnNumberEndEMT] + ): AccessPropertyColumnNumberEnd = new AccessPropertyColumnNumberEnd(node) + implicit def accessPropertyContainedRef( + node: nodes.StoredNode & nodes.StaticType[nodes.HasContainedRefEMT] + ): AccessPropertyContainedRef = new AccessPropertyContainedRef(node) + implicit def accessPropertyContent( + node: nodes.StoredNode & nodes.StaticType[nodes.HasContentEMT] + ): AccessPropertyContent = new AccessPropertyContent(node) + implicit def accessPropertyControlStructureType( + node: nodes.StoredNode & nodes.StaticType[nodes.HasControlStructureTypeEMT] + ): AccessPropertyControlStructureType = new AccessPropertyControlStructureType(node) + implicit def accessPropertyDependencyGroupId( + node: nodes.StoredNode & nodes.StaticType[nodes.HasDependencyGroupIdEMT] + ): AccessPropertyDependencyGroupId = new AccessPropertyDependencyGroupId(node) + implicit def accessPropertyDispatchType( + node: nodes.StoredNode & nodes.StaticType[nodes.HasDispatchTypeEMT] + ): AccessPropertyDispatchType = new AccessPropertyDispatchType(node) + implicit def accessPropertyDynamicTypeHintFullName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasDynamicTypeHintFullNameEMT] + ): AccessPropertyDynamicTypeHintFullName = new AccessPropertyDynamicTypeHintFullName(node) + implicit def accessPropertyEvaluationStrategy( + node: nodes.StoredNode & nodes.StaticType[nodes.HasEvaluationStrategyEMT] + ): AccessPropertyEvaluationStrategy = new AccessPropertyEvaluationStrategy(node) + implicit def accessPropertyExplicitAs( + node: nodes.StoredNode & nodes.StaticType[nodes.HasExplicitAsEMT] + ): AccessPropertyExplicitAs = new AccessPropertyExplicitAs(node) + implicit def accessPropertyFilename( + node: nodes.StoredNode & nodes.StaticType[nodes.HasFilenameEMT] + ): AccessPropertyFilename = new AccessPropertyFilename(node) + implicit def accessPropertyFullName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasFullNameEMT] + ): AccessPropertyFullName = new AccessPropertyFullName(node) + implicit def accessPropertyHash(node: nodes.StoredNode & nodes.StaticType[nodes.HasHashEMT]): AccessPropertyHash = + new AccessPropertyHash(node) + implicit def accessPropertyImportedAs( + node: nodes.StoredNode & nodes.StaticType[nodes.HasImportedAsEMT] + ): AccessPropertyImportedAs = new AccessPropertyImportedAs(node) + implicit def accessPropertyImportedEntity( + node: nodes.StoredNode & nodes.StaticType[nodes.HasImportedEntityEMT] + ): AccessPropertyImportedEntity = new AccessPropertyImportedEntity(node) + implicit def accessPropertyIndex(node: nodes.StoredNode & nodes.StaticType[nodes.HasIndexEMT]): AccessPropertyIndex = + new AccessPropertyIndex(node) + implicit def accessPropertyInheritsFromTypeFullName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasInheritsFromTypeFullNameEMT] + ): AccessPropertyInheritsFromTypeFullName = new AccessPropertyInheritsFromTypeFullName(node) + implicit def accessPropertyIsExplicit( + node: nodes.StoredNode & nodes.StaticType[nodes.HasIsExplicitEMT] + ): AccessPropertyIsExplicit = new AccessPropertyIsExplicit(node) + implicit def accessPropertyIsExternal( + node: nodes.StoredNode & nodes.StaticType[nodes.HasIsExternalEMT] + ): AccessPropertyIsExternal = new AccessPropertyIsExternal(node) + implicit def accessPropertyIsVariadic( + node: nodes.StoredNode & nodes.StaticType[nodes.HasIsVariadicEMT] + ): AccessPropertyIsVariadic = new AccessPropertyIsVariadic(node) + implicit def accessPropertyIsWildcard( + node: nodes.StoredNode & nodes.StaticType[nodes.HasIsWildcardEMT] + ): AccessPropertyIsWildcard = new AccessPropertyIsWildcard(node) + implicit def accessPropertyKey(node: nodes.StoredNode & nodes.StaticType[nodes.HasKeyEMT]): AccessPropertyKey = + new AccessPropertyKey(node) + implicit def accessPropertyLanguage( + node: nodes.StoredNode & nodes.StaticType[nodes.HasLanguageEMT] + ): AccessPropertyLanguage = new AccessPropertyLanguage(node) + implicit def accessPropertyLineNumber( + node: nodes.StoredNode & nodes.StaticType[nodes.HasLineNumberEMT] + ): AccessPropertyLineNumber = new AccessPropertyLineNumber(node) + implicit def accessPropertyLineNumberEnd( + node: nodes.StoredNode & nodes.StaticType[nodes.HasLineNumberEndEMT] + ): AccessPropertyLineNumberEnd = new AccessPropertyLineNumberEnd(node) + implicit def accessPropertyMethodFullName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasMethodFullNameEMT] + ): AccessPropertyMethodFullName = new AccessPropertyMethodFullName(node) + implicit def accessPropertyMethodShortName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasMethodShortNameEMT] + ): AccessPropertyMethodShortName = new AccessPropertyMethodShortName(node) + implicit def accessPropertyModifierType( + node: nodes.StoredNode & nodes.StaticType[nodes.HasModifierTypeEMT] + ): AccessPropertyModifierType = new AccessPropertyModifierType(node) + implicit def accessPropertyName(node: nodes.StoredNode & nodes.StaticType[nodes.HasNameEMT]): AccessPropertyName = + new AccessPropertyName(node) + implicit def accessPropertyNodeLabel( + node: nodes.StoredNode & nodes.StaticType[nodes.HasNodeLabelEMT] + ): AccessPropertyNodeLabel = new AccessPropertyNodeLabel(node) + implicit def accessPropertyOffset( + node: nodes.StoredNode & nodes.StaticType[nodes.HasOffsetEMT] + ): AccessPropertyOffset = new AccessPropertyOffset(node) + implicit def accessPropertyOffsetEnd( + node: nodes.StoredNode & nodes.StaticType[nodes.HasOffsetEndEMT] + ): AccessPropertyOffsetEnd = new AccessPropertyOffsetEnd(node) + implicit def accessPropertyOrder(node: nodes.StoredNode & nodes.StaticType[nodes.HasOrderEMT]): AccessPropertyOrder = + new AccessPropertyOrder(node) + implicit def accessPropertyOverlays( + node: nodes.StoredNode & nodes.StaticType[nodes.HasOverlaysEMT] + ): AccessPropertyOverlays = new AccessPropertyOverlays(node) + implicit def accessPropertyPackageName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasPackageNameEMT] + ): AccessPropertyPackageName = new AccessPropertyPackageName(node) + implicit def accessPropertyParserTypeName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasParserTypeNameEMT] + ): AccessPropertyParserTypeName = new AccessPropertyParserTypeName(node) + implicit def accessPropertyPossibleTypes( + node: nodes.StoredNode & nodes.StaticType[nodes.HasPossibleTypesEMT] + ): AccessPropertyPossibleTypes = new AccessPropertyPossibleTypes(node) + implicit def accessPropertyRoot(node: nodes.StoredNode & nodes.StaticType[nodes.HasRootEMT]): AccessPropertyRoot = + new AccessPropertyRoot(node) + implicit def accessPropertySignature( + node: nodes.StoredNode & nodes.StaticType[nodes.HasSignatureEMT] + ): AccessPropertySignature = new AccessPropertySignature(node) + implicit def accessPropertySymbol( + node: nodes.StoredNode & nodes.StaticType[nodes.HasSymbolEMT] + ): AccessPropertySymbol = new AccessPropertySymbol(node) + implicit def accessPropertyTypeDeclFullName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasTypeDeclFullNameEMT] + ): AccessPropertyTypeDeclFullName = new AccessPropertyTypeDeclFullName(node) + implicit def accessPropertyTypeFullName( + node: nodes.StoredNode & nodes.StaticType[nodes.HasTypeFullNameEMT] + ): AccessPropertyTypeFullName = new AccessPropertyTypeFullName(node) + implicit def accessPropertyValue(node: nodes.StoredNode & nodes.StaticType[nodes.HasValueEMT]): AccessPropertyValue = + new AccessPropertyValue(node) + implicit def accessPropertyVersion( + node: nodes.StoredNode & nodes.StaticType[nodes.HasVersionEMT] + ): AccessPropertyVersion = new AccessPropertyVersion(node) +} + +trait ConcreteBaseConversions extends AbstractBaseConversions0 { + implicit def accessAnnotationbase(node: nodes.AnnotationBase): AccessAnnotationBase = new AccessAnnotationBase(node) + implicit def accessAnnotationliteralbase(node: nodes.AnnotationLiteralBase): AccessAnnotationliteralBase = + new AccessAnnotationliteralBase(node) + implicit def accessAnnotationparameterbase(node: nodes.AnnotationParameterBase): AccessAnnotationparameterBase = + new AccessAnnotationparameterBase(node) + implicit def accessAnnotationparameterassignbase( + node: nodes.AnnotationParameterAssignBase + ): AccessAnnotationparameterassignBase = new AccessAnnotationparameterassignBase(node) + implicit def accessArrayinitializerbase(node: nodes.ArrayInitializerBase): AccessArrayinitializerBase = + new AccessArrayinitializerBase(node) + implicit def accessBindingbase(node: nodes.BindingBase): AccessBindingBase = new AccessBindingBase(node) + implicit def accessBlockbase(node: nodes.BlockBase): AccessBlockBase = new AccessBlockBase(node) + implicit def accessCallbase(node: nodes.CallBase): AccessCallBase = new AccessCallBase(node) + implicit def accessClosurebindingbase(node: nodes.ClosureBindingBase): AccessClosurebindingBase = + new AccessClosurebindingBase(node) + implicit def accessCommentbase(node: nodes.CommentBase): AccessCommentBase = new AccessCommentBase(node) + implicit def accessConfigfilebase(node: nodes.ConfigFileBase): AccessConfigfileBase = new AccessConfigfileBase(node) + implicit def accessControlstructurebase(node: nodes.ControlStructureBase): AccessControlstructureBase = + new AccessControlstructureBase(node) + implicit def accessDependencybase(node: nodes.DependencyBase): AccessDependencyBase = new AccessDependencyBase(node) + implicit def accessFieldidentifierbase(node: nodes.FieldIdentifierBase): AccessFieldidentifierBase = + new AccessFieldidentifierBase(node) + implicit def accessFilebase(node: nodes.FileBase): AccessFileBase = new AccessFileBase(node) + implicit def accessFindingbase(node: nodes.FindingBase): AccessFindingBase = new AccessFindingBase(node) + implicit def accessIdentifierbase(node: nodes.IdentifierBase): AccessIdentifierBase = new AccessIdentifierBase(node) + implicit def accessImportbase(node: nodes.ImportBase): AccessImportBase = new AccessImportBase(node) + implicit def accessJumplabelbase(node: nodes.JumpLabelBase): AccessJumplabelBase = new AccessJumplabelBase(node) + implicit def accessJumptargetbase(node: nodes.JumpTargetBase): AccessJumptargetBase = new AccessJumptargetBase(node) + implicit def accessKeyvaluepairbase(node: nodes.KeyValuePairBase): AccessKeyvaluepairBase = + new AccessKeyvaluepairBase(node) + implicit def accessLiteralbase(node: nodes.LiteralBase): AccessLiteralBase = new AccessLiteralBase(node) + implicit def accessLocalbase(node: nodes.LocalBase): AccessLocalBase = new AccessLocalBase(node) + implicit def accessLocationbase(node: nodes.LocationBase): AccessLocationBase = new AccessLocationBase(node) + implicit def accessMemberbase(node: nodes.MemberBase): AccessMemberBase = new AccessMemberBase(node) + implicit def accessMetadatabase(node: nodes.MetaDataBase): AccessMetadataBase = new AccessMetadataBase(node) + implicit def accessMethodbase(node: nodes.MethodBase): AccessMethodBase = new AccessMethodBase(node) + implicit def accessMethodparameterinbase(node: nodes.MethodParameterInBase): AccessMethodparameterinBase = + new AccessMethodparameterinBase(node) + implicit def accessMethodparameteroutbase(node: nodes.MethodParameterOutBase): AccessMethodparameteroutBase = + new AccessMethodparameteroutBase(node) + implicit def accessMethodrefbase(node: nodes.MethodRefBase): AccessMethodrefBase = new AccessMethodrefBase(node) + implicit def accessMethodreturnbase(node: nodes.MethodReturnBase): AccessMethodreturnBase = + new AccessMethodreturnBase(node) + implicit def accessModifierbase(node: nodes.ModifierBase): AccessModifierBase = new AccessModifierBase(node) + implicit def accessNamespacebase(node: nodes.NamespaceBase): AccessNamespaceBase = new AccessNamespaceBase(node) + implicit def accessNamespaceblockbase(node: nodes.NamespaceBlockBase): AccessNamespaceblockBase = + new AccessNamespaceblockBase(node) + implicit def accessReturnbase(node: nodes.ReturnBase): AccessReturnBase = new AccessReturnBase(node) + implicit def accessTagbase(node: nodes.TagBase): AccessTagBase = new AccessTagBase(node) + implicit def accessTagnodepairbase(node: nodes.TagNodePairBase): AccessTagnodepairBase = new AccessTagnodepairBase( + node + ) + implicit def accessTemplatedombase(node: nodes.TemplateDomBase): AccessTemplatedomBase = new AccessTemplatedomBase( + node + ) + implicit def accessTypebase(node: nodes.TypeBase): AccessTypeBase = new AccessTypeBase(node) + implicit def accessTypeargumentbase(node: nodes.TypeArgumentBase): AccessTypeargumentBase = + new AccessTypeargumentBase(node) + implicit def accessTypedeclbase(node: nodes.TypeDeclBase): AccessTypedeclBase = new AccessTypedeclBase(node) + implicit def accessTypeparameterbase(node: nodes.TypeParameterBase): AccessTypeparameterBase = + new AccessTypeparameterBase(node) + implicit def accessTyperefbase(node: nodes.TypeRefBase): AccessTyperefBase = new AccessTyperefBase(node) + implicit def accessUnknownbase(node: nodes.UnknownBase): AccessUnknownBase = new AccessUnknownBase(node) +} + +trait AbstractBaseConversions0 extends AbstractBaseConversions1 { + implicit def accessAstnodebase(node: nodes.AstNodeBase): AccessAstnodeBase = new AccessAstnodeBase(node) + implicit def accessCallreprbase(node: nodes.CallReprBase): AccessCallreprBase = new AccessCallreprBase(node) + implicit def accessCfgnodebase(node: nodes.CfgNodeBase): AccessCfgnodeBase = new AccessCfgnodeBase(node) + implicit def accessExpressionbase(node: nodes.ExpressionBase): AccessExpressionBase = new AccessExpressionBase(node) +} + +trait AbstractBaseConversions1 { + implicit def accessDeclarationbase(node: nodes.DeclarationBase): AccessDeclarationBase = new AccessDeclarationBase( + node + ) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/AliasOf.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/AliasOf.scala deleted file mode 100644 index 1e7726d92..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/AliasOf.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object AliasOf { - val Label = "ALIAS_OF" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[AliasOf] { - override val forLabel = AliasOf.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new AliasOf(graph, outNode, inNode) - } -} - -class AliasOf(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, AliasOf.Label, _outNode, _inNode, AliasOf.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Argument.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Argument.scala deleted file mode 100644 index 72b7b456c..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Argument.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Argument { - val Label = "ARGUMENT" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Argument] { - override val forLabel = Argument.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Argument(graph, outNode, inNode) - } -} - -class Argument(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Argument.Label, _outNode, _inNode, Argument.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Ast.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Ast.scala deleted file mode 100644 index 79943a232..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Ast.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Ast { - val Label = "AST" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Ast] { - override val forLabel = Ast.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Ast(graph, outNode, inNode) - } -} - -class Ast(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Ast.Label, _outNode, _inNode, Ast.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Binds.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Binds.scala deleted file mode 100644 index 522586b5b..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Binds.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Binds { - val Label = "BINDS" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Binds] { - override val forLabel = Binds.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Binds(graph, outNode, inNode) - } -} - -class Binds(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Binds.Label, _outNode, _inNode, Binds.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/BindsTo.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/BindsTo.scala deleted file mode 100644 index bb7eaca39..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/BindsTo.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object BindsTo { - val Label = "BINDS_TO" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[BindsTo] { - override val forLabel = BindsTo.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new BindsTo(graph, outNode, inNode) - } -} - -class BindsTo(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, BindsTo.Label, _outNode, _inNode, BindsTo.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Call.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Call.scala deleted file mode 100644 index 3410b926a..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Call.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Call { - val Label = "CALL" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Call] { - override val forLabel = Call.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Call(graph, outNode, inNode) - } -} - -class Call(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Call.Label, _outNode, _inNode, Call.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Capture.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Capture.scala deleted file mode 100644 index 7c31f0682..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Capture.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Capture { - val Label = "CAPTURE" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Capture] { - override val forLabel = Capture.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Capture(graph, outNode, inNode) - } -} - -class Capture(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Capture.Label, _outNode, _inNode, Capture.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/CapturedBy.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/CapturedBy.scala deleted file mode 100644 index 120cf280f..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/CapturedBy.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object CapturedBy { - val Label = "CAPTURED_BY" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[CapturedBy] { - override val forLabel = CapturedBy.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new CapturedBy(graph, outNode, inNode) - } -} - -class CapturedBy(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, CapturedBy.Label, _outNode, _inNode, CapturedBy.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Cdg.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Cdg.scala deleted file mode 100644 index ca93cdf1a..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Cdg.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Cdg { - val Label = "CDG" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Cdg] { - override val forLabel = Cdg.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Cdg(graph, outNode, inNode) - } -} - -class Cdg(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Cdg.Label, _outNode, _inNode, Cdg.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Cfg.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Cfg.scala deleted file mode 100644 index a4d9f2a85..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Cfg.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Cfg { - val Label = "CFG" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Cfg] { - override val forLabel = Cfg.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Cfg(graph, outNode, inNode) - } -} - -class Cfg(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Cfg.Label, _outNode, _inNode, Cfg.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Condition.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Condition.scala deleted file mode 100644 index 219f54a4c..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Condition.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Condition { - val Label = "CONDITION" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Condition] { - override val forLabel = Condition.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Condition(graph, outNode, inNode) - } -} - -class Condition(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Condition.Label, _outNode, _inNode, Condition.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Contains.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Contains.scala deleted file mode 100644 index 1f34b9e0a..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Contains.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Contains { - val Label = "CONTAINS" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Contains] { - override val forLabel = Contains.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Contains(graph, outNode, inNode) - } -} - -class Contains(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Contains.Label, _outNode, _inNode, Contains.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Dominate.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Dominate.scala deleted file mode 100644 index 80515b16b..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Dominate.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Dominate { - val Label = "DOMINATE" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Dominate] { - override val forLabel = Dominate.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Dominate(graph, outNode, inNode) - } -} - -class Dominate(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Dominate.Label, _outNode, _inNode, Dominate.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/EdgeTypes.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/EdgeTypes.scala new file mode 100644 index 000000000..99b9ad42c --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/EdgeTypes.scala @@ -0,0 +1,195 @@ +package io.shiftleft.codepropertygraph.generated.edges + +object AliasOf { + val Label = "ALIAS_OF" + +} + +class AliasOf(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 0.toShort, subSeq_4862, property_4862) {} + +object Argument { + val Label = "ARGUMENT" + +} + +class Argument(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 1.toShort, subSeq_4862, property_4862) {} + +object Ast { + val Label = "AST" + +} + +class Ast(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 2.toShort, subSeq_4862, property_4862) {} + +object Binds { + val Label = "BINDS" + +} + +class Binds(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 3.toShort, subSeq_4862, property_4862) {} + +object BindsTo { + val Label = "BINDS_TO" + +} + +class BindsTo(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 4.toShort, subSeq_4862, property_4862) {} + +object Call { + val Label = "CALL" + +} + +class Call(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 5.toShort, subSeq_4862, property_4862) {} + +object Capture { + val Label = "CAPTURE" + +} + +class Capture(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 6.toShort, subSeq_4862, property_4862) {} + +object CapturedBy { + val Label = "CAPTURED_BY" + +} + +class CapturedBy(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 7.toShort, subSeq_4862, property_4862) {} + +object Cdg { + val Label = "CDG" + +} + +class Cdg(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 8.toShort, subSeq_4862, property_4862) {} + +object Cfg { + val Label = "CFG" + +} + +class Cfg(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 9.toShort, subSeq_4862, property_4862) {} + +object Condition { + val Label = "CONDITION" + +} + +class Condition(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 10.toShort, subSeq_4862, property_4862) {} + +object Contains { + val Label = "CONTAINS" + +} + +class Contains(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 11.toShort, subSeq_4862, property_4862) {} + +object Dominate { + val Label = "DOMINATE" + +} + +class Dominate(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 12.toShort, subSeq_4862, property_4862) {} + +object EvalType { + val Label = "EVAL_TYPE" + +} + +class EvalType(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 13.toShort, subSeq_4862, property_4862) {} + +object Imports { + val Label = "IMPORTS" + +} + +class Imports(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 14.toShort, subSeq_4862, property_4862) {} + +object InheritsFrom { + val Label = "INHERITS_FROM" + +} + +class InheritsFrom(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 15.toShort, subSeq_4862, property_4862) {} + +object IsCallForImport { + val Label = "IS_CALL_FOR_IMPORT" + +} + +class IsCallForImport(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 16.toShort, subSeq_4862, property_4862) {} + +object ParameterLink { + val Label = "PARAMETER_LINK" + +} + +class ParameterLink(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 17.toShort, subSeq_4862, property_4862) {} + +object PostDominate { + val Label = "POST_DOMINATE" + +} + +class PostDominate(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 18.toShort, subSeq_4862, property_4862) {} + +object ReachingDef { + val Label = "REACHING_DEF" + val propertyName: Option[String] = Some("VARIABLE") +} + +class ReachingDef(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 19.toShort, subSeq_4862, property_4862) { + override def propertyName: Option[String] = ReachingDef.propertyName +} + +object Receiver { + val Label = "RECEIVER" + +} + +class Receiver(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 20.toShort, subSeq_4862, property_4862) {} + +object Ref { + val Label = "REF" + +} + +class Ref(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 21.toShort, subSeq_4862, property_4862) {} + +object SourceFile { + val Label = "SOURCE_FILE" + +} + +class SourceFile(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 22.toShort, subSeq_4862, property_4862) {} + +object TaggedBy { + val Label = "TAGGED_BY" + +} + +class TaggedBy(src_4762: flatgraph.GNode, dst_4762: flatgraph.GNode, subSeq_4862: Int, property_4862: Any) + extends flatgraph.Edge(src_4762, dst_4762, 23.toShort, subSeq_4862, property_4862) {} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/EvalType.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/EvalType.scala deleted file mode 100644 index 1c0433e24..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/EvalType.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object EvalType { - val Label = "EVAL_TYPE" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[EvalType] { - override val forLabel = EvalType.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new EvalType(graph, outNode, inNode) - } -} - -class EvalType(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, EvalType.Label, _outNode, _inNode, EvalType.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Imports.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Imports.scala deleted file mode 100644 index ccdd26991..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Imports.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Imports { - val Label = "IMPORTS" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Imports] { - override val forLabel = Imports.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Imports(graph, outNode, inNode) - } -} - -class Imports(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Imports.Label, _outNode, _inNode, Imports.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/InheritsFrom.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/InheritsFrom.scala deleted file mode 100644 index df785c863..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/InheritsFrom.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object InheritsFrom { - val Label = "INHERITS_FROM" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[InheritsFrom] { - override val forLabel = InheritsFrom.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new InheritsFrom(graph, outNode, inNode) - } -} - -class InheritsFrom(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, InheritsFrom.Label, _outNode, _inNode, InheritsFrom.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/IsCallForImport.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/IsCallForImport.scala deleted file mode 100644 index 1d52137e8..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/IsCallForImport.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object IsCallForImport { - val Label = "IS_CALL_FOR_IMPORT" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[IsCallForImport] { - override val forLabel = IsCallForImport.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new IsCallForImport(graph, outNode, inNode) - } -} - -class IsCallForImport(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, IsCallForImport.Label, _outNode, _inNode, IsCallForImport.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/ParameterLink.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/ParameterLink.scala deleted file mode 100644 index d8525e905..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/ParameterLink.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object ParameterLink { - val Label = "PARAMETER_LINK" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[ParameterLink] { - override val forLabel = ParameterLink.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new ParameterLink(graph, outNode, inNode) - } -} - -class ParameterLink(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, ParameterLink.Label, _outNode, _inNode, ParameterLink.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/PostDominate.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/PostDominate.scala deleted file mode 100644 index 8e0f92c55..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/PostDominate.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object PostDominate { - val Label = "POST_DOMINATE" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[PostDominate] { - override val forLabel = PostDominate.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new PostDominate(graph, outNode, inNode) - } -} - -class PostDominate(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, PostDominate.Label, _outNode, _inNode, PostDominate.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/ReachingDef.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/ReachingDef.scala deleted file mode 100644 index 6f7145e25..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/ReachingDef.scala +++ /dev/null @@ -1,45 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object ReachingDef { - val Label = "REACHING_DEF" - - object PropertyNames { - val Variable = "VARIABLE" - val all: Set[String] = Set(Variable) - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties { - val Variable = new overflowdb.PropertyKey[String]("VARIABLE") - } - - object PropertyDefaults { - val Variable = "" - } - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[ReachingDef] { - override val forLabel = ReachingDef.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new ReachingDef(graph, outNode, inNode) - } -} - -class ReachingDef(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, ReachingDef.Label, _outNode, _inNode, ReachingDef.PropertyNames.allAsJava) { - - def variable: String = property("VARIABLE").asInstanceOf[String] - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "VARIABLE" => ReachingDef.PropertyDefaults.Variable - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Receiver.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Receiver.scala deleted file mode 100644 index c83e1740e..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Receiver.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Receiver { - val Label = "RECEIVER" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Receiver] { - override val forLabel = Receiver.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Receiver(graph, outNode, inNode) - } -} - -class Receiver(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Receiver.Label, _outNode, _inNode, Receiver.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Ref.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Ref.scala deleted file mode 100644 index 8cd7493ed..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/Ref.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object Ref { - val Label = "REF" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[Ref] { - override val forLabel = Ref.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new Ref(graph, outNode, inNode) - } -} - -class Ref(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, Ref.Label, _outNode, _inNode, Ref.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/SourceFile.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/SourceFile.scala deleted file mode 100644 index 5b9daa6f9..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/SourceFile.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object SourceFile { - val Label = "SOURCE_FILE" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[SourceFile] { - override val forLabel = SourceFile.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new SourceFile(graph, outNode, inNode) - } -} - -class SourceFile(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, SourceFile.Label, _outNode, _inNode, SourceFile.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/TaggedBy.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/TaggedBy.scala deleted file mode 100644 index f137efd87..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/TaggedBy.scala +++ /dev/null @@ -1,39 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object TaggedBy { - val Label = "TAGGED_BY" - - object PropertyNames { - - val all: Set[String] = Set() - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties {} - - object PropertyDefaults {} - - val layoutInformation = new EdgeLayoutInformation(Label, PropertyNames.allAsJava) - - val factory = new EdgeFactory[TaggedBy] { - override val forLabel = TaggedBy.Label - - override def createEdge(graph: Graph, outNode: NodeRef[NodeDb], inNode: NodeRef[NodeDb]) = - new TaggedBy(graph, outNode, inNode) - } -} - -class TaggedBy(_graph: Graph, _outNode: NodeRef[NodeDb], _inNode: NodeRef[NodeDb]) - extends Edge(_graph, TaggedBy.Label, _outNode, _inNode, TaggedBy.PropertyNames.allAsJava) { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/package.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/package.scala deleted file mode 100644 index 456ad8f82..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/edges/package.scala +++ /dev/null @@ -1,46 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.edges - -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object PropertyErrorRegister { - private var errorMap = Set[(Class[?], String)]() - private val logger = org.slf4j.LoggerFactory.getLogger(getClass) - - def logPropertyErrorIfFirst(clazz: Class[?], propertyName: String): Unit = { - if (!errorMap.contains((clazz, propertyName))) { - logger.warn("Property " + propertyName + " is deprecated for " + clazz.getName + ".") - errorMap += ((clazz, propertyName)) - } - } -} - -object Factories { - lazy val all: Seq[EdgeFactory[?]] = Seq( - AliasOf.factory, - Argument.factory, - Ast.factory, - Binds.factory, - BindsTo.factory, - Call.factory, - Capture.factory, - CapturedBy.factory, - Cdg.factory, - Cfg.factory, - Condition.factory, - Contains.factory, - Dominate.factory, - EvalType.factory, - Imports.factory, - InheritsFrom.factory, - IsCallForImport.factory, - ParameterLink.factory, - PostDominate.factory, - ReachingDef.factory, - Receiver.factory, - Ref.factory, - SourceFile.factory, - TaggedBy.factory - ) - lazy val allAsJava: java.util.List[EdgeFactory[?]] = all.asJava -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/language.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/language.scala new file mode 100644 index 000000000..ff660e007 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/language.scala @@ -0,0 +1,14 @@ +package io.shiftleft.codepropertygraph.generated + +/** combining all implicits into one trait that can be mixed in further downstream */ +trait language + extends accessors.ConcreteStoredConversions + with traversals.ConcreteStoredConversions + with neighboraccessors.Conversions + with flatgraph.traversal.language + with flatgraph.help.language + with flatgraph.Implicits { + implicit def toGeneratedNodeStarters(domain: Cpg): CpgNodeStarters = CpgNodeStarters(domain) +} + +object language extends language diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Annotation.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Annotation.scala new file mode 100644 index 000000000..1c8077583 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Annotation.scala @@ -0,0 +1,102 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForAnnotation(val node: nodes.Annotation) extends AnyVal { + + /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST IN edge. + */ + def _annotationParameterAssignViaAstIn: Iterator[nodes.AnnotationParameterAssign] = + astIn.collectAll[nodes.AnnotationParameterAssign] + + /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST OUT edge. + */ + def _annotationParameterAssignViaAstOut: Iterator[nodes.AnnotationParameterAssign] = + astOut.collectAll[nodes.AnnotationParameterAssign] + + /** Traverse to IDENTIFIER via AST IN edge. + */ + def _identifierViaAstIn: Iterator[nodes.Identifier] = astIn.collectAll[nodes.Identifier] + + /** Traverse to LITERAL via AST IN edge. + */ + def _literalViaAstIn: Iterator[nodes.Literal] = astIn.collectAll[nodes.Literal] + + /** Traverse to MEMBER via AST IN edge. + */ + def _memberViaAstIn: Iterator[nodes.Member] = astIn.collectAll[nodes.Member] + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: Iterator[nodes.Method] = astIn.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_IN via AST IN edge. + */ + def _methodParameterInViaAstIn: Iterator[nodes.MethodParameterIn] = astIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_REF via AST IN edge. + */ + def _methodRefViaAstIn: Iterator[nodes.MethodRef] = astIn.collectAll[nodes.MethodRef] + + /** Traverse to TYPE_DECL via AST IN edge. + */ + def _typeDeclViaAstIn: Iterator[nodes.TypeDecl] = astIn.collectAll[nodes.TypeDecl] + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + def astIn: Iterator[nodes.AstNode] = node._astIn.cast[nodes.AstNode] + + def astOut: Iterator[nodes.AnnotationParameterAssign] = node._astOut.cast[nodes.AnnotationParameterAssign] +} + +final class AccessNeighborsForAnnotationTraversal(val traversal: Iterator[nodes.Annotation]) extends AnyVal { + + /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST IN edge. + */ + def _annotationParameterAssignViaAstIn: Iterator[nodes.AnnotationParameterAssign] = + traversal.flatMap(_._annotationParameterAssignViaAstIn) + + /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST OUT edge. + */ + def _annotationParameterAssignViaAstOut: Iterator[nodes.AnnotationParameterAssign] = + traversal.flatMap(_._annotationParameterAssignViaAstOut) + + /** Traverse to IDENTIFIER via AST IN edge. + */ + def _identifierViaAstIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaAstIn) + + /** Traverse to LITERAL via AST IN edge. + */ + def _literalViaAstIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaAstIn) + + /** Traverse to MEMBER via AST IN edge. + */ + def _memberViaAstIn: Iterator[nodes.Member] = traversal.flatMap(_._memberViaAstIn) + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaAstIn) + + /** Traverse to METHOD_PARAMETER_IN via AST IN edge. + */ + def _methodParameterInViaAstIn: Iterator[nodes.MethodParameterIn] = traversal.flatMap(_._methodParameterInViaAstIn) + + /** Traverse to METHOD_REF via AST IN edge. + */ + def _methodRefViaAstIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaAstIn) + + /** Traverse to TYPE_DECL via AST IN edge. + */ + def _typeDeclViaAstIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaAstIn) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + def astIn: Iterator[nodes.AstNode] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.AnnotationParameterAssign] = traversal.flatMap(_.astOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/AnnotationLiteral.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/AnnotationLiteral.scala new file mode 100644 index 000000000..92f553e34 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/AnnotationLiteral.scala @@ -0,0 +1,25 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForAnnotationLiteral(val node: nodes.AnnotationLiteral) extends AnyVal { + + /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST IN edge. + */ + def _annotationParameterAssignViaAstIn: Iterator[nodes.AnnotationParameterAssign] = + astIn.collectAll[nodes.AnnotationParameterAssign] + + def astIn: Iterator[nodes.AnnotationParameterAssign] = node._astIn.cast[nodes.AnnotationParameterAssign] +} + +final class AccessNeighborsForAnnotationLiteralTraversal(val traversal: Iterator[nodes.AnnotationLiteral]) + extends AnyVal { + + /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST IN edge. + */ + def _annotationParameterAssignViaAstIn: Iterator[nodes.AnnotationParameterAssign] = + traversal.flatMap(_._annotationParameterAssignViaAstIn) + + def astIn: Iterator[nodes.AnnotationParameterAssign] = traversal.flatMap(_.astIn) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/AnnotationParameter.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/AnnotationParameter.scala new file mode 100644 index 000000000..0928fbb56 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/AnnotationParameter.scala @@ -0,0 +1,25 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForAnnotationParameter(val node: nodes.AnnotationParameter) extends AnyVal { + + /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST IN edge. + */ + def _annotationParameterAssignViaAstIn: Iterator[nodes.AnnotationParameterAssign] = + astIn.collectAll[nodes.AnnotationParameterAssign] + + def astIn: Iterator[nodes.AnnotationParameterAssign] = node._astIn.cast[nodes.AnnotationParameterAssign] +} + +final class AccessNeighborsForAnnotationParameterTraversal(val traversal: Iterator[nodes.AnnotationParameter]) + extends AnyVal { + + /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST IN edge. + */ + def _annotationParameterAssignViaAstIn: Iterator[nodes.AnnotationParameterAssign] = + traversal.flatMap(_._annotationParameterAssignViaAstIn) + + def astIn: Iterator[nodes.AnnotationParameterAssign] = traversal.flatMap(_.astIn) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/AnnotationParameterAssign.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/AnnotationParameterAssign.scala new file mode 100644 index 000000000..4f3f0cef2 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/AnnotationParameterAssign.scala @@ -0,0 +1,61 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForAnnotationParameterAssign(val node: nodes.AnnotationParameterAssign) extends AnyVal { + + /** Traverse to ANNOTATION via AST IN edge. + */ + def _annotationViaAstIn: Iterator[nodes.Annotation] = astIn.collectAll[nodes.Annotation] + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = astOut.collectAll[nodes.Annotation] + + /** Traverse to ANNOTATION_LITERAL via AST OUT edge. + */ + def _annotationLiteralViaAstOut: Iterator[nodes.AnnotationLiteral] = astOut.collectAll[nodes.AnnotationLiteral] + + /** Traverse to ANNOTATION_PARAMETER via AST OUT edge. + */ + def _annotationParameterViaAstOut: Iterator[nodes.AnnotationParameter] = astOut.collectAll[nodes.AnnotationParameter] + + /** Traverse to ARRAY_INITIALIZER via AST OUT edge. + */ + def _arrayInitializerViaAstOut: Iterator[nodes.ArrayInitializer] = astOut.collectAll[nodes.ArrayInitializer] + + def astIn: Iterator[nodes.Annotation] = node._astIn.cast[nodes.Annotation] + + def astOut: Iterator[nodes.AstNode] = node._astOut.cast[nodes.AstNode] +} + +final class AccessNeighborsForAnnotationParameterAssignTraversal( + val traversal: Iterator[nodes.AnnotationParameterAssign] +) extends AnyVal { + + /** Traverse to ANNOTATION via AST IN edge. + */ + def _annotationViaAstIn: Iterator[nodes.Annotation] = traversal.flatMap(_._annotationViaAstIn) + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = traversal.flatMap(_._annotationViaAstOut) + + /** Traverse to ANNOTATION_LITERAL via AST OUT edge. + */ + def _annotationLiteralViaAstOut: Iterator[nodes.AnnotationLiteral] = traversal.flatMap(_._annotationLiteralViaAstOut) + + /** Traverse to ANNOTATION_PARAMETER via AST OUT edge. + */ + def _annotationParameterViaAstOut: Iterator[nodes.AnnotationParameter] = + traversal.flatMap(_._annotationParameterViaAstOut) + + /** Traverse to ARRAY_INITIALIZER via AST OUT edge. + */ + def _arrayInitializerViaAstOut: Iterator[nodes.ArrayInitializer] = traversal.flatMap(_._arrayInitializerViaAstOut) + + def astIn: Iterator[nodes.Annotation] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.AstNode] = traversal.flatMap(_.astOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/ArrayInitializer.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/ArrayInitializer.scala new file mode 100644 index 000000000..e76849ff5 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/ArrayInitializer.scala @@ -0,0 +1,49 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForArrayInitializer(val node: nodes.ArrayInitializer) extends AnyVal { + + /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST IN edge. + */ + def _annotationParameterAssignViaAstIn: Iterator[nodes.AnnotationParameterAssign] = + astIn.collectAll[nodes.AnnotationParameterAssign] + + /** Traverse to LITERAL via AST OUT edge. + */ + def _literalViaAstOut: Iterator[nodes.Literal] = astOut.collectAll[nodes.Literal] + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + def astIn: Iterator[nodes.AnnotationParameterAssign] = node._astIn.cast[nodes.AnnotationParameterAssign] + + def astOut: Iterator[nodes.Literal] = node._astOut.cast[nodes.Literal] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] +} + +final class AccessNeighborsForArrayInitializerTraversal(val traversal: Iterator[nodes.ArrayInitializer]) + extends AnyVal { + + /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST IN edge. + */ + def _annotationParameterAssignViaAstIn: Iterator[nodes.AnnotationParameterAssign] = + traversal.flatMap(_._annotationParameterAssignViaAstIn) + + /** Traverse to LITERAL via AST OUT edge. + */ + def _literalViaAstOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaAstOut) + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + def astIn: Iterator[nodes.AnnotationParameterAssign] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.Literal] = traversal.flatMap(_.astOut) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Binding.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Binding.scala new file mode 100644 index 000000000..5634b1c79 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Binding.scala @@ -0,0 +1,72 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForBinding(val node: nodes.Binding) extends AnyVal { + + /** Traverse to METHOD via REF OUT edge. + */ + @deprecated("please use boundMethod instead") + def _methodViaRefOut: nodes.Method = boundMethod + + /** Traverse to METHOD via REF OUT edge. + */ + def boundMethod: nodes.Method = { + try { refOut.collectAll[nodes.Method].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "OUT edge with label REF to an adjacent METHOD is mandatory, but not defined for this BINDING node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to TYPE_DECL via BINDS IN edge. + */ + @deprecated("please use bindingTypeDecl instead") + def _typeDeclViaBindsIn: nodes.TypeDecl = bindingTypeDecl + + /** Traverse to TYPE_DECL via BINDS IN edge. + */ + def bindingTypeDecl: nodes.TypeDecl = { + try { bindsIn.collectAll[nodes.TypeDecl].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label BINDS to an adjacent TYPE_DECL is mandatory, but not defined for this BINDING node with seq=" + node.seq, + e + ) + } + } + + def bindsIn: Iterator[nodes.TypeDecl] = node._bindsIn.cast[nodes.TypeDecl] + + def refOut: Iterator[nodes.Method] = node._refOut.cast[nodes.Method] +} + +final class AccessNeighborsForBindingTraversal(val traversal: Iterator[nodes.Binding]) extends AnyVal { + + /** Traverse to METHOD via REF OUT edge. + */ + def boundMethod: Iterator[nodes.Method] = traversal.map(_.boundMethod) + + /** Traverse to METHOD via REF OUT edge. + */ + @deprecated("please use boundMethod instead") + def _methodViaRefOut: Iterator[nodes.Method] = traversal.map(_._methodViaRefOut) + + /** Traverse to TYPE_DECL via BINDS IN edge. + */ + def bindingTypeDecl: Iterator[nodes.TypeDecl] = traversal.map(_.bindingTypeDecl) + + /** Traverse to TYPE_DECL via BINDS IN edge. + */ + @deprecated("please use bindingTypeDecl instead") + def _typeDeclViaBindsIn: Iterator[nodes.TypeDecl] = traversal.map(_._typeDeclViaBindsIn) + + def bindsIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_.bindsIn) + + def refOut: Iterator[nodes.Method] = traversal.flatMap(_.refOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Block.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Block.scala new file mode 100644 index 000000000..f88110eac --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Block.scala @@ -0,0 +1,961 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForBlock(val node: nodes.Block) extends AnyVal { + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: nodes.Block = { + try { astIn.collectAll[nodes.Block].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent BLOCK is mandatory, but not defined for this BLOCK node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to BLOCK via AST OUT edge. + */ + def _blockViaAstOut: Iterator[nodes.Block] = astOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = cdgIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = cdgOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = dominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = dominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = postDominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = postDominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = reachingDefIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via REACHING_DEF OUT edge. + */ + def _blockViaReachingDefOut: Iterator[nodes.Block] = reachingDefOut.collectAll[nodes.Block] + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Option[nodes.Call] = argumentIn.collectAll[nodes.Call].nextOption() + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = astIn.collectAll[nodes.Call] + + /** Traverse to CALL via AST OUT edge. + */ + def _callViaAstOut: Iterator[nodes.Call] = astOut.collectAll[nodes.Call] + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = cdgIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = cdgOut.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = dominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = dominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = postDominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = postDominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = reachingDefOut.collectAll[nodes.Call] + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Option[nodes.Call] = receiverIn.collectAll[nodes.Call].nextOption() + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = cfgOut.collectAll[nodes.CfgNode] + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Option[nodes.ControlStructure] = astIn.collectAll[nodes.ControlStructure].nextOption() + + /** Traverse to CONTROL_STRUCTURE via AST OUT edge. + */ + def _controlStructureViaAstOut: Iterator[nodes.ControlStructure] = astOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = cdgIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = cdgOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = conditionIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = dominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = dominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + postDominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + postDominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = cdgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = cdgOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = dominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = dominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + postDominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + postDominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via AST OUT edge. + */ + def _identifierViaAstOut: Iterator[nodes.Identifier] = astOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = cdgIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = cdgOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = dominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = dominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = postDominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = postDominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = reachingDefOut.collectAll[nodes.Identifier] + + /** Traverse to IMPORT via AST OUT edge. + */ + def _importViaAstOut: Iterator[nodes.Import] = astOut.collectAll[nodes.Import] + + /** Traverse to JUMP_TARGET via AST OUT edge. + */ + def _jumpTargetViaAstOut: Iterator[nodes.JumpTarget] = astOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = cdgIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = cdgOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = dominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = dominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = postDominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = postDominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via AST OUT edge. + */ + def _literalViaAstOut: Iterator[nodes.Literal] = astOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = cdgIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = cdgOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = dominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = dominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = postDominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = postDominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = reachingDefOut.collectAll[nodes.Literal] + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: nodes.Method = { + try { astIn.collectAll[nodes.Method].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent METHOD is mandatory, but not defined for this BLOCK node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = containsIn.collectAll[nodes.Method] + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = dominateIn.collectAll[nodes.Method] + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = postDominateOut.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + reachingDefOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via AST OUT edge. + */ + def _methodRefViaAstOut: Iterator[nodes.MethodRef] = astOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = cdgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = cdgOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = dominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = dominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = postDominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = postDominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = reachingDefOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = cdgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = dominateOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = postDominateIn.collectAll[nodes.MethodReturn] + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Option[nodes.Return] = argumentIn.collectAll[nodes.Return].nextOption() + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = astIn.collectAll[nodes.Return] + + /** Traverse to RETURN via AST OUT edge. + */ + def _returnViaAstOut: Iterator[nodes.Return] = astOut.collectAll[nodes.Return] + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = cdgOut.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = dominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = dominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = postDominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = postDominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = reachingDefOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + /** Traverse to TYPE_REF via AST OUT edge. + */ + def _typeRefViaAstOut: Iterator[nodes.TypeRef] = astOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = cdgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = cdgOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = dominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = dominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = postDominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = postDominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = reachingDefOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via AST OUT edge. + */ + def _unknownViaAstOut: Iterator[nodes.Unknown] = astOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = cdgIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = cdgOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = dominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = dominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = postDominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = postDominateOut.collectAll[nodes.Unknown] + + /** Traverse to locals of this block. Traverse to LOCAL via AST OUT edge. + */ + @deprecated("please use local instead") + def _localViaAstOut: Iterator[nodes.Local] = local + + /** Traverse to locals of this block. Traverse to LOCAL via AST OUT edge. + */ + def local: Iterator[nodes.Local] = astOut.collectAll[nodes.Local] + + def argumentIn: Iterator[nodes.Expression] = node._argumentIn.cast[nodes.Expression] + + def astIn: Iterator[nodes.CfgNode] = node._astIn.cast[nodes.CfgNode] + + def astOut: Iterator[nodes.AstNode] = node._astOut.cast[nodes.AstNode] + + def cdgIn: Iterator[nodes.CfgNode] = node._cdgIn.cast[nodes.CfgNode] + + def cdgOut: Iterator[nodes.CfgNode] = node._cdgOut.cast[nodes.CfgNode] + + def cfgOut: Iterator[nodes.CfgNode] = node._cfgOut.cast[nodes.CfgNode] + + def conditionIn: Iterator[nodes.ControlStructure] = node._conditionIn.cast[nodes.ControlStructure] + + def containsIn: Iterator[nodes.Method] = node._containsIn.cast[nodes.Method] + + def dominateIn: Iterator[nodes.CfgNode] = node._dominateIn.cast[nodes.CfgNode] + + def dominateOut: Iterator[nodes.CfgNode] = node._dominateOut.cast[nodes.CfgNode] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def postDominateIn: Iterator[nodes.CfgNode] = node._postDominateIn.cast[nodes.CfgNode] + + def postDominateOut: Iterator[nodes.CfgNode] = node._postDominateOut.cast[nodes.CfgNode] + + def reachingDefIn: Iterator[nodes.Block] = node._reachingDefIn.cast[nodes.Block] + + def reachingDefOut: Iterator[nodes.CfgNode] = node._reachingDefOut.cast[nodes.CfgNode] + + def receiverIn: Iterator[nodes.Call] = node._receiverIn.cast[nodes.Call] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForBlockTraversal(val traversal: Iterator[nodes.Block]) extends AnyVal { + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = traversal.map(_._blockViaAstIn) + + /** Traverse to BLOCK via AST OUT edge. + */ + def _blockViaAstOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstOut) + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgIn) + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgOut) + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateIn) + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateOut) + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateIn) + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateOut) + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaReachingDefIn) + + /** Traverse to BLOCK via REACHING_DEF OUT edge. + */ + def _blockViaReachingDefOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaReachingDefOut) + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaArgumentIn) + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstIn) + + /** Traverse to CALL via AST OUT edge. + */ + def _callViaAstOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstOut) + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgIn) + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgOut) + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateIn) + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateOut) + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateIn) + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateOut) + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefOut) + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReceiverIn) + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_._cfgNodeViaCfgOut) + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstIn) + + /** Traverse to CONTROL_STRUCTURE via AST OUT edge. + */ + def _controlStructureViaAstOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstOut) + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgIn) + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgOut) + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaConditionIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateOut) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateIn) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateOut) + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgIn) + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgOut) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateOut) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateIn) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via AST OUT edge. + */ + def _identifierViaAstOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaAstOut) + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgIn) + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgOut) + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateIn) + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateOut) + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateIn) + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefOut) + + /** Traverse to IMPORT via AST OUT edge. + */ + def _importViaAstOut: Iterator[nodes.Import] = traversal.flatMap(_._importViaAstOut) + + /** Traverse to JUMP_TARGET via AST OUT edge. + */ + def _jumpTargetViaAstOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaAstOut) + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgIn) + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgOut) + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateIn) + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateOut) + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateIn) + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateOut) + + /** Traverse to LITERAL via AST OUT edge. + */ + def _literalViaAstOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaAstOut) + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgIn) + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgOut) + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateIn) + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateOut) + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateIn) + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateOut) + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefOut) + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: Iterator[nodes.Method] = traversal.map(_._methodViaAstIn) + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsIn) + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaDominateIn) + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaPostDominateOut) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefOut) + + /** Traverse to METHOD_REF via AST OUT edge. + */ + def _methodRefViaAstOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaAstOut) + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgIn) + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgOut) + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateIn) + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateOut) + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateIn) + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateOut) + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefOut) + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCdgOut) + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaDominateOut) + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaPostDominateIn) + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaArgumentIn) + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstIn) + + /** Traverse to RETURN via AST OUT edge. + */ + def _returnViaAstOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstOut) + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaCdgOut) + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateIn) + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateOut) + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateIn) + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateOut) + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + /** Traverse to TYPE_REF via AST OUT edge. + */ + def _typeRefViaAstOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaAstOut) + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgIn) + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgOut) + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateIn) + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateOut) + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateIn) + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateOut) + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefOut) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + /** Traverse to UNKNOWN via AST OUT edge. + */ + def _unknownViaAstOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstOut) + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgIn) + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgOut) + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateIn) + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateOut) + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateIn) + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateOut) + + /** Traverse to locals of this block. Traverse to LOCAL via AST OUT edge. + */ + def local: Iterator[nodes.Local] = traversal.flatMap(_.local) + + /** Traverse to locals of this block. Traverse to LOCAL via AST OUT edge. + */ + @deprecated("please use local instead") + def _localViaAstOut: Iterator[nodes.Local] = traversal.flatMap(_._localViaAstOut) + + def argumentIn: Iterator[nodes.Expression] = traversal.flatMap(_.argumentIn) + + def astIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.AstNode] = traversal.flatMap(_.astOut) + + def cdgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgIn) + + def cdgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgOut) + + def cfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cfgOut) + + def conditionIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_.conditionIn) + + def containsIn: Iterator[nodes.Method] = traversal.flatMap(_.containsIn) + + def dominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateIn) + + def dominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateOut) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def postDominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateIn) + + def postDominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateOut) + + def reachingDefIn: Iterator[nodes.Block] = traversal.flatMap(_.reachingDefIn) + + def reachingDefOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefOut) + + def receiverIn: Iterator[nodes.Call] = traversal.flatMap(_.receiverIn) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Call.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Call.scala new file mode 100644 index 000000000..090aabd50 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Call.scala @@ -0,0 +1,1209 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForCall(val node: nodes.Call) extends AnyVal { + + /** Traverse to BLOCK via ARGUMENT OUT edge. + */ + def _blockViaArgumentOut: Iterator[nodes.Block] = argumentOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = astIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via AST OUT edge. + */ + def _blockViaAstOut: Iterator[nodes.Block] = astOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = cdgIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = cdgOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = dominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = dominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = postDominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = postDominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = reachingDefIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via RECEIVER OUT edge. + */ + def _blockViaReceiverOut: Option[nodes.Block] = receiverOut.collectAll[nodes.Block].nextOption() + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Option[nodes.Call] = argumentIn.collectAll[nodes.Call].nextOption() + + /** Traverse to CALL via ARGUMENT OUT edge. + */ + def _callViaArgumentOut: Iterator[nodes.Call] = argumentOut.collectAll[nodes.Call] + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = astIn.collectAll[nodes.Call] + + /** Traverse to CALL via AST OUT edge. + */ + def _callViaAstOut: Iterator[nodes.Call] = astOut.collectAll[nodes.Call] + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = cdgIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = cdgOut.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = dominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = dominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = postDominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = postDominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = reachingDefIn.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = reachingDefOut.collectAll[nodes.Call] + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Option[nodes.Call] = receiverIn.collectAll[nodes.Call].nextOption() + + /** Traverse to CALL via RECEIVER OUT edge. + */ + def _callViaReceiverOut: Option[nodes.Call] = receiverOut.collectAll[nodes.Call].nextOption() + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = cfgOut.collectAll[nodes.CfgNode] + + /** Traverse to CONTROL_STRUCTURE via ARGUMENT OUT edge. + */ + def _controlStructureViaArgumentOut: Iterator[nodes.ControlStructure] = argumentOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: nodes.ControlStructure = { + try { astIn.collectAll[nodes.ControlStructure].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent CONTROL_STRUCTURE is mandatory, but not defined for this CALL node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to CONTROL_STRUCTURE via AST OUT edge. + */ + def _controlStructureViaAstOut: Iterator[nodes.ControlStructure] = astOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = cdgIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = cdgOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = conditionIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = dominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = dominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + postDominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + postDominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + reachingDefIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via RECEIVER OUT edge. + */ + def _controlStructureViaReceiverOut: Iterator[nodes.ControlStructure] = receiverOut.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via ARGUMENT OUT edge. + */ + def _fieldIdentifierViaArgumentOut: Iterator[nodes.FieldIdentifier] = argumentOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via AST OUT edge. + */ + def _fieldIdentifierViaAstOut: Iterator[nodes.FieldIdentifier] = astOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = cdgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = cdgOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CFG IN edge. + */ + def _fieldIdentifierViaCfgIn: Option[nodes.FieldIdentifier] = cfgIn.collectAll[nodes.FieldIdentifier].nextOption() + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = dominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = dominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + postDominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + postDominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via ARGUMENT OUT edge. + */ + def _identifierViaArgumentOut: Iterator[nodes.Identifier] = argumentOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via AST OUT edge. + */ + def _identifierViaAstOut: Iterator[nodes.Identifier] = astOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = cdgIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = cdgOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = dominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = dominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = postDominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = postDominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = reachingDefIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = reachingDefOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via RECEIVER OUT edge. + */ + def _identifierViaReceiverOut: Option[nodes.Identifier] = receiverOut.collectAll[nodes.Identifier].nextOption() + + /** Traverse to IMPORT via IS_CALL_FOR_IMPORT OUT edge. + */ + def _importViaIsCallForImportOut: Iterator[nodes.Import] = isCallForImportOut.collectAll[nodes.Import] + + /** Traverse to JUMP_TARGET via ARGUMENT OUT edge. + */ + def _jumpTargetViaArgumentOut: Iterator[nodes.JumpTarget] = argumentOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = cdgIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = cdgOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = dominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = dominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = postDominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = postDominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via ARGUMENT OUT edge. + */ + def _literalViaArgumentOut: Iterator[nodes.Literal] = argumentOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via AST OUT edge. + */ + def _literalViaAstOut: Iterator[nodes.Literal] = astOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = cdgIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = cdgOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = dominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = dominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = postDominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = postDominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = reachingDefIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = reachingDefOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via RECEIVER OUT edge. + */ + def _literalViaReceiverOut: Option[nodes.Literal] = receiverOut.collectAll[nodes.Literal].nextOption() + + /** Traverse to METHOD via CALL OUT edge. + */ + def _methodViaCallOut: Iterator[nodes.Method] = callOut.collectAll[nodes.Method] + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = containsIn.collectAll[nodes.Method] + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = dominateIn.collectAll[nodes.Method] + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = postDominateOut.collectAll[nodes.Method] + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = reachingDefIn.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + reachingDefIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. + */ + def _methodParameterOutViaReachingDefIn: Iterator[nodes.MethodParameterOut] = + reachingDefIn.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + reachingDefOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via ARGUMENT OUT edge. + */ + def _methodRefViaArgumentOut: Iterator[nodes.MethodRef] = argumentOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via AST OUT edge. + */ + def _methodRefViaAstOut: Iterator[nodes.MethodRef] = astOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = cdgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = cdgOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = dominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = dominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = postDominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = postDominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = reachingDefIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = reachingDefOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via RECEIVER OUT edge. + */ + def _methodRefViaReceiverOut: Option[nodes.MethodRef] = receiverOut.collectAll[nodes.MethodRef].nextOption() + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = cdgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via CFG OUT edge. + */ + def _methodReturnViaCfgOut: Iterator[nodes.MethodReturn] = cfgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = dominateOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = postDominateIn.collectAll[nodes.MethodReturn] + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Option[nodes.Return] = argumentIn.collectAll[nodes.Return].nextOption() + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = astIn.collectAll[nodes.Return] + + /** Traverse to RETURN via AST OUT edge. + */ + def _returnViaAstOut: Iterator[nodes.Return] = astOut.collectAll[nodes.Return] + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = cdgOut.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = dominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = dominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = postDominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = postDominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = reachingDefOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + /** Traverse to TYPE_REF via ARGUMENT OUT edge. + */ + def _typeRefViaArgumentOut: Iterator[nodes.TypeRef] = argumentOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via AST OUT edge. + */ + def _typeRefViaAstOut: Iterator[nodes.TypeRef] = astOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = cdgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = cdgOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = dominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = dominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = postDominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = postDominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = reachingDefIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = reachingDefOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via RECEIVER OUT edge. + */ + def _typeRefViaReceiverOut: Iterator[nodes.TypeRef] = receiverOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via ARGUMENT OUT edge. + */ + def _unknownViaArgumentOut: Iterator[nodes.Unknown] = argumentOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = cdgIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = cdgOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = dominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = dominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = postDominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = postDominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = reachingDefIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via RECEIVER OUT edge. + */ + def _unknownViaReceiverOut: Iterator[nodes.Unknown] = receiverOut.collectAll[nodes.Unknown] + + /** Traverse to referenced members Traverse to MEMBER via REF OUT edge. + */ + @deprecated("please use referencedMember instead") + def _memberViaRefOut: Iterator[nodes.Member] = referencedMember + + /** Traverse to referenced members Traverse to MEMBER via REF OUT edge. + */ + def referencedMember: Iterator[nodes.Member] = refOut.collectAll[nodes.Member] + + def argumentIn: Iterator[nodes.Expression] = node._argumentIn.cast[nodes.Expression] + + def argumentOut: Iterator[nodes.CfgNode] = node._argumentOut.cast[nodes.CfgNode] + + def astIn: Iterator[nodes.Expression] = node._astIn.cast[nodes.Expression] + + def astOut: Iterator[nodes.Expression] = node._astOut.cast[nodes.Expression] + + def callOut: Iterator[nodes.Method] = node._callOut.cast[nodes.Method] + + def cdgIn: Iterator[nodes.CfgNode] = node._cdgIn.cast[nodes.CfgNode] + + def cdgOut: Iterator[nodes.CfgNode] = node._cdgOut.cast[nodes.CfgNode] + + def cfgIn: Iterator[nodes.FieldIdentifier] = node._cfgIn.cast[nodes.FieldIdentifier] + + def cfgOut: Iterator[nodes.AstNode] = node._cfgOut.cast[nodes.AstNode] + + def conditionIn: Iterator[nodes.ControlStructure] = node._conditionIn.cast[nodes.ControlStructure] + + def containsIn: Iterator[nodes.Method] = node._containsIn.cast[nodes.Method] + + def dominateIn: Iterator[nodes.CfgNode] = node._dominateIn.cast[nodes.CfgNode] + + def dominateOut: Iterator[nodes.CfgNode] = node._dominateOut.cast[nodes.CfgNode] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def isCallForImportOut: Iterator[nodes.Import] = node._isCallForImportOut.cast[nodes.Import] + + def postDominateIn: Iterator[nodes.CfgNode] = node._postDominateIn.cast[nodes.CfgNode] + + def postDominateOut: Iterator[nodes.CfgNode] = node._postDominateOut.cast[nodes.CfgNode] + + def reachingDefIn: Iterator[nodes.CfgNode] = node._reachingDefIn.cast[nodes.CfgNode] + + def reachingDefOut: Iterator[nodes.CfgNode] = node._reachingDefOut.cast[nodes.CfgNode] + + def receiverIn: Iterator[nodes.Call] = node._receiverIn.cast[nodes.Call] + + def receiverOut: Iterator[nodes.Expression] = node._receiverOut.cast[nodes.Expression] + + def refOut: Iterator[nodes.Member] = node._refOut.cast[nodes.Member] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForCallTraversal(val traversal: Iterator[nodes.Call]) extends AnyVal { + + /** Traverse to BLOCK via ARGUMENT OUT edge. + */ + def _blockViaArgumentOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaArgumentOut) + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstIn) + + /** Traverse to BLOCK via AST OUT edge. + */ + def _blockViaAstOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstOut) + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgIn) + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgOut) + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateIn) + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateOut) + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateIn) + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateOut) + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaReachingDefIn) + + /** Traverse to BLOCK via RECEIVER OUT edge. + */ + def _blockViaReceiverOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaReceiverOut) + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaArgumentIn) + + /** Traverse to CALL via ARGUMENT OUT edge. + */ + def _callViaArgumentOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaArgumentOut) + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstIn) + + /** Traverse to CALL via AST OUT edge. + */ + def _callViaAstOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstOut) + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgIn) + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgOut) + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateIn) + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateOut) + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateIn) + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateOut) + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefIn) + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefOut) + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReceiverIn) + + /** Traverse to CALL via RECEIVER OUT edge. + */ + def _callViaReceiverOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaReceiverOut) + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_._cfgNodeViaCfgOut) + + /** Traverse to CONTROL_STRUCTURE via ARGUMENT OUT edge. + */ + def _controlStructureViaArgumentOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaArgumentOut) + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.map(_._controlStructureViaAstIn) + + /** Traverse to CONTROL_STRUCTURE via AST OUT edge. + */ + def _controlStructureViaAstOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstOut) + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgIn) + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgOut) + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaConditionIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateOut) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateIn) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateOut) + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaReachingDefIn) + + /** Traverse to CONTROL_STRUCTURE via RECEIVER OUT edge. + */ + def _controlStructureViaReceiverOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaReceiverOut) + + /** Traverse to FIELD_IDENTIFIER via ARGUMENT OUT edge. + */ + def _fieldIdentifierViaArgumentOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaArgumentOut) + + /** Traverse to FIELD_IDENTIFIER via AST OUT edge. + */ + def _fieldIdentifierViaAstOut: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaAstOut) + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgIn) + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgOut) + + /** Traverse to FIELD_IDENTIFIER via CFG IN edge. + */ + def _fieldIdentifierViaCfgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCfgIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateOut) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateIn) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via ARGUMENT OUT edge. + */ + def _identifierViaArgumentOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaArgumentOut) + + /** Traverse to IDENTIFIER via AST OUT edge. + */ + def _identifierViaAstOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaAstOut) + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgIn) + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgOut) + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateIn) + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateOut) + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateIn) + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefIn) + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefOut) + + /** Traverse to IDENTIFIER via RECEIVER OUT edge. + */ + def _identifierViaReceiverOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReceiverOut) + + /** Traverse to IMPORT via IS_CALL_FOR_IMPORT OUT edge. + */ + def _importViaIsCallForImportOut: Iterator[nodes.Import] = traversal.flatMap(_._importViaIsCallForImportOut) + + /** Traverse to JUMP_TARGET via ARGUMENT OUT edge. + */ + def _jumpTargetViaArgumentOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaArgumentOut) + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgIn) + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgOut) + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateIn) + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateOut) + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateIn) + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateOut) + + /** Traverse to LITERAL via ARGUMENT OUT edge. + */ + def _literalViaArgumentOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaArgumentOut) + + /** Traverse to LITERAL via AST OUT edge. + */ + def _literalViaAstOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaAstOut) + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgIn) + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgOut) + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateIn) + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateOut) + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateIn) + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateOut) + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefIn) + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefOut) + + /** Traverse to LITERAL via RECEIVER OUT edge. + */ + def _literalViaReceiverOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReceiverOut) + + /** Traverse to METHOD via CALL OUT edge. + */ + def _methodViaCallOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaCallOut) + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsIn) + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaDominateIn) + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaPostDominateOut) + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + traversal.flatMap(_._methodParameterInViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. + */ + def _methodParameterOutViaReachingDefIn: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefOut) + + /** Traverse to METHOD_REF via ARGUMENT OUT edge. + */ + def _methodRefViaArgumentOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaArgumentOut) + + /** Traverse to METHOD_REF via AST OUT edge. + */ + def _methodRefViaAstOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaAstOut) + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgIn) + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgOut) + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateIn) + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateOut) + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateIn) + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateOut) + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefIn) + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefOut) + + /** Traverse to METHOD_REF via RECEIVER OUT edge. + */ + def _methodRefViaReceiverOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReceiverOut) + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCdgOut) + + /** Traverse to METHOD_RETURN via CFG OUT edge. + */ + def _methodReturnViaCfgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCfgOut) + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaDominateOut) + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaPostDominateIn) + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaArgumentIn) + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstIn) + + /** Traverse to RETURN via AST OUT edge. + */ + def _returnViaAstOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstOut) + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaCdgOut) + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateIn) + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateOut) + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateIn) + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateOut) + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + /** Traverse to TYPE_REF via ARGUMENT OUT edge. + */ + def _typeRefViaArgumentOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaArgumentOut) + + /** Traverse to TYPE_REF via AST OUT edge. + */ + def _typeRefViaAstOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaAstOut) + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgIn) + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgOut) + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateIn) + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateOut) + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateIn) + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateOut) + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefIn) + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefOut) + + /** Traverse to TYPE_REF via RECEIVER OUT edge. + */ + def _typeRefViaReceiverOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReceiverOut) + + /** Traverse to UNKNOWN via ARGUMENT OUT edge. + */ + def _unknownViaArgumentOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaArgumentOut) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgIn) + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgOut) + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateIn) + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateOut) + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateIn) + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateOut) + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaReachingDefIn) + + /** Traverse to UNKNOWN via RECEIVER OUT edge. + */ + def _unknownViaReceiverOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaReceiverOut) + + /** Traverse to referenced members Traverse to MEMBER via REF OUT edge. + */ + def referencedMember: Iterator[nodes.Member] = traversal.flatMap(_.referencedMember) + + /** Traverse to referenced members Traverse to MEMBER via REF OUT edge. + */ + @deprecated("please use referencedMember instead") + def _memberViaRefOut: Iterator[nodes.Member] = traversal.flatMap(_._memberViaRefOut) + + def argumentIn: Iterator[nodes.Expression] = traversal.flatMap(_.argumentIn) + + def argumentOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.argumentOut) + + def astIn: Iterator[nodes.Expression] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.Expression] = traversal.flatMap(_.astOut) + + def callOut: Iterator[nodes.Method] = traversal.flatMap(_.callOut) + + def cdgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgIn) + + def cdgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgOut) + + def cfgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_.cfgIn) + + def cfgOut: Iterator[nodes.AstNode] = traversal.flatMap(_.cfgOut) + + def conditionIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_.conditionIn) + + def containsIn: Iterator[nodes.Method] = traversal.flatMap(_.containsIn) + + def dominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateIn) + + def dominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateOut) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def isCallForImportOut: Iterator[nodes.Import] = traversal.flatMap(_.isCallForImportOut) + + def postDominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateIn) + + def postDominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateOut) + + def reachingDefIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefIn) + + def reachingDefOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefOut) + + def receiverIn: Iterator[nodes.Call] = traversal.flatMap(_.receiverIn) + + def receiverOut: Iterator[nodes.Expression] = traversal.flatMap(_.receiverOut) + + def refOut: Iterator[nodes.Member] = traversal.flatMap(_.refOut) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/CfgNode.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/CfgNode.scala new file mode 100644 index 000000000..30e555aa7 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/CfgNode.scala @@ -0,0 +1,102 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForCfgNode(val node: nodes.CfgNode) extends AnyVal { + + /** Traverse to BLOCK via CFG IN edge. + */ + def _blockViaCfgIn: Iterator[nodes.Block] = cfgIn.collectAll[nodes.Block] + + /** Traverse to CALL via CFG IN edge. + */ + def _callViaCfgIn: Iterator[nodes.Call] = cfgIn.collectAll[nodes.Call] + + /** Traverse to CONTROL_STRUCTURE via CFG IN edge. + */ + def _controlStructureViaCfgIn: Iterator[nodes.ControlStructure] = cfgIn.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via CFG IN edge. + */ + def _fieldIdentifierViaCfgIn: Iterator[nodes.FieldIdentifier] = cfgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via CFG IN edge. + */ + def _identifierViaCfgIn: Iterator[nodes.Identifier] = cfgIn.collectAll[nodes.Identifier] + + /** Traverse to JUMP_TARGET via CFG IN edge. + */ + def _jumpTargetViaCfgIn: Iterator[nodes.JumpTarget] = cfgIn.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via CFG IN edge. + */ + def _literalViaCfgIn: Iterator[nodes.Literal] = cfgIn.collectAll[nodes.Literal] + + /** Traverse to METHOD via CFG IN edge. + */ + def _methodViaCfgIn: Iterator[nodes.Method] = cfgIn.collectAll[nodes.Method] + + /** Traverse to METHOD_REF via CFG IN edge. + */ + def _methodRefViaCfgIn: Iterator[nodes.MethodRef] = cfgIn.collectAll[nodes.MethodRef] + + /** Traverse to TYPE_REF via CFG IN edge. + */ + def _typeRefViaCfgIn: Iterator[nodes.TypeRef] = cfgIn.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via CFG IN edge. + */ + def _unknownViaCfgIn: Iterator[nodes.Unknown] = cfgIn.collectAll[nodes.Unknown] + + def cfgIn: Iterator[nodes.CfgNode] = node._cfgIn.cast[nodes.CfgNode] +} + +final class AccessNeighborsForCfgNodeTraversal(val traversal: Iterator[nodes.CfgNode]) extends AnyVal { + + /** Traverse to BLOCK via CFG IN edge. + */ + def _blockViaCfgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCfgIn) + + /** Traverse to CALL via CFG IN edge. + */ + def _callViaCfgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCfgIn) + + /** Traverse to CONTROL_STRUCTURE via CFG IN edge. + */ + def _controlStructureViaCfgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCfgIn) + + /** Traverse to FIELD_IDENTIFIER via CFG IN edge. + */ + def _fieldIdentifierViaCfgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCfgIn) + + /** Traverse to IDENTIFIER via CFG IN edge. + */ + def _identifierViaCfgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCfgIn) + + /** Traverse to JUMP_TARGET via CFG IN edge. + */ + def _jumpTargetViaCfgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCfgIn) + + /** Traverse to LITERAL via CFG IN edge. + */ + def _literalViaCfgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCfgIn) + + /** Traverse to METHOD via CFG IN edge. + */ + def _methodViaCfgIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaCfgIn) + + /** Traverse to METHOD_REF via CFG IN edge. + */ + def _methodRefViaCfgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCfgIn) + + /** Traverse to TYPE_REF via CFG IN edge. + */ + def _typeRefViaCfgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCfgIn) + + /** Traverse to UNKNOWN via CFG IN edge. + */ + def _unknownViaCfgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCfgIn) + + def cfgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cfgIn) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/ClosureBinding.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/ClosureBinding.scala new file mode 100644 index 000000000..7a7cc3efe --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/ClosureBinding.scala @@ -0,0 +1,73 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForClosureBinding(val node: nodes.ClosureBinding) extends AnyVal { + + /** Traverse to LOCAL via CAPTURED_BY IN edge. + */ + def _localViaCapturedByIn: Iterator[nodes.Local] = capturedByIn.collectAll[nodes.Local] + + /** Traverse to LOCAL via REF OUT edge. + */ + def _localViaRefOut: Option[nodes.Local] = refOut.collectAll[nodes.Local].nextOption() + + /** Traverse to METHOD_PARAMETER_IN via CAPTURED_BY IN edge. + */ + def _methodParameterInViaCapturedByIn: Iterator[nodes.MethodParameterIn] = + capturedByIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_PARAMETER_IN via REF OUT edge. + */ + def _methodParameterInViaRefOut: Option[nodes.MethodParameterIn] = + refOut.collectAll[nodes.MethodParameterIn].nextOption() + + /** Traverse to METHOD_REF via CAPTURE IN edge. + */ + def _methodRefViaCaptureIn: Iterator[nodes.MethodRef] = captureIn.collectAll[nodes.MethodRef] + + /** Traverse to TYPE_REF via CAPTURE IN edge. + */ + def _typeRefViaCaptureIn: Iterator[nodes.TypeRef] = captureIn.collectAll[nodes.TypeRef] + + def captureIn: Iterator[nodes.Expression] = node._captureIn.cast[nodes.Expression] + + def capturedByIn: Iterator[nodes.AstNode] = node._capturedByIn.cast[nodes.AstNode] + + def refOut: Iterator[nodes.AstNode] = node._refOut.cast[nodes.AstNode] +} + +final class AccessNeighborsForClosureBindingTraversal(val traversal: Iterator[nodes.ClosureBinding]) extends AnyVal { + + /** Traverse to LOCAL via CAPTURED_BY IN edge. + */ + def _localViaCapturedByIn: Iterator[nodes.Local] = traversal.flatMap(_._localViaCapturedByIn) + + /** Traverse to LOCAL via REF OUT edge. + */ + def _localViaRefOut: Iterator[nodes.Local] = traversal.flatMap(_._localViaRefOut) + + /** Traverse to METHOD_PARAMETER_IN via CAPTURED_BY IN edge. + */ + def _methodParameterInViaCapturedByIn: Iterator[nodes.MethodParameterIn] = + traversal.flatMap(_._methodParameterInViaCapturedByIn) + + /** Traverse to METHOD_PARAMETER_IN via REF OUT edge. + */ + def _methodParameterInViaRefOut: Iterator[nodes.MethodParameterIn] = traversal.flatMap(_._methodParameterInViaRefOut) + + /** Traverse to METHOD_REF via CAPTURE IN edge. + */ + def _methodRefViaCaptureIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCaptureIn) + + /** Traverse to TYPE_REF via CAPTURE IN edge. + */ + def _typeRefViaCaptureIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCaptureIn) + + def captureIn: Iterator[nodes.Expression] = traversal.flatMap(_.captureIn) + + def capturedByIn: Iterator[nodes.AstNode] = traversal.flatMap(_.capturedByIn) + + def refOut: Iterator[nodes.AstNode] = traversal.flatMap(_.refOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Comment.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Comment.scala new file mode 100644 index 000000000..13c263aec --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Comment.scala @@ -0,0 +1,56 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForComment(val node: nodes.Comment) extends AnyVal { + + /** Traverse to COMMENT via SOURCE_FILE IN edge. + */ + def _commentViaSourceFileIn: Iterator[nodes.Comment] = sourceFileIn.collectAll[nodes.Comment] + + /** Traverse to COMMENT via SOURCE_FILE OUT edge. + */ + @deprecated("please use file instead") + def _commentViaSourceFileOut: Iterator[nodes.Comment] = file + + /** Traverse to COMMENT via SOURCE_FILE OUT edge. + */ + def file: Iterator[nodes.Comment] = sourceFileOut.collectAll[nodes.Comment] + + /** Traverse to FILE via AST IN edge. + */ + def _fileViaAstIn: Iterator[nodes.File] = astIn.collectAll[nodes.File] + + def astIn: Iterator[nodes.File] = node._astIn.cast[nodes.File] + + def sourceFileIn: Iterator[nodes.Comment] = node._sourceFileIn.cast[nodes.Comment] + + def sourceFileOut: Iterator[nodes.Comment] = node._sourceFileOut.cast[nodes.Comment] +} + +final class AccessNeighborsForCommentTraversal(val traversal: Iterator[nodes.Comment]) extends AnyVal { + + /** Traverse to COMMENT via SOURCE_FILE IN edge. + */ + def _commentViaSourceFileIn: Iterator[nodes.Comment] = traversal.flatMap(_._commentViaSourceFileIn) + + /** Traverse to COMMENT via SOURCE_FILE OUT edge. + */ + def file: Iterator[nodes.Comment] = traversal.flatMap(_.file) + + /** Traverse to COMMENT via SOURCE_FILE OUT edge. + */ + @deprecated("please use file instead") + def _commentViaSourceFileOut: Iterator[nodes.Comment] = traversal.flatMap(_._commentViaSourceFileOut) + + /** Traverse to FILE via AST IN edge. + */ + def _fileViaAstIn: Iterator[nodes.File] = traversal.flatMap(_._fileViaAstIn) + + def astIn: Iterator[nodes.File] = traversal.flatMap(_.astIn) + + def sourceFileIn: Iterator[nodes.Comment] = traversal.flatMap(_.sourceFileIn) + + def sourceFileOut: Iterator[nodes.Comment] = traversal.flatMap(_.sourceFileOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/ControlStructure.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/ControlStructure.scala new file mode 100644 index 000000000..1c5e12588 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/ControlStructure.scala @@ -0,0 +1,992 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForControlStructure(val node: nodes.ControlStructure) extends AnyVal { + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = astIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via AST OUT edge. + */ + def _blockViaAstOut: Iterator[nodes.Block] = astOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = cdgIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = cdgOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via CONDITION OUT edge. + */ + def _blockViaConditionOut: Iterator[nodes.Block] = conditionOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = dominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = dominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = postDominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = postDominateOut.collectAll[nodes.Block] + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = argumentIn.collectAll[nodes.Call] + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = astIn.collectAll[nodes.Call] + + /** Traverse to CALL via AST OUT edge. + */ + def _callViaAstOut: Iterator[nodes.Call] = astOut.collectAll[nodes.Call] + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = cdgIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = cdgOut.collectAll[nodes.Call] + + /** Traverse to CALL via CONDITION OUT edge. + */ + def _callViaConditionOut: Iterator[nodes.Call] = conditionOut.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = dominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = dominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = postDominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = postDominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = reachingDefOut.collectAll[nodes.Call] + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Iterator[nodes.Call] = receiverIn.collectAll[nodes.Call] + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = cfgOut.collectAll[nodes.CfgNode] + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = astIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via AST OUT edge. + */ + def _controlStructureViaAstOut: Iterator[nodes.ControlStructure] = astOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = cdgIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = cdgOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = conditionIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CONDITION OUT edge. + */ + def _controlStructureViaConditionOut: Iterator[nodes.ControlStructure] = + conditionOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = dominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = dominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + postDominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + postDominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = cdgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = cdgOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = dominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = dominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + postDominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + postDominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via AST OUT edge. + */ + def _identifierViaAstOut: Iterator[nodes.Identifier] = astOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = cdgIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = cdgOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CONDITION OUT edge. + */ + def _identifierViaConditionOut: Iterator[nodes.Identifier] = conditionOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = dominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = dominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = postDominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = postDominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = reachingDefOut.collectAll[nodes.Identifier] + + /** Traverse to JUMP_LABEL via AST OUT edge. + */ + def _jumpLabelViaAstOut: Iterator[nodes.JumpLabel] = astOut.collectAll[nodes.JumpLabel] + + /** Traverse to JUMP_TARGET via AST OUT edge. + */ + def _jumpTargetViaAstOut: Iterator[nodes.JumpTarget] = astOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = cdgIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = cdgOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CONDITION OUT edge. + */ + def _jumpTargetViaConditionOut: Iterator[nodes.JumpTarget] = conditionOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = dominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = dominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = postDominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = postDominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via AST OUT edge. + */ + def _literalViaAstOut: Iterator[nodes.Literal] = astOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = cdgIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = cdgOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CONDITION OUT edge. + */ + def _literalViaConditionOut: Iterator[nodes.Literal] = conditionOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = dominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = dominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = postDominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = postDominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = reachingDefOut.collectAll[nodes.Literal] + + /** Traverse to LOCAL via AST OUT edge. + */ + def _localViaAstOut: Iterator[nodes.Local] = astOut.collectAll[nodes.Local] + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = containsIn.collectAll[nodes.Method] + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = postDominateOut.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + reachingDefOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via AST OUT edge. + */ + def _methodRefViaAstOut: Iterator[nodes.MethodRef] = astOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = cdgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = cdgOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CONDITION OUT edge. + */ + def _methodRefViaConditionOut: Iterator[nodes.MethodRef] = conditionOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = dominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = dominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = postDominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = postDominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = reachingDefOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = cdgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = dominateOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = postDominateIn.collectAll[nodes.MethodReturn] + + /** Traverse to MODIFIER via AST OUT edge. + */ + def _modifierViaAstOut: Iterator[nodes.Modifier] = astOut.collectAll[nodes.Modifier] + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = argumentIn.collectAll[nodes.Return] + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = astIn.collectAll[nodes.Return] + + /** Traverse to RETURN via AST OUT edge. + */ + def _returnViaAstOut: Iterator[nodes.Return] = astOut.collectAll[nodes.Return] + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = cdgOut.collectAll[nodes.Return] + + /** Traverse to RETURN via CONDITION OUT edge. + */ + def _returnViaConditionOut: Iterator[nodes.Return] = conditionOut.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = dominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = dominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = postDominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = postDominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = reachingDefOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + /** Traverse to TYPE_REF via AST OUT edge. + */ + def _typeRefViaAstOut: Iterator[nodes.TypeRef] = astOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = cdgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = cdgOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CONDITION OUT edge. + */ + def _typeRefViaConditionOut: Iterator[nodes.TypeRef] = conditionOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = dominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = dominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = postDominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = postDominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = reachingDefOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via AST OUT edge. + */ + def _unknownViaAstOut: Iterator[nodes.Unknown] = astOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = cdgIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = cdgOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CONDITION OUT edge. + */ + def _unknownViaConditionOut: Iterator[nodes.Unknown] = conditionOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = dominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = dominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = postDominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = postDominateOut.collectAll[nodes.Unknown] + + def argumentIn: Iterator[nodes.Expression] = node._argumentIn.cast[nodes.Expression] + + def astIn: Iterator[nodes.Expression] = node._astIn.cast[nodes.Expression] + + def astOut: Iterator[nodes.AstNode] = node._astOut.cast[nodes.AstNode] + + def cdgIn: Iterator[nodes.CfgNode] = node._cdgIn.cast[nodes.CfgNode] + + def cdgOut: Iterator[nodes.CfgNode] = node._cdgOut.cast[nodes.CfgNode] + + def cfgOut: Iterator[nodes.CfgNode] = node._cfgOut.cast[nodes.CfgNode] + + def conditionIn: Iterator[nodes.ControlStructure] = node._conditionIn.cast[nodes.ControlStructure] + + def conditionOut: Iterator[nodes.CfgNode] = node._conditionOut.cast[nodes.CfgNode] + + def containsIn: Iterator[nodes.Method] = node._containsIn.cast[nodes.Method] + + def dominateIn: Iterator[nodes.CfgNode] = node._dominateIn.cast[nodes.CfgNode] + + def dominateOut: Iterator[nodes.CfgNode] = node._dominateOut.cast[nodes.CfgNode] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def postDominateIn: Iterator[nodes.CfgNode] = node._postDominateIn.cast[nodes.CfgNode] + + def postDominateOut: Iterator[nodes.CfgNode] = node._postDominateOut.cast[nodes.CfgNode] + + def reachingDefOut: Iterator[nodes.CfgNode] = node._reachingDefOut.cast[nodes.CfgNode] + + def receiverIn: Iterator[nodes.Call] = node._receiverIn.cast[nodes.Call] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForControlStructureTraversal(val traversal: Iterator[nodes.ControlStructure]) + extends AnyVal { + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstIn) + + /** Traverse to BLOCK via AST OUT edge. + */ + def _blockViaAstOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstOut) + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgIn) + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgOut) + + /** Traverse to BLOCK via CONDITION OUT edge. + */ + def _blockViaConditionOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaConditionOut) + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateIn) + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateOut) + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateIn) + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateOut) + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaArgumentIn) + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstIn) + + /** Traverse to CALL via AST OUT edge. + */ + def _callViaAstOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstOut) + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgIn) + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgOut) + + /** Traverse to CALL via CONDITION OUT edge. + */ + def _callViaConditionOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaConditionOut) + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateIn) + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateOut) + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateIn) + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateOut) + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefOut) + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReceiverIn) + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_._cfgNodeViaCfgOut) + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstIn) + + /** Traverse to CONTROL_STRUCTURE via AST OUT edge. + */ + def _controlStructureViaAstOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstOut) + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgIn) + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgOut) + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaConditionIn) + + /** Traverse to CONTROL_STRUCTURE via CONDITION OUT edge. + */ + def _controlStructureViaConditionOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaConditionOut) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateOut) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateIn) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateOut) + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgIn) + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgOut) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateOut) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateIn) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via AST OUT edge. + */ + def _identifierViaAstOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaAstOut) + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgIn) + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgOut) + + /** Traverse to IDENTIFIER via CONDITION OUT edge. + */ + def _identifierViaConditionOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaConditionOut) + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateIn) + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateOut) + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateIn) + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefOut) + + /** Traverse to JUMP_LABEL via AST OUT edge. + */ + def _jumpLabelViaAstOut: Iterator[nodes.JumpLabel] = traversal.flatMap(_._jumpLabelViaAstOut) + + /** Traverse to JUMP_TARGET via AST OUT edge. + */ + def _jumpTargetViaAstOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaAstOut) + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgIn) + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgOut) + + /** Traverse to JUMP_TARGET via CONDITION OUT edge. + */ + def _jumpTargetViaConditionOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaConditionOut) + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateIn) + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateOut) + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateIn) + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateOut) + + /** Traverse to LITERAL via AST OUT edge. + */ + def _literalViaAstOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaAstOut) + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgIn) + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgOut) + + /** Traverse to LITERAL via CONDITION OUT edge. + */ + def _literalViaConditionOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaConditionOut) + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateIn) + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateOut) + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateIn) + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateOut) + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefOut) + + /** Traverse to LOCAL via AST OUT edge. + */ + def _localViaAstOut: Iterator[nodes.Local] = traversal.flatMap(_._localViaAstOut) + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsIn) + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaPostDominateOut) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefOut) + + /** Traverse to METHOD_REF via AST OUT edge. + */ + def _methodRefViaAstOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaAstOut) + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgIn) + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgOut) + + /** Traverse to METHOD_REF via CONDITION OUT edge. + */ + def _methodRefViaConditionOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaConditionOut) + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateIn) + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateOut) + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateIn) + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateOut) + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefOut) + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCdgOut) + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaDominateOut) + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaPostDominateIn) + + /** Traverse to MODIFIER via AST OUT edge. + */ + def _modifierViaAstOut: Iterator[nodes.Modifier] = traversal.flatMap(_._modifierViaAstOut) + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaArgumentIn) + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstIn) + + /** Traverse to RETURN via AST OUT edge. + */ + def _returnViaAstOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstOut) + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaCdgOut) + + /** Traverse to RETURN via CONDITION OUT edge. + */ + def _returnViaConditionOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaConditionOut) + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateIn) + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateOut) + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateIn) + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateOut) + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + /** Traverse to TYPE_REF via AST OUT edge. + */ + def _typeRefViaAstOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaAstOut) + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgIn) + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgOut) + + /** Traverse to TYPE_REF via CONDITION OUT edge. + */ + def _typeRefViaConditionOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaConditionOut) + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateIn) + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateOut) + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateIn) + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateOut) + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefOut) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + /** Traverse to UNKNOWN via AST OUT edge. + */ + def _unknownViaAstOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstOut) + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgIn) + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgOut) + + /** Traverse to UNKNOWN via CONDITION OUT edge. + */ + def _unknownViaConditionOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaConditionOut) + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateIn) + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateOut) + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateIn) + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateOut) + + def argumentIn: Iterator[nodes.Expression] = traversal.flatMap(_.argumentIn) + + def astIn: Iterator[nodes.Expression] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.AstNode] = traversal.flatMap(_.astOut) + + def cdgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgIn) + + def cdgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgOut) + + def cfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cfgOut) + + def conditionIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_.conditionIn) + + def conditionOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.conditionOut) + + def containsIn: Iterator[nodes.Method] = traversal.flatMap(_.containsIn) + + def dominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateIn) + + def dominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateOut) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def postDominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateIn) + + def postDominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateOut) + + def reachingDefOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefOut) + + def receiverIn: Iterator[nodes.Call] = traversal.flatMap(_.receiverIn) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Dependency.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Dependency.scala new file mode 100644 index 000000000..c3a3da433 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Dependency.scala @@ -0,0 +1,22 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForDependency(val node: nodes.Dependency) extends AnyVal { + + /** Traverse to IMPORT via IMPORTS IN edge. + */ + def _importViaImportsIn: Iterator[nodes.Import] = importsIn.collectAll[nodes.Import] + + def importsIn: Iterator[nodes.Import] = node._importsIn.cast[nodes.Import] +} + +final class AccessNeighborsForDependencyTraversal(val traversal: Iterator[nodes.Dependency]) extends AnyVal { + + /** Traverse to IMPORT via IMPORTS IN edge. + */ + def _importViaImportsIn: Iterator[nodes.Import] = traversal.flatMap(_._importViaImportsIn) + + def importsIn: Iterator[nodes.Import] = traversal.flatMap(_.importsIn) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Expression.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Expression.scala new file mode 100644 index 000000000..46fe6e9b8 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Expression.scala @@ -0,0 +1,46 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForExpression(val node: nodes.Expression) extends AnyVal { + + /** Traverse to TEMPLATE_DOM via ARGUMENT OUT edge. + */ + def _templateDomViaArgumentOut: Iterator[nodes.TemplateDom] = argumentOut.collectAll[nodes.TemplateDom] + + /** Traverse to TEMPLATE_DOM via AST IN edge. + */ + def _templateDomViaAstIn: Iterator[nodes.TemplateDom] = astIn.collectAll[nodes.TemplateDom] + + /** Traverse to TEMPLATE_DOM via REACHING_DEF IN edge. + */ + def _templateDomViaReachingDefIn: Iterator[nodes.TemplateDom] = reachingDefIn.collectAll[nodes.TemplateDom] + + def argumentOut: Iterator[nodes.TemplateDom] = node._argumentOut.cast[nodes.TemplateDom] + + def astIn: Iterator[nodes.TemplateDom] = node._astIn.cast[nodes.TemplateDom] + + def reachingDefIn: Iterator[nodes.TemplateDom] = node._reachingDefIn.cast[nodes.TemplateDom] +} + +final class AccessNeighborsForExpressionTraversal(val traversal: Iterator[nodes.Expression]) extends AnyVal { + + /** Traverse to TEMPLATE_DOM via ARGUMENT OUT edge. + */ + def _templateDomViaArgumentOut: Iterator[nodes.TemplateDom] = traversal.flatMap(_._templateDomViaArgumentOut) + + /** Traverse to TEMPLATE_DOM via AST IN edge. + */ + def _templateDomViaAstIn: Iterator[nodes.TemplateDom] = traversal.flatMap(_._templateDomViaAstIn) + + /** Traverse to TEMPLATE_DOM via REACHING_DEF IN edge. + */ + def _templateDomViaReachingDefIn: Iterator[nodes.TemplateDom] = traversal.flatMap(_._templateDomViaReachingDefIn) + + def argumentOut: Iterator[nodes.TemplateDom] = traversal.flatMap(_.argumentOut) + + def astIn: Iterator[nodes.TemplateDom] = traversal.flatMap(_.astIn) + + def reachingDefIn: Iterator[nodes.TemplateDom] = traversal.flatMap(_.reachingDefIn) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/FieldIdentifier.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/FieldIdentifier.scala new file mode 100644 index 000000000..d0d9f5a72 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/FieldIdentifier.scala @@ -0,0 +1,709 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForFieldIdentifier(val node: nodes.FieldIdentifier) extends AnyVal { + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = cdgIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = cdgOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = dominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = dominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = postDominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = postDominateOut.collectAll[nodes.Block] + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: nodes.Call = { + try { argumentIn.collectAll[nodes.Call].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label ARGUMENT to an adjacent CALL is mandatory, but not defined for this FIELD_IDENTIFIER node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: nodes.Call = { + try { astIn.collectAll[nodes.Call].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent CALL is mandatory, but not defined for this FIELD_IDENTIFIER node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = cdgIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = cdgOut.collectAll[nodes.Call] + + /** Traverse to CALL via CFG OUT edge. + */ + def _callViaCfgOut: nodes.Call = { + try { cfgOut.collectAll[nodes.Call].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "OUT edge with label CFG to an adjacent CALL is mandatory, but not defined for this FIELD_IDENTIFIER node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = dominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = dominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = postDominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = postDominateOut.collectAll[nodes.Call] + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = cfgOut.collectAll[nodes.CfgNode] + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = cdgIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = cdgOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = dominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = dominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + postDominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + postDominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = cdgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = cdgOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = dominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = dominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + postDominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + postDominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = cdgIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = cdgOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = dominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = dominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = postDominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = postDominateOut.collectAll[nodes.Identifier] + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = cdgIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = cdgOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = dominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = dominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = postDominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = postDominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = cdgIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = cdgOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = dominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = dominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = postDominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = postDominateOut.collectAll[nodes.Literal] + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = containsIn.collectAll[nodes.Method] + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = dominateIn.collectAll[nodes.Method] + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = postDominateOut.collectAll[nodes.Method] + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = cdgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = cdgOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = dominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = dominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = postDominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = postDominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = cdgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = dominateOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = postDominateIn.collectAll[nodes.MethodReturn] + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = cdgOut.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = dominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = dominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = postDominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = postDominateOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = cdgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = cdgOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = dominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = dominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = postDominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = postDominateOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = cdgIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = cdgOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = dominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = dominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = postDominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = postDominateOut.collectAll[nodes.Unknown] + + def argumentIn: Iterator[nodes.Call] = node._argumentIn.cast[nodes.Call] + + def astIn: Iterator[nodes.Expression] = node._astIn.cast[nodes.Expression] + + def cdgIn: Iterator[nodes.CfgNode] = node._cdgIn.cast[nodes.CfgNode] + + def cdgOut: Iterator[nodes.CfgNode] = node._cdgOut.cast[nodes.CfgNode] + + def cfgOut: Iterator[nodes.AstNode] = node._cfgOut.cast[nodes.AstNode] + + def containsIn: Iterator[nodes.Method] = node._containsIn.cast[nodes.Method] + + def dominateIn: Iterator[nodes.CfgNode] = node._dominateIn.cast[nodes.CfgNode] + + def dominateOut: Iterator[nodes.CfgNode] = node._dominateOut.cast[nodes.CfgNode] + + def postDominateIn: Iterator[nodes.CfgNode] = node._postDominateIn.cast[nodes.CfgNode] + + def postDominateOut: Iterator[nodes.CfgNode] = node._postDominateOut.cast[nodes.CfgNode] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForFieldIdentifierTraversal(val traversal: Iterator[nodes.FieldIdentifier]) extends AnyVal { + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgIn) + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgOut) + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateIn) + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateOut) + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateIn) + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateOut) + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = traversal.map(_._callViaArgumentIn) + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = traversal.map(_._callViaAstIn) + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgIn) + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgOut) + + /** Traverse to CALL via CFG OUT edge. + */ + def _callViaCfgOut: Iterator[nodes.Call] = traversal.map(_._callViaCfgOut) + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateIn) + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateOut) + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateIn) + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateOut) + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_._cfgNodeViaCfgOut) + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgIn) + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgOut) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateOut) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateIn) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateOut) + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgIn) + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgOut) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateOut) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateIn) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgIn) + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgOut) + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateIn) + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateOut) + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateIn) + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateOut) + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgIn) + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgOut) + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateIn) + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateOut) + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateIn) + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateOut) + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgIn) + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgOut) + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateIn) + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateOut) + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateIn) + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateOut) + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsIn) + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaDominateIn) + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaPostDominateOut) + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgIn) + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgOut) + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateIn) + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateOut) + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateIn) + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateOut) + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCdgOut) + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaDominateOut) + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaPostDominateIn) + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaCdgOut) + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateIn) + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateOut) + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateIn) + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgIn) + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgOut) + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateIn) + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateOut) + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateIn) + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateOut) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgIn) + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgOut) + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateIn) + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateOut) + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateIn) + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateOut) + + def argumentIn: Iterator[nodes.Call] = traversal.flatMap(_.argumentIn) + + def astIn: Iterator[nodes.Expression] = traversal.flatMap(_.astIn) + + def cdgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgIn) + + def cdgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgOut) + + def cfgOut: Iterator[nodes.AstNode] = traversal.flatMap(_.cfgOut) + + def containsIn: Iterator[nodes.Method] = traversal.flatMap(_.containsIn) + + def dominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateIn) + + def dominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateOut) + + def postDominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateIn) + + def postDominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateOut) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/File.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/File.scala new file mode 100644 index 000000000..4c00c2fa8 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/File.scala @@ -0,0 +1,147 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForFile(val node: nodes.File) extends AnyVal { + + /** Traverse to COMMENT via AST OUT edge. + */ + @deprecated("please use comment instead") + def _commentViaAstOut: Iterator[nodes.Comment] = comment + + /** Traverse to COMMENT via AST OUT edge. + */ + def comment: Iterator[nodes.Comment] = astOut.collectAll[nodes.Comment] + + /** Traverse to IMPORT via AST OUT edge. + */ + def _importViaAstOut: Iterator[nodes.Import] = astOut.collectAll[nodes.Import] + + /** Traverse to METHOD via CONTAINS OUT edge. + */ + def _methodViaContainsOut: Iterator[nodes.Method] = containsOut.collectAll[nodes.Method] + + /** Traverse to METHOD via SOURCE_FILE IN edge. + */ + @deprecated("please use method instead") + def _methodViaSourceFileIn: Iterator[nodes.Method] = method + + /** Traverse to METHOD via SOURCE_FILE IN edge. + */ + def method: Iterator[nodes.Method] = sourceFileIn.collectAll[nodes.Method] + + /** Traverse to NAMESPACE_BLOCK via AST OUT edge. + */ + def _namespaceBlockViaAstOut: Iterator[nodes.NamespaceBlock] = astOut.collectAll[nodes.NamespaceBlock] + + /** Traverse to NAMESPACE_BLOCK via SOURCE_FILE IN edge. + */ + @deprecated("please use namespaceBlock instead") + def _namespaceBlockViaSourceFileIn: Iterator[nodes.NamespaceBlock] = namespaceBlock + + /** Traverse to NAMESPACE_BLOCK via SOURCE_FILE IN edge. + */ + def namespaceBlock: Iterator[nodes.NamespaceBlock] = sourceFileIn.collectAll[nodes.NamespaceBlock] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TEMPLATE_DOM via CONTAINS OUT edge. + */ + def _templateDomViaContainsOut: Iterator[nodes.TemplateDom] = containsOut.collectAll[nodes.TemplateDom] + + /** Traverse to TYPE_DECL via CONTAINS OUT edge. + */ + def _typeDeclViaContainsOut: Iterator[nodes.TypeDecl] = containsOut.collectAll[nodes.TypeDecl] + + /** Traverse to TYPE_DECL via SOURCE_FILE IN edge. + */ + @deprecated("please use typeDecl instead") + def _typeDeclViaSourceFileIn: Iterator[nodes.TypeDecl] = typeDecl + + /** Traverse to TYPE_DECL via SOURCE_FILE IN edge. + */ + def typeDecl: Iterator[nodes.TypeDecl] = sourceFileIn.collectAll[nodes.TypeDecl] + + def astOut: Iterator[nodes.AstNode] = node._astOut.cast[nodes.AstNode] + + def containsOut: Iterator[nodes.AstNode] = node._containsOut.cast[nodes.AstNode] + + def sourceFileIn: Iterator[nodes.AstNode] = node._sourceFileIn.cast[nodes.AstNode] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForFileTraversal(val traversal: Iterator[nodes.File]) extends AnyVal { + + /** Traverse to COMMENT via AST OUT edge. + */ + def comment: Iterator[nodes.Comment] = traversal.flatMap(_.comment) + + /** Traverse to COMMENT via AST OUT edge. + */ + @deprecated("please use comment instead") + def _commentViaAstOut: Iterator[nodes.Comment] = traversal.flatMap(_._commentViaAstOut) + + /** Traverse to IMPORT via AST OUT edge. + */ + def _importViaAstOut: Iterator[nodes.Import] = traversal.flatMap(_._importViaAstOut) + + /** Traverse to METHOD via CONTAINS OUT edge. + */ + def _methodViaContainsOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsOut) + + /** Traverse to METHOD via SOURCE_FILE IN edge. + */ + def method: Iterator[nodes.Method] = traversal.flatMap(_.method) + + /** Traverse to METHOD via SOURCE_FILE IN edge. + */ + @deprecated("please use method instead") + def _methodViaSourceFileIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaSourceFileIn) + + /** Traverse to NAMESPACE_BLOCK via AST OUT edge. + */ + def _namespaceBlockViaAstOut: Iterator[nodes.NamespaceBlock] = traversal.flatMap(_._namespaceBlockViaAstOut) + + /** Traverse to NAMESPACE_BLOCK via SOURCE_FILE IN edge. + */ + def namespaceBlock: Iterator[nodes.NamespaceBlock] = traversal.flatMap(_.namespaceBlock) + + /** Traverse to NAMESPACE_BLOCK via SOURCE_FILE IN edge. + */ + @deprecated("please use namespaceBlock instead") + def _namespaceBlockViaSourceFileIn: Iterator[nodes.NamespaceBlock] = + traversal.flatMap(_._namespaceBlockViaSourceFileIn) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TEMPLATE_DOM via CONTAINS OUT edge. + */ + def _templateDomViaContainsOut: Iterator[nodes.TemplateDom] = traversal.flatMap(_._templateDomViaContainsOut) + + /** Traverse to TYPE_DECL via CONTAINS OUT edge. + */ + def _typeDeclViaContainsOut: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaContainsOut) + + /** Traverse to TYPE_DECL via SOURCE_FILE IN edge. + */ + def typeDecl: Iterator[nodes.TypeDecl] = traversal.flatMap(_.typeDecl) + + /** Traverse to TYPE_DECL via SOURCE_FILE IN edge. + */ + @deprecated("please use typeDecl instead") + def _typeDeclViaSourceFileIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaSourceFileIn) + + def astOut: Iterator[nodes.AstNode] = traversal.flatMap(_.astOut) + + def containsOut: Iterator[nodes.AstNode] = traversal.flatMap(_.containsOut) + + def sourceFileIn: Iterator[nodes.AstNode] = traversal.flatMap(_.sourceFileIn) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Identifier.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Identifier.scala new file mode 100644 index 000000000..28eb57c60 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Identifier.scala @@ -0,0 +1,944 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForIdentifier(val node: nodes.Identifier) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = astOut.collectAll[nodes.Annotation] + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = astIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = cdgIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = cdgOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = dominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = dominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = postDominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = postDominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = reachingDefIn.collectAll[nodes.Block] + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Option[nodes.Call] = argumentIn.collectAll[nodes.Call].nextOption() + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = astIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = cdgIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = cdgOut.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = dominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = dominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = postDominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = postDominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = reachingDefIn.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = reachingDefOut.collectAll[nodes.Call] + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Option[nodes.Call] = receiverIn.collectAll[nodes.Call].nextOption() + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = cfgOut.collectAll[nodes.CfgNode] + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Option[nodes.ControlStructure] = astIn.collectAll[nodes.ControlStructure].nextOption() + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = cdgIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = cdgOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = conditionIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = dominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = dominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + postDominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + postDominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + reachingDefIn.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = cdgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = cdgOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = dominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = dominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + postDominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + postDominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = cdgIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = cdgOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = dominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = dominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = postDominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = postDominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = reachingDefIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = reachingDefOut.collectAll[nodes.Identifier] + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = cdgIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = cdgOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = dominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = dominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = postDominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = postDominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = cdgIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = cdgOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = dominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = dominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = postDominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = postDominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = reachingDefIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = reachingDefOut.collectAll[nodes.Literal] + + /** Traverse to LOCAL via REF OUT edge. + */ + def _localViaRefOut: Option[nodes.Local] = refOut.collectAll[nodes.Local].nextOption() + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = containsIn.collectAll[nodes.Method] + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = dominateIn.collectAll[nodes.Method] + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = postDominateOut.collectAll[nodes.Method] + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = reachingDefIn.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + reachingDefIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_PARAMETER_IN via REF OUT edge. + */ + def _methodParameterInViaRefOut: Option[nodes.MethodParameterIn] = + refOut.collectAll[nodes.MethodParameterIn].nextOption() + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. + */ + def _methodParameterOutViaReachingDefIn: Iterator[nodes.MethodParameterOut] = + reachingDefIn.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + reachingDefOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = cdgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = cdgOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = dominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = dominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = postDominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = postDominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = reachingDefIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = reachingDefOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = cdgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = dominateOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = postDominateIn.collectAll[nodes.MethodReturn] + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Option[nodes.Return] = argumentIn.collectAll[nodes.Return].nextOption() + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = astIn.collectAll[nodes.Return] + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = cdgOut.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = dominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = dominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = postDominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = postDominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF IN edge. + */ + def _returnViaReachingDefIn: Iterator[nodes.Return] = reachingDefIn.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = reachingDefOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = cdgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = cdgOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = dominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = dominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = postDominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = postDominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = reachingDefIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = reachingDefOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = cdgIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = cdgOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = dominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = dominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = postDominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = postDominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = reachingDefIn.collectAll[nodes.Unknown] + + def argumentIn: Iterator[nodes.Expression] = node._argumentIn.cast[nodes.Expression] + + def astIn: Iterator[nodes.Expression] = node._astIn.cast[nodes.Expression] + + def astOut: Iterator[nodes.Annotation] = node._astOut.cast[nodes.Annotation] + + def cdgIn: Iterator[nodes.CfgNode] = node._cdgIn.cast[nodes.CfgNode] + + def cdgOut: Iterator[nodes.CfgNode] = node._cdgOut.cast[nodes.CfgNode] + + def cfgOut: Iterator[nodes.CfgNode] = node._cfgOut.cast[nodes.CfgNode] + + def conditionIn: Iterator[nodes.ControlStructure] = node._conditionIn.cast[nodes.ControlStructure] + + def containsIn: Iterator[nodes.Method] = node._containsIn.cast[nodes.Method] + + def dominateIn: Iterator[nodes.CfgNode] = node._dominateIn.cast[nodes.CfgNode] + + def dominateOut: Iterator[nodes.CfgNode] = node._dominateOut.cast[nodes.CfgNode] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def postDominateIn: Iterator[nodes.CfgNode] = node._postDominateIn.cast[nodes.CfgNode] + + def postDominateOut: Iterator[nodes.CfgNode] = node._postDominateOut.cast[nodes.CfgNode] + + def reachingDefIn: Iterator[nodes.CfgNode] = node._reachingDefIn.cast[nodes.CfgNode] + + def reachingDefOut: Iterator[nodes.CfgNode] = node._reachingDefOut.cast[nodes.CfgNode] + + def receiverIn: Iterator[nodes.Call] = node._receiverIn.cast[nodes.Call] + + def refOut: Iterator[nodes.AstNode] = node._refOut.cast[nodes.AstNode] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForIdentifierTraversal(val traversal: Iterator[nodes.Identifier]) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = traversal.flatMap(_._annotationViaAstOut) + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstIn) + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgIn) + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgOut) + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateIn) + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateOut) + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateIn) + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateOut) + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaReachingDefIn) + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaArgumentIn) + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstIn) + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgIn) + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgOut) + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateIn) + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateOut) + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateIn) + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateOut) + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefIn) + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefOut) + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReceiverIn) + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_._cfgNodeViaCfgOut) + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstIn) + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgIn) + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgOut) + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaConditionIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateOut) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateIn) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateOut) + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaReachingDefIn) + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgIn) + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgOut) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateOut) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateIn) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgIn) + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgOut) + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateIn) + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateOut) + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateIn) + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefIn) + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefOut) + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgIn) + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgOut) + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateIn) + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateOut) + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateIn) + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateOut) + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgIn) + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgOut) + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateIn) + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateOut) + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateIn) + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateOut) + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefIn) + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefOut) + + /** Traverse to LOCAL via REF OUT edge. + */ + def _localViaRefOut: Iterator[nodes.Local] = traversal.flatMap(_._localViaRefOut) + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsIn) + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaDominateIn) + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaPostDominateOut) + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + traversal.flatMap(_._methodParameterInViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_IN via REF OUT edge. + */ + def _methodParameterInViaRefOut: Iterator[nodes.MethodParameterIn] = traversal.flatMap(_._methodParameterInViaRefOut) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. + */ + def _methodParameterOutViaReachingDefIn: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefOut) + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgIn) + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgOut) + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateIn) + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateOut) + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateIn) + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateOut) + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefIn) + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefOut) + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCdgOut) + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaDominateOut) + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaPostDominateIn) + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaArgumentIn) + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstIn) + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaCdgOut) + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateIn) + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateOut) + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateIn) + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateOut) + + /** Traverse to RETURN via REACHING_DEF IN edge. + */ + def _returnViaReachingDefIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefIn) + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgIn) + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgOut) + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateIn) + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateOut) + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateIn) + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateOut) + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefIn) + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefOut) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgIn) + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgOut) + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateIn) + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateOut) + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateIn) + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateOut) + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaReachingDefIn) + + def argumentIn: Iterator[nodes.Expression] = traversal.flatMap(_.argumentIn) + + def astIn: Iterator[nodes.Expression] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.Annotation] = traversal.flatMap(_.astOut) + + def cdgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgIn) + + def cdgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgOut) + + def cfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cfgOut) + + def conditionIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_.conditionIn) + + def containsIn: Iterator[nodes.Method] = traversal.flatMap(_.containsIn) + + def dominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateIn) + + def dominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateOut) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def postDominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateIn) + + def postDominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateOut) + + def reachingDefIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefIn) + + def reachingDefOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefOut) + + def receiverIn: Iterator[nodes.Call] = traversal.flatMap(_.receiverIn) + + def refOut: Iterator[nodes.AstNode] = traversal.flatMap(_.refOut) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Import.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Import.scala new file mode 100644 index 000000000..2fa843e59 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Import.scala @@ -0,0 +1,74 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForImport(val node: nodes.Import) extends AnyVal { + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = astIn.collectAll[nodes.Block] + + /** Traverse to CALL via IS_CALL_FOR_IMPORT IN edge. + */ + def _callViaIsCallForImportIn: Iterator[nodes.Call] = isCallForImportIn.collectAll[nodes.Call] + + /** Traverse to DEPENDENCY via IMPORTS OUT edge. + */ + def _dependencyViaImportsOut: Iterator[nodes.Dependency] = importsOut.collectAll[nodes.Dependency] + + /** Traverse to FILE via AST IN edge. + */ + def _fileViaAstIn: Iterator[nodes.File] = astIn.collectAll[nodes.File] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE_DECL via AST IN edge. + */ + def _typeDeclViaAstIn: Iterator[nodes.TypeDecl] = astIn.collectAll[nodes.TypeDecl] + + def astIn: Iterator[nodes.AstNode] = node._astIn.cast[nodes.AstNode] + + def importsOut: Iterator[nodes.Dependency] = node._importsOut.cast[nodes.Dependency] + + def isCallForImportIn: Iterator[nodes.Call] = node._isCallForImportIn.cast[nodes.Call] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForImportTraversal(val traversal: Iterator[nodes.Import]) extends AnyVal { + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstIn) + + /** Traverse to CALL via IS_CALL_FOR_IMPORT IN edge. + */ + def _callViaIsCallForImportIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaIsCallForImportIn) + + /** Traverse to DEPENDENCY via IMPORTS OUT edge. + */ + def _dependencyViaImportsOut: Iterator[nodes.Dependency] = traversal.flatMap(_._dependencyViaImportsOut) + + /** Traverse to FILE via AST IN edge. + */ + def _fileViaAstIn: Iterator[nodes.File] = traversal.flatMap(_._fileViaAstIn) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE_DECL via AST IN edge. + */ + def _typeDeclViaAstIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaAstIn) + + def astIn: Iterator[nodes.AstNode] = traversal.flatMap(_.astIn) + + def importsOut: Iterator[nodes.Dependency] = traversal.flatMap(_.importsOut) + + def isCallForImportIn: Iterator[nodes.Call] = traversal.flatMap(_.isCallForImportIn) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/JumpLabel.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/JumpLabel.scala new file mode 100644 index 000000000..25388291e --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/JumpLabel.scala @@ -0,0 +1,22 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForJumpLabel(val node: nodes.JumpLabel) extends AnyVal { + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = astIn.collectAll[nodes.ControlStructure] + + def astIn: Iterator[nodes.ControlStructure] = node._astIn.cast[nodes.ControlStructure] +} + +final class AccessNeighborsForJumpLabelTraversal(val traversal: Iterator[nodes.JumpLabel]) extends AnyVal { + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstIn) + + def astIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_.astIn) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/JumpTarget.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/JumpTarget.scala new file mode 100644 index 000000000..17de4e978 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/JumpTarget.scala @@ -0,0 +1,687 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForJumpTarget(val node: nodes.JumpTarget) extends AnyVal { + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = astIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = cdgIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = cdgOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = dominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = dominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = postDominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = postDominateOut.collectAll[nodes.Block] + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = argumentIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = cdgIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = cdgOut.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = dominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = dominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = postDominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = postDominateOut.collectAll[nodes.Call] + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = cfgOut.collectAll[nodes.CfgNode] + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = astIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = cdgIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = cdgOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = conditionIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = dominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = dominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + postDominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + postDominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = cdgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = cdgOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = dominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = dominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + postDominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + postDominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = cdgIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = cdgOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = dominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = dominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = postDominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = postDominateOut.collectAll[nodes.Identifier] + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = cdgIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = cdgOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = dominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = dominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = postDominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = postDominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = cdgIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = cdgOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = dominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = dominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = postDominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = postDominateOut.collectAll[nodes.Literal] + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = containsIn.collectAll[nodes.Method] + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = cdgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = cdgOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = dominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = dominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = postDominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = postDominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = cdgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = postDominateIn.collectAll[nodes.MethodReturn] + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = argumentIn.collectAll[nodes.Return] + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = astIn.collectAll[nodes.Return] + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = cdgOut.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = dominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = dominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = postDominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = postDominateOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = cdgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = cdgOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = dominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = dominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = postDominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = postDominateOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = cdgIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = cdgOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = dominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = dominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = postDominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = postDominateOut.collectAll[nodes.Unknown] + + def argumentIn: Iterator[nodes.Expression] = node._argumentIn.cast[nodes.Expression] + + def astIn: Iterator[nodes.Expression] = node._astIn.cast[nodes.Expression] + + def cdgIn: Iterator[nodes.CfgNode] = node._cdgIn.cast[nodes.CfgNode] + + def cdgOut: Iterator[nodes.CfgNode] = node._cdgOut.cast[nodes.CfgNode] + + def cfgOut: Iterator[nodes.CfgNode] = node._cfgOut.cast[nodes.CfgNode] + + def conditionIn: Iterator[nodes.ControlStructure] = node._conditionIn.cast[nodes.ControlStructure] + + def containsIn: Iterator[nodes.Method] = node._containsIn.cast[nodes.Method] + + def dominateIn: Iterator[nodes.CfgNode] = node._dominateIn.cast[nodes.CfgNode] + + def dominateOut: Iterator[nodes.CfgNode] = node._dominateOut.cast[nodes.CfgNode] + + def postDominateIn: Iterator[nodes.CfgNode] = node._postDominateIn.cast[nodes.CfgNode] + + def postDominateOut: Iterator[nodes.CfgNode] = node._postDominateOut.cast[nodes.CfgNode] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForJumpTargetTraversal(val traversal: Iterator[nodes.JumpTarget]) extends AnyVal { + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstIn) + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgIn) + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgOut) + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateIn) + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateOut) + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateIn) + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateOut) + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaArgumentIn) + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgIn) + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgOut) + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateIn) + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateOut) + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateIn) + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateOut) + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_._cfgNodeViaCfgOut) + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstIn) + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgIn) + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgOut) + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaConditionIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateOut) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateIn) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateOut) + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgIn) + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgOut) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateOut) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateIn) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgIn) + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgOut) + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateIn) + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateOut) + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateIn) + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateOut) + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgIn) + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgOut) + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateIn) + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateOut) + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateIn) + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateOut) + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgIn) + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgOut) + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateIn) + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateOut) + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateIn) + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateOut) + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsIn) + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgIn) + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgOut) + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateIn) + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateOut) + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateIn) + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateOut) + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCdgOut) + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaPostDominateIn) + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaArgumentIn) + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstIn) + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaCdgOut) + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateIn) + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateOut) + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateIn) + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgIn) + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgOut) + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateIn) + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateOut) + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateIn) + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateOut) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgIn) + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgOut) + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateIn) + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateOut) + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateIn) + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateOut) + + def argumentIn: Iterator[nodes.Expression] = traversal.flatMap(_.argumentIn) + + def astIn: Iterator[nodes.Expression] = traversal.flatMap(_.astIn) + + def cdgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgIn) + + def cdgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgOut) + + def cfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cfgOut) + + def conditionIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_.conditionIn) + + def containsIn: Iterator[nodes.Method] = traversal.flatMap(_.containsIn) + + def dominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateIn) + + def dominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateOut) + + def postDominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateIn) + + def postDominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateOut) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Literal.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Literal.scala new file mode 100644 index 000000000..32946b36a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Literal.scala @@ -0,0 +1,932 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForLiteral(val node: nodes.Literal) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = astOut.collectAll[nodes.Annotation] + + /** Traverse to ARRAY_INITIALIZER via AST IN edge. + */ + def _arrayInitializerViaAstIn: Iterator[nodes.ArrayInitializer] = astIn.collectAll[nodes.ArrayInitializer] + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = astIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = cdgIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = cdgOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = dominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = dominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = postDominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = postDominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = reachingDefIn.collectAll[nodes.Block] + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Option[nodes.Call] = argumentIn.collectAll[nodes.Call].nextOption() + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = astIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = cdgIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = cdgOut.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = dominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = dominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = postDominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = postDominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = reachingDefIn.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = reachingDefOut.collectAll[nodes.Call] + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Option[nodes.Call] = receiverIn.collectAll[nodes.Call].nextOption() + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = cfgOut.collectAll[nodes.CfgNode] + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: nodes.ControlStructure = { + try { astIn.collectAll[nodes.ControlStructure].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent CONTROL_STRUCTURE is mandatory, but not defined for this LITERAL node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = cdgIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = cdgOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = conditionIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = dominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = dominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + postDominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + postDominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + reachingDefIn.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = cdgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = cdgOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = dominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = dominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + postDominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + postDominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = cdgIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = cdgOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = dominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = dominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = postDominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = postDominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = reachingDefIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = reachingDefOut.collectAll[nodes.Identifier] + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = cdgIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = cdgOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = dominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = dominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = postDominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = postDominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = cdgIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = cdgOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = dominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = dominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = postDominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = postDominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = reachingDefIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = reachingDefOut.collectAll[nodes.Literal] + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = containsIn.collectAll[nodes.Method] + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = dominateIn.collectAll[nodes.Method] + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = postDominateOut.collectAll[nodes.Method] + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = reachingDefIn.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + reachingDefIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. + */ + def _methodParameterOutViaReachingDefIn: Iterator[nodes.MethodParameterOut] = + reachingDefIn.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + reachingDefOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = cdgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = cdgOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = dominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = dominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = postDominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = postDominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = reachingDefIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = reachingDefOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = cdgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = dominateOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = postDominateIn.collectAll[nodes.MethodReturn] + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Option[nodes.Return] = argumentIn.collectAll[nodes.Return].nextOption() + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = astIn.collectAll[nodes.Return] + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = cdgOut.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = dominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = dominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = postDominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = postDominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = reachingDefOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = cdgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = cdgOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = dominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = dominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = postDominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = postDominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = reachingDefIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = reachingDefOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = cdgIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = cdgOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = dominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = dominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = postDominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = postDominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = reachingDefIn.collectAll[nodes.Unknown] + + def argumentIn: Iterator[nodes.Expression] = node._argumentIn.cast[nodes.Expression] + + def astIn: Iterator[nodes.Expression] = node._astIn.cast[nodes.Expression] + + def astOut: Iterator[nodes.Annotation] = node._astOut.cast[nodes.Annotation] + + def cdgIn: Iterator[nodes.CfgNode] = node._cdgIn.cast[nodes.CfgNode] + + def cdgOut: Iterator[nodes.CfgNode] = node._cdgOut.cast[nodes.CfgNode] + + def cfgOut: Iterator[nodes.CfgNode] = node._cfgOut.cast[nodes.CfgNode] + + def conditionIn: Iterator[nodes.ControlStructure] = node._conditionIn.cast[nodes.ControlStructure] + + def containsIn: Iterator[nodes.Method] = node._containsIn.cast[nodes.Method] + + def dominateIn: Iterator[nodes.CfgNode] = node._dominateIn.cast[nodes.CfgNode] + + def dominateOut: Iterator[nodes.CfgNode] = node._dominateOut.cast[nodes.CfgNode] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def postDominateIn: Iterator[nodes.CfgNode] = node._postDominateIn.cast[nodes.CfgNode] + + def postDominateOut: Iterator[nodes.CfgNode] = node._postDominateOut.cast[nodes.CfgNode] + + def reachingDefIn: Iterator[nodes.CfgNode] = node._reachingDefIn.cast[nodes.CfgNode] + + def reachingDefOut: Iterator[nodes.CfgNode] = node._reachingDefOut.cast[nodes.CfgNode] + + def receiverIn: Iterator[nodes.Call] = node._receiverIn.cast[nodes.Call] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForLiteralTraversal(val traversal: Iterator[nodes.Literal]) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = traversal.flatMap(_._annotationViaAstOut) + + /** Traverse to ARRAY_INITIALIZER via AST IN edge. + */ + def _arrayInitializerViaAstIn: Iterator[nodes.ArrayInitializer] = traversal.flatMap(_._arrayInitializerViaAstIn) + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstIn) + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgIn) + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgOut) + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateIn) + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateOut) + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateIn) + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateOut) + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaReachingDefIn) + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaArgumentIn) + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstIn) + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgIn) + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgOut) + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateIn) + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateOut) + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateIn) + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateOut) + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefIn) + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefOut) + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReceiverIn) + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_._cfgNodeViaCfgOut) + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.map(_._controlStructureViaAstIn) + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgIn) + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgOut) + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaConditionIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateOut) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateIn) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateOut) + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaReachingDefIn) + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgIn) + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgOut) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateOut) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateIn) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgIn) + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgOut) + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateIn) + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateOut) + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateIn) + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefIn) + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefOut) + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgIn) + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgOut) + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateIn) + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateOut) + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateIn) + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateOut) + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgIn) + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgOut) + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateIn) + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateOut) + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateIn) + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateOut) + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefIn) + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefOut) + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsIn) + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaDominateIn) + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaPostDominateOut) + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + traversal.flatMap(_._methodParameterInViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. + */ + def _methodParameterOutViaReachingDefIn: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefOut) + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgIn) + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgOut) + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateIn) + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateOut) + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateIn) + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateOut) + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefIn) + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefOut) + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCdgOut) + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaDominateOut) + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaPostDominateIn) + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaArgumentIn) + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstIn) + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaCdgOut) + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateIn) + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateOut) + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateIn) + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateOut) + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgIn) + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgOut) + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateIn) + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateOut) + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateIn) + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateOut) + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefIn) + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefOut) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgIn) + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgOut) + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateIn) + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateOut) + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateIn) + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateOut) + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaReachingDefIn) + + def argumentIn: Iterator[nodes.Expression] = traversal.flatMap(_.argumentIn) + + def astIn: Iterator[nodes.Expression] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.Annotation] = traversal.flatMap(_.astOut) + + def cdgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgIn) + + def cdgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgOut) + + def cfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cfgOut) + + def conditionIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_.conditionIn) + + def containsIn: Iterator[nodes.Method] = traversal.flatMap(_.containsIn) + + def dominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateIn) + + def dominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateOut) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def postDominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateIn) + + def postDominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateOut) + + def reachingDefIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefIn) + + def reachingDefOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefOut) + + def receiverIn: Iterator[nodes.Call] = traversal.flatMap(_.receiverIn) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Local.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Local.scala new file mode 100644 index 000000000..da65efda9 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Local.scala @@ -0,0 +1,125 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForLocal(val node: nodes.Local) extends AnyVal { + + /** Traverse to CLOSURE_BINDING via CAPTURED_BY OUT edge. + */ + def _closureBindingViaCapturedByOut: Iterator[nodes.ClosureBinding] = capturedByOut.collectAll[nodes.ClosureBinding] + + /** Traverse to CLOSURE_BINDING via REF IN edge. + */ + def _closureBindingViaRefIn: Iterator[nodes.ClosureBinding] = refIn.collectAll[nodes.ClosureBinding] + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = astIn.collectAll[nodes.ControlStructure] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + /** Places (identifier) where this local is being referenced Traverse to IDENTIFIER via REF IN edge. + */ + @deprecated("please use referencingIdentifiers instead") + def _identifierViaRefIn: Iterator[nodes.Identifier] = referencingIdentifiers + + /** Places (identifier) where this local is being referenced Traverse to IDENTIFIER via REF IN edge. + */ + def referencingIdentifiers: Iterator[nodes.Identifier] = refIn.collectAll[nodes.Identifier] + + /** The block in which local is declared. Traverse to BLOCK via AST IN edge. + */ + @deprecated("please use definingBlock instead") + def _blockViaAstIn: Iterator[nodes.Block] = definingBlock + + /** The block in which local is declared. Traverse to BLOCK via AST IN edge. + */ + def definingBlock: Iterator[nodes.Block] = astIn.collectAll[nodes.Block] + + /** The type of the local. Traverse to TYPE via EVAL_TYPE OUT edge. + */ + @deprecated("please use typ instead") + def _typeViaEvalTypeOut: Iterator[nodes.Type] = typ + + /** The type of the local. Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def typ: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + def astIn: Iterator[nodes.Expression] = node._astIn.cast[nodes.Expression] + + def capturedByOut: Iterator[nodes.ClosureBinding] = node._capturedByOut.cast[nodes.ClosureBinding] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def refIn: Iterator[nodes.StoredNode] = node._refIn.cast[nodes.StoredNode] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForLocalTraversal(val traversal: Iterator[nodes.Local]) extends AnyVal { + + /** Traverse to CLOSURE_BINDING via CAPTURED_BY OUT edge. + */ + def _closureBindingViaCapturedByOut: Iterator[nodes.ClosureBinding] = + traversal.flatMap(_._closureBindingViaCapturedByOut) + + /** Traverse to CLOSURE_BINDING via REF IN edge. + */ + def _closureBindingViaRefIn: Iterator[nodes.ClosureBinding] = traversal.flatMap(_._closureBindingViaRefIn) + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstIn) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + /** Places (identifier) where this local is being referenced Traverse to IDENTIFIER via REF IN edge. + */ + def referencingIdentifiers: Iterator[nodes.Identifier] = traversal.flatMap(_.referencingIdentifiers) + + /** Places (identifier) where this local is being referenced Traverse to IDENTIFIER via REF IN edge. + */ + @deprecated("please use referencingIdentifiers instead") + def _identifierViaRefIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaRefIn) + + /** The block in which local is declared. Traverse to BLOCK via AST IN edge. + */ + def definingBlock: Iterator[nodes.Block] = traversal.flatMap(_.definingBlock) + + /** The block in which local is declared. Traverse to BLOCK via AST IN edge. + */ + @deprecated("please use definingBlock instead") + def _blockViaAstIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstIn) + + /** The type of the local. Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def typ: Iterator[nodes.Type] = traversal.flatMap(_.typ) + + /** The type of the local. Traverse to TYPE via EVAL_TYPE OUT edge. + */ + @deprecated("please use typ instead") + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + def astIn: Iterator[nodes.Expression] = traversal.flatMap(_.astIn) + + def capturedByOut: Iterator[nodes.ClosureBinding] = traversal.flatMap(_.capturedByOut) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def refIn: Iterator[nodes.StoredNode] = traversal.flatMap(_.refIn) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Member.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Member.scala new file mode 100644 index 000000000..d8a69ce2b --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Member.scala @@ -0,0 +1,115 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForMember(val node: nodes.Member) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = astOut.collectAll[nodes.Annotation] + + /** Traverse to CALL via REF IN edge. + */ + def _callViaRefIn: Iterator[nodes.Call] = refIn.collectAll[nodes.Call] + + /** Traverse to MODIFIER via AST OUT edge. + */ + def _modifierViaAstOut: Iterator[nodes.Modifier] = astOut.collectAll[nodes.Modifier] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + /** The type declaration this member is defined in Traverse to TYPE_DECL via AST IN edge. + */ + @deprecated("please use typeDecl instead") + def _typeDeclViaAstIn: nodes.TypeDecl = typeDecl + + /** The type declaration this member is defined in Traverse to TYPE_DECL via AST IN edge. + */ + def typeDecl: nodes.TypeDecl = { + try { astIn.collectAll[nodes.TypeDecl].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent TYPE_DECL is mandatory, but not defined for this MEMBER node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to member type Traverse to TYPE via EVAL_TYPE OUT edge. + */ + @deprecated("please use typ instead") + def _typeViaEvalTypeOut: Iterator[nodes.Type] = typ + + /** Traverse to member type Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def typ: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + def astIn: Iterator[nodes.AstNode] = node._astIn.cast[nodes.AstNode] + + def astOut: Iterator[nodes.AstNode] = node._astOut.cast[nodes.AstNode] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def refIn: Iterator[nodes.Call] = node._refIn.cast[nodes.Call] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForMemberTraversal(val traversal: Iterator[nodes.Member]) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = traversal.flatMap(_._annotationViaAstOut) + + /** Traverse to CALL via REF IN edge. + */ + def _callViaRefIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaRefIn) + + /** Traverse to MODIFIER via AST OUT edge. + */ + def _modifierViaAstOut: Iterator[nodes.Modifier] = traversal.flatMap(_._modifierViaAstOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + /** The type declaration this member is defined in Traverse to TYPE_DECL via AST IN edge. + */ + def typeDecl: Iterator[nodes.TypeDecl] = traversal.map(_.typeDecl) + + /** The type declaration this member is defined in Traverse to TYPE_DECL via AST IN edge. + */ + @deprecated("please use typeDecl instead") + def _typeDeclViaAstIn: Iterator[nodes.TypeDecl] = traversal.map(_._typeDeclViaAstIn) + + /** Traverse to member type Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def typ: Iterator[nodes.Type] = traversal.flatMap(_.typ) + + /** Traverse to member type Traverse to TYPE via EVAL_TYPE OUT edge. + */ + @deprecated("please use typ instead") + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + def astIn: Iterator[nodes.AstNode] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.AstNode] = traversal.flatMap(_.astOut) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def refIn: Iterator[nodes.Call] = traversal.flatMap(_.refIn) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Method.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Method.scala new file mode 100644 index 000000000..932490b5a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Method.scala @@ -0,0 +1,634 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForMethod(val node: nodes.Method) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = astOut.collectAll[nodes.Annotation] + + /** Traverse to BINDING via REF IN edge. + */ + def _bindingViaRefIn: Iterator[nodes.Binding] = refIn.collectAll[nodes.Binding] + + /** Traverse to BLOCK via CONTAINS OUT edge. + */ + def _blockViaContainsOut: Iterator[nodes.Block] = containsOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = dominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = postDominateIn.collectAll[nodes.Block] + + /** Traverse to CALL via CALL IN edge. + */ + def _callViaCallIn: Iterator[nodes.Call] = callIn.collectAll[nodes.Call] + + /** Traverse to CALL via CONTAINS OUT edge. + */ + def _callViaContainsOut: Iterator[nodes.Call] = containsOut.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = dominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = postDominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = reachingDefOut.collectAll[nodes.Call] + + /** Traverse to CONTROL_STRUCTURE via CONTAINS OUT edge. + */ + def _controlStructureViaContainsOut: Iterator[nodes.ControlStructure] = containsOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + postDominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via CONTAINS OUT edge. + */ + def _fieldIdentifierViaContainsOut: Iterator[nodes.FieldIdentifier] = containsOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = dominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + postDominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FILE via CONTAINS IN edge. + */ + def _fileViaContainsIn: Iterator[nodes.File] = containsIn.collectAll[nodes.File] + + /** Traverse to FILE via SOURCE_FILE OUT edge. + */ + def _fileViaSourceFileOut: Iterator[nodes.File] = sourceFileOut.collectAll[nodes.File] + + /** Traverse to IDENTIFIER via CONTAINS OUT edge. + */ + def _identifierViaContainsOut: Iterator[nodes.Identifier] = containsOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = dominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = postDominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = reachingDefOut.collectAll[nodes.Identifier] + + /** Traverse to JUMP_TARGET via CONTAINS OUT edge. + */ + def _jumpTargetViaContainsOut: Iterator[nodes.JumpTarget] = containsOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = dominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = postDominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = reachingDefOut.collectAll[nodes.Literal] + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: Option[nodes.Method] = astIn.collectAll[nodes.Method].nextOption() + + /** Traverse to METHOD via AST OUT edge. + */ + def _methodViaAstOut: Iterator[nodes.Method] = astOut.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF OUT edge. + */ + def _methodParameterInViaReachingDefOut: Iterator[nodes.MethodParameterIn] = + reachingDefOut.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_PARAMETER_OUT via AST OUT edge. + */ + def _methodParameterOutViaAstOut: Iterator[nodes.MethodParameterOut] = astOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + reachingDefOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via CONTAINS OUT edge. + */ + def _methodRefViaContainsOut: Iterator[nodes.MethodRef] = containsOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = dominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = postDominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = reachingDefOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REF IN edge. + */ + def _methodRefViaRefIn: Iterator[nodes.MethodRef] = refIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via CFG OUT edge. + */ + def _methodReturnViaCfgOut: Option[nodes.MethodReturn] = cfgOut.collectAll[nodes.MethodReturn].nextOption() + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = dominateOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = postDominateIn.collectAll[nodes.MethodReturn] + + /** Traverse to MODIFIER via AST OUT edge. + */ + def _modifierViaAstOut: Iterator[nodes.Modifier] = astOut.collectAll[nodes.Modifier] + + /** Traverse to NAMESPACE_BLOCK via AST IN edge. + */ + def _namespaceBlockViaAstIn: Option[nodes.NamespaceBlock] = astIn.collectAll[nodes.NamespaceBlock].nextOption() + + /** Traverse to RETURN via CONTAINS OUT edge. + */ + def _returnViaContainsOut: Iterator[nodes.Return] = containsOut.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = dominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = postDominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = reachingDefOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TEMPLATE_DOM via CONTAINS OUT edge. + */ + def _templateDomViaContainsOut: Iterator[nodes.TemplateDom] = containsOut.collectAll[nodes.TemplateDom] + + /** Traverse to TYPE_DECL via AST IN edge. + */ + def _typeDeclViaAstIn: Option[nodes.TypeDecl] = astIn.collectAll[nodes.TypeDecl].nextOption() + + /** Traverse to TYPE_DECL via AST OUT edge. + */ + def _typeDeclViaAstOut: Iterator[nodes.TypeDecl] = astOut.collectAll[nodes.TypeDecl] + + /** Traverse to TYPE_DECL via CONTAINS IN edge. + */ + def _typeDeclViaContainsIn: Iterator[nodes.TypeDecl] = containsIn.collectAll[nodes.TypeDecl] + + /** Traverse to TYPE_PARAMETER via AST OUT edge. + */ + def _typeParameterViaAstOut: Iterator[nodes.TypeParameter] = astOut.collectAll[nodes.TypeParameter] + + /** Traverse to TYPE_REF via CONTAINS OUT edge. + */ + def _typeRefViaContainsOut: Iterator[nodes.TypeRef] = containsOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = dominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = postDominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = reachingDefOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via CONTAINS OUT edge. + */ + def _unknownViaContainsOut: Iterator[nodes.Unknown] = containsOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = dominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = postDominateIn.collectAll[nodes.Unknown] + + /** First control flow graph node Traverse to CFG_NODE via CFG OUT edge. + */ + @deprecated("please use cfgFirst instead") + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = cfgFirst + + /** First control flow graph node Traverse to CFG_NODE via CFG OUT edge. + */ + def cfgFirst: Iterator[nodes.CfgNode] = cfgOut.collectAll[nodes.CfgNode] + + /** Formal return parameters Traverse to METHOD_RETURN via AST OUT edge. + */ + @deprecated("please use methodReturn instead") + def _methodReturnViaAstOut: nodes.MethodReturn = methodReturn + + /** Formal return parameters Traverse to METHOD_RETURN via AST OUT edge. + */ + def methodReturn: nodes.MethodReturn = { + try { astOut.collectAll[nodes.MethodReturn].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "OUT edge with label AST to an adjacent METHOD_RETURN is mandatory, but not defined for this METHOD node with seq=" + node.seq, + e + ) + } + } + + /** Literals used in the method Traverse to LITERAL via CONTAINS OUT edge. + */ + @deprecated("please use literal instead") + def _literalViaContainsOut: Iterator[nodes.Literal] = literal + + /** Literals used in the method Traverse to LITERAL via CONTAINS OUT edge. + */ + def literal: Iterator[nodes.Literal] = containsOut.collectAll[nodes.Literal] + + /** Parameters of the method Traverse to METHOD_PARAMETER_IN via AST OUT edge. + */ + @deprecated("please use parameter instead") + def _methodParameterInViaAstOut: Iterator[nodes.MethodParameterIn] = parameter + + /** Parameters of the method Traverse to METHOD_PARAMETER_IN via AST OUT edge. + */ + def parameter: Iterator[nodes.MethodParameterIn] = astOut.collectAll[nodes.MethodParameterIn] + + /** Root of the abstract syntax tree Traverse to BLOCK via AST OUT edge. + */ + @deprecated("please use block instead") + def _blockViaAstOut: nodes.Block = block + + /** Root of the abstract syntax tree Traverse to BLOCK via AST OUT edge. + */ + def block: nodes.Block = { + try { astOut.collectAll[nodes.Block].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "OUT edge with label AST to an adjacent BLOCK is mandatory, but not defined for this METHOD node with seq=" + node.seq, + e + ) + } + } + + def astIn: Iterator[nodes.AstNode] = node._astIn.cast[nodes.AstNode] + + def astOut: Iterator[nodes.AstNode] = node._astOut.cast[nodes.AstNode] + + def callIn: Iterator[nodes.Call] = node._callIn.cast[nodes.Call] + + def cfgOut: Iterator[nodes.AstNode] = node._cfgOut.cast[nodes.AstNode] + + def containsIn: Iterator[nodes.AstNode] = node._containsIn.cast[nodes.AstNode] + + def containsOut: Iterator[nodes.CfgNode] = node._containsOut.cast[nodes.CfgNode] + + def dominateOut: Iterator[nodes.CfgNode] = node._dominateOut.cast[nodes.CfgNode] + + def postDominateIn: Iterator[nodes.CfgNode] = node._postDominateIn.cast[nodes.CfgNode] + + def reachingDefOut: Iterator[nodes.CfgNode] = node._reachingDefOut.cast[nodes.CfgNode] + + def refIn: Iterator[nodes.StoredNode] = node._refIn.cast[nodes.StoredNode] + + def sourceFileOut: Iterator[nodes.File] = node._sourceFileOut.cast[nodes.File] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForMethodTraversal(val traversal: Iterator[nodes.Method]) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = traversal.flatMap(_._annotationViaAstOut) + + /** Traverse to BINDING via REF IN edge. + */ + def _bindingViaRefIn: Iterator[nodes.Binding] = traversal.flatMap(_._bindingViaRefIn) + + /** Traverse to BLOCK via CONTAINS OUT edge. + */ + def _blockViaContainsOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaContainsOut) + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateOut) + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateIn) + + /** Traverse to CALL via CALL IN edge. + */ + def _callViaCallIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCallIn) + + /** Traverse to CALL via CONTAINS OUT edge. + */ + def _callViaContainsOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaContainsOut) + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateOut) + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateIn) + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefOut) + + /** Traverse to CONTROL_STRUCTURE via CONTAINS OUT edge. + */ + def _controlStructureViaContainsOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaContainsOut) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateIn) + + /** Traverse to FIELD_IDENTIFIER via CONTAINS OUT edge. + */ + def _fieldIdentifierViaContainsOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaContainsOut) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateOut) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateIn) + + /** Traverse to FILE via CONTAINS IN edge. + */ + def _fileViaContainsIn: Iterator[nodes.File] = traversal.flatMap(_._fileViaContainsIn) + + /** Traverse to FILE via SOURCE_FILE OUT edge. + */ + def _fileViaSourceFileOut: Iterator[nodes.File] = traversal.flatMap(_._fileViaSourceFileOut) + + /** Traverse to IDENTIFIER via CONTAINS OUT edge. + */ + def _identifierViaContainsOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaContainsOut) + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateOut) + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateIn) + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefOut) + + /** Traverse to JUMP_TARGET via CONTAINS OUT edge. + */ + def _jumpTargetViaContainsOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaContainsOut) + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateOut) + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateIn) + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefOut) + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaAstIn) + + /** Traverse to METHOD via AST OUT edge. + */ + def _methodViaAstOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaAstOut) + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF OUT edge. + */ + def _methodParameterInViaReachingDefOut: Iterator[nodes.MethodParameterIn] = + traversal.flatMap(_._methodParameterInViaReachingDefOut) + + /** Traverse to METHOD_PARAMETER_OUT via AST OUT edge. + */ + def _methodParameterOutViaAstOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaAstOut) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefOut) + + /** Traverse to METHOD_REF via CONTAINS OUT edge. + */ + def _methodRefViaContainsOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaContainsOut) + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateOut) + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateIn) + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefOut) + + /** Traverse to METHOD_REF via REF IN edge. + */ + def _methodRefViaRefIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaRefIn) + + /** Traverse to METHOD_RETURN via CFG OUT edge. + */ + def _methodReturnViaCfgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCfgOut) + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaDominateOut) + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaPostDominateIn) + + /** Traverse to MODIFIER via AST OUT edge. + */ + def _modifierViaAstOut: Iterator[nodes.Modifier] = traversal.flatMap(_._modifierViaAstOut) + + /** Traverse to NAMESPACE_BLOCK via AST IN edge. + */ + def _namespaceBlockViaAstIn: Iterator[nodes.NamespaceBlock] = traversal.flatMap(_._namespaceBlockViaAstIn) + + /** Traverse to RETURN via CONTAINS OUT edge. + */ + def _returnViaContainsOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaContainsOut) + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateOut) + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateIn) + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TEMPLATE_DOM via CONTAINS OUT edge. + */ + def _templateDomViaContainsOut: Iterator[nodes.TemplateDom] = traversal.flatMap(_._templateDomViaContainsOut) + + /** Traverse to TYPE_DECL via AST IN edge. + */ + def _typeDeclViaAstIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaAstIn) + + /** Traverse to TYPE_DECL via AST OUT edge. + */ + def _typeDeclViaAstOut: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaAstOut) + + /** Traverse to TYPE_DECL via CONTAINS IN edge. + */ + def _typeDeclViaContainsIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaContainsIn) + + /** Traverse to TYPE_PARAMETER via AST OUT edge. + */ + def _typeParameterViaAstOut: Iterator[nodes.TypeParameter] = traversal.flatMap(_._typeParameterViaAstOut) + + /** Traverse to TYPE_REF via CONTAINS OUT edge. + */ + def _typeRefViaContainsOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaContainsOut) + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateOut) + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateIn) + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefOut) + + /** Traverse to UNKNOWN via CONTAINS OUT edge. + */ + def _unknownViaContainsOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaContainsOut) + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateOut) + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateIn) + + /** First control flow graph node Traverse to CFG_NODE via CFG OUT edge. + */ + def cfgFirst: Iterator[nodes.CfgNode] = traversal.flatMap(_.cfgFirst) + + /** First control flow graph node Traverse to CFG_NODE via CFG OUT edge. + */ + @deprecated("please use cfgFirst instead") + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_._cfgNodeViaCfgOut) + + /** Formal return parameters Traverse to METHOD_RETURN via AST OUT edge. + */ + def methodReturn: Iterator[nodes.MethodReturn] = traversal.map(_.methodReturn) + + /** Formal return parameters Traverse to METHOD_RETURN via AST OUT edge. + */ + @deprecated("please use methodReturn instead") + def _methodReturnViaAstOut: Iterator[nodes.MethodReturn] = traversal.map(_._methodReturnViaAstOut) + + /** Literals used in the method Traverse to LITERAL via CONTAINS OUT edge. + */ + def literal: Iterator[nodes.Literal] = traversal.flatMap(_.literal) + + /** Literals used in the method Traverse to LITERAL via CONTAINS OUT edge. + */ + @deprecated("please use literal instead") + def _literalViaContainsOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaContainsOut) + + /** Parameters of the method Traverse to METHOD_PARAMETER_IN via AST OUT edge. + */ + def parameter: Iterator[nodes.MethodParameterIn] = traversal.flatMap(_.parameter) + + /** Parameters of the method Traverse to METHOD_PARAMETER_IN via AST OUT edge. + */ + @deprecated("please use parameter instead") + def _methodParameterInViaAstOut: Iterator[nodes.MethodParameterIn] = traversal.flatMap(_._methodParameterInViaAstOut) + + /** Root of the abstract syntax tree Traverse to BLOCK via AST OUT edge. + */ + def block: Iterator[nodes.Block] = traversal.map(_.block) + + /** Root of the abstract syntax tree Traverse to BLOCK via AST OUT edge. + */ + @deprecated("please use block instead") + def _blockViaAstOut: Iterator[nodes.Block] = traversal.map(_._blockViaAstOut) + + def astIn: Iterator[nodes.AstNode] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.AstNode] = traversal.flatMap(_.astOut) + + def callIn: Iterator[nodes.Call] = traversal.flatMap(_.callIn) + + def cfgOut: Iterator[nodes.AstNode] = traversal.flatMap(_.cfgOut) + + def containsIn: Iterator[nodes.AstNode] = traversal.flatMap(_.containsIn) + + def containsOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.containsOut) + + def dominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateOut) + + def postDominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateIn) + + def reachingDefOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefOut) + + def refIn: Iterator[nodes.StoredNode] = traversal.flatMap(_.refIn) + + def sourceFileOut: Iterator[nodes.File] = traversal.flatMap(_.sourceFileOut) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodParameterIn.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodParameterIn.scala new file mode 100644 index 000000000..921e39a38 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodParameterIn.scala @@ -0,0 +1,245 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForMethodParameterIn(val node: nodes.MethodParameterIn) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = astOut.collectAll[nodes.Annotation] + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = reachingDefOut.collectAll[nodes.Call] + + /** Traverse to CLOSURE_BINDING via CAPTURED_BY OUT edge. + */ + def _closureBindingViaCapturedByOut: Iterator[nodes.ClosureBinding] = capturedByOut.collectAll[nodes.ClosureBinding] + + /** Traverse to CLOSURE_BINDING via REF IN edge. + */ + def _closureBindingViaRefIn: Iterator[nodes.ClosureBinding] = refIn.collectAll[nodes.ClosureBinding] + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = reachingDefOut.collectAll[nodes.Identifier] + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = reachingDefOut.collectAll[nodes.Literal] + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = reachingDefIn.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + reachingDefOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = reachingDefOut.collectAll[nodes.MethodRef] + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = reachingDefOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = reachingDefOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via AST OUT edge. + */ + def _unknownViaAstOut: Iterator[nodes.Unknown] = astOut.collectAll[nodes.Unknown] + + /** Places (identifier) where this parameter is being referenced Traverse to IDENTIFIER via REF IN edge. + */ + @deprecated("please use referencingIdentifiers instead") + def _identifierViaRefIn: Iterator[nodes.Identifier] = referencingIdentifiers + + /** Places (identifier) where this parameter is being referenced Traverse to IDENTIFIER via REF IN edge. + */ + def referencingIdentifiers: Iterator[nodes.Identifier] = refIn.collectAll[nodes.Identifier] + + /** Traverse to corresponding formal output parameter Traverse to METHOD_PARAMETER_OUT via PARAMETER_LINK OUT edge. + */ + @deprecated("please use asOutput instead") + def _methodParameterOutViaParameterLinkOut: Iterator[nodes.MethodParameterOut] = asOutput + + /** Traverse to corresponding formal output parameter Traverse to METHOD_PARAMETER_OUT via PARAMETER_LINK OUT edge. + */ + def asOutput: Iterator[nodes.MethodParameterOut] = parameterLinkOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to method associated with this formal parameter Traverse to METHOD via AST IN edge. + */ + @deprecated("please use method instead") + def _methodViaAstIn: nodes.Method = method + + /** Traverse to method associated with this formal parameter Traverse to METHOD via AST IN edge. + */ + def method: nodes.Method = { + try { astIn.collectAll[nodes.Method].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent METHOD is mandatory, but not defined for this METHOD_PARAMETER_IN node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to parameter type Traverse to TYPE via EVAL_TYPE OUT edge. + */ + @deprecated("please use typ instead") + def _typeViaEvalTypeOut: nodes.Type = typ + + /** Traverse to parameter type Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def typ: nodes.Type = { + try { evalTypeOut.collectAll[nodes.Type].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "OUT edge with label EVAL_TYPE to an adjacent TYPE is mandatory, but not defined for this METHOD_PARAMETER_IN node with seq=" + node.seq, + e + ) + } + } + + def astIn: Iterator[nodes.Method] = node._astIn.cast[nodes.Method] + + def astOut: Iterator[nodes.Expression] = node._astOut.cast[nodes.Expression] + + def capturedByOut: Iterator[nodes.ClosureBinding] = node._capturedByOut.cast[nodes.ClosureBinding] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def parameterLinkOut: Iterator[nodes.MethodParameterOut] = node._parameterLinkOut.cast[nodes.MethodParameterOut] + + def reachingDefIn: Iterator[nodes.Method] = node._reachingDefIn.cast[nodes.Method] + + def reachingDefOut: Iterator[nodes.CfgNode] = node._reachingDefOut.cast[nodes.CfgNode] + + def refIn: Iterator[nodes.StoredNode] = node._refIn.cast[nodes.StoredNode] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForMethodParameterInTraversal(val traversal: Iterator[nodes.MethodParameterIn]) + extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = traversal.flatMap(_._annotationViaAstOut) + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefOut) + + /** Traverse to CLOSURE_BINDING via CAPTURED_BY OUT edge. + */ + def _closureBindingViaCapturedByOut: Iterator[nodes.ClosureBinding] = + traversal.flatMap(_._closureBindingViaCapturedByOut) + + /** Traverse to CLOSURE_BINDING via REF IN edge. + */ + def _closureBindingViaRefIn: Iterator[nodes.ClosureBinding] = traversal.flatMap(_._closureBindingViaRefIn) + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefOut) + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefOut) + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefOut) + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefOut) + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefOut) + + /** Traverse to UNKNOWN via AST OUT edge. + */ + def _unknownViaAstOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstOut) + + /** Places (identifier) where this parameter is being referenced Traverse to IDENTIFIER via REF IN edge. + */ + def referencingIdentifiers: Iterator[nodes.Identifier] = traversal.flatMap(_.referencingIdentifiers) + + /** Places (identifier) where this parameter is being referenced Traverse to IDENTIFIER via REF IN edge. + */ + @deprecated("please use referencingIdentifiers instead") + def _identifierViaRefIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaRefIn) + + /** Traverse to corresponding formal output parameter Traverse to METHOD_PARAMETER_OUT via PARAMETER_LINK OUT edge. + */ + def asOutput: Iterator[nodes.MethodParameterOut] = traversal.flatMap(_.asOutput) + + /** Traverse to corresponding formal output parameter Traverse to METHOD_PARAMETER_OUT via PARAMETER_LINK OUT edge. + */ + @deprecated("please use asOutput instead") + def _methodParameterOutViaParameterLinkOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaParameterLinkOut) + + /** Traverse to method associated with this formal parameter Traverse to METHOD via AST IN edge. + */ + def method: Iterator[nodes.Method] = traversal.map(_.method) + + /** Traverse to method associated with this formal parameter Traverse to METHOD via AST IN edge. + */ + @deprecated("please use method instead") + def _methodViaAstIn: Iterator[nodes.Method] = traversal.map(_._methodViaAstIn) + + /** Traverse to parameter type Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def typ: Iterator[nodes.Type] = traversal.map(_.typ) + + /** Traverse to parameter type Traverse to TYPE via EVAL_TYPE OUT edge. + */ + @deprecated("please use typ instead") + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.map(_._typeViaEvalTypeOut) + + def astIn: Iterator[nodes.Method] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.Expression] = traversal.flatMap(_.astOut) + + def capturedByOut: Iterator[nodes.ClosureBinding] = traversal.flatMap(_.capturedByOut) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def parameterLinkOut: Iterator[nodes.MethodParameterOut] = traversal.flatMap(_.parameterLinkOut) + + def reachingDefIn: Iterator[nodes.Method] = traversal.flatMap(_.reachingDefIn) + + def reachingDefOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefOut) + + def refIn: Iterator[nodes.StoredNode] = traversal.flatMap(_.refIn) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodParameterOut.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodParameterOut.scala new file mode 100644 index 000000000..4f384adc6 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodParameterOut.scala @@ -0,0 +1,247 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForMethodParameterOut(val node: nodes.MethodParameterOut) extends AnyVal { + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = reachingDefIn.collectAll[nodes.Block] + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = reachingDefIn.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = reachingDefOut.collectAll[nodes.Call] + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + reachingDefIn.collectAll[nodes.ControlStructure] + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = reachingDefIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = reachingDefOut.collectAll[nodes.Identifier] + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = reachingDefIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = reachingDefOut.collectAll[nodes.Literal] + + /** Traverse to METHOD via AST IN edge. + */ + @deprecated("please use method instead") + def _methodViaAstIn: nodes.Method = method + + /** Traverse to METHOD via AST IN edge. + */ + def method: nodes.Method = { + try { astIn.collectAll[nodes.Method].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent METHOD is mandatory, but not defined for this METHOD_PARAMETER_OUT node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = reachingDefIn.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_IN via PARAMETER_LINK IN edge. + */ + @deprecated("please use asInput instead") + def _methodParameterInViaParameterLinkIn: Iterator[nodes.MethodParameterIn] = asInput + + /** Traverse to METHOD_PARAMETER_IN via PARAMETER_LINK IN edge. + */ + def asInput: Iterator[nodes.MethodParameterIn] = parameterLinkIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + reachingDefIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = reachingDefIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = reachingDefOut.collectAll[nodes.MethodRef] + + /** Traverse to RETURN via REACHING_DEF IN edge. + */ + def _returnViaReachingDefIn: Iterator[nodes.Return] = reachingDefIn.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = reachingDefOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = reachingDefIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = reachingDefOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = reachingDefIn.collectAll[nodes.Unknown] + + /** Traverse to parameter type Traverse to TYPE via EVAL_TYPE OUT edge. + */ + @deprecated("please use typ instead") + def _typeViaEvalTypeOut: Iterator[nodes.Type] = typ + + /** Traverse to parameter type Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def typ: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + def astIn: Iterator[nodes.Method] = node._astIn.cast[nodes.Method] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def parameterLinkIn: Iterator[nodes.MethodParameterIn] = node._parameterLinkIn.cast[nodes.MethodParameterIn] + + def reachingDefIn: Iterator[nodes.CfgNode] = node._reachingDefIn.cast[nodes.CfgNode] + + def reachingDefOut: Iterator[nodes.Expression] = node._reachingDefOut.cast[nodes.Expression] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForMethodParameterOutTraversal(val traversal: Iterator[nodes.MethodParameterOut]) + extends AnyVal { + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaReachingDefIn) + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefIn) + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefOut) + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaReachingDefIn) + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefIn) + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefOut) + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefIn) + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefOut) + + /** Traverse to METHOD via AST IN edge. + */ + def method: Iterator[nodes.Method] = traversal.map(_.method) + + /** Traverse to METHOD via AST IN edge. + */ + @deprecated("please use method instead") + def _methodViaAstIn: Iterator[nodes.Method] = traversal.map(_._methodViaAstIn) + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_IN via PARAMETER_LINK IN edge. + */ + def asInput: Iterator[nodes.MethodParameterIn] = traversal.flatMap(_.asInput) + + /** Traverse to METHOD_PARAMETER_IN via PARAMETER_LINK IN edge. + */ + @deprecated("please use asInput instead") + def _methodParameterInViaParameterLinkIn: Iterator[nodes.MethodParameterIn] = + traversal.flatMap(_._methodParameterInViaParameterLinkIn) + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + traversal.flatMap(_._methodParameterInViaReachingDefIn) + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefIn) + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefOut) + + /** Traverse to RETURN via REACHING_DEF IN edge. + */ + def _returnViaReachingDefIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefIn) + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefIn) + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefOut) + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaReachingDefIn) + + /** Traverse to parameter type Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def typ: Iterator[nodes.Type] = traversal.flatMap(_.typ) + + /** Traverse to parameter type Traverse to TYPE via EVAL_TYPE OUT edge. + */ + @deprecated("please use typ instead") + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + def astIn: Iterator[nodes.Method] = traversal.flatMap(_.astIn) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def parameterLinkIn: Iterator[nodes.MethodParameterIn] = traversal.flatMap(_.parameterLinkIn) + + def reachingDefIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefIn) + + def reachingDefOut: Iterator[nodes.Expression] = traversal.flatMap(_.reachingDefOut) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodRef.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodRef.scala new file mode 100644 index 000000000..3f02cef0b --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodRef.scala @@ -0,0 +1,975 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForMethodRef(val node: nodes.MethodRef) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = astOut.collectAll[nodes.Annotation] + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = astIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = cdgIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = cdgOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = dominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = dominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = postDominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = postDominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = reachingDefIn.collectAll[nodes.Block] + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Option[nodes.Call] = argumentIn.collectAll[nodes.Call].nextOption() + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = astIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = cdgIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = cdgOut.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = dominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = dominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = postDominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = postDominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = reachingDefIn.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = reachingDefOut.collectAll[nodes.Call] + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Option[nodes.Call] = receiverIn.collectAll[nodes.Call].nextOption() + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = cfgOut.collectAll[nodes.CfgNode] + + /** Traverse to CLOSURE_BINDING via CAPTURE OUT edge. + */ + def _closureBindingViaCaptureOut: Iterator[nodes.ClosureBinding] = captureOut.collectAll[nodes.ClosureBinding] + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: nodes.ControlStructure = { + try { astIn.collectAll[nodes.ControlStructure].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent CONTROL_STRUCTURE is mandatory, but not defined for this METHOD_REF node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = cdgIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = cdgOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = conditionIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = dominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = dominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + postDominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + postDominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + reachingDefIn.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = cdgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = cdgOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = dominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = dominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + postDominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + postDominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = cdgIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = cdgOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = dominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = dominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = postDominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = postDominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = reachingDefIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = reachingDefOut.collectAll[nodes.Identifier] + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = cdgIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = cdgOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = dominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = dominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = postDominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = postDominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = cdgIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = cdgOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = dominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = dominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = postDominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = postDominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = reachingDefIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = reachingDefOut.collectAll[nodes.Literal] + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = containsIn.collectAll[nodes.Method] + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = dominateIn.collectAll[nodes.Method] + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = postDominateOut.collectAll[nodes.Method] + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = reachingDefIn.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + reachingDefIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. + */ + def _methodParameterOutViaReachingDefIn: Iterator[nodes.MethodParameterOut] = + reachingDefIn.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + reachingDefOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = cdgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = cdgOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = dominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = dominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = postDominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = postDominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = reachingDefIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = reachingDefOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = cdgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via CFG OUT edge. + */ + def _methodReturnViaCfgOut: Iterator[nodes.MethodReturn] = cfgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = dominateOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = postDominateIn.collectAll[nodes.MethodReturn] + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Option[nodes.Return] = argumentIn.collectAll[nodes.Return].nextOption() + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = astIn.collectAll[nodes.Return] + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = cdgOut.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = dominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = dominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = postDominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = postDominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF IN edge. + */ + def _returnViaReachingDefIn: Iterator[nodes.Return] = reachingDefIn.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = reachingDefOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = cdgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = cdgOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = dominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = dominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = postDominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = postDominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = reachingDefIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = reachingDefOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = cdgIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = cdgOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = dominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = dominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = postDominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = postDominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = reachingDefIn.collectAll[nodes.Unknown] + + /** Traverse to referenced method. Traverse to METHOD via REF OUT edge. + */ + @deprecated("please use referencedMethod instead") + def _methodViaRefOut: nodes.Method = referencedMethod + + /** Traverse to referenced method. Traverse to METHOD via REF OUT edge. + */ + def referencedMethod: nodes.Method = { + try { refOut.collectAll[nodes.Method].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "OUT edge with label REF to an adjacent METHOD is mandatory, but not defined for this METHOD_REF node with seq=" + node.seq, + e + ) + } + } + + def argumentIn: Iterator[nodes.Expression] = node._argumentIn.cast[nodes.Expression] + + def astIn: Iterator[nodes.Expression] = node._astIn.cast[nodes.Expression] + + def astOut: Iterator[nodes.Annotation] = node._astOut.cast[nodes.Annotation] + + def captureOut: Iterator[nodes.ClosureBinding] = node._captureOut.cast[nodes.ClosureBinding] + + def cdgIn: Iterator[nodes.CfgNode] = node._cdgIn.cast[nodes.CfgNode] + + def cdgOut: Iterator[nodes.CfgNode] = node._cdgOut.cast[nodes.CfgNode] + + def cfgOut: Iterator[nodes.AstNode] = node._cfgOut.cast[nodes.AstNode] + + def conditionIn: Iterator[nodes.ControlStructure] = node._conditionIn.cast[nodes.ControlStructure] + + def containsIn: Iterator[nodes.Method] = node._containsIn.cast[nodes.Method] + + def dominateIn: Iterator[nodes.CfgNode] = node._dominateIn.cast[nodes.CfgNode] + + def dominateOut: Iterator[nodes.CfgNode] = node._dominateOut.cast[nodes.CfgNode] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def postDominateIn: Iterator[nodes.CfgNode] = node._postDominateIn.cast[nodes.CfgNode] + + def postDominateOut: Iterator[nodes.CfgNode] = node._postDominateOut.cast[nodes.CfgNode] + + def reachingDefIn: Iterator[nodes.CfgNode] = node._reachingDefIn.cast[nodes.CfgNode] + + def reachingDefOut: Iterator[nodes.CfgNode] = node._reachingDefOut.cast[nodes.CfgNode] + + def receiverIn: Iterator[nodes.Call] = node._receiverIn.cast[nodes.Call] + + def refOut: Iterator[nodes.Method] = node._refOut.cast[nodes.Method] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForMethodRefTraversal(val traversal: Iterator[nodes.MethodRef]) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = traversal.flatMap(_._annotationViaAstOut) + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstIn) + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgIn) + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgOut) + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateIn) + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateOut) + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateIn) + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateOut) + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaReachingDefIn) + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaArgumentIn) + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstIn) + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgIn) + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgOut) + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateIn) + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateOut) + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateIn) + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateOut) + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefIn) + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefOut) + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReceiverIn) + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_._cfgNodeViaCfgOut) + + /** Traverse to CLOSURE_BINDING via CAPTURE OUT edge. + */ + def _closureBindingViaCaptureOut: Iterator[nodes.ClosureBinding] = traversal.flatMap(_._closureBindingViaCaptureOut) + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.map(_._controlStructureViaAstIn) + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgIn) + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgOut) + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaConditionIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateOut) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateIn) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateOut) + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaReachingDefIn) + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgIn) + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgOut) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateOut) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateIn) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgIn) + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgOut) + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateIn) + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateOut) + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateIn) + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefIn) + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefOut) + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgIn) + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgOut) + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateIn) + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateOut) + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateIn) + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateOut) + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgIn) + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgOut) + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateIn) + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateOut) + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateIn) + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateOut) + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefIn) + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefOut) + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsIn) + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaDominateIn) + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaPostDominateOut) + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + traversal.flatMap(_._methodParameterInViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. + */ + def _methodParameterOutViaReachingDefIn: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefOut) + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgIn) + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgOut) + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateIn) + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateOut) + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateIn) + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateOut) + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefIn) + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefOut) + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCdgOut) + + /** Traverse to METHOD_RETURN via CFG OUT edge. + */ + def _methodReturnViaCfgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCfgOut) + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaDominateOut) + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaPostDominateIn) + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaArgumentIn) + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstIn) + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaCdgOut) + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateIn) + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateOut) + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateIn) + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateOut) + + /** Traverse to RETURN via REACHING_DEF IN edge. + */ + def _returnViaReachingDefIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefIn) + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgIn) + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgOut) + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateIn) + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateOut) + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateIn) + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateOut) + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefIn) + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefOut) + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgIn) + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgOut) + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateIn) + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateOut) + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateIn) + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateOut) + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaReachingDefIn) + + /** Traverse to referenced method. Traverse to METHOD via REF OUT edge. + */ + def referencedMethod: Iterator[nodes.Method] = traversal.map(_.referencedMethod) + + /** Traverse to referenced method. Traverse to METHOD via REF OUT edge. + */ + @deprecated("please use referencedMethod instead") + def _methodViaRefOut: Iterator[nodes.Method] = traversal.map(_._methodViaRefOut) + + def argumentIn: Iterator[nodes.Expression] = traversal.flatMap(_.argumentIn) + + def astIn: Iterator[nodes.Expression] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.Annotation] = traversal.flatMap(_.astOut) + + def captureOut: Iterator[nodes.ClosureBinding] = traversal.flatMap(_.captureOut) + + def cdgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgIn) + + def cdgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgOut) + + def cfgOut: Iterator[nodes.AstNode] = traversal.flatMap(_.cfgOut) + + def conditionIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_.conditionIn) + + def containsIn: Iterator[nodes.Method] = traversal.flatMap(_.containsIn) + + def dominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateIn) + + def dominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateOut) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def postDominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateIn) + + def postDominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateOut) + + def reachingDefIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefIn) + + def reachingDefOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefOut) + + def receiverIn: Iterator[nodes.Call] = traversal.flatMap(_.receiverIn) + + def refOut: Iterator[nodes.Method] = traversal.flatMap(_.refOut) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodReturn.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodReturn.scala new file mode 100644 index 000000000..df4d2d43c --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/MethodReturn.scala @@ -0,0 +1,403 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForMethodReturn(val node: nodes.MethodReturn) extends AnyVal { + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = cdgIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = dominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = postDominateOut.collectAll[nodes.Block] + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = cdgIn.collectAll[nodes.Call] + + /** Traverse to CALL via CFG IN edge. + */ + def _callViaCfgIn: Iterator[nodes.Call] = cfgIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = dominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = postDominateOut.collectAll[nodes.Call] + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = cdgIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = dominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + postDominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = cdgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = dominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + postDominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = cdgIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = dominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = postDominateOut.collectAll[nodes.Identifier] + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = cdgIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = postDominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = cdgIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = dominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = postDominateOut.collectAll[nodes.Literal] + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: nodes.Method = { + try { astIn.collectAll[nodes.Method].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent METHOD is mandatory, but not defined for this METHOD_RETURN node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to METHOD via CFG IN edge. + */ + def _methodViaCfgIn: Option[nodes.Method] = cfgIn.collectAll[nodes.Method].nextOption() + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = dominateIn.collectAll[nodes.Method] + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = postDominateOut.collectAll[nodes.Method] + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = cdgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CFG IN edge. + */ + def _methodRefViaCfgIn: Iterator[nodes.MethodRef] = cfgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = dominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = postDominateOut.collectAll[nodes.MethodRef] + + /** Traverse to RETURN via CFG IN edge. + */ + @deprecated("please use toReturn instead") + def _returnViaCfgIn: Iterator[nodes.Return] = toReturn + + /** Traverse to RETURN via CFG IN edge. + */ + def toReturn: Iterator[nodes.Return] = cfgIn.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = dominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = postDominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF IN edge. + */ + def _returnViaReachingDefIn: Iterator[nodes.Return] = reachingDefIn.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = cdgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CFG IN edge. + */ + def _typeRefViaCfgIn: Iterator[nodes.TypeRef] = cfgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = dominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = postDominateOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = cdgIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = dominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = postDominateOut.collectAll[nodes.Unknown] + + def astIn: Iterator[nodes.Method] = node._astIn.cast[nodes.Method] + + def cdgIn: Iterator[nodes.CfgNode] = node._cdgIn.cast[nodes.CfgNode] + + def cfgIn: Iterator[nodes.CfgNode] = node._cfgIn.cast[nodes.CfgNode] + + def dominateIn: Iterator[nodes.CfgNode] = node._dominateIn.cast[nodes.CfgNode] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def postDominateOut: Iterator[nodes.CfgNode] = node._postDominateOut.cast[nodes.CfgNode] + + def reachingDefIn: Iterator[nodes.Return] = node._reachingDefIn.cast[nodes.Return] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForMethodReturnTraversal(val traversal: Iterator[nodes.MethodReturn]) extends AnyVal { + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgIn) + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateIn) + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateOut) + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgIn) + + /** Traverse to CALL via CFG IN edge. + */ + def _callViaCfgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCfgIn) + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateIn) + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateOut) + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateIn) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateOut) + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateIn) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgIn) + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateIn) + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateOut) + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgIn) + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateOut) + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgIn) + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateIn) + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateOut) + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: Iterator[nodes.Method] = traversal.map(_._methodViaAstIn) + + /** Traverse to METHOD via CFG IN edge. + */ + def _methodViaCfgIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaCfgIn) + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaDominateIn) + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaPostDominateOut) + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgIn) + + /** Traverse to METHOD_REF via CFG IN edge. + */ + def _methodRefViaCfgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCfgIn) + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateIn) + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateOut) + + /** Traverse to RETURN via CFG IN edge. + */ + def toReturn: Iterator[nodes.Return] = traversal.flatMap(_.toReturn) + + /** Traverse to RETURN via CFG IN edge. + */ + @deprecated("please use toReturn instead") + def _returnViaCfgIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaCfgIn) + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateIn) + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateOut) + + /** Traverse to RETURN via REACHING_DEF IN edge. + */ + def _returnViaReachingDefIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefIn) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgIn) + + /** Traverse to TYPE_REF via CFG IN edge. + */ + def _typeRefViaCfgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCfgIn) + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateIn) + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateOut) + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgIn) + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateIn) + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateOut) + + def astIn: Iterator[nodes.Method] = traversal.flatMap(_.astIn) + + def cdgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgIn) + + def cfgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cfgIn) + + def dominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateIn) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def postDominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateOut) + + def reachingDefIn: Iterator[nodes.Return] = traversal.flatMap(_.reachingDefIn) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Modifier.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Modifier.scala new file mode 100644 index 000000000..bf0cf4046 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Modifier.scala @@ -0,0 +1,72 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForModifier(val node: nodes.Modifier) extends AnyVal { + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = astIn.collectAll[nodes.ControlStructure] + + /** Traverse to MEMBER via AST IN edge. + */ + def _memberViaAstIn: Iterator[nodes.Member] = astIn.collectAll[nodes.Member] + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: nodes.Method = { + try { astIn.collectAll[nodes.Method].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent METHOD is mandatory, but not defined for this MODIFIER node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to TYPE_DECL via AST IN edge. + */ + def _typeDeclViaAstIn: nodes.TypeDecl = { + try { astIn.collectAll[nodes.TypeDecl].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent TYPE_DECL is mandatory, but not defined for this MODIFIER node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + def astIn: Iterator[nodes.AstNode] = node._astIn.cast[nodes.AstNode] +} + +final class AccessNeighborsForModifierTraversal(val traversal: Iterator[nodes.Modifier]) extends AnyVal { + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstIn) + + /** Traverse to MEMBER via AST IN edge. + */ + def _memberViaAstIn: Iterator[nodes.Member] = traversal.flatMap(_._memberViaAstIn) + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: Iterator[nodes.Method] = traversal.map(_._methodViaAstIn) + + /** Traverse to TYPE_DECL via AST IN edge. + */ + def _typeDeclViaAstIn: Iterator[nodes.TypeDecl] = traversal.map(_._typeDeclViaAstIn) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + def astIn: Iterator[nodes.AstNode] = traversal.flatMap(_.astIn) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Namespace.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Namespace.scala new file mode 100644 index 000000000..92ce10296 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Namespace.scala @@ -0,0 +1,22 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForNamespace(val node: nodes.Namespace) extends AnyVal { + + /** Traverse to NAMESPACE_BLOCK via REF IN edge. + */ + def _namespaceBlockViaRefIn: Iterator[nodes.NamespaceBlock] = refIn.collectAll[nodes.NamespaceBlock] + + def refIn: Iterator[nodes.NamespaceBlock] = node._refIn.cast[nodes.NamespaceBlock] +} + +final class AccessNeighborsForNamespaceTraversal(val traversal: Iterator[nodes.Namespace]) extends AnyVal { + + /** Traverse to NAMESPACE_BLOCK via REF IN edge. + */ + def _namespaceBlockViaRefIn: Iterator[nodes.NamespaceBlock] = traversal.flatMap(_._namespaceBlockViaRefIn) + + def refIn: Iterator[nodes.NamespaceBlock] = traversal.flatMap(_.refIn) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/NamespaceBlock.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/NamespaceBlock.scala new file mode 100644 index 000000000..98967b139 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/NamespaceBlock.scala @@ -0,0 +1,66 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForNamespaceBlock(val node: nodes.NamespaceBlock) extends AnyVal { + + /** Traverse to FILE via AST IN edge. + */ + def _fileViaAstIn: Option[nodes.File] = astIn.collectAll[nodes.File].nextOption() + + /** Traverse to FILE via SOURCE_FILE OUT edge. + */ + def _fileViaSourceFileOut: Iterator[nodes.File] = sourceFileOut.collectAll[nodes.File] + + /** Traverse to METHOD via AST OUT edge. + */ + def _methodViaAstOut: Iterator[nodes.Method] = astOut.collectAll[nodes.Method] + + /** Traverse to NAMESPACE via REF OUT edge. + */ + def _namespaceViaRefOut: Iterator[nodes.Namespace] = refOut.collectAll[nodes.Namespace] + + /** Traverse to TYPE_DECL via AST OUT edge. + */ + def _typeDeclViaAstOut: Iterator[nodes.TypeDecl] = astOut.collectAll[nodes.TypeDecl] + + def astIn: Iterator[nodes.File] = node._astIn.cast[nodes.File] + + def astOut: Iterator[nodes.AstNode] = node._astOut.cast[nodes.AstNode] + + def refOut: Iterator[nodes.Namespace] = node._refOut.cast[nodes.Namespace] + + def sourceFileOut: Iterator[nodes.File] = node._sourceFileOut.cast[nodes.File] +} + +final class AccessNeighborsForNamespaceBlockTraversal(val traversal: Iterator[nodes.NamespaceBlock]) extends AnyVal { + + /** Traverse to FILE via AST IN edge. + */ + def _fileViaAstIn: Iterator[nodes.File] = traversal.flatMap(_._fileViaAstIn) + + /** Traverse to FILE via SOURCE_FILE OUT edge. + */ + def _fileViaSourceFileOut: Iterator[nodes.File] = traversal.flatMap(_._fileViaSourceFileOut) + + /** Traverse to METHOD via AST OUT edge. + */ + def _methodViaAstOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaAstOut) + + /** Traverse to NAMESPACE via REF OUT edge. + */ + def _namespaceViaRefOut: Iterator[nodes.Namespace] = traversal.flatMap(_._namespaceViaRefOut) + + /** Traverse to TYPE_DECL via AST OUT edge. + */ + def _typeDeclViaAstOut: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaAstOut) + + def astIn: Iterator[nodes.File] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.AstNode] = traversal.flatMap(_.astOut) + + def refOut: Iterator[nodes.Namespace] = traversal.flatMap(_.refOut) + + def sourceFileOut: Iterator[nodes.File] = traversal.flatMap(_.sourceFileOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Return.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Return.scala new file mode 100644 index 000000000..58a3a79d5 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Return.scala @@ -0,0 +1,933 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForReturn(val node: nodes.Return) extends AnyVal { + + /** Traverse to BLOCK via ARGUMENT OUT edge. + */ + def _blockViaArgumentOut: Option[nodes.Block] = argumentOut.collectAll[nodes.Block].nextOption() + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = astIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via AST OUT edge. + */ + def _blockViaAstOut: Iterator[nodes.Block] = astOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = cdgIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = dominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = dominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = postDominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = postDominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = reachingDefIn.collectAll[nodes.Block] + + /** Traverse to CALL via ARGUMENT OUT edge. + */ + def _callViaArgumentOut: Option[nodes.Call] = argumentOut.collectAll[nodes.Call].nextOption() + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = astIn.collectAll[nodes.Call] + + /** Traverse to CALL via AST OUT edge. + */ + def _callViaAstOut: Iterator[nodes.Call] = astOut.collectAll[nodes.Call] + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = cdgIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = dominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = dominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = postDominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = postDominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = reachingDefIn.collectAll[nodes.Call] + + /** Traverse to CONTROL_STRUCTURE via ARGUMENT OUT edge. + */ + def _controlStructureViaArgumentOut: Iterator[nodes.ControlStructure] = argumentOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Option[nodes.ControlStructure] = astIn.collectAll[nodes.ControlStructure].nextOption() + + /** Traverse to CONTROL_STRUCTURE via AST OUT edge. + */ + def _controlStructureViaAstOut: Iterator[nodes.ControlStructure] = astOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = cdgIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = conditionIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = dominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = dominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + postDominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + postDominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + reachingDefIn.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = cdgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = dominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = dominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + postDominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + postDominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via ARGUMENT OUT edge. + */ + def _identifierViaArgumentOut: Option[nodes.Identifier] = argumentOut.collectAll[nodes.Identifier].nextOption() + + /** Traverse to IDENTIFIER via AST OUT edge. + */ + def _identifierViaAstOut: Iterator[nodes.Identifier] = astOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = cdgIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = dominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = dominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = postDominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = postDominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = reachingDefIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = reachingDefOut.collectAll[nodes.Identifier] + + /** Traverse to JUMP_TARGET via ARGUMENT OUT edge. + */ + def _jumpTargetViaArgumentOut: Iterator[nodes.JumpTarget] = argumentOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via AST OUT edge. + */ + def _jumpTargetViaAstOut: Iterator[nodes.JumpTarget] = astOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = cdgIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = dominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = dominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = postDominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = postDominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via ARGUMENT OUT edge. + */ + def _literalViaArgumentOut: Option[nodes.Literal] = argumentOut.collectAll[nodes.Literal].nextOption() + + /** Traverse to LITERAL via AST OUT edge. + */ + def _literalViaAstOut: Iterator[nodes.Literal] = astOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = cdgIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = dominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = dominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = postDominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = postDominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = reachingDefIn.collectAll[nodes.Literal] + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = containsIn.collectAll[nodes.Method] + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = dominateIn.collectAll[nodes.Method] + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = postDominateOut.collectAll[nodes.Method] + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = reachingDefIn.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + reachingDefIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. + */ + def _methodParameterOutViaReachingDefIn: Iterator[nodes.MethodParameterOut] = + reachingDefIn.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + reachingDefOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via ARGUMENT OUT edge. + */ + def _methodRefViaArgumentOut: Option[nodes.MethodRef] = argumentOut.collectAll[nodes.MethodRef].nextOption() + + /** Traverse to METHOD_REF via AST OUT edge. + */ + def _methodRefViaAstOut: Iterator[nodes.MethodRef] = astOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = cdgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = dominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = dominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = postDominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = postDominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = reachingDefIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = reachingDefOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via CFG OUT edge. + */ + def _methodReturnViaCfgOut: nodes.MethodReturn = { + try { cfgOut.collectAll[nodes.MethodReturn].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "OUT edge with label CFG to an adjacent METHOD_RETURN is mandatory, but not defined for this RETURN node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = dominateOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = postDominateIn.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via REACHING_DEF OUT edge. + */ + def _methodReturnViaReachingDefOut: Iterator[nodes.MethodReturn] = reachingDefOut.collectAll[nodes.MethodReturn] + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Option[nodes.Return] = argumentIn.collectAll[nodes.Return].nextOption() + + /** Traverse to RETURN via ARGUMENT OUT edge. + */ + def _returnViaArgumentOut: Option[nodes.Return] = argumentOut.collectAll[nodes.Return].nextOption() + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = astIn.collectAll[nodes.Return] + + /** Traverse to RETURN via AST OUT edge. + */ + def _returnViaAstOut: Iterator[nodes.Return] = astOut.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = dominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = dominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = postDominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = postDominateOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE_REF via ARGUMENT OUT edge. + */ + def _typeRefViaArgumentOut: Iterator[nodes.TypeRef] = argumentOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via AST OUT edge. + */ + def _typeRefViaAstOut: Iterator[nodes.TypeRef] = astOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = cdgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = dominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = dominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = postDominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = postDominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = reachingDefIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = reachingDefOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via ARGUMENT OUT edge. + */ + def _unknownViaArgumentOut: Iterator[nodes.Unknown] = argumentOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via AST OUT edge. + */ + def _unknownViaAstOut: Iterator[nodes.Unknown] = astOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = cdgIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = dominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = dominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = postDominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = postDominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = reachingDefIn.collectAll[nodes.Unknown] + + def argumentIn: Iterator[nodes.Return] = node._argumentIn.cast[nodes.Return] + + def argumentOut: Iterator[nodes.CfgNode] = node._argumentOut.cast[nodes.CfgNode] + + def astIn: Iterator[nodes.Expression] = node._astIn.cast[nodes.Expression] + + def astOut: Iterator[nodes.CfgNode] = node._astOut.cast[nodes.CfgNode] + + def cdgIn: Iterator[nodes.CfgNode] = node._cdgIn.cast[nodes.CfgNode] + + def cfgOut: Iterator[nodes.MethodReturn] = node._cfgOut.cast[nodes.MethodReturn] + + def conditionIn: Iterator[nodes.ControlStructure] = node._conditionIn.cast[nodes.ControlStructure] + + def containsIn: Iterator[nodes.Method] = node._containsIn.cast[nodes.Method] + + def dominateIn: Iterator[nodes.CfgNode] = node._dominateIn.cast[nodes.CfgNode] + + def dominateOut: Iterator[nodes.CfgNode] = node._dominateOut.cast[nodes.CfgNode] + + def postDominateIn: Iterator[nodes.CfgNode] = node._postDominateIn.cast[nodes.CfgNode] + + def postDominateOut: Iterator[nodes.CfgNode] = node._postDominateOut.cast[nodes.CfgNode] + + def reachingDefIn: Iterator[nodes.CfgNode] = node._reachingDefIn.cast[nodes.CfgNode] + + def reachingDefOut: Iterator[nodes.CfgNode] = node._reachingDefOut.cast[nodes.CfgNode] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForReturnTraversal(val traversal: Iterator[nodes.Return]) extends AnyVal { + + /** Traverse to BLOCK via ARGUMENT OUT edge. + */ + def _blockViaArgumentOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaArgumentOut) + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstIn) + + /** Traverse to BLOCK via AST OUT edge. + */ + def _blockViaAstOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstOut) + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgIn) + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateIn) + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateOut) + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateIn) + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateOut) + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaReachingDefIn) + + /** Traverse to CALL via ARGUMENT OUT edge. + */ + def _callViaArgumentOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaArgumentOut) + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstIn) + + /** Traverse to CALL via AST OUT edge. + */ + def _callViaAstOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstOut) + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgIn) + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateIn) + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateOut) + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateIn) + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateOut) + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefIn) + + /** Traverse to CONTROL_STRUCTURE via ARGUMENT OUT edge. + */ + def _controlStructureViaArgumentOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaArgumentOut) + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstIn) + + /** Traverse to CONTROL_STRUCTURE via AST OUT edge. + */ + def _controlStructureViaAstOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstOut) + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgIn) + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaConditionIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateOut) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateIn) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateOut) + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaReachingDefIn) + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateOut) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateIn) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via ARGUMENT OUT edge. + */ + def _identifierViaArgumentOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaArgumentOut) + + /** Traverse to IDENTIFIER via AST OUT edge. + */ + def _identifierViaAstOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaAstOut) + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgIn) + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateIn) + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateOut) + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateIn) + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefIn) + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefOut) + + /** Traverse to JUMP_TARGET via ARGUMENT OUT edge. + */ + def _jumpTargetViaArgumentOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaArgumentOut) + + /** Traverse to JUMP_TARGET via AST OUT edge. + */ + def _jumpTargetViaAstOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaAstOut) + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgIn) + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateIn) + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateOut) + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateIn) + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateOut) + + /** Traverse to LITERAL via ARGUMENT OUT edge. + */ + def _literalViaArgumentOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaArgumentOut) + + /** Traverse to LITERAL via AST OUT edge. + */ + def _literalViaAstOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaAstOut) + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgIn) + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateIn) + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateOut) + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateIn) + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateOut) + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefIn) + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsIn) + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaDominateIn) + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaPostDominateOut) + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + traversal.flatMap(_._methodParameterInViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. + */ + def _methodParameterOutViaReachingDefIn: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefOut) + + /** Traverse to METHOD_REF via ARGUMENT OUT edge. + */ + def _methodRefViaArgumentOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaArgumentOut) + + /** Traverse to METHOD_REF via AST OUT edge. + */ + def _methodRefViaAstOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaAstOut) + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgIn) + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateIn) + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateOut) + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateIn) + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateOut) + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefIn) + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefOut) + + /** Traverse to METHOD_RETURN via CFG OUT edge. + */ + def _methodReturnViaCfgOut: Iterator[nodes.MethodReturn] = traversal.map(_._methodReturnViaCfgOut) + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaDominateOut) + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaPostDominateIn) + + /** Traverse to METHOD_RETURN via REACHING_DEF OUT edge. + */ + def _methodReturnViaReachingDefOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaReachingDefOut) + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaArgumentIn) + + /** Traverse to RETURN via ARGUMENT OUT edge. + */ + def _returnViaArgumentOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaArgumentOut) + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstIn) + + /** Traverse to RETURN via AST OUT edge. + */ + def _returnViaAstOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstOut) + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateIn) + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateOut) + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateIn) + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE_REF via ARGUMENT OUT edge. + */ + def _typeRefViaArgumentOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaArgumentOut) + + /** Traverse to TYPE_REF via AST OUT edge. + */ + def _typeRefViaAstOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaAstOut) + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgIn) + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateIn) + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateOut) + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateIn) + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateOut) + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefIn) + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefOut) + + /** Traverse to UNKNOWN via ARGUMENT OUT edge. + */ + def _unknownViaArgumentOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaArgumentOut) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + /** Traverse to UNKNOWN via AST OUT edge. + */ + def _unknownViaAstOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstOut) + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgIn) + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateIn) + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateOut) + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateIn) + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateOut) + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaReachingDefIn) + + def argumentIn: Iterator[nodes.Return] = traversal.flatMap(_.argumentIn) + + def argumentOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.argumentOut) + + def astIn: Iterator[nodes.Expression] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.astOut) + + def cdgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgIn) + + def cfgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_.cfgOut) + + def conditionIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_.conditionIn) + + def containsIn: Iterator[nodes.Method] = traversal.flatMap(_.containsIn) + + def dominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateIn) + + def dominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateOut) + + def postDominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateIn) + + def postDominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateOut) + + def reachingDefIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefIn) + + def reachingDefOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefOut) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Tag.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Tag.scala new file mode 100644 index 000000000..747874e1b --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Tag.scala @@ -0,0 +1,208 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForTag(val node: nodes.Tag) extends AnyVal { + + /** Traverse to BLOCK via TAGGED_BY IN edge. + */ + def _blockViaTaggedByIn: Iterator[nodes.Block] = taggedByIn.collectAll[nodes.Block] + + /** Traverse to CALL via TAGGED_BY IN edge. + */ + def _callViaTaggedByIn: Iterator[nodes.Call] = taggedByIn.collectAll[nodes.Call] + + /** Traverse to CONTROL_STRUCTURE via TAGGED_BY IN edge. + */ + def _controlStructureViaTaggedByIn: Iterator[nodes.ControlStructure] = taggedByIn.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via TAGGED_BY IN edge. + */ + def _fieldIdentifierViaTaggedByIn: Iterator[nodes.FieldIdentifier] = taggedByIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FILE via TAGGED_BY IN edge. + */ + def _fileViaTaggedByIn: Iterator[nodes.File] = taggedByIn.collectAll[nodes.File] + + /** Traverse to IDENTIFIER via TAGGED_BY IN edge. + */ + def _identifierViaTaggedByIn: Iterator[nodes.Identifier] = taggedByIn.collectAll[nodes.Identifier] + + /** Traverse to IMPORT via TAGGED_BY IN edge. + */ + def _importViaTaggedByIn: Iterator[nodes.Import] = taggedByIn.collectAll[nodes.Import] + + /** Traverse to JUMP_TARGET via TAGGED_BY IN edge. + */ + def _jumpTargetViaTaggedByIn: Iterator[nodes.JumpTarget] = taggedByIn.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via TAGGED_BY IN edge. + */ + def _literalViaTaggedByIn: Iterator[nodes.Literal] = taggedByIn.collectAll[nodes.Literal] + + /** Traverse to LOCAL via TAGGED_BY IN edge. + */ + def _localViaTaggedByIn: Iterator[nodes.Local] = taggedByIn.collectAll[nodes.Local] + + /** Traverse to MEMBER via TAGGED_BY IN edge. + */ + def _memberViaTaggedByIn: Iterator[nodes.Member] = taggedByIn.collectAll[nodes.Member] + + /** Traverse to METHOD via TAGGED_BY IN edge. + */ + def _methodViaTaggedByIn: Iterator[nodes.Method] = taggedByIn.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_IN via TAGGED_BY IN edge. + */ + def _methodParameterInViaTaggedByIn: Iterator[nodes.MethodParameterIn] = + taggedByIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_PARAMETER_OUT via TAGGED_BY IN edge. + */ + def _methodParameterOutViaTaggedByIn: Iterator[nodes.MethodParameterOut] = + taggedByIn.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via TAGGED_BY IN edge. + */ + def _methodRefViaTaggedByIn: Iterator[nodes.MethodRef] = taggedByIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via TAGGED_BY IN edge. + */ + def _methodReturnViaTaggedByIn: Iterator[nodes.MethodReturn] = taggedByIn.collectAll[nodes.MethodReturn] + + /** Traverse to RETURN via TAGGED_BY IN edge. + */ + def _returnViaTaggedByIn: Iterator[nodes.Return] = taggedByIn.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY IN edge. + */ + def _tagViaTaggedByIn: Iterator[nodes.Tag] = taggedByIn.collectAll[nodes.Tag] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TEMPLATE_DOM via TAGGED_BY IN edge. + */ + def _templateDomViaTaggedByIn: Iterator[nodes.TemplateDom] = taggedByIn.collectAll[nodes.TemplateDom] + + /** Traverse to TYPE_DECL via TAGGED_BY IN edge. + */ + def _typeDeclViaTaggedByIn: Iterator[nodes.TypeDecl] = taggedByIn.collectAll[nodes.TypeDecl] + + /** Traverse to TYPE_REF via TAGGED_BY IN edge. + */ + def _typeRefViaTaggedByIn: Iterator[nodes.TypeRef] = taggedByIn.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via TAGGED_BY IN edge. + */ + def _unknownViaTaggedByIn: Iterator[nodes.Unknown] = taggedByIn.collectAll[nodes.Unknown] + + def taggedByIn: Iterator[nodes.StoredNode] = node._taggedByIn.cast[nodes.StoredNode] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForTagTraversal(val traversal: Iterator[nodes.Tag]) extends AnyVal { + + /** Traverse to BLOCK via TAGGED_BY IN edge. + */ + def _blockViaTaggedByIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaTaggedByIn) + + /** Traverse to CALL via TAGGED_BY IN edge. + */ + def _callViaTaggedByIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaTaggedByIn) + + /** Traverse to CONTROL_STRUCTURE via TAGGED_BY IN edge. + */ + def _controlStructureViaTaggedByIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaTaggedByIn) + + /** Traverse to FIELD_IDENTIFIER via TAGGED_BY IN edge. + */ + def _fieldIdentifierViaTaggedByIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaTaggedByIn) + + /** Traverse to FILE via TAGGED_BY IN edge. + */ + def _fileViaTaggedByIn: Iterator[nodes.File] = traversal.flatMap(_._fileViaTaggedByIn) + + /** Traverse to IDENTIFIER via TAGGED_BY IN edge. + */ + def _identifierViaTaggedByIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaTaggedByIn) + + /** Traverse to IMPORT via TAGGED_BY IN edge. + */ + def _importViaTaggedByIn: Iterator[nodes.Import] = traversal.flatMap(_._importViaTaggedByIn) + + /** Traverse to JUMP_TARGET via TAGGED_BY IN edge. + */ + def _jumpTargetViaTaggedByIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaTaggedByIn) + + /** Traverse to LITERAL via TAGGED_BY IN edge. + */ + def _literalViaTaggedByIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaTaggedByIn) + + /** Traverse to LOCAL via TAGGED_BY IN edge. + */ + def _localViaTaggedByIn: Iterator[nodes.Local] = traversal.flatMap(_._localViaTaggedByIn) + + /** Traverse to MEMBER via TAGGED_BY IN edge. + */ + def _memberViaTaggedByIn: Iterator[nodes.Member] = traversal.flatMap(_._memberViaTaggedByIn) + + /** Traverse to METHOD via TAGGED_BY IN edge. + */ + def _methodViaTaggedByIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaTaggedByIn) + + /** Traverse to METHOD_PARAMETER_IN via TAGGED_BY IN edge. + */ + def _methodParameterInViaTaggedByIn: Iterator[nodes.MethodParameterIn] = + traversal.flatMap(_._methodParameterInViaTaggedByIn) + + /** Traverse to METHOD_PARAMETER_OUT via TAGGED_BY IN edge. + */ + def _methodParameterOutViaTaggedByIn: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaTaggedByIn) + + /** Traverse to METHOD_REF via TAGGED_BY IN edge. + */ + def _methodRefViaTaggedByIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaTaggedByIn) + + /** Traverse to METHOD_RETURN via TAGGED_BY IN edge. + */ + def _methodReturnViaTaggedByIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaTaggedByIn) + + /** Traverse to RETURN via TAGGED_BY IN edge. + */ + def _returnViaTaggedByIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaTaggedByIn) + + /** Traverse to TAG via TAGGED_BY IN edge. + */ + def _tagViaTaggedByIn: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByIn) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TEMPLATE_DOM via TAGGED_BY IN edge. + */ + def _templateDomViaTaggedByIn: Iterator[nodes.TemplateDom] = traversal.flatMap(_._templateDomViaTaggedByIn) + + /** Traverse to TYPE_DECL via TAGGED_BY IN edge. + */ + def _typeDeclViaTaggedByIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaTaggedByIn) + + /** Traverse to TYPE_REF via TAGGED_BY IN edge. + */ + def _typeRefViaTaggedByIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaTaggedByIn) + + /** Traverse to UNKNOWN via TAGGED_BY IN edge. + */ + def _unknownViaTaggedByIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaTaggedByIn) + + def taggedByIn: Iterator[nodes.StoredNode] = traversal.flatMap(_.taggedByIn) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TemplateDom.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TemplateDom.scala new file mode 100644 index 000000000..76600ab2d --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TemplateDom.scala @@ -0,0 +1,78 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForTemplateDom(val node: nodes.TemplateDom) extends AnyVal { + + /** Traverse to EXPRESSION via ARGUMENT IN edge. + */ + def _expressionViaArgumentIn: Iterator[nodes.Expression] = argumentIn.collectAll[nodes.Expression] + + /** Traverse to EXPRESSION via AST OUT edge. + */ + def _expressionViaAstOut: Iterator[nodes.Expression] = astOut.collectAll[nodes.Expression] + + /** Traverse to EXPRESSION via REACHING_DEF OUT edge. + */ + def _expressionViaReachingDefOut: Iterator[nodes.Expression] = reachingDefOut.collectAll[nodes.Expression] + + /** Traverse to FILE via CONTAINS IN edge. + */ + def _fileViaContainsIn: Iterator[nodes.File] = containsIn.collectAll[nodes.File] + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = containsIn.collectAll[nodes.Method] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + def argumentIn: Iterator[nodes.Expression] = node._argumentIn.cast[nodes.Expression] + + def astOut: Iterator[nodes.Expression] = node._astOut.cast[nodes.Expression] + + def containsIn: Iterator[nodes.AstNode] = node._containsIn.cast[nodes.AstNode] + + def reachingDefOut: Iterator[nodes.Expression] = node._reachingDefOut.cast[nodes.Expression] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForTemplateDomTraversal(val traversal: Iterator[nodes.TemplateDom]) extends AnyVal { + + /** Traverse to EXPRESSION via ARGUMENT IN edge. + */ + def _expressionViaArgumentIn: Iterator[nodes.Expression] = traversal.flatMap(_._expressionViaArgumentIn) + + /** Traverse to EXPRESSION via AST OUT edge. + */ + def _expressionViaAstOut: Iterator[nodes.Expression] = traversal.flatMap(_._expressionViaAstOut) + + /** Traverse to EXPRESSION via REACHING_DEF OUT edge. + */ + def _expressionViaReachingDefOut: Iterator[nodes.Expression] = traversal.flatMap(_._expressionViaReachingDefOut) + + /** Traverse to FILE via CONTAINS IN edge. + */ + def _fileViaContainsIn: Iterator[nodes.File] = traversal.flatMap(_._fileViaContainsIn) + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsIn) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + def argumentIn: Iterator[nodes.Expression] = traversal.flatMap(_.argumentIn) + + def astOut: Iterator[nodes.Expression] = traversal.flatMap(_.astOut) + + def containsIn: Iterator[nodes.AstNode] = traversal.flatMap(_.containsIn) + + def reachingDefOut: Iterator[nodes.Expression] = traversal.flatMap(_.reachingDefOut) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Type.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Type.scala new file mode 100644 index 000000000..3da96504a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Type.scala @@ -0,0 +1,212 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForType(val node: nodes.Type) extends AnyVal { + + /** Traverse to ARRAY_INITIALIZER via EVAL_TYPE IN edge. + */ + def _arrayInitializerViaEvalTypeIn: Iterator[nodes.ArrayInitializer] = evalTypeIn.collectAll[nodes.ArrayInitializer] + + /** Traverse to BLOCK via EVAL_TYPE IN edge. + */ + def _blockViaEvalTypeIn: Iterator[nodes.Block] = evalTypeIn.collectAll[nodes.Block] + + /** Traverse to CALL via EVAL_TYPE IN edge. + */ + def _callViaEvalTypeIn: Iterator[nodes.Call] = evalTypeIn.collectAll[nodes.Call] + + /** Traverse to CONTROL_STRUCTURE via EVAL_TYPE IN edge. + */ + def _controlStructureViaEvalTypeIn: Iterator[nodes.ControlStructure] = evalTypeIn.collectAll[nodes.ControlStructure] + + /** Traverse to IDENTIFIER via EVAL_TYPE IN edge. + */ + def _identifierViaEvalTypeIn: Iterator[nodes.Identifier] = evalTypeIn.collectAll[nodes.Identifier] + + /** Traverse to LITERAL via EVAL_TYPE IN edge. + */ + def _literalViaEvalTypeIn: Iterator[nodes.Literal] = evalTypeIn.collectAll[nodes.Literal] + + /** Traverse to LOCAL via EVAL_TYPE IN edge. + */ + def _localViaEvalTypeIn: Iterator[nodes.Local] = evalTypeIn.collectAll[nodes.Local] + + /** Traverse to MEMBER via EVAL_TYPE IN edge. + */ + def _memberViaEvalTypeIn: Iterator[nodes.Member] = evalTypeIn.collectAll[nodes.Member] + + /** Traverse to METHOD_PARAMETER_IN via EVAL_TYPE IN edge. + */ + def _methodParameterInViaEvalTypeIn: Iterator[nodes.MethodParameterIn] = + evalTypeIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_PARAMETER_OUT via EVAL_TYPE IN edge. + */ + def _methodParameterOutViaEvalTypeIn: Iterator[nodes.MethodParameterOut] = + evalTypeIn.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via EVAL_TYPE IN edge. + */ + def _methodRefViaEvalTypeIn: Iterator[nodes.MethodRef] = evalTypeIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via EVAL_TYPE IN edge. + */ + def _methodReturnViaEvalTypeIn: Iterator[nodes.MethodReturn] = evalTypeIn.collectAll[nodes.MethodReturn] + + /** Traverse to TYPE_ARGUMENT via AST OUT edge. + */ + def _typeArgumentViaAstOut: Iterator[nodes.TypeArgument] = astOut.collectAll[nodes.TypeArgument] + + /** Traverse to TYPE_ARGUMENT via REF IN edge. + */ + def _typeArgumentViaRefIn: Iterator[nodes.TypeArgument] = refIn.collectAll[nodes.TypeArgument] + + /** Traverse to TYPE_DECL via INHERITS_FROM IN edge. + */ + def _typeDeclViaInheritsFromIn: Iterator[nodes.TypeDecl] = inheritsFromIn.collectAll[nodes.TypeDecl] + + /** Traverse to TYPE_REF via EVAL_TYPE IN edge. + */ + def _typeRefViaEvalTypeIn: Iterator[nodes.TypeRef] = evalTypeIn.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via EVAL_TYPE IN edge. + */ + def _unknownViaEvalTypeIn: Iterator[nodes.Unknown] = evalTypeIn.collectAll[nodes.Unknown] + + /** Direct alias type declarations. Traverse to TYPE_DECL via ALIAS_OF IN edge. + */ + @deprecated("please use aliasTypeDecl instead") + def _typeDeclViaAliasOfIn: Iterator[nodes.TypeDecl] = aliasTypeDecl + + /** Direct alias type declarations. Traverse to TYPE_DECL via ALIAS_OF IN edge. + */ + def aliasTypeDecl: Iterator[nodes.TypeDecl] = aliasOfIn.collectAll[nodes.TypeDecl] + + /** Type declaration which is referenced by this type. Traverse to TYPE_DECL via REF OUT edge. + */ + @deprecated("please use referencedTypeDecl instead") + def _typeDeclViaRefOut: Iterator[nodes.TypeDecl] = referencedTypeDecl + + /** Type declaration which is referenced by this type. Traverse to TYPE_DECL via REF OUT edge. + */ + def referencedTypeDecl: Iterator[nodes.TypeDecl] = refOut.collectAll[nodes.TypeDecl] + + def aliasOfIn: Iterator[nodes.TypeDecl] = node._aliasOfIn.cast[nodes.TypeDecl] + + def astOut: Iterator[nodes.TypeArgument] = node._astOut.cast[nodes.TypeArgument] + + def evalTypeIn: Iterator[nodes.AstNode] = node._evalTypeIn.cast[nodes.AstNode] + + def inheritsFromIn: Iterator[nodes.TypeDecl] = node._inheritsFromIn.cast[nodes.TypeDecl] + + def refIn: Iterator[nodes.TypeArgument] = node._refIn.cast[nodes.TypeArgument] + + def refOut: Iterator[nodes.TypeDecl] = node._refOut.cast[nodes.TypeDecl] +} + +final class AccessNeighborsForTypeTraversal(val traversal: Iterator[nodes.Type]) extends AnyVal { + + /** Traverse to ARRAY_INITIALIZER via EVAL_TYPE IN edge. + */ + def _arrayInitializerViaEvalTypeIn: Iterator[nodes.ArrayInitializer] = + traversal.flatMap(_._arrayInitializerViaEvalTypeIn) + + /** Traverse to BLOCK via EVAL_TYPE IN edge. + */ + def _blockViaEvalTypeIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaEvalTypeIn) + + /** Traverse to CALL via EVAL_TYPE IN edge. + */ + def _callViaEvalTypeIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaEvalTypeIn) + + /** Traverse to CONTROL_STRUCTURE via EVAL_TYPE IN edge. + */ + def _controlStructureViaEvalTypeIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaEvalTypeIn) + + /** Traverse to IDENTIFIER via EVAL_TYPE IN edge. + */ + def _identifierViaEvalTypeIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaEvalTypeIn) + + /** Traverse to LITERAL via EVAL_TYPE IN edge. + */ + def _literalViaEvalTypeIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaEvalTypeIn) + + /** Traverse to LOCAL via EVAL_TYPE IN edge. + */ + def _localViaEvalTypeIn: Iterator[nodes.Local] = traversal.flatMap(_._localViaEvalTypeIn) + + /** Traverse to MEMBER via EVAL_TYPE IN edge. + */ + def _memberViaEvalTypeIn: Iterator[nodes.Member] = traversal.flatMap(_._memberViaEvalTypeIn) + + /** Traverse to METHOD_PARAMETER_IN via EVAL_TYPE IN edge. + */ + def _methodParameterInViaEvalTypeIn: Iterator[nodes.MethodParameterIn] = + traversal.flatMap(_._methodParameterInViaEvalTypeIn) + + /** Traverse to METHOD_PARAMETER_OUT via EVAL_TYPE IN edge. + */ + def _methodParameterOutViaEvalTypeIn: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaEvalTypeIn) + + /** Traverse to METHOD_REF via EVAL_TYPE IN edge. + */ + def _methodRefViaEvalTypeIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaEvalTypeIn) + + /** Traverse to METHOD_RETURN via EVAL_TYPE IN edge. + */ + def _methodReturnViaEvalTypeIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaEvalTypeIn) + + /** Traverse to TYPE_ARGUMENT via AST OUT edge. + */ + def _typeArgumentViaAstOut: Iterator[nodes.TypeArgument] = traversal.flatMap(_._typeArgumentViaAstOut) + + /** Traverse to TYPE_ARGUMENT via REF IN edge. + */ + def _typeArgumentViaRefIn: Iterator[nodes.TypeArgument] = traversal.flatMap(_._typeArgumentViaRefIn) + + /** Traverse to TYPE_DECL via INHERITS_FROM IN edge. + */ + def _typeDeclViaInheritsFromIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaInheritsFromIn) + + /** Traverse to TYPE_REF via EVAL_TYPE IN edge. + */ + def _typeRefViaEvalTypeIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaEvalTypeIn) + + /** Traverse to UNKNOWN via EVAL_TYPE IN edge. + */ + def _unknownViaEvalTypeIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaEvalTypeIn) + + /** Direct alias type declarations. Traverse to TYPE_DECL via ALIAS_OF IN edge. + */ + def aliasTypeDecl: Iterator[nodes.TypeDecl] = traversal.flatMap(_.aliasTypeDecl) + + /** Direct alias type declarations. Traverse to TYPE_DECL via ALIAS_OF IN edge. + */ + @deprecated("please use aliasTypeDecl instead") + def _typeDeclViaAliasOfIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaAliasOfIn) + + /** Type declaration which is referenced by this type. Traverse to TYPE_DECL via REF OUT edge. + */ + def referencedTypeDecl: Iterator[nodes.TypeDecl] = traversal.flatMap(_.referencedTypeDecl) + + /** Type declaration which is referenced by this type. Traverse to TYPE_DECL via REF OUT edge. + */ + @deprecated("please use referencedTypeDecl instead") + def _typeDeclViaRefOut: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaRefOut) + + def aliasOfIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_.aliasOfIn) + + def astOut: Iterator[nodes.TypeArgument] = traversal.flatMap(_.astOut) + + def evalTypeIn: Iterator[nodes.AstNode] = traversal.flatMap(_.evalTypeIn) + + def inheritsFromIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_.inheritsFromIn) + + def refIn: Iterator[nodes.TypeArgument] = traversal.flatMap(_.refIn) + + def refOut: Iterator[nodes.TypeDecl] = traversal.flatMap(_.refOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeArgument.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeArgument.scala new file mode 100644 index 000000000..0bbc31743 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeArgument.scala @@ -0,0 +1,46 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForTypeArgument(val node: nodes.TypeArgument) extends AnyVal { + + /** Traverse to TYPE via AST IN edge. + */ + def _typeViaAstIn: Iterator[nodes.Type] = astIn.collectAll[nodes.Type] + + /** Traverse to TYPE via REF OUT edge. + */ + def _typeViaRefOut: Iterator[nodes.Type] = refOut.collectAll[nodes.Type] + + /** Traverse to TYPE_PARAMETER via BINDS_TO OUT edge. + */ + def _typeParameterViaBindsToOut: Iterator[nodes.TypeParameter] = bindsToOut.collectAll[nodes.TypeParameter] + + def astIn: Iterator[nodes.Type] = node._astIn.cast[nodes.Type] + + def bindsToOut: Iterator[nodes.TypeParameter] = node._bindsToOut.cast[nodes.TypeParameter] + + def refOut: Iterator[nodes.Type] = node._refOut.cast[nodes.Type] +} + +final class AccessNeighborsForTypeArgumentTraversal(val traversal: Iterator[nodes.TypeArgument]) extends AnyVal { + + /** Traverse to TYPE via AST IN edge. + */ + def _typeViaAstIn: Iterator[nodes.Type] = traversal.flatMap(_._typeViaAstIn) + + /** Traverse to TYPE via REF OUT edge. + */ + def _typeViaRefOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaRefOut) + + /** Traverse to TYPE_PARAMETER via BINDS_TO OUT edge. + */ + def _typeParameterViaBindsToOut: Iterator[nodes.TypeParameter] = traversal.flatMap(_._typeParameterViaBindsToOut) + + def astIn: Iterator[nodes.Type] = traversal.flatMap(_.astIn) + + def bindsToOut: Iterator[nodes.TypeParameter] = traversal.flatMap(_.bindsToOut) + + def refOut: Iterator[nodes.Type] = traversal.flatMap(_.refOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeDecl.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeDecl.scala new file mode 100644 index 000000000..778ba935c --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeDecl.scala @@ -0,0 +1,214 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForTypeDecl(val node: nodes.TypeDecl) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = astOut.collectAll[nodes.Annotation] + + /** Traverse to BINDING via BINDS OUT edge. + */ + def _bindingViaBindsOut: Iterator[nodes.Binding] = bindsOut.collectAll[nodes.Binding] + + /** Traverse to FILE via CONTAINS IN edge. + */ + def _fileViaContainsIn: Iterator[nodes.File] = containsIn.collectAll[nodes.File] + + /** Traverse to FILE via SOURCE_FILE OUT edge. + */ + def _fileViaSourceFileOut: Iterator[nodes.File] = sourceFileOut.collectAll[nodes.File] + + /** Traverse to IMPORT via AST OUT edge. + */ + def _importViaAstOut: Iterator[nodes.Import] = astOut.collectAll[nodes.Import] + + /** Traverse to MEMBER via AST OUT edge. + */ + def _memberViaAstOut: Iterator[nodes.Member] = astOut.collectAll[nodes.Member] + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: Option[nodes.Method] = astIn.collectAll[nodes.Method].nextOption() + + /** Traverse to METHOD via AST OUT edge. + */ + def _methodViaAstOut: Iterator[nodes.Method] = astOut.collectAll[nodes.Method] + + /** Traverse to METHOD via CONTAINS OUT edge. + */ + def _methodViaContainsOut: Iterator[nodes.Method] = containsOut.collectAll[nodes.Method] + + /** Traverse to MODIFIER via AST OUT edge. + */ + def _modifierViaAstOut: Iterator[nodes.Modifier] = astOut.collectAll[nodes.Modifier] + + /** Traverse to NAMESPACE_BLOCK via AST IN edge. + */ + @deprecated("please use namespaceBlock instead") + def _namespaceBlockViaAstIn: Option[nodes.NamespaceBlock] = namespaceBlock + + /** Traverse to NAMESPACE_BLOCK via AST IN edge. + */ + def namespaceBlock: Option[nodes.NamespaceBlock] = astIn.collectAll[nodes.NamespaceBlock].nextOption() + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE via ALIAS_OF OUT edge. + */ + @deprecated("please use aliasedType instead") + def _typeViaAliasOfOut: Iterator[nodes.Type] = aliasedType + + /** Traverse to TYPE via ALIAS_OF OUT edge. + */ + def aliasedType: Iterator[nodes.Type] = aliasOfOut.collectAll[nodes.Type] + + /** Traverse to TYPE via INHERITS_FROM OUT edge. + */ + def _typeViaInheritsFromOut: Iterator[nodes.Type] = inheritsFromOut.collectAll[nodes.Type] + + /** Traverse to TYPE via REF IN edge. + */ + def _typeViaRefIn: Iterator[nodes.Type] = refIn.collectAll[nodes.Type] + + /** Traverse to TYPE_DECL via AST IN edge. + */ + def _typeDeclViaAstIn: Option[nodes.TypeDecl] = astIn.collectAll[nodes.TypeDecl].nextOption() + + /** Traverse to TYPE_DECL via AST OUT edge. + */ + def _typeDeclViaAstOut: Iterator[nodes.TypeDecl] = astOut.collectAll[nodes.TypeDecl] + + /** Traverse to TYPE_PARAMETER via AST OUT edge. + */ + def _typeParameterViaAstOut: Iterator[nodes.TypeParameter] = astOut.collectAll[nodes.TypeParameter] + + def aliasOfOut: Iterator[nodes.Type] = node._aliasOfOut.cast[nodes.Type] + + def astIn: Iterator[nodes.AstNode] = node._astIn.cast[nodes.AstNode] + + def astOut: Iterator[nodes.AstNode] = node._astOut.cast[nodes.AstNode] + + def bindsOut: Iterator[nodes.Binding] = node._bindsOut.cast[nodes.Binding] + + def containsIn: Iterator[nodes.File] = node._containsIn.cast[nodes.File] + + def containsOut: Iterator[nodes.Method] = node._containsOut.cast[nodes.Method] + + def inheritsFromOut: Iterator[nodes.Type] = node._inheritsFromOut.cast[nodes.Type] + + def refIn: Iterator[nodes.Type] = node._refIn.cast[nodes.Type] + + def sourceFileOut: Iterator[nodes.File] = node._sourceFileOut.cast[nodes.File] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForTypeDeclTraversal(val traversal: Iterator[nodes.TypeDecl]) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = traversal.flatMap(_._annotationViaAstOut) + + /** Traverse to BINDING via BINDS OUT edge. + */ + def _bindingViaBindsOut: Iterator[nodes.Binding] = traversal.flatMap(_._bindingViaBindsOut) + + /** Traverse to FILE via CONTAINS IN edge. + */ + def _fileViaContainsIn: Iterator[nodes.File] = traversal.flatMap(_._fileViaContainsIn) + + /** Traverse to FILE via SOURCE_FILE OUT edge. + */ + def _fileViaSourceFileOut: Iterator[nodes.File] = traversal.flatMap(_._fileViaSourceFileOut) + + /** Traverse to IMPORT via AST OUT edge. + */ + def _importViaAstOut: Iterator[nodes.Import] = traversal.flatMap(_._importViaAstOut) + + /** Traverse to MEMBER via AST OUT edge. + */ + def _memberViaAstOut: Iterator[nodes.Member] = traversal.flatMap(_._memberViaAstOut) + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaAstIn) + + /** Traverse to METHOD via AST OUT edge. + */ + def _methodViaAstOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaAstOut) + + /** Traverse to METHOD via CONTAINS OUT edge. + */ + def _methodViaContainsOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsOut) + + /** Traverse to MODIFIER via AST OUT edge. + */ + def _modifierViaAstOut: Iterator[nodes.Modifier] = traversal.flatMap(_._modifierViaAstOut) + + /** Traverse to NAMESPACE_BLOCK via AST IN edge. + */ + def namespaceBlock: Iterator[nodes.NamespaceBlock] = traversal.flatMap(_.namespaceBlock) + + /** Traverse to NAMESPACE_BLOCK via AST IN edge. + */ + @deprecated("please use namespaceBlock instead") + def _namespaceBlockViaAstIn: Iterator[nodes.NamespaceBlock] = traversal.flatMap(_._namespaceBlockViaAstIn) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE via ALIAS_OF OUT edge. + */ + def aliasedType: Iterator[nodes.Type] = traversal.flatMap(_.aliasedType) + + /** Traverse to TYPE via ALIAS_OF OUT edge. + */ + @deprecated("please use aliasedType instead") + def _typeViaAliasOfOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaAliasOfOut) + + /** Traverse to TYPE via INHERITS_FROM OUT edge. + */ + def _typeViaInheritsFromOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaInheritsFromOut) + + /** Traverse to TYPE via REF IN edge. + */ + def _typeViaRefIn: Iterator[nodes.Type] = traversal.flatMap(_._typeViaRefIn) + + /** Traverse to TYPE_DECL via AST IN edge. + */ + def _typeDeclViaAstIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaAstIn) + + /** Traverse to TYPE_DECL via AST OUT edge. + */ + def _typeDeclViaAstOut: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaAstOut) + + /** Traverse to TYPE_PARAMETER via AST OUT edge. + */ + def _typeParameterViaAstOut: Iterator[nodes.TypeParameter] = traversal.flatMap(_._typeParameterViaAstOut) + + def aliasOfOut: Iterator[nodes.Type] = traversal.flatMap(_.aliasOfOut) + + def astIn: Iterator[nodes.AstNode] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.AstNode] = traversal.flatMap(_.astOut) + + def bindsOut: Iterator[nodes.Binding] = traversal.flatMap(_.bindsOut) + + def containsIn: Iterator[nodes.File] = traversal.flatMap(_.containsIn) + + def containsOut: Iterator[nodes.Method] = traversal.flatMap(_.containsOut) + + def inheritsFromOut: Iterator[nodes.Type] = traversal.flatMap(_.inheritsFromOut) + + def refIn: Iterator[nodes.Type] = traversal.flatMap(_.refIn) + + def sourceFileOut: Iterator[nodes.File] = traversal.flatMap(_.sourceFileOut) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeParameter.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeParameter.scala new file mode 100644 index 000000000..1b1b7adc7 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeParameter.scala @@ -0,0 +1,51 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForTypeParameter(val node: nodes.TypeParameter) extends AnyVal { + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: nodes.Method = { + try { astIn.collectAll[nodes.Method].next() } + catch { + case e: java.util.NoSuchElementException => + throw new flatgraph.SchemaViolationException( + "IN edge with label AST to an adjacent METHOD is mandatory, but not defined for this TYPE_PARAMETER node with seq=" + node.seq, + e + ) + } + } + + /** Traverse to TYPE_ARGUMENT via BINDS_TO IN edge. + */ + def _typeArgumentViaBindsToIn: Iterator[nodes.TypeArgument] = bindsToIn.collectAll[nodes.TypeArgument] + + /** Traverse to TYPE_DECL via AST IN edge. + */ + def _typeDeclViaAstIn: Iterator[nodes.TypeDecl] = astIn.collectAll[nodes.TypeDecl] + + def astIn: Iterator[nodes.AstNode] = node._astIn.cast[nodes.AstNode] + + def bindsToIn: Iterator[nodes.TypeArgument] = node._bindsToIn.cast[nodes.TypeArgument] +} + +final class AccessNeighborsForTypeParameterTraversal(val traversal: Iterator[nodes.TypeParameter]) extends AnyVal { + + /** Traverse to METHOD via AST IN edge. + */ + def _methodViaAstIn: Iterator[nodes.Method] = traversal.map(_._methodViaAstIn) + + /** Traverse to TYPE_ARGUMENT via BINDS_TO IN edge. + */ + def _typeArgumentViaBindsToIn: Iterator[nodes.TypeArgument] = traversal.flatMap(_._typeArgumentViaBindsToIn) + + /** Traverse to TYPE_DECL via AST IN edge. + */ + def _typeDeclViaAstIn: Iterator[nodes.TypeDecl] = traversal.flatMap(_._typeDeclViaAstIn) + + def astIn: Iterator[nodes.AstNode] = traversal.flatMap(_.astIn) + + def bindsToIn: Iterator[nodes.TypeArgument] = traversal.flatMap(_.bindsToIn) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeRef.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeRef.scala new file mode 100644 index 000000000..99f7f7092 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/TypeRef.scala @@ -0,0 +1,923 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForTypeRef(val node: nodes.TypeRef) extends AnyVal { + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = astIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = cdgIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = cdgOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = dominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = dominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = postDominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = postDominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = reachingDefIn.collectAll[nodes.Block] + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = argumentIn.collectAll[nodes.Call] + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = astIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = cdgIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = cdgOut.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = dominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = dominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = postDominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = postDominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = reachingDefIn.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = reachingDefOut.collectAll[nodes.Call] + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Iterator[nodes.Call] = receiverIn.collectAll[nodes.Call] + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = cfgOut.collectAll[nodes.CfgNode] + + /** Traverse to CLOSURE_BINDING via CAPTURE OUT edge. + */ + def _closureBindingViaCaptureOut: Iterator[nodes.ClosureBinding] = captureOut.collectAll[nodes.ClosureBinding] + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = astIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = cdgIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = cdgOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = conditionIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = dominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = dominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + postDominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + postDominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + reachingDefIn.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = cdgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = cdgOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = dominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = dominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + postDominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + postDominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = cdgIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = cdgOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = dominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = dominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = postDominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = postDominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = reachingDefIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = reachingDefOut.collectAll[nodes.Identifier] + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = cdgIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = cdgOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = dominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = dominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = postDominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = postDominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = cdgIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = cdgOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = dominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = dominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = postDominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = postDominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = reachingDefIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = reachingDefOut.collectAll[nodes.Literal] + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = containsIn.collectAll[nodes.Method] + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = dominateIn.collectAll[nodes.Method] + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = postDominateOut.collectAll[nodes.Method] + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = reachingDefIn.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + reachingDefIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. + */ + def _methodParameterOutViaReachingDefIn: Iterator[nodes.MethodParameterOut] = + reachingDefIn.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + reachingDefOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = cdgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = cdgOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = dominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = dominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = postDominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = postDominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = reachingDefIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = reachingDefOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = cdgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via CFG OUT edge. + */ + def _methodReturnViaCfgOut: Iterator[nodes.MethodReturn] = cfgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = dominateOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = postDominateIn.collectAll[nodes.MethodReturn] + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = argumentIn.collectAll[nodes.Return] + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = astIn.collectAll[nodes.Return] + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = cdgOut.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = dominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = dominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = postDominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = postDominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF IN edge. + */ + def _returnViaReachingDefIn: Iterator[nodes.Return] = reachingDefIn.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = reachingDefOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = cdgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = cdgOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = dominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = dominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = postDominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = postDominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = reachingDefIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = reachingDefOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = cdgIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = cdgOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = dominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = dominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = postDominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = postDominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = reachingDefIn.collectAll[nodes.Unknown] + + def argumentIn: Iterator[nodes.Expression] = node._argumentIn.cast[nodes.Expression] + + def astIn: Iterator[nodes.Expression] = node._astIn.cast[nodes.Expression] + + def captureOut: Iterator[nodes.ClosureBinding] = node._captureOut.cast[nodes.ClosureBinding] + + def cdgIn: Iterator[nodes.CfgNode] = node._cdgIn.cast[nodes.CfgNode] + + def cdgOut: Iterator[nodes.CfgNode] = node._cdgOut.cast[nodes.CfgNode] + + def cfgOut: Iterator[nodes.AstNode] = node._cfgOut.cast[nodes.AstNode] + + def conditionIn: Iterator[nodes.ControlStructure] = node._conditionIn.cast[nodes.ControlStructure] + + def containsIn: Iterator[nodes.Method] = node._containsIn.cast[nodes.Method] + + def dominateIn: Iterator[nodes.CfgNode] = node._dominateIn.cast[nodes.CfgNode] + + def dominateOut: Iterator[nodes.CfgNode] = node._dominateOut.cast[nodes.CfgNode] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def postDominateIn: Iterator[nodes.CfgNode] = node._postDominateIn.cast[nodes.CfgNode] + + def postDominateOut: Iterator[nodes.CfgNode] = node._postDominateOut.cast[nodes.CfgNode] + + def reachingDefIn: Iterator[nodes.CfgNode] = node._reachingDefIn.cast[nodes.CfgNode] + + def reachingDefOut: Iterator[nodes.CfgNode] = node._reachingDefOut.cast[nodes.CfgNode] + + def receiverIn: Iterator[nodes.Call] = node._receiverIn.cast[nodes.Call] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForTypeRefTraversal(val traversal: Iterator[nodes.TypeRef]) extends AnyVal { + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstIn) + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgIn) + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgOut) + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateIn) + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateOut) + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateIn) + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateOut) + + /** Traverse to BLOCK via REACHING_DEF IN edge. + */ + def _blockViaReachingDefIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaReachingDefIn) + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaArgumentIn) + + /** Traverse to CALL via AST IN edge. + */ + def _callViaAstIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstIn) + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgIn) + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgOut) + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateIn) + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateOut) + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateIn) + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateOut) + + /** Traverse to CALL via REACHING_DEF IN edge. + */ + def _callViaReachingDefIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefIn) + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefOut) + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReceiverIn) + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_._cfgNodeViaCfgOut) + + /** Traverse to CLOSURE_BINDING via CAPTURE OUT edge. + */ + def _closureBindingViaCaptureOut: Iterator[nodes.ClosureBinding] = traversal.flatMap(_._closureBindingViaCaptureOut) + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstIn) + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgIn) + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgOut) + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaConditionIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateOut) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateIn) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateOut) + + /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. + */ + def _controlStructureViaReachingDefIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaReachingDefIn) + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgIn) + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgOut) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateOut) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateIn) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgIn) + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgOut) + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateIn) + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateOut) + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateIn) + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via REACHING_DEF IN edge. + */ + def _identifierViaReachingDefIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefIn) + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefOut) + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgIn) + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgOut) + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateIn) + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateOut) + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateIn) + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateOut) + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgIn) + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgOut) + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateIn) + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateOut) + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateIn) + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateOut) + + /** Traverse to LITERAL via REACHING_DEF IN edge. + */ + def _literalViaReachingDefIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefIn) + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefOut) + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsIn) + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaDominateIn) + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaPostDominateOut) + + /** Traverse to METHOD via REACHING_DEF IN edge. + */ + def _methodViaReachingDefIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. + */ + def _methodParameterInViaReachingDefIn: Iterator[nodes.MethodParameterIn] = + traversal.flatMap(_._methodParameterInViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. + */ + def _methodParameterOutViaReachingDefIn: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefOut) + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgIn) + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgOut) + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateIn) + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateOut) + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateIn) + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateOut) + + /** Traverse to METHOD_REF via REACHING_DEF IN edge. + */ + def _methodRefViaReachingDefIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefIn) + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefOut) + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCdgOut) + + /** Traverse to METHOD_RETURN via CFG OUT edge. + */ + def _methodReturnViaCfgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCfgOut) + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaDominateOut) + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaPostDominateIn) + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaArgumentIn) + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstIn) + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaCdgOut) + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateIn) + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateOut) + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateIn) + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateOut) + + /** Traverse to RETURN via REACHING_DEF IN edge. + */ + def _returnViaReachingDefIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefIn) + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgIn) + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgOut) + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateIn) + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateOut) + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateIn) + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateOut) + + /** Traverse to TYPE_REF via REACHING_DEF IN edge. + */ + def _typeRefViaReachingDefIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefIn) + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefOut) + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgIn) + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgOut) + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateIn) + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateOut) + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateIn) + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateOut) + + /** Traverse to UNKNOWN via REACHING_DEF IN edge. + */ + def _unknownViaReachingDefIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaReachingDefIn) + + def argumentIn: Iterator[nodes.Expression] = traversal.flatMap(_.argumentIn) + + def astIn: Iterator[nodes.Expression] = traversal.flatMap(_.astIn) + + def captureOut: Iterator[nodes.ClosureBinding] = traversal.flatMap(_.captureOut) + + def cdgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgIn) + + def cdgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgOut) + + def cfgOut: Iterator[nodes.AstNode] = traversal.flatMap(_.cfgOut) + + def conditionIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_.conditionIn) + + def containsIn: Iterator[nodes.Method] = traversal.flatMap(_.containsIn) + + def dominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateIn) + + def dominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateOut) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def postDominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateIn) + + def postDominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateOut) + + def reachingDefIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefIn) + + def reachingDefOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefOut) + + def receiverIn: Iterator[nodes.Call] = traversal.flatMap(_.receiverIn) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Unknown.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Unknown.scala new file mode 100644 index 000000000..19aab833a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/Unknown.scala @@ -0,0 +1,913 @@ +package io.shiftleft.codepropertygraph.generated.neighboraccessors + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.language.* + +final class AccessNeighborsForUnknown(val node: nodes.Unknown) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = astOut.collectAll[nodes.Annotation] + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = astIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via AST OUT edge. + */ + def _blockViaAstOut: Iterator[nodes.Block] = astOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = cdgIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = cdgOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = dominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = dominateOut.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = postDominateIn.collectAll[nodes.Block] + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = postDominateOut.collectAll[nodes.Block] + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = argumentIn.collectAll[nodes.Call] + + /** Traverse to CALL via AST OUT edge. + */ + def _callViaAstOut: Iterator[nodes.Call] = astOut.collectAll[nodes.Call] + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = cdgIn.collectAll[nodes.Call] + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = cdgOut.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = dominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = dominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = postDominateIn.collectAll[nodes.Call] + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = postDominateOut.collectAll[nodes.Call] + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = reachingDefOut.collectAll[nodes.Call] + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Iterator[nodes.Call] = receiverIn.collectAll[nodes.Call] + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = cfgOut.collectAll[nodes.CfgNode] + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = astIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via AST OUT edge. + */ + def _controlStructureViaAstOut: Iterator[nodes.ControlStructure] = astOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = cdgIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = cdgOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = conditionIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = dominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = dominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + postDominateIn.collectAll[nodes.ControlStructure] + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + postDominateOut.collectAll[nodes.ControlStructure] + + /** Traverse to FIELD_IDENTIFIER via AST OUT edge. + */ + def _fieldIdentifierViaAstOut: Iterator[nodes.FieldIdentifier] = astOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = cdgIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = cdgOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = dominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = dominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + postDominateIn.collectAll[nodes.FieldIdentifier] + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + postDominateOut.collectAll[nodes.FieldIdentifier] + + /** Traverse to IDENTIFIER via AST OUT edge. + */ + def _identifierViaAstOut: Iterator[nodes.Identifier] = astOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = cdgIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = cdgOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = dominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = dominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = postDominateIn.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = postDominateOut.collectAll[nodes.Identifier] + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = reachingDefOut.collectAll[nodes.Identifier] + + /** Traverse to JUMP_TARGET via AST OUT edge. + */ + def _jumpTargetViaAstOut: Iterator[nodes.JumpTarget] = astOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = cdgIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = cdgOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = dominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = dominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = postDominateIn.collectAll[nodes.JumpTarget] + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = postDominateOut.collectAll[nodes.JumpTarget] + + /** Traverse to LITERAL via AST OUT edge. + */ + def _literalViaAstOut: Iterator[nodes.Literal] = astOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = cdgIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = cdgOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = dominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = dominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = postDominateIn.collectAll[nodes.Literal] + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = postDominateOut.collectAll[nodes.Literal] + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = reachingDefOut.collectAll[nodes.Literal] + + /** Traverse to LOCAL via AST OUT edge. + */ + def _localViaAstOut: Iterator[nodes.Local] = astOut.collectAll[nodes.Local] + + /** Traverse to MEMBER via AST OUT edge. + */ + def _memberViaAstOut: Iterator[nodes.Member] = astOut.collectAll[nodes.Member] + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = containsIn.collectAll[nodes.Method] + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = dominateIn.collectAll[nodes.Method] + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = postDominateOut.collectAll[nodes.Method] + + /** Traverse to METHOD_PARAMETER_IN via AST IN edge. + */ + def _methodParameterInViaAstIn: Iterator[nodes.MethodParameterIn] = astIn.collectAll[nodes.MethodParameterIn] + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + reachingDefOut.collectAll[nodes.MethodParameterOut] + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = cdgIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = cdgOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = dominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = dominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = postDominateIn.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = postDominateOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = reachingDefOut.collectAll[nodes.MethodRef] + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = cdgOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = dominateOut.collectAll[nodes.MethodReturn] + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = postDominateIn.collectAll[nodes.MethodReturn] + + /** Traverse to MODIFIER via AST OUT edge. + */ + def _modifierViaAstOut: Iterator[nodes.Modifier] = astOut.collectAll[nodes.Modifier] + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = argumentIn.collectAll[nodes.Return] + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = astIn.collectAll[nodes.Return] + + /** Traverse to RETURN via AST OUT edge. + */ + def _returnViaAstOut: Iterator[nodes.Return] = astOut.collectAll[nodes.Return] + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = cdgOut.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = dominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = dominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = postDominateIn.collectAll[nodes.Return] + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = postDominateOut.collectAll[nodes.Return] + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = reachingDefOut.collectAll[nodes.Return] + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = taggedByOut.collectAll[nodes.Tag] + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = evalTypeOut.collectAll[nodes.Type] + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = cdgIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = cdgOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = dominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = dominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = postDominateIn.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = postDominateOut.collectAll[nodes.TypeRef] + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = reachingDefOut.collectAll[nodes.TypeRef] + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = astIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via AST OUT edge. + */ + def _unknownViaAstOut: Iterator[nodes.Unknown] = astOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = cdgIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = cdgOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = dominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = dominateOut.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = postDominateIn.collectAll[nodes.Unknown] + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = postDominateOut.collectAll[nodes.Unknown] + + def argumentIn: Iterator[nodes.Expression] = node._argumentIn.cast[nodes.Expression] + + def astIn: Iterator[nodes.CfgNode] = node._astIn.cast[nodes.CfgNode] + + def astOut: Iterator[nodes.AstNode] = node._astOut.cast[nodes.AstNode] + + def cdgIn: Iterator[nodes.CfgNode] = node._cdgIn.cast[nodes.CfgNode] + + def cdgOut: Iterator[nodes.CfgNode] = node._cdgOut.cast[nodes.CfgNode] + + def cfgOut: Iterator[nodes.CfgNode] = node._cfgOut.cast[nodes.CfgNode] + + def conditionIn: Iterator[nodes.ControlStructure] = node._conditionIn.cast[nodes.ControlStructure] + + def containsIn: Iterator[nodes.Method] = node._containsIn.cast[nodes.Method] + + def dominateIn: Iterator[nodes.CfgNode] = node._dominateIn.cast[nodes.CfgNode] + + def dominateOut: Iterator[nodes.CfgNode] = node._dominateOut.cast[nodes.CfgNode] + + def evalTypeOut: Iterator[nodes.Type] = node._evalTypeOut.cast[nodes.Type] + + def postDominateIn: Iterator[nodes.CfgNode] = node._postDominateIn.cast[nodes.CfgNode] + + def postDominateOut: Iterator[nodes.CfgNode] = node._postDominateOut.cast[nodes.CfgNode] + + def reachingDefOut: Iterator[nodes.CfgNode] = node._reachingDefOut.cast[nodes.CfgNode] + + def receiverIn: Iterator[nodes.Call] = node._receiverIn.cast[nodes.Call] + + def taggedByOut: Iterator[nodes.Tag] = node._taggedByOut.cast[nodes.Tag] +} + +final class AccessNeighborsForUnknownTraversal(val traversal: Iterator[nodes.Unknown]) extends AnyVal { + + /** Traverse to ANNOTATION via AST OUT edge. + */ + def _annotationViaAstOut: Iterator[nodes.Annotation] = traversal.flatMap(_._annotationViaAstOut) + + /** Traverse to BLOCK via AST IN edge. + */ + def _blockViaAstIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstIn) + + /** Traverse to BLOCK via AST OUT edge. + */ + def _blockViaAstOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaAstOut) + + /** Traverse to BLOCK via CDG IN edge. + */ + def _blockViaCdgIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgIn) + + /** Traverse to BLOCK via CDG OUT edge. + */ + def _blockViaCdgOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaCdgOut) + + /** Traverse to BLOCK via DOMINATE IN edge. + */ + def _blockViaDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateIn) + + /** Traverse to BLOCK via DOMINATE OUT edge. + */ + def _blockViaDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaDominateOut) + + /** Traverse to BLOCK via POST_DOMINATE IN edge. + */ + def _blockViaPostDominateIn: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateIn) + + /** Traverse to BLOCK via POST_DOMINATE OUT edge. + */ + def _blockViaPostDominateOut: Iterator[nodes.Block] = traversal.flatMap(_._blockViaPostDominateOut) + + /** Traverse to CALL via ARGUMENT IN edge. + */ + def _callViaArgumentIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaArgumentIn) + + /** Traverse to CALL via AST OUT edge. + */ + def _callViaAstOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaAstOut) + + /** Traverse to CALL via CDG IN edge. + */ + def _callViaCdgIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgIn) + + /** Traverse to CALL via CDG OUT edge. + */ + def _callViaCdgOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaCdgOut) + + /** Traverse to CALL via DOMINATE IN edge. + */ + def _callViaDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateIn) + + /** Traverse to CALL via DOMINATE OUT edge. + */ + def _callViaDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaDominateOut) + + /** Traverse to CALL via POST_DOMINATE IN edge. + */ + def _callViaPostDominateIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateIn) + + /** Traverse to CALL via POST_DOMINATE OUT edge. + */ + def _callViaPostDominateOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaPostDominateOut) + + /** Traverse to CALL via REACHING_DEF OUT edge. + */ + def _callViaReachingDefOut: Iterator[nodes.Call] = traversal.flatMap(_._callViaReachingDefOut) + + /** Traverse to CALL via RECEIVER IN edge. + */ + def _callViaReceiverIn: Iterator[nodes.Call] = traversal.flatMap(_._callViaReceiverIn) + + /** Traverse to CFG_NODE via CFG OUT edge. + */ + def _cfgNodeViaCfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_._cfgNodeViaCfgOut) + + /** Traverse to CONTROL_STRUCTURE via AST IN edge. + */ + def _controlStructureViaAstIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstIn) + + /** Traverse to CONTROL_STRUCTURE via AST OUT edge. + */ + def _controlStructureViaAstOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaAstOut) + + /** Traverse to CONTROL_STRUCTURE via CDG IN edge. + */ + def _controlStructureViaCdgIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgIn) + + /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. + */ + def _controlStructureViaCdgOut: Iterator[nodes.ControlStructure] = traversal.flatMap(_._controlStructureViaCdgOut) + + /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. + */ + def _controlStructureViaConditionIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaConditionIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. + */ + def _controlStructureViaDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateIn) + + /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. + */ + def _controlStructureViaDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaDominateOut) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. + */ + def _controlStructureViaPostDominateIn: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateIn) + + /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. + */ + def _controlStructureViaPostDominateOut: Iterator[nodes.ControlStructure] = + traversal.flatMap(_._controlStructureViaPostDominateOut) + + /** Traverse to FIELD_IDENTIFIER via AST OUT edge. + */ + def _fieldIdentifierViaAstOut: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaAstOut) + + /** Traverse to FIELD_IDENTIFIER via CDG IN edge. + */ + def _fieldIdentifierViaCdgIn: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgIn) + + /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. + */ + def _fieldIdentifierViaCdgOut: Iterator[nodes.FieldIdentifier] = traversal.flatMap(_._fieldIdentifierViaCdgOut) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. + */ + def _fieldIdentifierViaDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateIn) + + /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. + */ + def _fieldIdentifierViaDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaDominateOut) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. + */ + def _fieldIdentifierViaPostDominateIn: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateIn) + + /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _fieldIdentifierViaPostDominateOut: Iterator[nodes.FieldIdentifier] = + traversal.flatMap(_._fieldIdentifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via AST OUT edge. + */ + def _identifierViaAstOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaAstOut) + + /** Traverse to IDENTIFIER via CDG IN edge. + */ + def _identifierViaCdgIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgIn) + + /** Traverse to IDENTIFIER via CDG OUT edge. + */ + def _identifierViaCdgOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaCdgOut) + + /** Traverse to IDENTIFIER via DOMINATE IN edge. + */ + def _identifierViaDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateIn) + + /** Traverse to IDENTIFIER via DOMINATE OUT edge. + */ + def _identifierViaDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaDominateOut) + + /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. + */ + def _identifierViaPostDominateIn: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateIn) + + /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. + */ + def _identifierViaPostDominateOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaPostDominateOut) + + /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. + */ + def _identifierViaReachingDefOut: Iterator[nodes.Identifier] = traversal.flatMap(_._identifierViaReachingDefOut) + + /** Traverse to JUMP_TARGET via AST OUT edge. + */ + def _jumpTargetViaAstOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaAstOut) + + /** Traverse to JUMP_TARGET via CDG IN edge. + */ + def _jumpTargetViaCdgIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgIn) + + /** Traverse to JUMP_TARGET via CDG OUT edge. + */ + def _jumpTargetViaCdgOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaCdgOut) + + /** Traverse to JUMP_TARGET via DOMINATE IN edge. + */ + def _jumpTargetViaDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateIn) + + /** Traverse to JUMP_TARGET via DOMINATE OUT edge. + */ + def _jumpTargetViaDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaDominateOut) + + /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. + */ + def _jumpTargetViaPostDominateIn: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateIn) + + /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. + */ + def _jumpTargetViaPostDominateOut: Iterator[nodes.JumpTarget] = traversal.flatMap(_._jumpTargetViaPostDominateOut) + + /** Traverse to LITERAL via AST OUT edge. + */ + def _literalViaAstOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaAstOut) + + /** Traverse to LITERAL via CDG IN edge. + */ + def _literalViaCdgIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgIn) + + /** Traverse to LITERAL via CDG OUT edge. + */ + def _literalViaCdgOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaCdgOut) + + /** Traverse to LITERAL via DOMINATE IN edge. + */ + def _literalViaDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateIn) + + /** Traverse to LITERAL via DOMINATE OUT edge. + */ + def _literalViaDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaDominateOut) + + /** Traverse to LITERAL via POST_DOMINATE IN edge. + */ + def _literalViaPostDominateIn: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateIn) + + /** Traverse to LITERAL via POST_DOMINATE OUT edge. + */ + def _literalViaPostDominateOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaPostDominateOut) + + /** Traverse to LITERAL via REACHING_DEF OUT edge. + */ + def _literalViaReachingDefOut: Iterator[nodes.Literal] = traversal.flatMap(_._literalViaReachingDefOut) + + /** Traverse to LOCAL via AST OUT edge. + */ + def _localViaAstOut: Iterator[nodes.Local] = traversal.flatMap(_._localViaAstOut) + + /** Traverse to MEMBER via AST OUT edge. + */ + def _memberViaAstOut: Iterator[nodes.Member] = traversal.flatMap(_._memberViaAstOut) + + /** Traverse to METHOD via CONTAINS IN edge. + */ + def _methodViaContainsIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaContainsIn) + + /** Traverse to METHOD via DOMINATE IN edge. + */ + def _methodViaDominateIn: Iterator[nodes.Method] = traversal.flatMap(_._methodViaDominateIn) + + /** Traverse to METHOD via POST_DOMINATE OUT edge. + */ + def _methodViaPostDominateOut: Iterator[nodes.Method] = traversal.flatMap(_._methodViaPostDominateOut) + + /** Traverse to METHOD_PARAMETER_IN via AST IN edge. + */ + def _methodParameterInViaAstIn: Iterator[nodes.MethodParameterIn] = traversal.flatMap(_._methodParameterInViaAstIn) + + /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. + */ + def _methodParameterOutViaReachingDefOut: Iterator[nodes.MethodParameterOut] = + traversal.flatMap(_._methodParameterOutViaReachingDefOut) + + /** Traverse to METHOD_REF via CDG IN edge. + */ + def _methodRefViaCdgIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgIn) + + /** Traverse to METHOD_REF via CDG OUT edge. + */ + def _methodRefViaCdgOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaCdgOut) + + /** Traverse to METHOD_REF via DOMINATE IN edge. + */ + def _methodRefViaDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateIn) + + /** Traverse to METHOD_REF via DOMINATE OUT edge. + */ + def _methodRefViaDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaDominateOut) + + /** Traverse to METHOD_REF via POST_DOMINATE IN edge. + */ + def _methodRefViaPostDominateIn: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateIn) + + /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. + */ + def _methodRefViaPostDominateOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaPostDominateOut) + + /** Traverse to METHOD_REF via REACHING_DEF OUT edge. + */ + def _methodRefViaReachingDefOut: Iterator[nodes.MethodRef] = traversal.flatMap(_._methodRefViaReachingDefOut) + + /** Traverse to METHOD_RETURN via CDG OUT edge. + */ + def _methodReturnViaCdgOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaCdgOut) + + /** Traverse to METHOD_RETURN via DOMINATE OUT edge. + */ + def _methodReturnViaDominateOut: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaDominateOut) + + /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. + */ + def _methodReturnViaPostDominateIn: Iterator[nodes.MethodReturn] = traversal.flatMap(_._methodReturnViaPostDominateIn) + + /** Traverse to MODIFIER via AST OUT edge. + */ + def _modifierViaAstOut: Iterator[nodes.Modifier] = traversal.flatMap(_._modifierViaAstOut) + + /** Traverse to RETURN via ARGUMENT IN edge. + */ + def _returnViaArgumentIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaArgumentIn) + + /** Traverse to RETURN via AST IN edge. + */ + def _returnViaAstIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstIn) + + /** Traverse to RETURN via AST OUT edge. + */ + def _returnViaAstOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaAstOut) + + /** Traverse to RETURN via CDG OUT edge. + */ + def _returnViaCdgOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaCdgOut) + + /** Traverse to RETURN via DOMINATE IN edge. + */ + def _returnViaDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateIn) + + /** Traverse to RETURN via DOMINATE OUT edge. + */ + def _returnViaDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaDominateOut) + + /** Traverse to RETURN via POST_DOMINATE IN edge. + */ + def _returnViaPostDominateIn: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateIn) + + /** Traverse to RETURN via POST_DOMINATE OUT edge. + */ + def _returnViaPostDominateOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaPostDominateOut) + + /** Traverse to RETURN via REACHING_DEF OUT edge. + */ + def _returnViaReachingDefOut: Iterator[nodes.Return] = traversal.flatMap(_._returnViaReachingDefOut) + + /** Traverse to TAG via TAGGED_BY OUT edge. + */ + def _tagViaTaggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_._tagViaTaggedByOut) + + /** Traverse to TYPE via EVAL_TYPE OUT edge. + */ + def _typeViaEvalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_._typeViaEvalTypeOut) + + /** Traverse to TYPE_REF via CDG IN edge. + */ + def _typeRefViaCdgIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgIn) + + /** Traverse to TYPE_REF via CDG OUT edge. + */ + def _typeRefViaCdgOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaCdgOut) + + /** Traverse to TYPE_REF via DOMINATE IN edge. + */ + def _typeRefViaDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateIn) + + /** Traverse to TYPE_REF via DOMINATE OUT edge. + */ + def _typeRefViaDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaDominateOut) + + /** Traverse to TYPE_REF via POST_DOMINATE IN edge. + */ + def _typeRefViaPostDominateIn: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateIn) + + /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. + */ + def _typeRefViaPostDominateOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaPostDominateOut) + + /** Traverse to TYPE_REF via REACHING_DEF OUT edge. + */ + def _typeRefViaReachingDefOut: Iterator[nodes.TypeRef] = traversal.flatMap(_._typeRefViaReachingDefOut) + + /** Traverse to UNKNOWN via AST IN edge. + */ + def _unknownViaAstIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstIn) + + /** Traverse to UNKNOWN via AST OUT edge. + */ + def _unknownViaAstOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaAstOut) + + /** Traverse to UNKNOWN via CDG IN edge. + */ + def _unknownViaCdgIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgIn) + + /** Traverse to UNKNOWN via CDG OUT edge. + */ + def _unknownViaCdgOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaCdgOut) + + /** Traverse to UNKNOWN via DOMINATE IN edge. + */ + def _unknownViaDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateIn) + + /** Traverse to UNKNOWN via DOMINATE OUT edge. + */ + def _unknownViaDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaDominateOut) + + /** Traverse to UNKNOWN via POST_DOMINATE IN edge. + */ + def _unknownViaPostDominateIn: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateIn) + + /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. + */ + def _unknownViaPostDominateOut: Iterator[nodes.Unknown] = traversal.flatMap(_._unknownViaPostDominateOut) + + def argumentIn: Iterator[nodes.Expression] = traversal.flatMap(_.argumentIn) + + def astIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.astIn) + + def astOut: Iterator[nodes.AstNode] = traversal.flatMap(_.astOut) + + def cdgIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgIn) + + def cdgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cdgOut) + + def cfgOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.cfgOut) + + def conditionIn: Iterator[nodes.ControlStructure] = traversal.flatMap(_.conditionIn) + + def containsIn: Iterator[nodes.Method] = traversal.flatMap(_.containsIn) + + def dominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateIn) + + def dominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.dominateOut) + + def evalTypeOut: Iterator[nodes.Type] = traversal.flatMap(_.evalTypeOut) + + def postDominateIn: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateIn) + + def postDominateOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.postDominateOut) + + def reachingDefOut: Iterator[nodes.CfgNode] = traversal.flatMap(_.reachingDefOut) + + def receiverIn: Iterator[nodes.Call] = traversal.flatMap(_.receiverIn) + + def taggedByOut: Iterator[nodes.Tag] = traversal.flatMap(_.taggedByOut) +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/package.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/package.scala new file mode 100644 index 000000000..95fb803d8 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/neighboraccessors/package.scala @@ -0,0 +1,332 @@ +package io.shiftleft.codepropertygraph.generated + +import flatgraph.traversal.language.* +import io.shiftleft.codepropertygraph.generated.nodes + +package object neighboraccessors { + object Lang extends Conversions + + trait Conversions { + implicit def accessNeighborsForAnnotation(node: nodes.Annotation): AccessNeighborsForAnnotation = + new AccessNeighborsForAnnotation(node) + + implicit def accessNeighborsForAnnotationTraversal( + traversal: IterableOnce[nodes.Annotation] + ): AccessNeighborsForAnnotationTraversal = + new AccessNeighborsForAnnotationTraversal(traversal.iterator) + + implicit def accessNeighborsForAnnotationLiteral( + node: nodes.AnnotationLiteral + ): AccessNeighborsForAnnotationLiteral = + new AccessNeighborsForAnnotationLiteral(node) + + implicit def accessNeighborsForAnnotationLiteralTraversal( + traversal: IterableOnce[nodes.AnnotationLiteral] + ): AccessNeighborsForAnnotationLiteralTraversal = + new AccessNeighborsForAnnotationLiteralTraversal(traversal.iterator) + + implicit def accessNeighborsForAnnotationParameter( + node: nodes.AnnotationParameter + ): AccessNeighborsForAnnotationParameter = + new AccessNeighborsForAnnotationParameter(node) + + implicit def accessNeighborsForAnnotationParameterTraversal( + traversal: IterableOnce[nodes.AnnotationParameter] + ): AccessNeighborsForAnnotationParameterTraversal = + new AccessNeighborsForAnnotationParameterTraversal(traversal.iterator) + + implicit def accessNeighborsForAnnotationParameterAssign( + node: nodes.AnnotationParameterAssign + ): AccessNeighborsForAnnotationParameterAssign = + new AccessNeighborsForAnnotationParameterAssign(node) + + implicit def accessNeighborsForAnnotationParameterAssignTraversal( + traversal: IterableOnce[nodes.AnnotationParameterAssign] + ): AccessNeighborsForAnnotationParameterAssignTraversal = + new AccessNeighborsForAnnotationParameterAssignTraversal(traversal.iterator) + + implicit def accessNeighborsForArrayInitializer(node: nodes.ArrayInitializer): AccessNeighborsForArrayInitializer = + new AccessNeighborsForArrayInitializer(node) + + implicit def accessNeighborsForArrayInitializerTraversal( + traversal: IterableOnce[nodes.ArrayInitializer] + ): AccessNeighborsForArrayInitializerTraversal = + new AccessNeighborsForArrayInitializerTraversal(traversal.iterator) + + implicit def accessNeighborsForBinding(node: nodes.Binding): AccessNeighborsForBinding = + new AccessNeighborsForBinding(node) + + implicit def accessNeighborsForBindingTraversal( + traversal: IterableOnce[nodes.Binding] + ): AccessNeighborsForBindingTraversal = + new AccessNeighborsForBindingTraversal(traversal.iterator) + + implicit def accessNeighborsForBlock(node: nodes.Block): AccessNeighborsForBlock = + new AccessNeighborsForBlock(node) + + implicit def accessNeighborsForBlockTraversal( + traversal: IterableOnce[nodes.Block] + ): AccessNeighborsForBlockTraversal = + new AccessNeighborsForBlockTraversal(traversal.iterator) + + implicit def accessNeighborsForCall(node: nodes.Call): AccessNeighborsForCall = + new AccessNeighborsForCall(node) + + implicit def accessNeighborsForCallTraversal(traversal: IterableOnce[nodes.Call]): AccessNeighborsForCallTraversal = + new AccessNeighborsForCallTraversal(traversal.iterator) + + implicit def accessNeighborsForClosureBinding(node: nodes.ClosureBinding): AccessNeighborsForClosureBinding = + new AccessNeighborsForClosureBinding(node) + + implicit def accessNeighborsForClosureBindingTraversal( + traversal: IterableOnce[nodes.ClosureBinding] + ): AccessNeighborsForClosureBindingTraversal = + new AccessNeighborsForClosureBindingTraversal(traversal.iterator) + + implicit def accessNeighborsForComment(node: nodes.Comment): AccessNeighborsForComment = + new AccessNeighborsForComment(node) + + implicit def accessNeighborsForCommentTraversal( + traversal: IterableOnce[nodes.Comment] + ): AccessNeighborsForCommentTraversal = + new AccessNeighborsForCommentTraversal(traversal.iterator) + + implicit def accessNeighborsForControlStructure(node: nodes.ControlStructure): AccessNeighborsForControlStructure = + new AccessNeighborsForControlStructure(node) + + implicit def accessNeighborsForControlStructureTraversal( + traversal: IterableOnce[nodes.ControlStructure] + ): AccessNeighborsForControlStructureTraversal = + new AccessNeighborsForControlStructureTraversal(traversal.iterator) + + implicit def accessNeighborsForDependency(node: nodes.Dependency): AccessNeighborsForDependency = + new AccessNeighborsForDependency(node) + + implicit def accessNeighborsForDependencyTraversal( + traversal: IterableOnce[nodes.Dependency] + ): AccessNeighborsForDependencyTraversal = + new AccessNeighborsForDependencyTraversal(traversal.iterator) + + implicit def accessNeighborsForFieldIdentifier(node: nodes.FieldIdentifier): AccessNeighborsForFieldIdentifier = + new AccessNeighborsForFieldIdentifier(node) + + implicit def accessNeighborsForFieldIdentifierTraversal( + traversal: IterableOnce[nodes.FieldIdentifier] + ): AccessNeighborsForFieldIdentifierTraversal = + new AccessNeighborsForFieldIdentifierTraversal(traversal.iterator) + + implicit def accessNeighborsForFile(node: nodes.File): AccessNeighborsForFile = + new AccessNeighborsForFile(node) + + implicit def accessNeighborsForFileTraversal(traversal: IterableOnce[nodes.File]): AccessNeighborsForFileTraversal = + new AccessNeighborsForFileTraversal(traversal.iterator) + + implicit def accessNeighborsForIdentifier(node: nodes.Identifier): AccessNeighborsForIdentifier = + new AccessNeighborsForIdentifier(node) + + implicit def accessNeighborsForIdentifierTraversal( + traversal: IterableOnce[nodes.Identifier] + ): AccessNeighborsForIdentifierTraversal = + new AccessNeighborsForIdentifierTraversal(traversal.iterator) + + implicit def accessNeighborsForImport(node: nodes.Import): AccessNeighborsForImport = + new AccessNeighborsForImport(node) + + implicit def accessNeighborsForImportTraversal( + traversal: IterableOnce[nodes.Import] + ): AccessNeighborsForImportTraversal = + new AccessNeighborsForImportTraversal(traversal.iterator) + + implicit def accessNeighborsForJumpLabel(node: nodes.JumpLabel): AccessNeighborsForJumpLabel = + new AccessNeighborsForJumpLabel(node) + + implicit def accessNeighborsForJumpLabelTraversal( + traversal: IterableOnce[nodes.JumpLabel] + ): AccessNeighborsForJumpLabelTraversal = + new AccessNeighborsForJumpLabelTraversal(traversal.iterator) + + implicit def accessNeighborsForJumpTarget(node: nodes.JumpTarget): AccessNeighborsForJumpTarget = + new AccessNeighborsForJumpTarget(node) + + implicit def accessNeighborsForJumpTargetTraversal( + traversal: IterableOnce[nodes.JumpTarget] + ): AccessNeighborsForJumpTargetTraversal = + new AccessNeighborsForJumpTargetTraversal(traversal.iterator) + + implicit def accessNeighborsForLiteral(node: nodes.Literal): AccessNeighborsForLiteral = + new AccessNeighborsForLiteral(node) + + implicit def accessNeighborsForLiteralTraversal( + traversal: IterableOnce[nodes.Literal] + ): AccessNeighborsForLiteralTraversal = + new AccessNeighborsForLiteralTraversal(traversal.iterator) + + implicit def accessNeighborsForLocal(node: nodes.Local): AccessNeighborsForLocal = + new AccessNeighborsForLocal(node) + + implicit def accessNeighborsForLocalTraversal( + traversal: IterableOnce[nodes.Local] + ): AccessNeighborsForLocalTraversal = + new AccessNeighborsForLocalTraversal(traversal.iterator) + + implicit def accessNeighborsForMember(node: nodes.Member): AccessNeighborsForMember = + new AccessNeighborsForMember(node) + + implicit def accessNeighborsForMemberTraversal( + traversal: IterableOnce[nodes.Member] + ): AccessNeighborsForMemberTraversal = + new AccessNeighborsForMemberTraversal(traversal.iterator) + + implicit def accessNeighborsForMethod(node: nodes.Method): AccessNeighborsForMethod = + new AccessNeighborsForMethod(node) + + implicit def accessNeighborsForMethodTraversal( + traversal: IterableOnce[nodes.Method] + ): AccessNeighborsForMethodTraversal = + new AccessNeighborsForMethodTraversal(traversal.iterator) + + implicit def accessNeighborsForMethodParameterIn( + node: nodes.MethodParameterIn + ): AccessNeighborsForMethodParameterIn = + new AccessNeighborsForMethodParameterIn(node) + + implicit def accessNeighborsForMethodParameterInTraversal( + traversal: IterableOnce[nodes.MethodParameterIn] + ): AccessNeighborsForMethodParameterInTraversal = + new AccessNeighborsForMethodParameterInTraversal(traversal.iterator) + + implicit def accessNeighborsForMethodParameterOut( + node: nodes.MethodParameterOut + ): AccessNeighborsForMethodParameterOut = + new AccessNeighborsForMethodParameterOut(node) + + implicit def accessNeighborsForMethodParameterOutTraversal( + traversal: IterableOnce[nodes.MethodParameterOut] + ): AccessNeighborsForMethodParameterOutTraversal = + new AccessNeighborsForMethodParameterOutTraversal(traversal.iterator) + + implicit def accessNeighborsForMethodRef(node: nodes.MethodRef): AccessNeighborsForMethodRef = + new AccessNeighborsForMethodRef(node) + + implicit def accessNeighborsForMethodRefTraversal( + traversal: IterableOnce[nodes.MethodRef] + ): AccessNeighborsForMethodRefTraversal = + new AccessNeighborsForMethodRefTraversal(traversal.iterator) + + implicit def accessNeighborsForMethodReturn(node: nodes.MethodReturn): AccessNeighborsForMethodReturn = + new AccessNeighborsForMethodReturn(node) + + implicit def accessNeighborsForMethodReturnTraversal( + traversal: IterableOnce[nodes.MethodReturn] + ): AccessNeighborsForMethodReturnTraversal = + new AccessNeighborsForMethodReturnTraversal(traversal.iterator) + + implicit def accessNeighborsForModifier(node: nodes.Modifier): AccessNeighborsForModifier = + new AccessNeighborsForModifier(node) + + implicit def accessNeighborsForModifierTraversal( + traversal: IterableOnce[nodes.Modifier] + ): AccessNeighborsForModifierTraversal = + new AccessNeighborsForModifierTraversal(traversal.iterator) + + implicit def accessNeighborsForNamespace(node: nodes.Namespace): AccessNeighborsForNamespace = + new AccessNeighborsForNamespace(node) + + implicit def accessNeighborsForNamespaceTraversal( + traversal: IterableOnce[nodes.Namespace] + ): AccessNeighborsForNamespaceTraversal = + new AccessNeighborsForNamespaceTraversal(traversal.iterator) + + implicit def accessNeighborsForNamespaceBlock(node: nodes.NamespaceBlock): AccessNeighborsForNamespaceBlock = + new AccessNeighborsForNamespaceBlock(node) + + implicit def accessNeighborsForNamespaceBlockTraversal( + traversal: IterableOnce[nodes.NamespaceBlock] + ): AccessNeighborsForNamespaceBlockTraversal = + new AccessNeighborsForNamespaceBlockTraversal(traversal.iterator) + + implicit def accessNeighborsForReturn(node: nodes.Return): AccessNeighborsForReturn = + new AccessNeighborsForReturn(node) + + implicit def accessNeighborsForReturnTraversal( + traversal: IterableOnce[nodes.Return] + ): AccessNeighborsForReturnTraversal = + new AccessNeighborsForReturnTraversal(traversal.iterator) + + implicit def accessNeighborsForTag(node: nodes.Tag): AccessNeighborsForTag = + new AccessNeighborsForTag(node) + + implicit def accessNeighborsForTagTraversal(traversal: IterableOnce[nodes.Tag]): AccessNeighborsForTagTraversal = + new AccessNeighborsForTagTraversal(traversal.iterator) + + implicit def accessNeighborsForTemplateDom(node: nodes.TemplateDom): AccessNeighborsForTemplateDom = + new AccessNeighborsForTemplateDom(node) + + implicit def accessNeighborsForTemplateDomTraversal( + traversal: IterableOnce[nodes.TemplateDom] + ): AccessNeighborsForTemplateDomTraversal = + new AccessNeighborsForTemplateDomTraversal(traversal.iterator) + + implicit def accessNeighborsForType(node: nodes.Type): AccessNeighborsForType = + new AccessNeighborsForType(node) + + implicit def accessNeighborsForTypeTraversal(traversal: IterableOnce[nodes.Type]): AccessNeighborsForTypeTraversal = + new AccessNeighborsForTypeTraversal(traversal.iterator) + + implicit def accessNeighborsForTypeArgument(node: nodes.TypeArgument): AccessNeighborsForTypeArgument = + new AccessNeighborsForTypeArgument(node) + + implicit def accessNeighborsForTypeArgumentTraversal( + traversal: IterableOnce[nodes.TypeArgument] + ): AccessNeighborsForTypeArgumentTraversal = + new AccessNeighborsForTypeArgumentTraversal(traversal.iterator) + + implicit def accessNeighborsForTypeDecl(node: nodes.TypeDecl): AccessNeighborsForTypeDecl = + new AccessNeighborsForTypeDecl(node) + + implicit def accessNeighborsForTypeDeclTraversal( + traversal: IterableOnce[nodes.TypeDecl] + ): AccessNeighborsForTypeDeclTraversal = + new AccessNeighborsForTypeDeclTraversal(traversal.iterator) + + implicit def accessNeighborsForTypeParameter(node: nodes.TypeParameter): AccessNeighborsForTypeParameter = + new AccessNeighborsForTypeParameter(node) + + implicit def accessNeighborsForTypeParameterTraversal( + traversal: IterableOnce[nodes.TypeParameter] + ): AccessNeighborsForTypeParameterTraversal = + new AccessNeighborsForTypeParameterTraversal(traversal.iterator) + + implicit def accessNeighborsForTypeRef(node: nodes.TypeRef): AccessNeighborsForTypeRef = + new AccessNeighborsForTypeRef(node) + + implicit def accessNeighborsForTypeRefTraversal( + traversal: IterableOnce[nodes.TypeRef] + ): AccessNeighborsForTypeRefTraversal = + new AccessNeighborsForTypeRefTraversal(traversal.iterator) + + implicit def accessNeighborsForUnknown(node: nodes.Unknown): AccessNeighborsForUnknown = + new AccessNeighborsForUnknown(node) + + implicit def accessNeighborsForUnknownTraversal( + traversal: IterableOnce[nodes.Unknown] + ): AccessNeighborsForUnknownTraversal = + new AccessNeighborsForUnknownTraversal(traversal.iterator) + + implicit def accessNeighborsForCfgNode(node: nodes.CfgNode): AccessNeighborsForCfgNode = + new AccessNeighborsForCfgNode(node) + + implicit def accessNeighborsForCfgNodeTraversal( + traversal: IterableOnce[nodes.CfgNode] + ): AccessNeighborsForCfgNodeTraversal = + new AccessNeighborsForCfgNodeTraversal(traversal.iterator) + + implicit def accessNeighborsForExpression(node: nodes.Expression): AccessNeighborsForExpression = + new AccessNeighborsForExpression(node) + + implicit def accessNeighborsForExpressionTraversal( + traversal: IterableOnce[nodes.Expression] + ): AccessNeighborsForExpressionTraversal = + new AccessNeighborsForExpressionTraversal(traversal.iterator) + } +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Annotation.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Annotation.scala index 27296346e..c3cc0c982 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Annotation.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Annotation.scala @@ -1,388 +1,1693 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Annotation { - def apply(graph: Graph, id: Long) = new Annotation(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait AnnotationEMT extends AnyRef with ExpressionEMT with HasFullNameEMT with HasNameEMT - val Label = "ANNOTATION" +trait AnnotationBase extends AbstractNode with ExpressionBase with StaticType[AnnotationEMT] { - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val FullName = "FULL_NAME" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val all: Set[String] = Set(ArgumentIndex, ArgumentName, Code, ColumnNumber, FullName, LineNumber, Name, Order) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + if (("": String) != this.fullName) res.put("FULL_NAME", this.fullName) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val FullName = new overflowdb.PropertyKey[String]("FULL_NAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +object Annotation { + val Label = "ANNOTATION" + object PropertyNames { - } + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" - object PropertyDefaults { - val ArgumentIndex = -1: Int - val Code = "" - val FullName = "" - val Name = "" - val Order = -1: Int - } + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation - ).asJava - ) + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - object Edges { - val Out: Array[String] = Array("ARGUMENT", "AST") - val In: Array[String] = Array("AST", "CFG", "REACHING_DEF") - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - val factory = new NodeFactory[AnnotationDb] { - override val forLabel = Annotation.Label + /** This is the fully-qualified name of an entity, e.g., the fully-qualified name of a method or type. The details + * of what constitutes a fully-qualified name are language specific. This field SHOULD be human readable. + */ + val FullName = "FULL_NAME" - override def createNode(ref: NodeRef[AnnotationDb]) = - new AnnotationDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - override def createNodeRef(graph: Graph, id: Long) = Annotation(graph, id) + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" } -} + object Properties { -trait AnnotationBase extends AbstractNode with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def fullName: String - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") -} + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") -class Annotation(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[AnnotationDb](graph_4762, id_4762) - with AnnotationBase - with StoredNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def fullName: String = get().fullName - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => Annotation.PropertyDefaults.ArgumentIndex - case "CODE" => Annotation.PropertyDefaults.Code - case "FULL_NAME" => Annotation.PropertyDefaults.FullName - case "NAME" => Annotation.PropertyDefaults.Name - case "ORDER" => Annotation.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def argumentOut: Iterator[TemplateDom] = get().argumentOut - override def _argumentOut = get()._argumentOut - - def astOut: Iterator[AnnotationParameterAssign] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST OUT edge. - */ - def _annotationParameterAssignViaAstOut: overflowdb.traversal.Traversal[AnnotationParameterAssign] = - get()._annotationParameterAssignViaAstOut - - def astIn: Iterator[AstNode] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST IN edge. - */ - def _annotationParameterAssignViaAstIn: overflowdb.traversal.Traversal[AnnotationParameterAssign] = - get()._annotationParameterAssignViaAstIn - - /** Traverse to IDENTIFIER via AST IN edge. - */ - def _identifierViaAstIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaAstIn - - /** Traverse to LITERAL via AST IN edge. - */ - def _literalViaAstIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaAstIn - - /** Traverse to MEMBER via AST IN edge. - */ - def _memberViaAstIn: overflowdb.traversal.Traversal[Member] = get()._memberViaAstIn - - /** Traverse to METHOD via AST IN edge. - */ - def _methodViaAstIn: overflowdb.traversal.Traversal[Method] = get()._methodViaAstIn - - /** Traverse to METHOD_PARAMETER_IN via AST IN edge. - */ - def _methodParameterInViaAstIn: overflowdb.traversal.Traversal[MethodParameterIn] = get()._methodParameterInViaAstIn - - /** Traverse to METHOD_REF via AST IN edge. - */ - def _methodRefViaAstIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaAstIn - - /** Traverse to TYPE_DECL via AST IN edge. - */ - def _typeDeclViaAstIn: overflowdb.traversal.Traversal[TypeDecl] = get()._typeDeclViaAstIn - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def reachingDefIn: Iterator[TemplateDom] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Annotation.Label - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") - override def productElementName(n: Int): String = - n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "fullName" - case 6 => "lineNumber" - case 7 => "name" - case 8 => "order" - } + /** This is the fully-qualified name of an entity, e.g., the fully-qualified name of a method or type. The details + * of what constitutes a fully-qualified name are language specific. This field SHOULD be human readable. + */ + val FullName = flatgraph.SinglePropertyKey[String](kind = 22, name = "FULL_NAME", default = "") - override def productElement(n: Int): Any = - n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => fullName - case 6 => lineNumber - case 7 => name - case 8 => order - } + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") - override def productPrefix = "Annotation" - override def productArity = 9 -} + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") -class AnnotationDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with Expression with AnnotationBase { - - override def layoutInformation: NodeLayoutInformation = Annotation.layoutInformation - - private var _argumentIndex: Integer = Annotation.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = Annotation.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _fullName: String = Annotation.PropertyDefaults.FullName - def fullName: String = _fullName - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = Annotation.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = Annotation.PropertyDefaults.Order - def order: scala.Int = _order - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - properties.put("FULL_NAME", fullName) - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - - properties + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) } - - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (!(("") == fullName)) { properties.put("FULL_NAME", fullName) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - - properties + object PropertyDefaults { + val ArgumentIndex = -1: Int + val Code = "" + val FullName = "" + val Name = "" + val Order = -1: Int } +} - import overflowdb.traversal._ - def argumentOut: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - - def astOut: Iterator[AnnotationParameterAssign] = - createAdjacentNodeScalaIteratorByOffSet[AnnotationParameterAssign](1) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _annotationParameterAssignViaAstOut: overflowdb.traversal.Traversal[AnnotationParameterAssign] = - astOut.collectAll[AnnotationParameterAssign] - - def astIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](2) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _annotationParameterAssignViaAstIn: overflowdb.traversal.Traversal[AnnotationParameterAssign] = - astIn.collectAll[AnnotationParameterAssign] - def _identifierViaAstIn: overflowdb.traversal.Traversal[Identifier] = astIn.collectAll[Identifier] - def _literalViaAstIn: overflowdb.traversal.Traversal[Literal] = astIn.collectAll[Literal] - def _memberViaAstIn: overflowdb.traversal.Traversal[Member] = astIn.collectAll[Member] - def _methodViaAstIn: overflowdb.traversal.Traversal[Method] = astIn.collectAll[Method] - def _methodParameterInViaAstIn: overflowdb.traversal.Traversal[MethodParameterIn] = - astIn.collectAll[MethodParameterIn] - def _methodRefViaAstIn: overflowdb.traversal.Traversal[MethodRef] = astIn.collectAll[MethodRef] - def _typeDeclViaAstIn: overflowdb.traversal.Traversal[TypeDecl] = astIn.collectAll[TypeDecl] - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](3) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - - def reachingDefIn: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](4) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - - override def label: String = { - Annotation.Label - } +class Annotation(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 0.toShort, seq_4762) + with AnnotationBase + with Expression + with StaticType[AnnotationEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "fullName" - case 6 => "lineNumber" - case 7 => "name" - case 8 => "order" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "fullName" + case 5 => "lineNumber" + case 6 => "name" + case 7 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => fullName - case 6 => lineNumber - case 7 => name - case 8 => order + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.fullName + case 5 => this.lineNumber + case 6 => this.name + case 7 => this.order + case _ => null } override def productPrefix = "Annotation" - override def productArity = 9 + override def productArity = 8 - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[AnnotationDb] + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Annotation] +} - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "FULL_NAME" => this._fullName - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order +object NewAnnotation { + def apply(): NewAnnotation = new NewAnnotation + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - case _ => null + object InsertionHelpers { + object NewNodeInserter_Annotation_argumentIndex 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[Int]] + 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: NewAnnotation => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Annotation_argumentName 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: NewAnnotation => + generated.argumentName 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_Annotation_code 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: NewAnnotation => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Annotation_columnNumber 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[Int]] + 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: NewAnnotation => + generated.columnNumber 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_Annotation_fullName 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: NewAnnotation => + dstCast(offset) = generated.fullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Annotation_lineNumber 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[Int]] + 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: NewAnnotation => + generated.lineNumber 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_Annotation_name 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: NewAnnotation => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Annotation_order 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[Int]] + 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: NewAnnotation => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } } +} - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "FULL_NAME" => this._fullName = value.asInstanceOf[String] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } +class NewAnnotation extends NewNode(0.toShort) with AnnotationBase with ExpressionNew { + override type StoredNodeType = Annotation + override def label: String = "ANNOTATION" + + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewAnnotation.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewAnnotation.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var fullName: String = "": String + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + def argumentIndex(value: Int): this.type = { this.argumentIndex = value; this } + def argumentName(value: Option[String]): this.type = { this.argumentName = value; this } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def fullName(value: String): this.type = { this.fullName = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 22, 1) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + } - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) + override def copy: this.type = { + val newInstance = new NewAnnotation + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.fullName = this.fullName + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.asInstanceOf[this.type] + } - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewAnnotation].argumentIndex - this._argumentName = newNode.asInstanceOf[NewAnnotation].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewAnnotation].code - this._columnNumber = newNode.asInstanceOf[NewAnnotation].columnNumber match { - case None => null; case Some(value) => value - } - this._fullName = newNode.asInstanceOf[NewAnnotation].fullName - this._lineNumber = newNode.asInstanceOf[NewAnnotation].lineNumber match { - case None => null; case Some(value) => value + override def productElementName(n: Int): String = + n match { + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "fullName" + case 5 => "lineNumber" + case 6 => "name" + case 7 => "order" + case _ => "" } - this._name = newNode.asInstanceOf[NewAnnotation].name - this._order = newNode.asInstanceOf[NewAnnotation].order - graph.indexManager.putIfIndexed("FULL_NAME", newNode.asInstanceOf[NewAnnotation].fullName, this.ref) - } + override def productElement(n: Int): Any = + n match { + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.fullName + case 5 => this.lineNumber + case 6 => this.name + case 7 => this.order + case _ => null + } + override def productPrefix = "NewAnnotation" + override def productArity = 8 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewAnnotation] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AnnotationLiteral.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AnnotationLiteral.scala index ee8b345b5..bfb932828 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AnnotationLiteral.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AnnotationLiteral.scala @@ -1,316 +1,1648 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object AnnotationLiteral { - def apply(graph: Graph, id: Long) = new AnnotationLiteral(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait AnnotationLiteralEMT extends AnyRef with ExpressionEMT with HasNameEMT - val Label = "ANNOTATION_LITERAL" +trait AnnotationLiteralBase extends AbstractNode with ExpressionBase with StaticType[AnnotationLiteralEMT] { - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val all: Set[String] = Set(ArgumentIndex, ArgumentName, Code, ColumnNumber, LineNumber, Name, Order) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +object AnnotationLiteral { + val Label = "ANNOTATION_LITERAL" + object PropertyNames { - } + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" - object PropertyDefaults { - val ArgumentIndex = -1: Int - val Code = "" - val Name = "" - val Order = -1: Int - } + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List(io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation - ).asJava - ) + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - object Edges { - val Out: Array[String] = Array("ARGUMENT") - val In: Array[String] = Array("AST", "CFG", "REACHING_DEF") - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - val factory = new NodeFactory[AnnotationLiteralDb] { - override val forLabel = AnnotationLiteral.Label + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - override def createNode(ref: NodeRef[AnnotationLiteralDb]) = - new AnnotationLiteralDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - override def createNodeRef(graph: Graph, id: Long) = AnnotationLiteral(graph, id) + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" } -} + object Properties { -trait AnnotationLiteralBase extends AbstractNode with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") -} + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") -class AnnotationLiteral(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[AnnotationLiteralDb](graph_4762, id_4762) - with AnnotationLiteralBase - with StoredNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => AnnotationLiteral.PropertyDefaults.ArgumentIndex - case "CODE" => AnnotationLiteral.PropertyDefaults.Code - case "NAME" => AnnotationLiteral.PropertyDefaults.Name - case "ORDER" => AnnotationLiteral.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") - def argumentOut: Iterator[TemplateDom] = get().argumentOut - override def _argumentOut = get()._argumentOut - - def astIn: Iterator[AstNode] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST IN edge. - */ - def _annotationParameterAssignViaAstIn: overflowdb.traversal.Traversal[AnnotationParameterAssign] = - get()._annotationParameterAssignViaAstIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def reachingDefIn: Iterator[TemplateDom] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - AnnotationLiteral.Label + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } + object PropertyDefaults { + val ArgumentIndex = -1: Int + val Code = "" + val Name = "" + val Order = -1: Int } +} + +class AnnotationLiteral(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 1.toShort, seq_4762) + with AnnotationLiteralBase + with Expression + with StaticType[AnnotationLiteralEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "lineNumber" - case 6 => "name" - case 7 => "order" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "lineNumber" + case 5 => "name" + case 6 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => lineNumber - case 6 => name - case 7 => order + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.lineNumber + case 5 => this.name + case 6 => this.order + case _ => null } override def productPrefix = "AnnotationLiteral" - override def productArity = 8 + override def productArity = 7 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[AnnotationLiteral] } -class AnnotationLiteralDb(ref: NodeRef[NodeDb]) - extends NodeDb(ref) - with StoredNode - with Expression - with AnnotationLiteralBase { - - override def layoutInformation: NodeLayoutInformation = AnnotationLiteral.layoutInformation - - private var _argumentIndex: Integer = AnnotationLiteral.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = AnnotationLiteral.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = AnnotationLiteral.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = AnnotationLiteral.PropertyDefaults.Order - def order: scala.Int = _order - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - - properties - } +object NewAnnotationLiteral { + def apply(): NewAnnotationLiteral = new NewAnnotationLiteral + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - - properties + object InsertionHelpers { + object NewNodeInserter_AnnotationLiteral_argumentIndex 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[Int]] + 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: NewAnnotationLiteral => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_AnnotationLiteral_argumentName 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: NewAnnotationLiteral => + generated.argumentName 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_AnnotationLiteral_code 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: NewAnnotationLiteral => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_AnnotationLiteral_columnNumber 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[Int]] + 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: NewAnnotationLiteral => + generated.columnNumber 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_AnnotationLiteral_lineNumber 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[Int]] + 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: NewAnnotationLiteral => + generated.lineNumber 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_AnnotationLiteral_name 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: NewAnnotationLiteral => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_AnnotationLiteral_order 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[Int]] + 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: NewAnnotationLiteral => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - import overflowdb.traversal._ - def argumentOut: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - - def astIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](1) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _annotationParameterAssignViaAstIn: overflowdb.traversal.Traversal[AnnotationParameterAssign] = - astIn.collectAll[AnnotationParameterAssign] +class NewAnnotationLiteral extends NewNode(1.toShort) with AnnotationLiteralBase with ExpressionNew { + override type StoredNodeType = AnnotationLiteral + override def label: String = "ANNOTATION_LITERAL" - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](2) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewAnnotationLiteral.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewAnnotationLiteral.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } - def reachingDefIn: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](3) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + def argumentIndex(value: Int): this.type = { this.argumentIndex = value; this } + def argumentName(value: Option[String]): this.type = { this.argumentName = value; this } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + } - override def label: String = { - AnnotationLiteral.Label + override def copy: this.type = { + val newInstance = new NewAnnotationLiteral + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "lineNumber" - case 6 => "name" - case 7 => "order" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "lineNumber" + case 5 => "name" + case 6 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => lineNumber - case 6 => name - case 7 => order - } - - override def productPrefix = "AnnotationLiteral" - override def productArity = 8 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[AnnotationLiteralDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.lineNumber + case 5 => this.name + case 6 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewAnnotationLiteral].argumentIndex - this._argumentName = newNode.asInstanceOf[NewAnnotationLiteral].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewAnnotationLiteral].code - this._columnNumber = newNode.asInstanceOf[NewAnnotationLiteral].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewAnnotationLiteral].lineNumber match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewAnnotationLiteral].name - this._order = newNode.asInstanceOf[NewAnnotationLiteral].order - - } + override def productPrefix = "NewAnnotationLiteral" + override def productArity = 7 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewAnnotationLiteral] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AnnotationParameter.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AnnotationParameter.scala index 58aac36f9..604b563eb 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AnnotationParameter.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AnnotationParameter.scala @@ -1,243 +1,1505 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object AnnotationParameter { - def apply(graph: Graph, id: Long) = new AnnotationParameter(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait AnnotationParameterEMT extends AnyRef with AstNodeEMT - val Label = "ANNOTATION_PARAMETER" +trait AnnotationParameterBase extends AbstractNode with AstNodeBase with StaticType[AnnotationParameterEMT] { - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val all: Set[String] = Set(Code, ColumnNumber, LineNumber, Order) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +object AnnotationParameter { + val Label = "ANNOTATION_PARAMETER" + object PropertyNames { - } + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - object PropertyDefaults { - val Code = "" - val Order = -1: Int - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List().asJava, - List(io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation).asJava - ) + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array("AST") + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" } + object Properties { - val factory = new NodeFactory[AnnotationParameterDb] { - override val forLabel = AnnotationParameter.Label - - override def createNode(ref: NodeRef[AnnotationParameterDb]) = - new AnnotationParameterDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = AnnotationParameter(graph, id) - } -} + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") -trait AnnotationParameterBase extends AbstractNode with AstNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def order: scala.Int + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } + object PropertyDefaults { + val Code = "" + val Order = -1: Int + } } -class AnnotationParameter(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[AnnotationParameterDb](graph_4762, id_4762) +class AnnotationParameter(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 2.toShort, seq_4762) with AnnotationParameterBase - with StoredNode - with AstNode { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => AnnotationParameter.PropertyDefaults.Code - case "ORDER" => AnnotationParameter.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def astIn: Iterator[AnnotationParameterAssign] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST IN edge. - */ - def _annotationParameterAssignViaAstIn: overflowdb.traversal.Traversal[AnnotationParameterAssign] = - get()._annotationParameterAssignViaAstIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - AnnotationParameter.Label - } + with AstNode + with StaticType[AnnotationParameterEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => order + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.order + case _ => null } override def productPrefix = "AnnotationParameter" - override def productArity = 5 -} + override def productArity = 4 -class AnnotationParameterDb(ref: NodeRef[NodeDb]) - extends NodeDb(ref) - with StoredNode - with AstNode - with AnnotationParameterBase { - - override def layoutInformation: NodeLayoutInformation = AnnotationParameter.layoutInformation - - private var _code: String = AnnotationParameter.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = AnnotationParameter.PropertyDefaults.Order - def order: scala.Int = _order + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[AnnotationParameter] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) +object NewAnnotationParameter { + def apply(): NewAnnotationParameter = new NewAnnotationParameter + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_AnnotationParameter_code 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: NewAnnotationParameter => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_AnnotationParameter_columnNumber 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[Int]] + 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: NewAnnotationParameter => + generated.columnNumber 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_AnnotationParameter_lineNumber 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[Int]] + 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: NewAnnotationParameter => + generated.lineNumber 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_AnnotationParameter_order 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[Int]] + 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: NewAnnotationParameter => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } +class NewAnnotationParameter extends NewNode(2.toShort) with AnnotationParameterBase with AstNodeNew { + override type StoredNodeType = AnnotationParameter + override def label: String = "ANNOTATION_PARAMETER" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewAnnotationParameter.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewAnnotationParameter.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def astIn: Iterator[AnnotationParameterAssign] = createAdjacentNodeScalaIteratorByOffSet[AnnotationParameterAssign](0) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _annotationParameterAssignViaAstIn: overflowdb.traversal.Traversal[AnnotationParameterAssign] = - astIn.collectAll[AnnotationParameterAssign] + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var order: Int = -1: Int + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + } - override def label: String = { - AnnotationParameter.Label + override def copy: this.type = { + val newInstance = new NewAnnotationParameter + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => order - } - - override def productPrefix = "AnnotationParameter" - override def productArity = 5 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[AnnotationParameterDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewAnnotationParameter].code - this._columnNumber = newNode.asInstanceOf[NewAnnotationParameter].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewAnnotationParameter].lineNumber match { - case None => null; case Some(value) => value - } - this._order = newNode.asInstanceOf[NewAnnotationParameter].order - - } + override def productPrefix = "NewAnnotationParameter" + override def productArity = 4 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewAnnotationParameter] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AnnotationParameterAssign.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AnnotationParameterAssign.scala index bcbfad144..0b81c2eb6 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AnnotationParameterAssign.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AnnotationParameterAssign.scala @@ -1,270 +1,1508 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object AnnotationParameterAssign { - def apply(graph: Graph, id: Long) = new AnnotationParameterAssign(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait AnnotationParameterAssignEMT extends AnyRef with AstNodeEMT - val Label = "ANNOTATION_PARAMETER_ASSIGN" +trait AnnotationParameterAssignBase + extends AbstractNode + with AstNodeBase + with StaticType[AnnotationParameterAssignEMT] { - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val all: Set[String] = Set(Code, ColumnNumber, LineNumber, Order) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +object AnnotationParameterAssign { + val Label = "ANNOTATION_PARAMETER_ASSIGN" + object PropertyNames { - } + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - object PropertyDefaults { - val Code = "" - val Order = -1: Int - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List(io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation).asJava, - List(io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation).asJava - ) + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - object Edges { - val Out: Array[String] = Array("AST") - val In: Array[String] = Array("AST") + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" } + object Properties { - val factory = new NodeFactory[AnnotationParameterAssignDb] { - override val forLabel = AnnotationParameterAssign.Label - - override def createNode(ref: NodeRef[AnnotationParameterAssignDb]) = - new AnnotationParameterAssignDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") - override def createNodeRef(graph: Graph, id: Long) = AnnotationParameterAssign(graph, id) - } -} + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") -trait AnnotationParameterAssignBase extends AbstractNode with AstNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def order: scala.Int + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } + object PropertyDefaults { + val Code = "" + val Order = -1: Int + } } -class AnnotationParameterAssign(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[AnnotationParameterAssignDb](graph_4762, id_4762) +class AnnotationParameterAssign(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 3.toShort, seq_4762) with AnnotationParameterAssignBase - with StoredNode - with AstNode { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => AnnotationParameterAssign.PropertyDefaults.Code - case "ORDER" => AnnotationParameterAssign.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def astOut: Iterator[AstNode] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to ANNOTATION via AST OUT edge. - */ - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = get()._annotationViaAstOut - - /** Traverse to ANNOTATION_LITERAL via AST OUT edge. - */ - def _annotationLiteralViaAstOut: overflowdb.traversal.Traversal[AnnotationLiteral] = get()._annotationLiteralViaAstOut - - /** Traverse to ANNOTATION_PARAMETER via AST OUT edge. - */ - def _annotationParameterViaAstOut: overflowdb.traversal.Traversal[AnnotationParameter] = - get()._annotationParameterViaAstOut - - /** Traverse to ARRAY_INITIALIZER via AST OUT edge. - */ - def _arrayInitializerViaAstOut: overflowdb.traversal.Traversal[ArrayInitializer] = get()._arrayInitializerViaAstOut - - def astIn: Iterator[Annotation] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to ANNOTATION via AST IN edge. - */ - def _annotationViaAstIn: overflowdb.traversal.Traversal[Annotation] = get()._annotationViaAstIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - AnnotationParameterAssign.Label - } + with AstNode + with StaticType[AnnotationParameterAssignEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => order + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.order + case _ => null } override def productPrefix = "AnnotationParameterAssign" - override def productArity = 5 -} - -class AnnotationParameterAssignDb(ref: NodeRef[NodeDb]) - extends NodeDb(ref) - with StoredNode - with AstNode - with AnnotationParameterAssignBase { + override def productArity = 4 - override def layoutInformation: NodeLayoutInformation = AnnotationParameterAssign.layoutInformation - - private var _code: String = AnnotationParameterAssign.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = AnnotationParameterAssign.PropertyDefaults.Order - def order: scala.Int = _order + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[AnnotationParameterAssign] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) +object NewAnnotationParameterAssign { + def apply(): NewAnnotationParameterAssign = new NewAnnotationParameterAssign + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_AnnotationParameterAssign_code 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: NewAnnotationParameterAssign => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_AnnotationParameterAssign_columnNumber 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[Int]] + 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: NewAnnotationParameterAssign => + generated.columnNumber 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_AnnotationParameterAssign_lineNumber 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[Int]] + 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: NewAnnotationParameterAssign => + generated.lineNumber 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_AnnotationParameterAssign_order 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[Int]] + 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: NewAnnotationParameterAssign => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } +class NewAnnotationParameterAssign extends NewNode(3.toShort) with AnnotationParameterAssignBase with AstNodeNew { + override type StoredNodeType = AnnotationParameterAssign + override def label: String = "ANNOTATION_PARAMETER_ASSIGN" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewAnnotationParameterAssign.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewAnnotationParameterAssign.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def astOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](0) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = astOut.collectAll[Annotation] - def _annotationLiteralViaAstOut: overflowdb.traversal.Traversal[AnnotationLiteral] = - astOut.collectAll[AnnotationLiteral] - def _annotationParameterViaAstOut: overflowdb.traversal.Traversal[AnnotationParameter] = - astOut.collectAll[AnnotationParameter] - def _arrayInitializerViaAstOut: overflowdb.traversal.Traversal[ArrayInitializer] = astOut.collectAll[ArrayInitializer] - - def astIn: Iterator[Annotation] = createAdjacentNodeScalaIteratorByOffSet[Annotation](1) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _annotationViaAstIn: overflowdb.traversal.Traversal[Annotation] = astIn.collectAll[Annotation] + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var order: Int = -1: Int + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + } - override def label: String = { - AnnotationParameterAssign.Label + override def copy: this.type = { + val newInstance = new NewAnnotationParameterAssign + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => order - } - - override def productPrefix = "AnnotationParameterAssign" - override def productArity = 5 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[AnnotationParameterAssignDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewAnnotationParameterAssign].code - this._columnNumber = newNode.asInstanceOf[NewAnnotationParameterAssign].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewAnnotationParameterAssign].lineNumber match { - case None => null; case Some(value) => value - } - this._order = newNode.asInstanceOf[NewAnnotationParameterAssign].order - - } + override def productPrefix = "NewAnnotationParameterAssign" + override def productArity = 4 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewAnnotationParameterAssign] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ArrayInitializer.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ArrayInitializer.scala index c6fc4d8db..4db8f7c2c 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ArrayInitializer.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ArrayInitializer.scala @@ -1,327 +1,1607 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object ArrayInitializer { - def apply(graph: Graph, id: Long) = new ArrayInitializer(graph, id) - - val Label = "ARRAY_INITIALIZER" - - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val all: Set[String] = Set(ArgumentIndex, ArgumentName, Code, ColumnNumber, LineNumber, Order) - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - - } - - object PropertyDefaults { - val ArgumentIndex = -1: Int - val Code = "" - val Order = -1: Int - } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array("ARGUMENT", "AST", "EVAL_TYPE") - val In: Array[String] = Array("AST", "CFG", "REACHING_DEF") - } - - val factory = new NodeFactory[ArrayInitializerDb] { - override val forLabel = ArrayInitializer.Label +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait ArrayInitializerEMT extends AnyRef with ExpressionEMT - override def createNode(ref: NodeRef[ArrayInitializerDb]) = - new ArrayInitializerDb(ref.asInstanceOf[NodeRef[NodeDb]]) +trait ArrayInitializerBase extends AbstractNode with ExpressionBase with StaticType[ArrayInitializerEMT] { - override def createNodeRef(graph: Graph, id: Long) = ArrayInitializer(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } } -trait ArrayInitializerBase extends AbstractNode with AstNodeBase with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def order: scala.Int - -} +object ArrayInitializer { + val Label = "ARRAY_INITIALIZER" + object PropertyNames { -class ArrayInitializer(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[ArrayInitializerDb](graph_4762, id_4762) - with ArrayInitializerBase - with StoredNode - with AstNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => ArrayInitializer.PropertyDefaults.ArgumentIndex - case "CODE" => ArrayInitializer.PropertyDefaults.Code - case "ORDER" => ArrayInitializer.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" - def argumentOut: Iterator[TemplateDom] = get().argumentOut - override def _argumentOut = get()._argumentOut + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" - def astOut: Iterator[Literal] = get().astOut - override def _astOut = get()._astOut + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - /** Traverse to LITERAL via AST OUT edge. - */ - def _literalViaAstOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaAstOut + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - /** Traverse to TYPE via EVAL_TYPE OUT edge. - */ - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = get()._typeViaEvalTypeOut + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + } + object Properties { - def astIn: Iterator[AstNode] = get().astIn - override def _astIn = get()._astIn + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) - /** Traverse to ANNOTATION_PARAMETER_ASSIGN via AST IN edge. - */ - def _annotationParameterAssignViaAstIn: overflowdb.traversal.Traversal[AnnotationParameterAssign] = - get()._annotationParameterAssignViaAstIn + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") - def reachingDefIn: Iterator[TemplateDom] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - ArrayInitializer.Label + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } + object PropertyDefaults { + val ArgumentIndex = -1: Int + val Code = "" + val Order = -1: Int } +} + +class ArrayInitializer(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 4.toShort, seq_4762) + with ArrayInitializerBase + with Expression + with StaticType[ArrayInitializerEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "lineNumber" - case 6 => "order" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "lineNumber" + case 5 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => lineNumber - case 6 => order + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.lineNumber + case 5 => this.order + case _ => null } override def productPrefix = "ArrayInitializer" - override def productArity = 7 -} - -class ArrayInitializerDb(ref: NodeRef[NodeDb]) - extends NodeDb(ref) - with StoredNode - with AstNode - with Expression - with ArrayInitializerBase { - - override def layoutInformation: NodeLayoutInformation = ArrayInitializer.layoutInformation + override def productArity = 6 - private var _argumentIndex: Integer = ArrayInitializer.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = ArrayInitializer.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = ArrayInitializer.PropertyDefaults.Order - def order: scala.Int = _order + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[ArrayInitializer] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) +object NewArrayInitializer { + def apply(): NewArrayInitializer = new NewArrayInitializer + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_ArrayInitializer_argumentIndex 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[Int]] + 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: NewArrayInitializer => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_ArrayInitializer_argumentName 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: NewArrayInitializer => + generated.argumentName 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_ArrayInitializer_code 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: NewArrayInitializer => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_ArrayInitializer_columnNumber 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[Int]] + 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: NewArrayInitializer => + generated.columnNumber 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_ArrayInitializer_lineNumber 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[Int]] + 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: NewArrayInitializer => + generated.lineNumber 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_ArrayInitializer_order 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[Int]] + 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: NewArrayInitializer => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } +class NewArrayInitializer extends NewNode(4.toShort) with ArrayInitializerBase with AstNodeNew with ExpressionNew { + override type StoredNodeType = ArrayInitializer + override def label: String = "ARRAY_INITIALIZER" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewArrayInitializer.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewArrayInitializer.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def argumentOut: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - - def astOut: Iterator[Literal] = createAdjacentNodeScalaIteratorByOffSet[Literal](1) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _literalViaAstOut: overflowdb.traversal.Traversal[Literal] = astOut.collectAll[Literal] - - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](2) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def astIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](3) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _annotationParameterAssignViaAstIn: overflowdb.traversal.Traversal[AnnotationParameterAssign] = - astIn.collectAll[AnnotationParameterAssign] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - - def reachingDefIn: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](5) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var order: Int = -1: Int + def argumentIndex(value: Int): this.type = { this.argumentIndex = value; this } + def argumentName(value: Option[String]): this.type = { this.argumentName = value; this } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + } - override def label: String = { - ArrayInitializer.Label + override def copy: this.type = { + val newInstance = new NewArrayInitializer + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "lineNumber" - case 6 => "order" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "lineNumber" + case 5 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => lineNumber - case 6 => order - } - - override def productPrefix = "ArrayInitializer" - override def productArity = 7 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[ArrayInitializerDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.lineNumber + case 5 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewArrayInitializer].argumentIndex - this._argumentName = newNode.asInstanceOf[NewArrayInitializer].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewArrayInitializer].code - this._columnNumber = newNode.asInstanceOf[NewArrayInitializer].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewArrayInitializer].lineNumber match { - case None => null; case Some(value) => value - } - this._order = newNode.asInstanceOf[NewArrayInitializer].order - - } + override def productPrefix = "NewArrayInitializer" + override def productArity = 6 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewArrayInitializer] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AstNode.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AstNode.scala deleted file mode 100644 index bfdd4e73d..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/AstNode.scala +++ /dev/null @@ -1,52 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.nodes - -object AstNode { - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val all: Set[String] = Set(Code, ColumnNumber, LineNumber, Order) - } - - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - } - - object PropertyDefaults { - val Code = "" - val Order = -1: Int - } - - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array() - } - -} - -trait AstNodeBase extends AbstractNode { - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def order: scala.Int -} - -trait AstNodeNew extends NewNode { - def code_=(value: String): Unit - def columnNumber_=(value: Option[scala.Int]): Unit - def lineNumber_=(value: Option[scala.Int]): Unit - def order_=(value: scala.Int): Unit - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def order: scala.Int -} - -trait AstNode extends StoredNode with AstNodeBase { - import overflowdb.traversal._ - -} 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 new file mode 100644 index 000000000..236347e03 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/BaseTypes.scala @@ -0,0 +1,395 @@ +package io.shiftleft.codepropertygraph.generated.nodes + +trait AstNodeEMT extends AnyRef with HasCodeEMT with HasColumnNumberEMT with HasLineNumberEMT with HasOrderEMT + +trait AstNodeBase extends AbstractNode with StaticType[AstNodeEMT] +// new properties: CODE, COLUMN_NUMBER, LINE_NUMBER, ORDER +// inherited properties: +// inherited interfaces: +// implementing nodes: ANNOTATION, ANNOTATION_LITERAL, ANNOTATION_PARAMETER, ANNOTATION_PARAMETER_ASSIGN, ARRAY_INITIALIZER, BLOCK, CALL, COMMENT, CONTROL_STRUCTURE, FIELD_IDENTIFIER, FILE, IDENTIFIER, IMPORT, JUMP_LABEL, JUMP_TARGET, LITERAL, LOCAL, MEMBER, METHOD, METHOD_PARAMETER_IN, METHOD_PARAMETER_OUT, METHOD_REF, METHOD_RETURN, MODIFIER, NAMESPACE, NAMESPACE_BLOCK, RETURN, TEMPLATE_DOM, TYPE_ARGUMENT, TYPE_DECL, TYPE_PARAMETER, TYPE_REF, UNKNOWN +trait AstNode extends StoredNode with AstNodeBase with StaticType[AstNodeEMT] + +object AstNode { + object PropertyDefaults { + val Code = "" + val Order = -1: Int + } +} + +trait AstNodeNew extends NewNode with AstNodeBase with StaticType[AstNodeEMT] { + def code: String + def code_=(value: String): Unit + def code(value: String): this.type + def columnNumber: Option[Int] + def columnNumber_=(value: Option[Int]): Unit + def columnNumber(value: Option[Int]): this.type + def columnNumber(value: Int): this.type + def lineNumber: Option[Int] + def lineNumber_=(value: Option[Int]): Unit + def lineNumber(value: Option[Int]): this.type + def lineNumber(value: Int): this.type + def order: Int + def order_=(value: Int): Unit + def order(value: Int): this.type +} + +trait CallReprEMT extends AnyRef with CfgNodeEMT with HasNameEMT with HasSignatureEMT + +trait CallReprBase extends AbstractNode with CfgNodeBase with StaticType[CallReprEMT] +// new properties: NAME, SIGNATURE +// inherited properties: CODE, COLUMN_NUMBER, LINE_NUMBER, ORDER +// inherited interfaces: AST_NODE +// implementing nodes: CALL +trait CallRepr extends StoredNode with CallReprBase with CfgNode with StaticType[CallReprEMT] + +object CallRepr { + object PropertyDefaults { + val Name = "" + val Signature = "" + } +} + +trait CallReprNew extends NewNode with CallReprBase with CfgNodeNew with StaticType[CallReprEMT] { + def name: String + def name_=(value: String): Unit + def name(value: String): this.type + def signature: String + def signature_=(value: String): Unit + def signature(value: String): this.type +} + +trait CfgNodeEMT extends AnyRef with AstNodeEMT + +trait CfgNodeBase extends AbstractNode with AstNodeBase with StaticType[CfgNodeEMT] +// new properties: +// inherited properties: CODE, COLUMN_NUMBER, LINE_NUMBER, ORDER +// inherited interfaces: +// implementing nodes: ANNOTATION, ANNOTATION_LITERAL, ARRAY_INITIALIZER, BLOCK, CALL, CONTROL_STRUCTURE, FIELD_IDENTIFIER, IDENTIFIER, JUMP_TARGET, LITERAL, METHOD, METHOD_PARAMETER_IN, METHOD_PARAMETER_OUT, METHOD_REF, METHOD_RETURN, RETURN, TEMPLATE_DOM, TYPE_REF, UNKNOWN +trait CfgNode extends StoredNode with CfgNodeBase with AstNode with StaticType[CfgNodeEMT] + +object CfgNode { + object PropertyDefaults {} +} + +trait CfgNodeNew extends NewNode with CfgNodeBase with AstNodeNew with StaticType[CfgNodeEMT] {} + +trait DeclarationEMT extends AnyRef with HasNameEMT + +trait DeclarationBase extends AbstractNode with StaticType[DeclarationEMT] +// new properties: NAME +// inherited properties: +// inherited interfaces: +// implementing nodes: LOCAL, MEMBER, METHOD, METHOD_PARAMETER_IN, METHOD_PARAMETER_OUT +trait Declaration extends StoredNode with DeclarationBase with StaticType[DeclarationEMT] + +object Declaration { + object PropertyDefaults { + val Name = "" + } +} + +trait DeclarationNew extends NewNode with DeclarationBase with StaticType[DeclarationEMT] { + def name: String + def name_=(value: String): Unit + def name(value: String): this.type +} + +trait ExpressionEMT extends AnyRef with CfgNodeEMT with HasArgumentIndexEMT with HasArgumentNameEMT + +trait ExpressionBase extends AbstractNode with CfgNodeBase with StaticType[ExpressionEMT] +// new properties: ARGUMENT_INDEX, ARGUMENT_NAME +// inherited properties: CODE, COLUMN_NUMBER, LINE_NUMBER, ORDER +// inherited interfaces: AST_NODE +// implementing nodes: ANNOTATION, ANNOTATION_LITERAL, ARRAY_INITIALIZER, BLOCK, CALL, CONTROL_STRUCTURE, FIELD_IDENTIFIER, IDENTIFIER, LITERAL, METHOD_REF, RETURN, TEMPLATE_DOM, TYPE_REF, UNKNOWN +trait Expression extends StoredNode with ExpressionBase with CfgNode with StaticType[ExpressionEMT] + +object Expression { + object PropertyDefaults { + val ArgumentIndex = -1: Int + } +} + +trait ExpressionNew extends NewNode with ExpressionBase with AstNodeNew with CfgNodeNew with StaticType[ExpressionEMT] { + def argumentIndex: Int + def argumentIndex_=(value: Int): Unit + def argumentIndex(value: Int): this.type + def argumentName: Option[String] + def argumentName_=(value: Option[String]): Unit + def argumentName(value: Option[String]): this.type + def argumentName(value: String): this.type +} + +/** Node types with this marker trait are guaranteed to have the ALIAS_TYPE_FULL_NAME property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasAliasTypeFullNameEMT + +/** Node types with this marker trait are guaranteed to have the ARGUMENT_INDEX property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasArgumentIndexEMT + +/** Node types with this marker trait are guaranteed to have the ARGUMENT_NAME property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasArgumentNameEMT + +/** Node types with this marker trait are guaranteed to have the AST_PARENT_FULL_NAME property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasAstParentFullNameEMT + +/** Node types with this marker trait are guaranteed to have the AST_PARENT_TYPE property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasAstParentTypeEMT + +/** Node types with this marker trait are guaranteed to have the CANONICAL_NAME property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasCanonicalNameEMT + +/** Node types with this marker trait are guaranteed to have the CLASS_NAME property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasClassNameEMT + +/** Node types with this marker trait are guaranteed to have the CLASS_SHORT_NAME property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasClassShortNameEMT + +/** Node types with this marker trait are guaranteed to have the CLOSURE_BINDING_ID property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasClosureBindingIdEMT + +/** Node types with this marker trait are guaranteed to have the CLOSURE_ORIGINAL_NAME property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasClosureOriginalNameEMT + +/** Node types with this marker trait are guaranteed to have the CODE property. EMT stands for: "erased marker trait", + * it exists only at compile time in order to improve type safety. + */ +trait HasCodeEMT + +/** Node types with this marker trait are guaranteed to have the COLUMN_NUMBER property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasColumnNumberEMT + +/** Node types with this marker trait are guaranteed to have the COLUMN_NUMBER_END property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasColumnNumberEndEMT + +/** Node types with this marker trait are guaranteed to have the CONTAINED_REF property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasContainedRefEMT + +/** Node types with this marker trait are guaranteed to have the CONTENT property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasContentEMT + +/** Node types with this marker trait are guaranteed to have the CONTROL_STRUCTURE_TYPE property. EMT stands for: + * "erased marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasControlStructureTypeEMT + +/** Node types with this marker trait are guaranteed to have the DEPENDENCY_GROUP_ID property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasDependencyGroupIdEMT + +/** Node types with this marker trait are guaranteed to have the DISPATCH_TYPE property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasDispatchTypeEMT + +/** Node types with this marker trait are guaranteed to have the DYNAMIC_TYPE_HINT_FULL_NAME property. EMT stands for: + * "erased marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasDynamicTypeHintFullNameEMT + +/** Node types with this marker trait are guaranteed to have the EVALUATION_STRATEGY property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasEvaluationStrategyEMT + +/** Node types with this marker trait are guaranteed to have the EXPLICIT_AS property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasExplicitAsEMT + +/** Node types with this marker trait are guaranteed to have the FILENAME property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasFilenameEMT + +/** Node types with this marker trait are guaranteed to have the FULL_NAME property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasFullNameEMT + +/** Node types with this marker trait are guaranteed to have the HASH property. EMT stands for: "erased marker trait", + * it exists only at compile time in order to improve type safety. + */ +trait HasHashEMT + +/** Node types with this marker trait are guaranteed to have the IMPORTED_AS property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasImportedAsEMT + +/** Node types with this marker trait are guaranteed to have the IMPORTED_ENTITY property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasImportedEntityEMT + +/** Node types with this marker trait are guaranteed to have the INDEX property. EMT stands for: "erased marker trait", + * it exists only at compile time in order to improve type safety. + */ +trait HasIndexEMT + +/** Node types with this marker trait are guaranteed to have the INHERITS_FROM_TYPE_FULL_NAME property. EMT stands for: + * "erased marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasInheritsFromTypeFullNameEMT + +/** Node types with this marker trait are guaranteed to have the IS_EXPLICIT property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasIsExplicitEMT + +/** Node types with this marker trait are guaranteed to have the IS_EXTERNAL property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasIsExternalEMT + +/** Node types with this marker trait are guaranteed to have the IS_VARIADIC property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasIsVariadicEMT + +/** Node types with this marker trait are guaranteed to have the IS_WILDCARD property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasIsWildcardEMT + +/** Node types with this marker trait are guaranteed to have the KEY property. EMT stands for: "erased marker trait", it + * exists only at compile time in order to improve type safety. + */ +trait HasKeyEMT + +/** Node types with this marker trait are guaranteed to have the LANGUAGE property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasLanguageEMT + +/** Node types with this marker trait are guaranteed to have the LINE_NUMBER property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasLineNumberEMT + +/** Node types with this marker trait are guaranteed to have the LINE_NUMBER_END property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasLineNumberEndEMT + +/** Node types with this marker trait are guaranteed to have the METHOD_FULL_NAME property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasMethodFullNameEMT + +/** Node types with this marker trait are guaranteed to have the METHOD_SHORT_NAME property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasMethodShortNameEMT + +/** Node types with this marker trait are guaranteed to have the MODIFIER_TYPE property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasModifierTypeEMT + +/** Node types with this marker trait are guaranteed to have the NAME property. EMT stands for: "erased marker trait", + * it exists only at compile time in order to improve type safety. + */ +trait HasNameEMT + +/** Node types with this marker trait are guaranteed to have the NODE_LABEL property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasNodeLabelEMT + +/** Node types with this marker trait are guaranteed to have the OFFSET property. EMT stands for: "erased marker trait", + * it exists only at compile time in order to improve type safety. + */ +trait HasOffsetEMT + +/** Node types with this marker trait are guaranteed to have the OFFSET_END property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasOffsetEndEMT + +/** Node types with this marker trait are guaranteed to have the ORDER property. EMT stands for: "erased marker trait", + * it exists only at compile time in order to improve type safety. + */ +trait HasOrderEMT + +/** Node types with this marker trait are guaranteed to have the OVERLAYS property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasOverlaysEMT + +/** Node types with this marker trait are guaranteed to have the PACKAGE_NAME property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasPackageNameEMT + +/** Node types with this marker trait are guaranteed to have the PARSER_TYPE_NAME property. EMT stands for: "erased + * marker trait", it exists only at compile time in order to improve type safety. + */ +trait HasParserTypeNameEMT + +/** Node types with this marker trait are guaranteed to have the POSSIBLE_TYPES property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasPossibleTypesEMT + +/** Node types with this marker trait are guaranteed to have the ROOT property. EMT stands for: "erased marker trait", + * it exists only at compile time in order to improve type safety. + */ +trait HasRootEMT + +/** Node types with this marker trait are guaranteed to have the SIGNATURE property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasSignatureEMT + +/** Node types with this marker trait are guaranteed to have the SYMBOL property. EMT stands for: "erased marker trait", + * it exists only at compile time in order to improve type safety. + */ +trait HasSymbolEMT + +/** 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. + */ +trait HasTypeDeclFullNameEMT + +/** Node types with this marker trait are guaranteed to have the TYPE_FULL_NAME property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasTypeFullNameEMT + +/** Node types with this marker trait are guaranteed to have the VALUE property. EMT stands for: "erased marker trait", + * it exists only at compile time in order to improve type safety. + */ +trait HasValueEMT + +/** Node types with this marker trait are guaranteed to have the VERSION property. EMT stands for: "erased marker + * trait", it exists only at compile time in order to improve type safety. + */ +trait HasVersionEMT diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Binding.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Binding.scala index 5379cd4ac..c32f1369b 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Binding.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Binding.scala @@ -1,244 +1,228 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Binding { - def apply(graph: Graph, id: Long) = new Binding(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait BindingEMT extends AnyRef with HasMethodFullNameEMT with HasNameEMT with HasSignatureEMT - val Label = "BINDING" +trait BindingBase extends AbstractNode with StaticType[BindingEMT] { - object PropertyNames { - val MethodFullName = "METHOD_FULL_NAME" - val Name = "NAME" - val Signature = "SIGNATURE" - val all: Set[String] = Set(MethodFullName, Name, Signature) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.methodFullName) res.put("METHOD_FULL_NAME", this.methodFullName) + if (("": String) != this.name) res.put("NAME", this.name) + if (("": String) != this.signature) res.put("SIGNATURE", this.signature) + res } +} - object Properties { - val MethodFullName = new overflowdb.PropertyKey[String]("METHOD_FULL_NAME") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Signature = new overflowdb.PropertyKey[String]("SIGNATURE") +object Binding { + val Label = "BINDING" + object PropertyNames { - } + /** The FULL_NAME of a method. Used to link CALL and METHOD nodes. It is required to have exactly one METHOD node + * for each METHOD_FULL_NAME + */ + val MethodFullName = "METHOD_FULL_NAME" - object PropertyDefaults { - val MethodFullName = "" - val Name = "" - val Signature = "" - } + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List(io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation).asJava, - List(io.shiftleft.codepropertygraph.generated.edges.Binds.layoutInformation).asJava - ) - - object Edges { - val Out: Array[String] = Array("REF") - val In: Array[String] = Array("BINDS") + /** The method signature encodes the types of parameters in a string. The string SHOULD be human readable and + * suitable for differentiating methods with different parameter types sufficiently to allow for resolving of + * function overloading. The present specification does not enforce a strict format for the signature, that is, it + * can be chosen by the frontend implementor to fit the source language. + */ + val Signature = "SIGNATURE" } + object Properties { - val factory = new NodeFactory[BindingDb] { - override val forLabel = Binding.Label + /** The FULL_NAME of a method. Used to link CALL and METHOD nodes. It is required to have exactly one METHOD node + * for each METHOD_FULL_NAME + */ + val MethodFullName = flatgraph.SinglePropertyKey[String](kind = 36, name = "METHOD_FULL_NAME", default = "") - override def createNode(ref: NodeRef[BindingDb]) = - new BindingDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") - override def createNodeRef(graph: Graph, id: Long) = Binding(graph, id) + /** The method signature encodes the types of parameters in a string. The string SHOULD be human readable and + * suitable for differentiating methods with different parameter types sufficiently to allow for resolving of + * function overloading. The present specification does not enforce a strict format for the signature, that is, it + * can be chosen by the frontend implementor to fit the source language. + */ + val Signature = flatgraph.SinglePropertyKey[String](kind = 49, name = "SIGNATURE", default = "") + } + object PropertyDefaults { + val MethodFullName = "" + val Name = "" + val Signature = "" } } -trait BindingBase extends AbstractNode { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def methodFullName: String - def name: String - def signature: String - -} - -class Binding(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[BindingDb](graph_4762, id_4762) +class Binding(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 5.toShort, seq_4762) with BindingBase - with StoredNode { - override def methodFullName: String = get().methodFullName - override def name: String = get().name - override def signature: String = get().signature - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "METHOD_FULL_NAME" => Binding.PropertyDefaults.MethodFullName - case "NAME" => Binding.PropertyDefaults.Name - case "SIGNATURE" => Binding.PropertyDefaults.Signature - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def refOut: Iterator[Method] = get().refOut - override def _refOut = get()._refOut - - /** Traverse to METHOD via REF OUT edge. - */ - def boundMethod: Method = get().boundMethod - - def bindsIn: Iterator[TypeDecl] = get().bindsIn - override def _bindsIn = get()._bindsIn - - /** Traverse to TYPE_DECL via BINDS IN edge. - */ - def bindingTypeDecl: TypeDecl = get().bindingTypeDecl - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Binding.Label - } + with StaticType[BindingEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "methodFullName" - case 2 => "name" - case 3 => "signature" + case 0 => "methodFullName" + case 1 => "name" + case 2 => "signature" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => methodFullName - case 2 => name - case 3 => signature + case 0 => this.methodFullName + case 1 => this.name + case 2 => this.signature + case _ => null } override def productPrefix = "Binding" - override def productArity = 4 -} - -class BindingDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with BindingBase { + override def productArity = 3 - override def layoutInformation: NodeLayoutInformation = Binding.layoutInformation - - private var _methodFullName: String = Binding.PropertyDefaults.MethodFullName - def methodFullName: String = _methodFullName - private var _name: String = Binding.PropertyDefaults.Name - def name: String = _name - private var _signature: String = Binding.PropertyDefaults.Signature - def signature: String = _signature - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("METHOD_FULL_NAME", methodFullName) - properties.put("NAME", name) - properties.put("SIGNATURE", signature) + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Binding] +} - properties +object NewBinding { + def apply(): NewBinding = new NewBinding + private val outNeighbors: Map[String, Set[String]] = Map("REF" -> Set("METHOD")) + private val inNeighbors: Map[String, Set[String]] = Map("BINDS" -> Set("TYPE_DECL")) + + object InsertionHelpers { + object NewNodeInserter_Binding_methodFullName 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: NewBinding => + dstCast(offset) = generated.methodFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Binding_name 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: NewBinding => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Binding_signature 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: NewBinding => + dstCast(offset) = generated.signature + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == methodFullName)) { properties.put("METHOD_FULL_NAME", methodFullName) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!(("") == signature)) { properties.put("SIGNATURE", signature) } +class NewBinding extends NewNode(5.toShort) with BindingBase { + override type StoredNodeType = Binding + override def label: String = "BINDING" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewBinding.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - - import overflowdb.traversal._ - def refOut: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](0) - override def _refOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def boundMethod: Method = try { refOut.collectAll[Method].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "OUT edge with label REF to an adjacent METHOD is mandatory, but not defined for this BINDING node with id=" + id, - e - ) + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewBinding.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def bindsIn: Iterator[TypeDecl] = createAdjacentNodeScalaIteratorByOffSet[TypeDecl](1) - override def _bindsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def bindingTypeDecl: TypeDecl = try { bindsIn.collectAll[TypeDecl].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label BINDS to an adjacent TYPE_DECL is mandatory, but not defined for this BINDING node with id=" + id, - e - ) + var methodFullName: String = "": String + var name: String = "": String + var signature: String = "": String + def methodFullName(value: String): this.type = { this.methodFullName = value; this } + def name(value: String): this.type = { this.name = value; this } + def signature(value: String): this.type = { this.signature = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 36, 1) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 49, 1) } - override def label: String = { - Binding.Label + override def copy: this.type = { + val newInstance = new NewBinding + newInstance.methodFullName = this.methodFullName + newInstance.name = this.name + newInstance.signature = this.signature + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "methodFullName" - case 2 => "name" - case 3 => "signature" + case 0 => "methodFullName" + case 1 => "name" + case 2 => "signature" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => methodFullName - case 2 => name - case 3 => signature - } - - override def productPrefix = "Binding" - override def productArity = 4 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[BindingDb] - - override def property(key: String): Any = { - key match { - case "METHOD_FULL_NAME" => this._methodFullName - case "NAME" => this._name - case "SIGNATURE" => this._signature - + case 0 => this.methodFullName + case 1 => this.name + case 2 => this.signature case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "METHOD_FULL_NAME" => this._methodFullName = value.asInstanceOf[String] - case "NAME" => this._name = value.asInstanceOf[String] - case "SIGNATURE" => this._signature = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._methodFullName = newNode.asInstanceOf[NewBinding].methodFullName - this._name = newNode.asInstanceOf[NewBinding].name - this._signature = newNode.asInstanceOf[NewBinding].signature - - } + override def productPrefix = "NewBinding" + override def productArity = 3 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewBinding] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Block.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Block.scala index bd0f9e3ee..c9904d0cc 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Block.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Block.scala @@ -1,1068 +1,1751 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait BlockEMT + extends AnyRef + with ExpressionEMT + with HasDynamicTypeHintFullNameEMT + with HasPossibleTypesEMT + with HasTypeFullNameEMT + +trait BlockBase extends AbstractNode with ExpressionBase with StaticType[BlockEMT] { -object Block { - def apply(graph: Graph, id: Long) = new Block(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + val tmpDynamicTypeHintFullName = this.dynamicTypeHintFullName; + if (tmpDynamicTypeHintFullName.nonEmpty) res.put("DYNAMIC_TYPE_HINT_FULL_NAME", tmpDynamicTypeHintFullName) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + val tmpPossibleTypes = this.possibleTypes; + if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) + if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) + res + } +} +object Block { val Label = "BLOCK" - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" + + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ val DynamicTypeHintFullName = "DYNAMIC_TYPE_HINT_FULL_NAME" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val PossibleTypes = "POSSIBLE_TYPES" - val TypeFullName = "TYPE_FULL_NAME" - val all: Set[String] = Set( - ArgumentIndex, - ArgumentName, - Code, - ColumnNumber, - DynamicTypeHintFullName, - LineNumber, - Order, - PossibleTypes, - TypeFullName - ) - val allAsJava: java.util.Set[String] = all.asJava - } + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = "POSSIBLE_TYPES" + + /** 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 = "TYPE_FULL_NAME" + } object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val DynamicTypeHintFullName = new overflowdb.PropertyKey[IndexedSeq[String]]("DYNAMIC_TYPE_HINT_FULL_NAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val PossibleTypes = new overflowdb.PropertyKey[IndexedSeq[String]]("POSSIBLE_TYPES") - val TypeFullName = new overflowdb.PropertyKey[String]("TYPE_FULL_NAME") + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ + val DynamicTypeHintFullName = flatgraph.MultiPropertyKey[String](kind = 18, name = "DYNAMIC_TYPE_HINT_FULL_NAME") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = flatgraph.MultiPropertyKey[String](kind = 47, name = "POSSIBLE_TYPES") + + /** 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 = 52, name = "TYPE_FULL_NAME", default = "") } - object PropertyDefaults { val ArgumentIndex = -1: Int val Code = "" val Order = -1: Int val TypeFullName = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Condition.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Receiver.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = - Array("ARGUMENT", "AST", "CDG", "CFG", "DOMINATE", "EVAL_TYPE", "POST_DOMINATE", "REACHING_DEF", "TAGGED_BY") - val In: Array[String] = Array( - "ARGUMENT", - "AST", - "CDG", - "CFG", - "CONDITION", - "CONTAINS", - "DOMINATE", - "POST_DOMINATE", - "REACHING_DEF", - "RECEIVER" - ) - } - - val factory = new NodeFactory[BlockDb] { - override val forLabel = Block.Label - - override def createNode(ref: NodeRef[BlockDb]) = - new BlockDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = Block(graph, id) - } -} - -trait BlockBase extends AbstractNode with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def dynamicTypeHintFullName: IndexedSeq[String] - def lineNumber: Option[scala.Int] - def order: scala.Int - def possibleTypes: IndexedSeq[String] - def typeFullName: String - } -class Block(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[BlockDb](graph_4762, id_4762) +class Block(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 6.toShort, seq_4762) with BlockBase - with StoredNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def dynamicTypeHintFullName: IndexedSeq[String] = get().dynamicTypeHintFullName - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def possibleTypes: IndexedSeq[String] = get().possibleTypes - override def typeFullName: String = get().typeFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => Block.PropertyDefaults.ArgumentIndex - case "CODE" => Block.PropertyDefaults.Code - case "ORDER" => Block.PropertyDefaults.Order - case "TYPE_FULL_NAME" => Block.PropertyDefaults.TypeFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def argumentOut: Iterator[TemplateDom] = get().argumentOut - override def _argumentOut = get()._argumentOut - - def astOut: Iterator[AstNode] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to BLOCK via AST OUT edge. - */ - def _blockViaAstOut: overflowdb.traversal.Traversal[Block] = get()._blockViaAstOut - - /** Traverse to CALL via AST OUT edge. - */ - def _callViaAstOut: overflowdb.traversal.Traversal[Call] = get()._callViaAstOut - - /** Traverse to CONTROL_STRUCTURE via AST OUT edge. - */ - def _controlStructureViaAstOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaAstOut - - /** Traverse to IDENTIFIER via AST OUT edge. - */ - def _identifierViaAstOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaAstOut - - /** Traverse to IMPORT via AST OUT edge. - */ - def _importViaAstOut: overflowdb.traversal.Traversal[Import] = get()._importViaAstOut - - /** Traverse to JUMP_TARGET via AST OUT edge. - */ - def _jumpTargetViaAstOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaAstOut - - /** Traverse to LITERAL via AST OUT edge. - */ - def _literalViaAstOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaAstOut - - /** Traverse to locals of this block. Traverse to LOCAL via AST OUT edge. - */ - /** Traverse to locals of this block. */ - @overflowdb.traversal.help.Doc(info = """Traverse to locals of this block.""") - def local: overflowdb.traversal.Traversal[Local] = get().local - - /** Traverse to METHOD_REF via AST OUT edge. - */ - def _methodRefViaAstOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaAstOut - - /** Traverse to RETURN via AST OUT edge. - */ - def _returnViaAstOut: overflowdb.traversal.Traversal[Return] = get()._returnViaAstOut - - /** Traverse to TYPE_REF via AST OUT edge. - */ - def _typeRefViaAstOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaAstOut - - /** Traverse to UNKNOWN via AST OUT edge. - */ - def _unknownViaAstOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstOut - - def cdgOut: Iterator[CfgNode] = get().cdgOut - override def _cdgOut = get()._cdgOut - - /** Traverse to BLOCK via CDG OUT edge. - */ - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgOut - - /** Traverse to CALL via CDG OUT edge. - */ - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = get()._callViaCdgOut - - /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. - */ - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgOut - - /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. - */ - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgOut - - /** Traverse to IDENTIFIER via CDG OUT edge. - */ - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgOut - - /** Traverse to JUMP_TARGET via CDG OUT edge. - */ - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgOut - - /** Traverse to LITERAL via CDG OUT edge. - */ - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgOut - - /** Traverse to METHOD_REF via CDG OUT edge. - */ - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgOut - - /** Traverse to METHOD_RETURN via CDG OUT edge. - */ - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaCdgOut - - /** Traverse to RETURN via CDG OUT edge. - */ - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = get()._returnViaCdgOut - - /** Traverse to TYPE_REF via CDG OUT edge. - */ - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgOut - - /** Traverse to UNKNOWN via CDG OUT edge. - */ - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgOut - - def cfgOut: Iterator[CfgNode] = get().cfgOut - override def _cfgOut = get()._cfgOut - - /** Traverse to CFG_NODE via CFG OUT edge. - */ - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = get()._cfgNodeViaCfgOut - - def dominateOut: Iterator[CfgNode] = get().dominateOut - override def _dominateOut = get()._dominateOut - - /** Traverse to BLOCK via DOMINATE OUT edge. - */ - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateOut - - /** Traverse to CALL via DOMINATE OUT edge. - */ - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaDominateOut - - /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. - */ - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateOut - - /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. - */ - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateOut - - /** Traverse to IDENTIFIER via DOMINATE OUT edge. - */ - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateOut - - /** Traverse to JUMP_TARGET via DOMINATE OUT edge. - */ - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateOut - - /** Traverse to LITERAL via DOMINATE OUT edge. - */ - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateOut - - /** Traverse to METHOD_REF via DOMINATE OUT edge. - */ - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateOut - - /** Traverse to METHOD_RETURN via DOMINATE OUT edge. - */ - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaDominateOut - - /** Traverse to RETURN via DOMINATE OUT edge. - */ - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateOut - - /** Traverse to TYPE_REF via DOMINATE OUT edge. - */ - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateOut - - /** Traverse to UNKNOWN via DOMINATE OUT edge. - */ - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateOut - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** Traverse to TYPE via EVAL_TYPE OUT edge. - */ - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = get()._typeViaEvalTypeOut - - def postDominateOut: Iterator[CfgNode] = get().postDominateOut - override def _postDominateOut = get()._postDominateOut - - /** Traverse to BLOCK via POST_DOMINATE OUT edge. - */ - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateOut - - /** Traverse to CALL via POST_DOMINATE OUT edge. - */ - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateOut - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. - */ - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateOut - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateOut - - /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateOut - - /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. - */ - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateOut - - /** Traverse to LITERAL via POST_DOMINATE OUT edge. - */ - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateOut - - /** Traverse to METHOD via POST_DOMINATE OUT edge. - */ - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = get()._methodViaPostDominateOut - - /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. - */ - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateOut - - /** Traverse to RETURN via POST_DOMINATE OUT edge. - */ - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateOut - - /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. - */ - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateOut - - /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. - */ - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateOut - - def reachingDefOut: Iterator[CfgNode] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to BLOCK via REACHING_DEF OUT edge. - */ - def _blockViaReachingDefOut: overflowdb.traversal.Traversal[Block] = get()._blockViaReachingDefOut - - /** Traverse to CALL via REACHING_DEF OUT edge. - */ - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefOut - - /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. - */ - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefOut - - /** Traverse to LITERAL via REACHING_DEF OUT edge. - */ - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefOut - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. - */ - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefOut - - /** Traverse to METHOD_REF via REACHING_DEF OUT edge. - */ - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefOut - - /** Traverse to RETURN via REACHING_DEF OUT edge. - */ - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefOut - - /** Traverse to TYPE_REF via REACHING_DEF OUT edge. - */ - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def argumentIn: Iterator[Expression] = get().argumentIn - override def _argumentIn = get()._argumentIn - - /** Traverse to CALL via ARGUMENT IN edge. - */ - def _callViaArgumentIn: Option[Call] = get()._callViaArgumentIn - - /** Traverse to RETURN via ARGUMENT IN edge. - */ - def _returnViaArgumentIn: Option[Return] = get()._returnViaArgumentIn - - def astIn: Iterator[CfgNode] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to BLOCK via AST IN edge. - */ - def _blockViaAstIn: Block = get()._blockViaAstIn - - /** Traverse to CALL via AST IN edge. - */ - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = get()._callViaAstIn - - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: Option[ControlStructure] = get()._controlStructureViaAstIn - - /** Traverse to METHOD via AST IN edge. - */ - def _methodViaAstIn: Method = get()._methodViaAstIn - - /** Traverse to RETURN via AST IN edge. - */ - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = get()._returnViaAstIn - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - def cdgIn: Iterator[CfgNode] = get().cdgIn - override def _cdgIn = get()._cdgIn - - /** Traverse to BLOCK via CDG IN edge. - */ - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgIn - - /** Traverse to CALL via CDG IN edge. - */ - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = get()._callViaCdgIn - - /** Traverse to CONTROL_STRUCTURE via CDG IN edge. - */ - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgIn - - /** Traverse to FIELD_IDENTIFIER via CDG IN edge. - */ - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgIn - - /** Traverse to IDENTIFIER via CDG IN edge. - */ - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgIn - - /** Traverse to JUMP_TARGET via CDG IN edge. - */ - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgIn - - /** Traverse to LITERAL via CDG IN edge. - */ - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgIn - - /** Traverse to METHOD_REF via CDG IN edge. - */ - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgIn - - /** Traverse to TYPE_REF via CDG IN edge. - */ - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgIn - - /** Traverse to UNKNOWN via CDG IN edge. - */ - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def conditionIn: Iterator[ControlStructure] = get().conditionIn - override def _conditionIn = get()._conditionIn - - /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. - */ - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaConditionIn - - def containsIn: Iterator[Method] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to METHOD via CONTAINS IN edge. - */ - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsIn - - def dominateIn: Iterator[CfgNode] = get().dominateIn - override def _dominateIn = get()._dominateIn - - /** Traverse to BLOCK via DOMINATE IN edge. - */ - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateIn - - /** Traverse to CALL via DOMINATE IN edge. - */ - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaDominateIn - - /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. - */ - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateIn - - /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. - */ - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateIn - - /** Traverse to IDENTIFIER via DOMINATE IN edge. - */ - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateIn - - /** Traverse to JUMP_TARGET via DOMINATE IN edge. - */ - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateIn - - /** Traverse to LITERAL via DOMINATE IN edge. - */ - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateIn - - /** Traverse to METHOD via DOMINATE IN edge. - */ - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = get()._methodViaDominateIn - - /** Traverse to METHOD_REF via DOMINATE IN edge. - */ - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateIn - - /** Traverse to RETURN via DOMINATE IN edge. - */ - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateIn - - /** Traverse to TYPE_REF via DOMINATE IN edge. - */ - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateIn - - /** Traverse to UNKNOWN via DOMINATE IN edge. - */ - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateIn - - def postDominateIn: Iterator[CfgNode] = get().postDominateIn - override def _postDominateIn = get()._postDominateIn - - /** Traverse to BLOCK via POST_DOMINATE IN edge. - */ - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateIn - - /** Traverse to CALL via POST_DOMINATE IN edge. - */ - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateIn - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. - */ - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateIn - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. - */ - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateIn - - /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. - */ - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateIn - - /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. - */ - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateIn - - /** Traverse to LITERAL via POST_DOMINATE IN edge. - */ - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateIn - - /** Traverse to METHOD_REF via POST_DOMINATE IN edge. - */ - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateIn - - /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. - */ - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaPostDominateIn - - /** Traverse to RETURN via POST_DOMINATE IN edge. - */ - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateIn - - /** Traverse to TYPE_REF via POST_DOMINATE IN edge. - */ - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateIn - - /** Traverse to UNKNOWN via POST_DOMINATE IN edge. - */ - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateIn - - def reachingDefIn: Iterator[Expression] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - /** Traverse to BLOCK via REACHING_DEF IN edge. - */ - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = get()._blockViaReachingDefIn - - def receiverIn: Iterator[Call] = get().receiverIn - override def _receiverIn = get()._receiverIn - - /** Traverse to CALL via RECEIVER IN edge. - */ - def _callViaReceiverIn: Option[Call] = get()._callViaReceiverIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Block.Label - } + with Expression + with StaticType[BlockEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "lineNumber" - case 7 => "order" - case 8 => "possibleTypes" - case 9 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dynamicTypeHintFullName" + case 5 => "lineNumber" + case 6 => "order" + case 7 => "possibleTypes" + case 8 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => dynamicTypeHintFullName - case 6 => lineNumber - case 7 => order - case 8 => possibleTypes - case 9 => typeFullName + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dynamicTypeHintFullName + case 5 => this.lineNumber + case 6 => this.order + case 7 => this.possibleTypes + case 8 => this.typeFullName + case _ => null } override def productPrefix = "Block" - override def productArity = 10 -} - -class BlockDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with Expression with BlockBase { + override def productArity = 9 - override def layoutInformation: NodeLayoutInformation = Block.layoutInformation + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Block] +} - private var _argumentIndex: Integer = Block.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = Block.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def dynamicTypeHintFullName: IndexedSeq[String] = _dynamicTypeHintFullName - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = Block.PropertyDefaults.Order - def order: scala.Int = _order - private var _possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def possibleTypes: IndexedSeq[String] = _possibleTypes - private var _typeFullName: String = Block.PropertyDefaults.TypeFullName - def typeFullName: String = _typeFullName +object NewBlock { + def apply(): NewBlock = new NewBlock + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object InsertionHelpers { + object NewNodeInserter_Block_argumentIndex 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[Int]] + 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: NewBlock => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - properties.put("TYPE_FULL_NAME", typeFullName) - - properties - } - - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object NewNodeInserter_Block_argumentName 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: NewBlock => + generated.argumentName 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_Block_code 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: NewBlock => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Block_columnNumber 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[Int]] + 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: NewBlock => + generated.columnNumber 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_Block_dynamicTypeHintFullName 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: NewBlock => + for (item <- generated.dynamicTypeHintFullName) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Block_lineNumber 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[Int]] + 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: NewBlock => + generated.lineNumber 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_Block_order 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[Int]] + 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: NewBlock => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Block_possibleTypes 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: NewBlock => + for (item <- generated.possibleTypes) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Block_typeFullName 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: NewBlock => + dstCast(offset) = generated.typeFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - if (!(("") == typeFullName)) { properties.put("TYPE_FULL_NAME", typeFullName) } - - properties } +} - import overflowdb.traversal._ - def argumentOut: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - - def astOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](1) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _blockViaAstOut: overflowdb.traversal.Traversal[Block] = astOut.collectAll[Block] - def _callViaAstOut: overflowdb.traversal.Traversal[Call] = astOut.collectAll[Call] - def _controlStructureViaAstOut: overflowdb.traversal.Traversal[ControlStructure] = astOut.collectAll[ControlStructure] - def _identifierViaAstOut: overflowdb.traversal.Traversal[Identifier] = astOut.collectAll[Identifier] - def _importViaAstOut: overflowdb.traversal.Traversal[Import] = astOut.collectAll[Import] - def _jumpTargetViaAstOut: overflowdb.traversal.Traversal[JumpTarget] = astOut.collectAll[JumpTarget] - def _literalViaAstOut: overflowdb.traversal.Traversal[Literal] = astOut.collectAll[Literal] - def local: overflowdb.traversal.Traversal[Local] = astOut.collectAll[Local] - def _methodRefViaAstOut: overflowdb.traversal.Traversal[MethodRef] = astOut.collectAll[MethodRef] - def _returnViaAstOut: overflowdb.traversal.Traversal[Return] = astOut.collectAll[Return] - def _typeRefViaAstOut: overflowdb.traversal.Traversal[TypeRef] = astOut.collectAll[TypeRef] - def _unknownViaAstOut: overflowdb.traversal.Traversal[Unknown] = astOut.collectAll[Unknown] - - def cdgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](2) - override def _cdgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = cdgOut.collectAll[Block] - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = cdgOut.collectAll[Call] - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = cdgOut.collectAll[ControlStructure] - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = cdgOut.collectAll[FieldIdentifier] - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = cdgOut.collectAll[Identifier] - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = cdgOut.collectAll[JumpTarget] - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = cdgOut.collectAll[Literal] - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = cdgOut.collectAll[MethodRef] - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = cdgOut.collectAll[MethodReturn] - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = cdgOut.collectAll[Return] - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = cdgOut.collectAll[TypeRef] - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = cdgOut.collectAll[Unknown] - - def cfgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](3) - override def _cfgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = cfgOut.collectAll[CfgNode] - - def dominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _dominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = dominateOut.collectAll[Block] - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = dominateOut.collectAll[Call] - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - dominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateOut.collectAll[FieldIdentifier] - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = dominateOut.collectAll[Identifier] - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = dominateOut.collectAll[JumpTarget] - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = dominateOut.collectAll[Literal] - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = dominateOut.collectAll[MethodRef] - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = dominateOut.collectAll[MethodReturn] - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = dominateOut.collectAll[Return] - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = dominateOut.collectAll[TypeRef] - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = dominateOut.collectAll[Unknown] - - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](5) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def postDominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](6) - override def _postDominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = postDominateOut.collectAll[Block] - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = postDominateOut.collectAll[Call] - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - postDominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateOut.collectAll[FieldIdentifier] - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = postDominateOut.collectAll[Identifier] - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = postDominateOut.collectAll[JumpTarget] - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = postDominateOut.collectAll[Literal] - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = postDominateOut.collectAll[Method] - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = postDominateOut.collectAll[MethodRef] - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = postDominateOut.collectAll[Return] - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = postDominateOut.collectAll[TypeRef] - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = postDominateOut.collectAll[Unknown] - - def reachingDefOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](7) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _blockViaReachingDefOut: overflowdb.traversal.Traversal[Block] = reachingDefOut.collectAll[Block] - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = reachingDefOut.collectAll[Call] - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = reachingDefOut.collectAll[Identifier] - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = reachingDefOut.collectAll[Literal] - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefOut.collectAll[MethodParameterOut] - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = reachingDefOut.collectAll[MethodRef] - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = reachingDefOut.collectAll[Return] - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = reachingDefOut.collectAll[TypeRef] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](8) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def argumentIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](9) - override def _argumentIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - def _callViaArgumentIn: Option[Call] = argumentIn.collectAll[Call].nextOption() - def _returnViaArgumentIn: Option[Return] = argumentIn.collectAll[Return].nextOption() +class NewBlock extends NewNode(6.toShort) with BlockBase with ExpressionNew { + override type StoredNodeType = Block + override def label: String = "BLOCK" - def astIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](10) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](10) - def _blockViaAstIn: Block = try { astIn.collectAll[Block].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent BLOCK is mandatory, but not defined for this BLOCK node with id=" + id, - e - ) + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewBlock.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = astIn.collectAll[Call] - def _controlStructureViaAstIn: Option[ControlStructure] = astIn.collectAll[ControlStructure].nextOption() - def _methodViaAstIn: Method = try { astIn.collectAll[Method].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent METHOD is mandatory, but not defined for this BLOCK node with id=" + id, - e - ) + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewBlock.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = astIn.collectAll[Return] - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - - def cdgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](11) - override def _cdgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](11) - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = cdgIn.collectAll[Block] - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = cdgIn.collectAll[Call] - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = cdgIn.collectAll[ControlStructure] - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = cdgIn.collectAll[FieldIdentifier] - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = cdgIn.collectAll[Identifier] - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = cdgIn.collectAll[JumpTarget] - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = cdgIn.collectAll[Literal] - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = cdgIn.collectAll[MethodRef] - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = cdgIn.collectAll[TypeRef] - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = cdgIn.collectAll[Unknown] - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](12) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - - def conditionIn: Iterator[ControlStructure] = createAdjacentNodeScalaIteratorByOffSet[ControlStructure](13) - override def _conditionIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](13) - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - conditionIn.collectAll[ControlStructure] - - def containsIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](14) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](14) - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = containsIn.collectAll[Method] - - def dominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](15) - override def _dominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](15) - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = dominateIn.collectAll[Block] - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = dominateIn.collectAll[Call] - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - dominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateIn.collectAll[FieldIdentifier] - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = dominateIn.collectAll[Identifier] - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = dominateIn.collectAll[JumpTarget] - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = dominateIn.collectAll[Literal] - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = dominateIn.collectAll[Method] - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = dominateIn.collectAll[MethodRef] - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = dominateIn.collectAll[Return] - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = dominateIn.collectAll[TypeRef] - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = dominateIn.collectAll[Unknown] - - def postDominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](16) - override def _postDominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](16) - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = postDominateIn.collectAll[Block] - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = postDominateIn.collectAll[Call] - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - postDominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateIn.collectAll[FieldIdentifier] - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = postDominateIn.collectAll[Identifier] - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = postDominateIn.collectAll[JumpTarget] - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = postDominateIn.collectAll[Literal] - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = postDominateIn.collectAll[MethodRef] - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - postDominateIn.collectAll[MethodReturn] - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = postDominateIn.collectAll[Return] - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = postDominateIn.collectAll[TypeRef] - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = postDominateIn.collectAll[Unknown] - - def reachingDefIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](17) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](17) - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = reachingDefIn.collectAll[Block] - - def receiverIn: Iterator[Call] = createAdjacentNodeScalaIteratorByOffSet[Call](18) - override def _receiverIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](18) - def _callViaReceiverIn: Option[Call] = receiverIn.collectAll[Call].nextOption() + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var dynamicTypeHintFullName: IndexedSeq[String] = ArraySeq.empty + var lineNumber: Option[Int] = None + var order: Int = -1: Int + var possibleTypes: IndexedSeq[String] = ArraySeq.empty + 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 } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { + this.dynamicTypeHintFullName = value.iterator.to(ArraySeq); this + } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + 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 typeFullName(value: String): this.type = { this.typeFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 18, dynamicTypeHintFullName.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 47, possibleTypes.size) + interface.countProperty(this, 52, 1) + } - override def label: String = { - Block.Label + override def copy: this.type = { + val newInstance = new NewBlock + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.possibleTypes = this.possibleTypes + newInstance.typeFullName = this.typeFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "lineNumber" - case 7 => "order" - case 8 => "possibleTypes" - case 9 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dynamicTypeHintFullName" + case 5 => "lineNumber" + case 6 => "order" + case 7 => "possibleTypes" + case 8 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => dynamicTypeHintFullName - case 6 => lineNumber - case 7 => order - case 8 => possibleTypes - case 9 => typeFullName - } - - override def productPrefix = "Block" - override def productArity = 10 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[BlockDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "DYNAMIC_TYPE_HINT_FULL_NAME" => this._dynamicTypeHintFullName - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - case "POSSIBLE_TYPES" => this._possibleTypes - case "TYPE_FULL_NAME" => this._typeFullName - + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dynamicTypeHintFullName + case 5 => this.lineNumber + case 6 => this.order + case 7 => this.possibleTypes + case 8 => this.typeFullName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "DYNAMIC_TYPE_HINT_FULL_NAME" => - this._dynamicTypeHintFullName = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "POSSIBLE_TYPES" => - this._possibleTypes = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "TYPE_FULL_NAME" => this._typeFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewBlock].argumentIndex - this._argumentName = newNode.asInstanceOf[NewBlock].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewBlock].code - this._columnNumber = newNode.asInstanceOf[NewBlock].columnNumber match { - case None => null; case Some(value) => value - } - this._dynamicTypeHintFullName = - if (newNode.asInstanceOf[NewBlock].dynamicTypeHintFullName != null) - newNode.asInstanceOf[NewBlock].dynamicTypeHintFullName - else collection.immutable.ArraySeq.empty - this._lineNumber = newNode.asInstanceOf[NewBlock].lineNumber match { case None => null; case Some(value) => value } - this._order = newNode.asInstanceOf[NewBlock].order - this._possibleTypes = - if (newNode.asInstanceOf[NewBlock].possibleTypes != null) newNode.asInstanceOf[NewBlock].possibleTypes - else collection.immutable.ArraySeq.empty - this._typeFullName = newNode.asInstanceOf[NewBlock].typeFullName - - } + override def productPrefix = "NewBlock" + override def productArity = 9 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewBlock] } 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 778ecfdc0..af6047ddd 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 @@ -1,62 +1,184 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait CallEMT + extends AnyRef + with CallReprEMT + with ExpressionEMT + with HasDispatchTypeEMT + with HasDynamicTypeHintFullNameEMT + with HasMethodFullNameEMT + with HasPossibleTypesEMT + with HasTypeFullNameEMT + +trait CallBase extends AbstractNode with CallReprBase with ExpressionBase with StaticType[CallEMT] { -object Call { - def apply(graph: Graph, id: Long) = new Call(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + if (("": String) != this.dispatchType) res.put("DISPATCH_TYPE", this.dispatchType) + val tmpDynamicTypeHintFullName = this.dynamicTypeHintFullName; + if (tmpDynamicTypeHintFullName.nonEmpty) res.put("DYNAMIC_TYPE_HINT_FULL_NAME", tmpDynamicTypeHintFullName) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.methodFullName) res.put("METHOD_FULL_NAME", this.methodFullName) + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + val tmpPossibleTypes = this.possibleTypes; + if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) + if (("": String) != this.signature) res.put("SIGNATURE", this.signature) + if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) + res + } +} +object Call { val Label = "CALL" - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val DispatchType = "DISPATCH_TYPE" + + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** This field holds the dispatch type of a call, which is either `STATIC_DISPATCH` or `DYNAMIC_DISPATCH`. For + * statically dispatched method calls, the call target is known at compile time while for dynamically dispatched + * calls, it can only be determined at runtime as it may depend on the type of an object (as is the case for + * virtual method calls) or calculation of an offset. + */ + val DispatchType = "DISPATCH_TYPE" + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ val DynamicTypeHintFullName = "DYNAMIC_TYPE_HINT_FULL_NAME" - val LineNumber = "LINE_NUMBER" - val MethodFullName = "METHOD_FULL_NAME" - val Name = "NAME" - val Order = "ORDER" - val PossibleTypes = "POSSIBLE_TYPES" - val Signature = "SIGNATURE" - val TypeFullName = "TYPE_FULL_NAME" - val all: Set[String] = Set( - ArgumentIndex, - ArgumentName, - Code, - ColumnNumber, - DispatchType, - DynamicTypeHintFullName, - LineNumber, - MethodFullName, - Name, - Order, - PossibleTypes, - Signature, - TypeFullName - ) - val allAsJava: java.util.Set[String] = all.asJava - } + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** The FULL_NAME of a method. Used to link CALL and METHOD nodes. It is required to have exactly one METHOD node + * for each METHOD_FULL_NAME + */ + val MethodFullName = "METHOD_FULL_NAME" + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = "POSSIBLE_TYPES" + + /** The method signature encodes the types of parameters in a string. The string SHOULD be human readable and + * suitable for differentiating methods with different parameter types sufficiently to allow for resolving of + * function overloading. The present specification does not enforce a strict format for the signature, that is, it + * can be chosen by the frontend implementor to fit the source language. + */ + val Signature = "SIGNATURE" + + /** 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 = "TYPE_FULL_NAME" + } object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val DispatchType = new overflowdb.PropertyKey[String]("DISPATCH_TYPE") - val DynamicTypeHintFullName = new overflowdb.PropertyKey[IndexedSeq[String]]("DYNAMIC_TYPE_HINT_FULL_NAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val MethodFullName = new overflowdb.PropertyKey[String]("METHOD_FULL_NAME") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val PossibleTypes = new overflowdb.PropertyKey[IndexedSeq[String]]("POSSIBLE_TYPES") - val Signature = new overflowdb.PropertyKey[String]("SIGNATURE") - val TypeFullName = new overflowdb.PropertyKey[String]("TYPE_FULL_NAME") + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** This field holds the dispatch type of a call, which is either `STATIC_DISPATCH` or `DYNAMIC_DISPATCH`. For + * statically dispatched method calls, the call target is known at compile time while for dynamically dispatched + * calls, it can only be determined at runtime as it may depend on the type of an object (as is the case for + * virtual method calls) or calculation of an offset. + */ + val DispatchType = flatgraph.SinglePropertyKey[String](kind = 17, name = "DISPATCH_TYPE", default = "") + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ + val DynamicTypeHintFullName = flatgraph.MultiPropertyKey[String](kind = 18, name = "DYNAMIC_TYPE_HINT_FULL_NAME") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** The FULL_NAME of a method. Used to link CALL and METHOD nodes. It is required to have exactly one METHOD node + * for each METHOD_FULL_NAME + */ + val MethodFullName = flatgraph.SinglePropertyKey[String](kind = 36, name = "METHOD_FULL_NAME", default = "") + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = flatgraph.MultiPropertyKey[String](kind = 47, name = "POSSIBLE_TYPES") + + /** The method signature encodes the types of parameters in a string. The string SHOULD be human readable and + * suitable for differentiating methods with different parameter types sufficiently to allow for resolving of + * function overloading. The present specification does not enforce a strict format for the signature, that is, it + * can be chosen by the frontend implementor to fit the source language. + */ + val Signature = flatgraph.SinglePropertyKey[String](kind = 49, name = "SIGNATURE", 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 = 52, name = "TYPE_FULL_NAME", default = "") } - object PropertyDefaults { val ArgumentIndex = -1: Int val Code = "" @@ -67,1251 +189,1751 @@ object Call { val Signature = "" val TypeFullName = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Call.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.IsCallForImport.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Receiver.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Condition.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Receiver.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array( - "ARGUMENT", - "AST", - "CALL", - "CDG", - "CFG", - "DOMINATE", - "EVAL_TYPE", - "IS_CALL_FOR_IMPORT", - "POST_DOMINATE", - "REACHING_DEF", - "RECEIVER", - "REF", - "TAGGED_BY" - ) - val In: Array[String] = Array( - "ARGUMENT", - "AST", - "CDG", - "CFG", - "CONDITION", - "CONTAINS", - "DOMINATE", - "POST_DOMINATE", - "REACHING_DEF", - "RECEIVER" - ) - } - - val factory = new NodeFactory[CallDb] { - override val forLabel = Call.Label - - override def createNode(ref: NodeRef[CallDb]) = - new CallDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = Call(graph, id) - } } -trait CallBase extends AbstractNode with CallReprBase with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def dispatchType: String - def dynamicTypeHintFullName: IndexedSeq[String] - def lineNumber: Option[scala.Int] - def methodFullName: String - def name: String - def order: scala.Int - def possibleTypes: IndexedSeq[String] - def signature: String - def typeFullName: String - -} - -class Call(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[CallDb](graph_4762, id_4762) +class Call(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 7.toShort, seq_4762) with CallBase - with StoredNode with CallRepr - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def dispatchType: String = get().dispatchType - override def dynamicTypeHintFullName: IndexedSeq[String] = get().dynamicTypeHintFullName - override def lineNumber: Option[scala.Int] = get().lineNumber - override def methodFullName: String = get().methodFullName - override def name: String = get().name - override def order: scala.Int = get().order - override def possibleTypes: IndexedSeq[String] = get().possibleTypes - override def signature: String = get().signature - override def typeFullName: String = get().typeFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => Call.PropertyDefaults.ArgumentIndex - case "CODE" => Call.PropertyDefaults.Code - case "DISPATCH_TYPE" => Call.PropertyDefaults.DispatchType - case "METHOD_FULL_NAME" => Call.PropertyDefaults.MethodFullName - case "NAME" => Call.PropertyDefaults.Name - case "ORDER" => Call.PropertyDefaults.Order - case "SIGNATURE" => Call.PropertyDefaults.Signature - case "TYPE_FULL_NAME" => Call.PropertyDefaults.TypeFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def argumentOut: Iterator[CfgNode] = get().argumentOut - override def _argumentOut = get()._argumentOut - - /** Traverse to BLOCK via ARGUMENT OUT edge. - */ - def _blockViaArgumentOut: overflowdb.traversal.Traversal[Block] = get()._blockViaArgumentOut - - /** Traverse to CALL via ARGUMENT OUT edge. - */ - def _callViaArgumentOut: overflowdb.traversal.Traversal[Call] = get()._callViaArgumentOut - - /** Traverse to CONTROL_STRUCTURE via ARGUMENT OUT edge. - */ - def _controlStructureViaArgumentOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaArgumentOut - - /** Traverse to FIELD_IDENTIFIER via ARGUMENT OUT edge. - */ - def _fieldIdentifierViaArgumentOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaArgumentOut - - /** Traverse to IDENTIFIER via ARGUMENT OUT edge. - */ - def _identifierViaArgumentOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaArgumentOut - - /** Traverse to JUMP_TARGET via ARGUMENT OUT edge. - */ - def _jumpTargetViaArgumentOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaArgumentOut - - /** Traverse to LITERAL via ARGUMENT OUT edge. - */ - def _literalViaArgumentOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaArgumentOut - - /** Traverse to METHOD_REF via ARGUMENT OUT edge. - */ - def _methodRefViaArgumentOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaArgumentOut - - /** Traverse to TYPE_REF via ARGUMENT OUT edge. - */ - def _typeRefViaArgumentOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaArgumentOut - - /** Traverse to UNKNOWN via ARGUMENT OUT edge. - */ - def _unknownViaArgumentOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaArgumentOut - - def astOut: Iterator[Expression] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to BLOCK via AST OUT edge. - */ - def _blockViaAstOut: overflowdb.traversal.Traversal[Block] = get()._blockViaAstOut - - /** Traverse to CALL via AST OUT edge. - */ - def _callViaAstOut: overflowdb.traversal.Traversal[Call] = get()._callViaAstOut - - /** Traverse to CONTROL_STRUCTURE via AST OUT edge. - */ - def _controlStructureViaAstOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaAstOut - - /** Traverse to FIELD_IDENTIFIER via AST OUT edge. - */ - def _fieldIdentifierViaAstOut: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaAstOut - - /** Traverse to IDENTIFIER via AST OUT edge. - */ - def _identifierViaAstOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaAstOut - - /** Traverse to LITERAL via AST OUT edge. - */ - def _literalViaAstOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaAstOut - - /** Traverse to METHOD_REF via AST OUT edge. - */ - def _methodRefViaAstOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaAstOut - - /** Traverse to RETURN via AST OUT edge. - */ - def _returnViaAstOut: overflowdb.traversal.Traversal[Return] = get()._returnViaAstOut - - /** Traverse to TYPE_REF via AST OUT edge. - */ - def _typeRefViaAstOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaAstOut - - def callOut: Iterator[Method] = get().callOut - override def _callOut = get()._callOut - - /** Traverse to METHOD via CALL OUT edge. - */ - def _methodViaCallOut: overflowdb.traversal.Traversal[Method] = get()._methodViaCallOut - - def cdgOut: Iterator[CfgNode] = get().cdgOut - override def _cdgOut = get()._cdgOut - - /** Traverse to BLOCK via CDG OUT edge. - */ - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgOut - - /** Traverse to CALL via CDG OUT edge. - */ - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = get()._callViaCdgOut - - /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. - */ - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgOut - - /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. - */ - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgOut - - /** Traverse to IDENTIFIER via CDG OUT edge. - */ - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgOut - - /** Traverse to JUMP_TARGET via CDG OUT edge. - */ - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgOut - - /** Traverse to LITERAL via CDG OUT edge. - */ - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgOut - - /** Traverse to METHOD_REF via CDG OUT edge. - */ - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgOut - - /** Traverse to METHOD_RETURN via CDG OUT edge. - */ - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaCdgOut - - /** Traverse to RETURN via CDG OUT edge. - */ - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = get()._returnViaCdgOut - - /** Traverse to TYPE_REF via CDG OUT edge. - */ - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgOut - - /** Traverse to UNKNOWN via CDG OUT edge. - */ - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgOut - - def cfgOut: Iterator[CfgNode] = get().cfgOut - override def _cfgOut = get()._cfgOut - - /** Traverse to CFG_NODE via CFG OUT edge. - */ - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = get()._cfgNodeViaCfgOut - - def dominateOut: Iterator[CfgNode] = get().dominateOut - override def _dominateOut = get()._dominateOut - - /** Traverse to BLOCK via DOMINATE OUT edge. - */ - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateOut - - /** Traverse to CALL via DOMINATE OUT edge. - */ - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaDominateOut - - /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. - */ - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateOut - - /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. - */ - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateOut - - /** Traverse to IDENTIFIER via DOMINATE OUT edge. - */ - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateOut - - /** Traverse to JUMP_TARGET via DOMINATE OUT edge. - */ - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateOut - - /** Traverse to LITERAL via DOMINATE OUT edge. - */ - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateOut - - /** Traverse to METHOD_REF via DOMINATE OUT edge. - */ - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateOut - - /** Traverse to METHOD_RETURN via DOMINATE OUT edge. - */ - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaDominateOut - - /** Traverse to RETURN via DOMINATE OUT edge. - */ - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateOut - - /** Traverse to TYPE_REF via DOMINATE OUT edge. - */ - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateOut - - /** Traverse to UNKNOWN via DOMINATE OUT edge. - */ - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateOut - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** Traverse to TYPE via EVAL_TYPE OUT edge. - */ - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = get()._typeViaEvalTypeOut - - def isCallForImportOut: Iterator[Import] = get().isCallForImportOut - override def _isCallForImportOut = get()._isCallForImportOut - - /** Traverse to IMPORT via IS_CALL_FOR_IMPORT OUT edge. - */ - def _importViaIsCallForImportOut: overflowdb.traversal.Traversal[Import] = get()._importViaIsCallForImportOut - - def postDominateOut: Iterator[CfgNode] = get().postDominateOut - override def _postDominateOut = get()._postDominateOut - - /** Traverse to BLOCK via POST_DOMINATE OUT edge. - */ - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateOut - - /** Traverse to CALL via POST_DOMINATE OUT edge. - */ - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateOut - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. - */ - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateOut - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateOut - - /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateOut - - /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. - */ - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateOut - - /** Traverse to LITERAL via POST_DOMINATE OUT edge. - */ - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateOut - - /** Traverse to METHOD via POST_DOMINATE OUT edge. - */ - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = get()._methodViaPostDominateOut - - /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. - */ - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateOut - - /** Traverse to RETURN via POST_DOMINATE OUT edge. - */ - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateOut - - /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. - */ - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateOut - - /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. - */ - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateOut - - def reachingDefOut: Iterator[CfgNode] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to CALL via REACHING_DEF OUT edge. - */ - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefOut - - /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. - */ - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefOut - - /** Traverse to LITERAL via REACHING_DEF OUT edge. - */ - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefOut - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. - */ - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefOut - - /** Traverse to METHOD_REF via REACHING_DEF OUT edge. - */ - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefOut - - /** Traverse to RETURN via REACHING_DEF OUT edge. - */ - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefOut - - /** Traverse to TYPE_REF via REACHING_DEF OUT edge. - */ - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefOut - - def receiverOut: Iterator[Expression] = get().receiverOut - override def _receiverOut = get()._receiverOut - - /** Traverse to BLOCK via RECEIVER OUT edge. - */ - def _blockViaReceiverOut: Option[Block] = get()._blockViaReceiverOut - - /** Traverse to CALL via RECEIVER OUT edge. - */ - def _callViaReceiverOut: Option[Call] = get()._callViaReceiverOut - - /** Traverse to CONTROL_STRUCTURE via RECEIVER OUT edge. - */ - def _controlStructureViaReceiverOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaReceiverOut - - /** Traverse to IDENTIFIER via RECEIVER OUT edge. - */ - def _identifierViaReceiverOut: Option[Identifier] = get()._identifierViaReceiverOut - - /** Traverse to LITERAL via RECEIVER OUT edge. - */ - def _literalViaReceiverOut: Option[Literal] = get()._literalViaReceiverOut - - /** Traverse to METHOD_REF via RECEIVER OUT edge. - */ - def _methodRefViaReceiverOut: Option[MethodRef] = get()._methodRefViaReceiverOut - - /** Traverse to TYPE_REF via RECEIVER OUT edge. - */ - def _typeRefViaReceiverOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReceiverOut - - /** Traverse to UNKNOWN via RECEIVER OUT edge. - */ - def _unknownViaReceiverOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaReceiverOut - - def refOut: Iterator[Member] = get().refOut - override def _refOut = get()._refOut - - /** Traverse to referenced members Traverse to MEMBER via REF OUT edge. - */ - /** Traverse to referenced members */ - @overflowdb.traversal.help.Doc(info = """Traverse to referenced members""") - def referencedMember: overflowdb.traversal.Traversal[Member] = get().referencedMember - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def argumentIn: Iterator[Expression] = get().argumentIn - override def _argumentIn = get()._argumentIn - - /** Traverse to CALL via ARGUMENT IN edge. - */ - def _callViaArgumentIn: Option[Call] = get()._callViaArgumentIn - - /** Traverse to RETURN via ARGUMENT IN edge. - */ - def _returnViaArgumentIn: Option[Return] = get()._returnViaArgumentIn - - def astIn: Iterator[Expression] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to BLOCK via AST IN edge. - */ - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = get()._blockViaAstIn - - /** Traverse to CALL via AST IN edge. - */ - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = get()._callViaAstIn - - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: ControlStructure = get()._controlStructureViaAstIn - - /** Traverse to RETURN via AST IN edge. - */ - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = get()._returnViaAstIn - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - def cdgIn: Iterator[CfgNode] = get().cdgIn - override def _cdgIn = get()._cdgIn - - /** Traverse to BLOCK via CDG IN edge. - */ - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgIn - - /** Traverse to CALL via CDG IN edge. - */ - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = get()._callViaCdgIn - - /** Traverse to CONTROL_STRUCTURE via CDG IN edge. - */ - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgIn - - /** Traverse to FIELD_IDENTIFIER via CDG IN edge. - */ - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgIn - - /** Traverse to IDENTIFIER via CDG IN edge. - */ - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgIn - - /** Traverse to JUMP_TARGET via CDG IN edge. - */ - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgIn - - /** Traverse to LITERAL via CDG IN edge. - */ - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgIn - - /** Traverse to METHOD_REF via CDG IN edge. - */ - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgIn - - /** Traverse to TYPE_REF via CDG IN edge. - */ - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgIn - - /** Traverse to UNKNOWN via CDG IN edge. - */ - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def conditionIn: Iterator[ControlStructure] = get().conditionIn - override def _conditionIn = get()._conditionIn - - /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. - */ - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaConditionIn - - def containsIn: Iterator[Method] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to METHOD via CONTAINS IN edge. - */ - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsIn - - def dominateIn: Iterator[CfgNode] = get().dominateIn - override def _dominateIn = get()._dominateIn - - /** Traverse to BLOCK via DOMINATE IN edge. - */ - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateIn - - /** Traverse to CALL via DOMINATE IN edge. - */ - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaDominateIn - - /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. - */ - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateIn - - /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. - */ - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateIn - - /** Traverse to IDENTIFIER via DOMINATE IN edge. - */ - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateIn - - /** Traverse to JUMP_TARGET via DOMINATE IN edge. - */ - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateIn - - /** Traverse to LITERAL via DOMINATE IN edge. - */ - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateIn - - /** Traverse to METHOD via DOMINATE IN edge. - */ - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = get()._methodViaDominateIn - - /** Traverse to METHOD_REF via DOMINATE IN edge. - */ - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateIn - - /** Traverse to RETURN via DOMINATE IN edge. - */ - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateIn - - /** Traverse to TYPE_REF via DOMINATE IN edge. - */ - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateIn - - /** Traverse to UNKNOWN via DOMINATE IN edge. - */ - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateIn - - def postDominateIn: Iterator[CfgNode] = get().postDominateIn - override def _postDominateIn = get()._postDominateIn - - /** Traverse to BLOCK via POST_DOMINATE IN edge. - */ - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateIn - - /** Traverse to CALL via POST_DOMINATE IN edge. - */ - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateIn - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. - */ - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateIn - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. - */ - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateIn - - /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. - */ - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateIn - - /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. - */ - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateIn - - /** Traverse to LITERAL via POST_DOMINATE IN edge. - */ - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateIn - - /** Traverse to METHOD_REF via POST_DOMINATE IN edge. - */ - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateIn - - /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. - */ - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaPostDominateIn - - /** Traverse to RETURN via POST_DOMINATE IN edge. - */ - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateIn - - /** Traverse to TYPE_REF via POST_DOMINATE IN edge. - */ - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateIn - - /** Traverse to UNKNOWN via POST_DOMINATE IN edge. - */ - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateIn - - def reachingDefIn: Iterator[CfgNode] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - /** Traverse to BLOCK via REACHING_DEF IN edge. - */ - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = get()._blockViaReachingDefIn - - /** Traverse to CALL via REACHING_DEF IN edge. - */ - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefIn - - /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. - */ - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaReachingDefIn - - /** Traverse to IDENTIFIER via REACHING_DEF IN edge. - */ - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefIn - - /** Traverse to LITERAL via REACHING_DEF IN edge. - */ - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefIn - - /** Traverse to METHOD via REACHING_DEF IN edge. - */ - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = get()._methodViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. - */ - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - get()._methodParameterInViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. - */ - def _methodParameterOutViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefIn - - /** Traverse to METHOD_REF via REACHING_DEF IN edge. - */ - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefIn - - /** Traverse to TYPE_REF via REACHING_DEF IN edge. - */ - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefIn - - /** Traverse to UNKNOWN via REACHING_DEF IN edge. - */ - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaReachingDefIn - - def receiverIn: Iterator[Call] = get().receiverIn - override def _receiverIn = get()._receiverIn - - /** Traverse to CALL via RECEIVER IN edge. - */ - def _callViaReceiverIn: Option[Call] = get()._callViaReceiverIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Call.Label - } + with Expression + with StaticType[CallEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dispatchType" - case 6 => "dynamicTypeHintFullName" - case 7 => "lineNumber" - case 8 => "methodFullName" - case 9 => "name" - case 10 => "order" - case 11 => "possibleTypes" - case 12 => "signature" - case 13 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dispatchType" + case 5 => "dynamicTypeHintFullName" + case 6 => "lineNumber" + case 7 => "methodFullName" + case 8 => "name" + case 9 => "order" + case 10 => "possibleTypes" + case 11 => "signature" + case 12 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => dispatchType - case 6 => dynamicTypeHintFullName - case 7 => lineNumber - case 8 => methodFullName - case 9 => name - case 10 => order - case 11 => possibleTypes - case 12 => signature - case 13 => typeFullName + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dispatchType + case 5 => this.dynamicTypeHintFullName + case 6 => this.lineNumber + case 7 => this.methodFullName + case 8 => this.name + case 9 => this.order + case 10 => this.possibleTypes + case 11 => this.signature + case 12 => this.typeFullName + case _ => null } override def productPrefix = "Call" - override def productArity = 14 -} - -class CallDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with CallRepr with Expression with CallBase { + override def productArity = 13 - override def layoutInformation: NodeLayoutInformation = Call.layoutInformation + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Call] +} - private var _argumentIndex: Integer = Call.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = Call.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _dispatchType: String = Call.PropertyDefaults.DispatchType - def dispatchType: String = _dispatchType - private var _dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def dynamicTypeHintFullName: IndexedSeq[String] = _dynamicTypeHintFullName - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _methodFullName: String = Call.PropertyDefaults.MethodFullName - def methodFullName: String = _methodFullName - private var _name: String = Call.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = Call.PropertyDefaults.Order - def order: scala.Int = _order - private var _possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def possibleTypes: IndexedSeq[String] = _possibleTypes - private var _signature: String = Call.PropertyDefaults.Signature - def signature: String = _signature - private var _typeFullName: String = Call.PropertyDefaults.TypeFullName - def typeFullName: String = _typeFullName +object NewCall { + def apply(): NewCall = new NewCall + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - properties.put("DISPATCH_TYPE", dispatchType) - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object InsertionHelpers { + object NewNodeInserter_Call_argumentIndex 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[Int]] + 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 => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("METHOD_FULL_NAME", methodFullName) - properties.put("NAME", name) - properties.put("ORDER", order) - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - properties.put("SIGNATURE", signature) - properties.put("TYPE_FULL_NAME", typeFullName) - - properties - } - - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (!(("") == dispatchType)) { properties.put("DISPATCH_TYPE", dispatchType) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object NewNodeInserter_Call_argumentName 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.argumentName 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_code 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 => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Call_columnNumber 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[Int]] + 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.columnNumber 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_dispatchType 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 => + dstCast(offset) = generated.dispatchType + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Call_dynamicTypeHintFullName 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 => + for (item <- generated.dynamicTypeHintFullName) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Call_lineNumber 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[Int]] + 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.lineNumber 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_methodFullName 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 => + dstCast(offset) = generated.methodFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Call_name 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 => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Call_order 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[Int]] + 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 => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Call_possibleTypes 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 => + for (item <- generated.possibleTypes) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Call_signature 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 => + dstCast(offset) = generated.signature + offset += 1 + 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], + 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 => + dstCast(offset) = generated.typeFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == methodFullName)) { properties.put("METHOD_FULL_NAME", methodFullName) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - if (!(("") == signature)) { properties.put("SIGNATURE", signature) } - if (!(("") == typeFullName)) { properties.put("TYPE_FULL_NAME", typeFullName) } - - properties } +} - import overflowdb.traversal._ - def argumentOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _blockViaArgumentOut: overflowdb.traversal.Traversal[Block] = argumentOut.collectAll[Block] - def _callViaArgumentOut: overflowdb.traversal.Traversal[Call] = argumentOut.collectAll[Call] - def _controlStructureViaArgumentOut: overflowdb.traversal.Traversal[ControlStructure] = - argumentOut.collectAll[ControlStructure] - def _fieldIdentifierViaArgumentOut: overflowdb.traversal.Traversal[FieldIdentifier] = - argumentOut.collectAll[FieldIdentifier] - def _identifierViaArgumentOut: overflowdb.traversal.Traversal[Identifier] = argumentOut.collectAll[Identifier] - def _jumpTargetViaArgumentOut: overflowdb.traversal.Traversal[JumpTarget] = argumentOut.collectAll[JumpTarget] - def _literalViaArgumentOut: overflowdb.traversal.Traversal[Literal] = argumentOut.collectAll[Literal] - def _methodRefViaArgumentOut: overflowdb.traversal.Traversal[MethodRef] = argumentOut.collectAll[MethodRef] - def _typeRefViaArgumentOut: overflowdb.traversal.Traversal[TypeRef] = argumentOut.collectAll[TypeRef] - def _unknownViaArgumentOut: overflowdb.traversal.Traversal[Unknown] = argumentOut.collectAll[Unknown] - - def astOut: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](1) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _blockViaAstOut: overflowdb.traversal.Traversal[Block] = astOut.collectAll[Block] - def _callViaAstOut: overflowdb.traversal.Traversal[Call] = astOut.collectAll[Call] - def _controlStructureViaAstOut: overflowdb.traversal.Traversal[ControlStructure] = astOut.collectAll[ControlStructure] - def _fieldIdentifierViaAstOut: overflowdb.traversal.Traversal[FieldIdentifier] = astOut.collectAll[FieldIdentifier] - def _identifierViaAstOut: overflowdb.traversal.Traversal[Identifier] = astOut.collectAll[Identifier] - def _literalViaAstOut: overflowdb.traversal.Traversal[Literal] = astOut.collectAll[Literal] - def _methodRefViaAstOut: overflowdb.traversal.Traversal[MethodRef] = astOut.collectAll[MethodRef] - def _returnViaAstOut: overflowdb.traversal.Traversal[Return] = astOut.collectAll[Return] - def _typeRefViaAstOut: overflowdb.traversal.Traversal[TypeRef] = astOut.collectAll[TypeRef] - - def callOut: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](2) - override def _callOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _methodViaCallOut: overflowdb.traversal.Traversal[Method] = callOut.collectAll[Method] - - def cdgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](3) - override def _cdgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = cdgOut.collectAll[Block] - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = cdgOut.collectAll[Call] - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = cdgOut.collectAll[ControlStructure] - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = cdgOut.collectAll[FieldIdentifier] - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = cdgOut.collectAll[Identifier] - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = cdgOut.collectAll[JumpTarget] - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = cdgOut.collectAll[Literal] - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = cdgOut.collectAll[MethodRef] - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = cdgOut.collectAll[MethodReturn] - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = cdgOut.collectAll[Return] - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = cdgOut.collectAll[TypeRef] - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = cdgOut.collectAll[Unknown] - - def cfgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _cfgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = cfgOut.collectAll[CfgNode] - - def dominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](5) - override def _dominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = dominateOut.collectAll[Block] - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = dominateOut.collectAll[Call] - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - dominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateOut.collectAll[FieldIdentifier] - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = dominateOut.collectAll[Identifier] - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = dominateOut.collectAll[JumpTarget] - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = dominateOut.collectAll[Literal] - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = dominateOut.collectAll[MethodRef] - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = dominateOut.collectAll[MethodReturn] - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = dominateOut.collectAll[Return] - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = dominateOut.collectAll[TypeRef] - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = dominateOut.collectAll[Unknown] - - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](6) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def isCallForImportOut: Iterator[Import] = createAdjacentNodeScalaIteratorByOffSet[Import](7) - override def _isCallForImportOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _importViaIsCallForImportOut: overflowdb.traversal.Traversal[Import] = isCallForImportOut.collectAll[Import] - - def postDominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](8) - override def _postDominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = postDominateOut.collectAll[Block] - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = postDominateOut.collectAll[Call] - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - postDominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateOut.collectAll[FieldIdentifier] - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = postDominateOut.collectAll[Identifier] - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = postDominateOut.collectAll[JumpTarget] - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = postDominateOut.collectAll[Literal] - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = postDominateOut.collectAll[Method] - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = postDominateOut.collectAll[MethodRef] - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = postDominateOut.collectAll[Return] - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = postDominateOut.collectAll[TypeRef] - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = postDominateOut.collectAll[Unknown] - - def reachingDefOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](9) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = reachingDefOut.collectAll[Call] - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = reachingDefOut.collectAll[Identifier] - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = reachingDefOut.collectAll[Literal] - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefOut.collectAll[MethodParameterOut] - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = reachingDefOut.collectAll[MethodRef] - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = reachingDefOut.collectAll[Return] - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = reachingDefOut.collectAll[TypeRef] - - def receiverOut: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](10) - override def _receiverOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](10) - def _blockViaReceiverOut: Option[Block] = receiverOut.collectAll[Block].nextOption() - def _callViaReceiverOut: Option[Call] = receiverOut.collectAll[Call].nextOption() - def _controlStructureViaReceiverOut: overflowdb.traversal.Traversal[ControlStructure] = - receiverOut.collectAll[ControlStructure] - def _identifierViaReceiverOut: Option[Identifier] = receiverOut.collectAll[Identifier].nextOption() - def _literalViaReceiverOut: Option[Literal] = receiverOut.collectAll[Literal].nextOption() - def _methodRefViaReceiverOut: Option[MethodRef] = receiverOut.collectAll[MethodRef].nextOption() - def _typeRefViaReceiverOut: overflowdb.traversal.Traversal[TypeRef] = receiverOut.collectAll[TypeRef] - def _unknownViaReceiverOut: overflowdb.traversal.Traversal[Unknown] = receiverOut.collectAll[Unknown] - - def refOut: Iterator[Member] = createAdjacentNodeScalaIteratorByOffSet[Member](11) - override def _refOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](11) - def referencedMember: overflowdb.traversal.Traversal[Member] = refOut.collectAll[Member] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](12) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def argumentIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](13) - override def _argumentIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](13) - def _callViaArgumentIn: Option[Call] = argumentIn.collectAll[Call].nextOption() - def _returnViaArgumentIn: Option[Return] = argumentIn.collectAll[Return].nextOption() +class NewCall extends NewNode(7.toShort) with CallBase with CallReprNew with ExpressionNew { + override type StoredNodeType = Call + override def label: String = "CALL" - def astIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](14) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](14) - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = astIn.collectAll[Block] - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = astIn.collectAll[Call] - def _controlStructureViaAstIn: ControlStructure = try { astIn.collectAll[ControlStructure].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent CONTROL_STRUCTURE is mandatory, but not defined for this CALL node with id=" + id, - e - ) + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewCall.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewCall.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = astIn.collectAll[Return] - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - - def cdgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](15) - override def _cdgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](15) - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = cdgIn.collectAll[Block] - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = cdgIn.collectAll[Call] - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = cdgIn.collectAll[ControlStructure] - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = cdgIn.collectAll[FieldIdentifier] - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = cdgIn.collectAll[Identifier] - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = cdgIn.collectAll[JumpTarget] - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = cdgIn.collectAll[Literal] - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = cdgIn.collectAll[MethodRef] - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = cdgIn.collectAll[TypeRef] - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = cdgIn.collectAll[Unknown] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](16) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](16) - - def conditionIn: Iterator[ControlStructure] = createAdjacentNodeScalaIteratorByOffSet[ControlStructure](17) - override def _conditionIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](17) - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - conditionIn.collectAll[ControlStructure] - - def containsIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](18) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](18) - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = containsIn.collectAll[Method] - - def dominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](19) - override def _dominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](19) - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = dominateIn.collectAll[Block] - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = dominateIn.collectAll[Call] - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - dominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateIn.collectAll[FieldIdentifier] - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = dominateIn.collectAll[Identifier] - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = dominateIn.collectAll[JumpTarget] - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = dominateIn.collectAll[Literal] - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = dominateIn.collectAll[Method] - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = dominateIn.collectAll[MethodRef] - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = dominateIn.collectAll[Return] - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = dominateIn.collectAll[TypeRef] - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = dominateIn.collectAll[Unknown] - - def postDominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](20) - override def _postDominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](20) - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = postDominateIn.collectAll[Block] - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = postDominateIn.collectAll[Call] - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - postDominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateIn.collectAll[FieldIdentifier] - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = postDominateIn.collectAll[Identifier] - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = postDominateIn.collectAll[JumpTarget] - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = postDominateIn.collectAll[Literal] - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = postDominateIn.collectAll[MethodRef] - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - postDominateIn.collectAll[MethodReturn] - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = postDominateIn.collectAll[Return] - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = postDominateIn.collectAll[TypeRef] - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = postDominateIn.collectAll[Unknown] - - def reachingDefIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](21) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](21) - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = reachingDefIn.collectAll[Block] - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = reachingDefIn.collectAll[Call] - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - reachingDefIn.collectAll[ControlStructure] - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = reachingDefIn.collectAll[Identifier] - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = reachingDefIn.collectAll[Literal] - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = reachingDefIn.collectAll[Method] - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - reachingDefIn.collectAll[MethodParameterIn] - def _methodParameterOutViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefIn.collectAll[MethodParameterOut] - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = reachingDefIn.collectAll[MethodRef] - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = reachingDefIn.collectAll[TypeRef] - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = reachingDefIn.collectAll[Unknown] - def receiverIn: Iterator[Call] = createAdjacentNodeScalaIteratorByOffSet[Call](22) - override def _receiverIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](22) - def _callViaReceiverIn: Option[Call] = receiverIn.collectAll[Call].nextOption() + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var dispatchType: String = "": String + var dynamicTypeHintFullName: IndexedSeq[String] = ArraySeq.empty + var lineNumber: Option[Int] = None + var methodFullName: String = "": String + var name: String = "": String + var order: Int = -1: Int + var possibleTypes: IndexedSeq[String] = ArraySeq.empty + var signature: String = "": String + 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 } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def dispatchType(value: String): this.type = { this.dispatchType = value; this } + def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { + this.dynamicTypeHintFullName = value.iterator.to(ArraySeq); this + } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def methodFullName(value: String): this.type = { this.methodFullName = value; this } + def name(value: String): this.type = { this.name = value; this } + 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 typeFullName(value: String): this.type = { this.typeFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 17, 1) + interface.countProperty(this, 18, dynamicTypeHintFullName.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 36, 1) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 47, possibleTypes.size) + interface.countProperty(this, 49, 1) + interface.countProperty(this, 52, 1) + } - override def label: String = { - Call.Label + override def copy: this.type = { + val newInstance = new NewCall + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.dispatchType = this.dispatchType + newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName + newInstance.lineNumber = this.lineNumber + newInstance.methodFullName = this.methodFullName + newInstance.name = this.name + newInstance.order = this.order + newInstance.possibleTypes = this.possibleTypes + newInstance.signature = this.signature + newInstance.typeFullName = this.typeFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dispatchType" - case 6 => "dynamicTypeHintFullName" - case 7 => "lineNumber" - case 8 => "methodFullName" - case 9 => "name" - case 10 => "order" - case 11 => "possibleTypes" - case 12 => "signature" - case 13 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dispatchType" + case 5 => "dynamicTypeHintFullName" + case 6 => "lineNumber" + case 7 => "methodFullName" + case 8 => "name" + case 9 => "order" + case 10 => "possibleTypes" + case 11 => "signature" + case 12 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => dispatchType - case 6 => dynamicTypeHintFullName - case 7 => lineNumber - case 8 => methodFullName - case 9 => name - case 10 => order - case 11 => possibleTypes - case 12 => signature - case 13 => typeFullName + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dispatchType + case 5 => this.dynamicTypeHintFullName + case 6 => this.lineNumber + case 7 => this.methodFullName + case 8 => this.name + case 9 => this.order + case 10 => this.possibleTypes + case 11 => this.signature + case 12 => this.typeFullName + case _ => null } - override def productPrefix = "Call" - override def productArity = 14 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[CallDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "DISPATCH_TYPE" => this._dispatchType - case "DYNAMIC_TYPE_HINT_FULL_NAME" => this._dynamicTypeHintFullName - case "LINE_NUMBER" => this._lineNumber - case "METHOD_FULL_NAME" => this._methodFullName - case "NAME" => this._name - case "ORDER" => this._order - case "POSSIBLE_TYPES" => this._possibleTypes - case "SIGNATURE" => this._signature - case "TYPE_FULL_NAME" => this._typeFullName - - case _ => null - } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "DISPATCH_TYPE" => this._dispatchType = value.asInstanceOf[String] - case "DYNAMIC_TYPE_HINT_FULL_NAME" => - this._dynamicTypeHintFullName = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "METHOD_FULL_NAME" => this._methodFullName = value.asInstanceOf[String] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "POSSIBLE_TYPES" => - this._possibleTypes = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "SIGNATURE" => this._signature = value.asInstanceOf[String] - case "TYPE_FULL_NAME" => this._typeFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewCall].argumentIndex - this._argumentName = newNode.asInstanceOf[NewCall].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewCall].code - this._columnNumber = newNode.asInstanceOf[NewCall].columnNumber match { - case None => null; case Some(value) => value - } - this._dispatchType = newNode.asInstanceOf[NewCall].dispatchType - this._dynamicTypeHintFullName = - if (newNode.asInstanceOf[NewCall].dynamicTypeHintFullName != null) - newNode.asInstanceOf[NewCall].dynamicTypeHintFullName - else collection.immutable.ArraySeq.empty - this._lineNumber = newNode.asInstanceOf[NewCall].lineNumber match { case None => null; case Some(value) => value } - this._methodFullName = newNode.asInstanceOf[NewCall].methodFullName - this._name = newNode.asInstanceOf[NewCall].name - this._order = newNode.asInstanceOf[NewCall].order - this._possibleTypes = - if (newNode.asInstanceOf[NewCall].possibleTypes != null) newNode.asInstanceOf[NewCall].possibleTypes - else collection.immutable.ArraySeq.empty - this._signature = newNode.asInstanceOf[NewCall].signature - this._typeFullName = newNode.asInstanceOf[NewCall].typeFullName - - } - + override def productPrefix = "NewCall" + override def productArity = 13 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewCall] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/CallRepr.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/CallRepr.scala deleted file mode 100644 index 88ef1953a..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/CallRepr.scala +++ /dev/null @@ -1,64 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.nodes - -object CallRepr { - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val Signature = "SIGNATURE" - val all: Set[String] = Set(Code, ColumnNumber, LineNumber, Name, Order, Signature) - } - - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val Signature = new overflowdb.PropertyKey[String]("SIGNATURE") - } - - object PropertyDefaults { - val Code = "" - val Name = "" - val Order = -1: Int - val Signature = "" - } - - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array() - } - -} - -trait CallReprBase extends AbstractNode with CfgNodeBase { - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int - def signature: String -} - -trait CallReprNew extends NewNode with CfgNodeNew { - def code_=(value: String): Unit - def columnNumber_=(value: Option[scala.Int]): Unit - def lineNumber_=(value: Option[scala.Int]): Unit - def name_=(value: String): Unit - def order_=(value: scala.Int): Unit - def signature_=(value: String): Unit - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int - def signature: String -} - -trait CallRepr extends StoredNode with CallReprBase with CfgNode { - import overflowdb.traversal._ - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/CfgNode.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/CfgNode.scala deleted file mode 100644 index 7a379b83e..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/CfgNode.scala +++ /dev/null @@ -1,134 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.nodes - -object CfgNode { - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val all: Set[String] = Set(Code, ColumnNumber, LineNumber, Order) - } - - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - } - - object PropertyDefaults { - val Code = "" - val Order = -1: Int - } - - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array("CFG", "CFG", "CFG", "CFG", "CFG", "CFG", "CFG", "CFG", "CFG", "CFG", "CFG") - } - -} - -trait CfgNodeBase extends AbstractNode with AstNodeBase { - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def order: scala.Int -} - -trait CfgNodeNew extends NewNode with AstNodeNew { - def code_=(value: String): Unit - def columnNumber_=(value: Option[scala.Int]): Unit - def lineNumber_=(value: Option[scala.Int]): Unit - def order_=(value: scala.Int): Unit - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def order: scala.Int -} - -trait CfgNode extends StoredNode with CfgNodeBase with AstNode { - import overflowdb.traversal._ - - def cfgIn: Iterator[? <: StoredNode] - - /** Traverse to EXPRESSION via CFG IN edge. - */ - def _expressionViaCfgIn: overflowdb.traversal.Traversal[Expression] = - cfgIn.collectAll[Expression] - - /** Traverse to AST_NODE via CFG IN edge. - */ - def _astNodeViaCfgIn: overflowdb.traversal.Traversal[AstNode] = - cfgIn.collectAll[AstNode] - - /** Traverse to CFG_NODE via CFG IN edge. - */ - def _cfgNodeViaCfgIn: overflowdb.traversal.Traversal[CfgNode] = - cfgIn.collectAll[CfgNode] - - /** Traverse to BLOCK via CFG IN edge. - */ - def _blockViaCfgIn: overflowdb.traversal.Traversal[Block] = - cfgIn.collectAll[Block] - - /** Traverse to CALL via CFG IN edge. - */ - def _callViaCfgIn: overflowdb.traversal.Traversal[Call] = - cfgIn.collectAll[Call] - - /** Traverse to CALL_REPR via CFG IN edge. - */ - def _callReprViaCfgIn: overflowdb.traversal.Traversal[CallRepr] = - cfgIn.collectAll[CallRepr] - - /** Traverse to CONTROL_STRUCTURE via CFG IN edge. - */ - def _controlStructureViaCfgIn: overflowdb.traversal.Traversal[ControlStructure] = - cfgIn.collectAll[ControlStructure] - - /** Traverse to FIELD_IDENTIFIER via CFG IN edge. - */ - def _fieldIdentifierViaCfgIn: overflowdb.traversal.Traversal[FieldIdentifier] = - cfgIn.collectAll[FieldIdentifier] - - /** Traverse to IDENTIFIER via CFG IN edge. - */ - def _identifierViaCfgIn: overflowdb.traversal.Traversal[Identifier] = - cfgIn.collectAll[Identifier] - - /** Traverse to JUMP_TARGET via CFG IN edge. - */ - def _jumpTargetViaCfgIn: overflowdb.traversal.Traversal[JumpTarget] = - cfgIn.collectAll[JumpTarget] - - /** Traverse to LITERAL via CFG IN edge. - */ - def _literalViaCfgIn: overflowdb.traversal.Traversal[Literal] = - cfgIn.collectAll[Literal] - - /** Traverse to DECLARATION via CFG IN edge. - */ - def _declarationViaCfgIn: overflowdb.traversal.Traversal[Declaration] = - cfgIn.collectAll[Declaration] - - /** Traverse to METHOD via CFG IN edge. - */ - def _methodViaCfgIn: overflowdb.traversal.Traversal[Method] = - cfgIn.collectAll[Method] - - /** Traverse to METHOD_REF via CFG IN edge. - */ - def _methodRefViaCfgIn: overflowdb.traversal.Traversal[MethodRef] = - cfgIn.collectAll[MethodRef] - - /** Traverse to TYPE_REF via CFG IN edge. - */ - def _typeRefViaCfgIn: overflowdb.traversal.Traversal[TypeRef] = - cfgIn.collectAll[TypeRef] - - /** Traverse to UNKNOWN via CFG IN edge. - */ - def _unknownViaCfgIn: overflowdb.traversal.Traversal[Unknown] = - cfgIn.collectAll[Unknown] - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ClosureBinding.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ClosureBinding.scala index e1acfdf1c..00ac404a6 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ClosureBinding.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ClosureBinding.scala @@ -1,261 +1,244 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object ClosureBinding { - def apply(graph: Graph, id: Long) = new ClosureBinding(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait ClosureBindingEMT + extends AnyRef + with HasClosureBindingIdEMT + with HasClosureOriginalNameEMT + with HasEvaluationStrategyEMT - val Label = "CLOSURE_BINDING" +trait ClosureBindingBase extends AbstractNode with StaticType[ClosureBindingEMT] { - object PropertyNames { - val ClosureBindingId = "CLOSURE_BINDING_ID" - val ClosureOriginalName = "CLOSURE_ORIGINAL_NAME" - val EvaluationStrategy = "EVALUATION_STRATEGY" - val all: Set[String] = Set(ClosureBindingId, ClosureOriginalName, EvaluationStrategy) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + this.closureBindingId.foreach { p => res.put("CLOSURE_BINDING_ID", p) } + this.closureOriginalName.foreach { p => res.put("CLOSURE_ORIGINAL_NAME", p) } + if (("": String) != this.evaluationStrategy) res.put("EVALUATION_STRATEGY", this.evaluationStrategy) + res } +} - object Properties { - val ClosureBindingId = new overflowdb.PropertyKey[String]("CLOSURE_BINDING_ID") - val ClosureOriginalName = new overflowdb.PropertyKey[String]("CLOSURE_ORIGINAL_NAME") - val EvaluationStrategy = new overflowdb.PropertyKey[String]("EVALUATION_STRATEGY") +object ClosureBinding { + val Label = "CLOSURE_BINDING" + object PropertyNames { + /** Identifier which uniquely describes a CLOSURE_BINDING. This property is used to match captured LOCAL nodes with + * the corresponding CLOSURE_BINDING nodes + */ + val ClosureBindingId = "CLOSURE_BINDING_ID" + + /** The original name of the (potentially mangled) captured variable */ + val ClosureOriginalName = "CLOSURE_ORIGINAL_NAME" + + /** For formal method input parameters, output parameters, and return parameters, this field holds the evaluation + * strategy, which is one of the following: 1) `BY_REFERENCE` indicates that the parameter is passed by reference, + * 2) `BY_VALUE` indicates that it is passed by value, that is, a copy is made, 3) `BY_SHARING` the parameter is a + * pointer/reference and it is shared with the caller/callee. While a copy of the pointer is made, a copy of the + * object that it points to is not made. + */ + val EvaluationStrategy = "EVALUATION_STRATEGY" } + object Properties { + /** Identifier which uniquely describes a CLOSURE_BINDING. This property is used to match captured LOCAL nodes with + * the corresponding CLOSURE_BINDING nodes + */ + val ClosureBindingId = flatgraph.OptionalPropertyKey[String](kind = 8, name = "CLOSURE_BINDING_ID") + + /** The original name of the (potentially mangled) captured variable */ + val ClosureOriginalName = flatgraph.OptionalPropertyKey[String](kind = 9, name = "CLOSURE_ORIGINAL_NAME") + + /** For formal method input parameters, output parameters, and return parameters, this field holds the evaluation + * strategy, which is one of the following: 1) `BY_REFERENCE` indicates that the parameter is passed by reference, + * 2) `BY_VALUE` indicates that it is passed by value, that is, a copy is made, 3) `BY_SHARING` the parameter is a + * pointer/reference and it is shared with the caller/callee. While a copy of the pointer is made, a copy of the + * object that it points to is not made. + */ + val EvaluationStrategy = + flatgraph.SinglePropertyKey[String](kind = 19, name = "EVALUATION_STRATEGY", default = "") + } object PropertyDefaults { val EvaluationStrategy = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List(io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Capture.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.CapturedBy.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array("REF") - val In: Array[String] = Array("CAPTURE", "CAPTURED_BY") - } - - val factory = new NodeFactory[ClosureBindingDb] { - override val forLabel = ClosureBinding.Label - - override def createNode(ref: NodeRef[ClosureBindingDb]) = - new ClosureBindingDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = ClosureBinding(graph, id) - } } -trait ClosureBindingBase extends AbstractNode { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def closureBindingId: Option[String] - def closureOriginalName: Option[String] - def evaluationStrategy: String - -} - -class ClosureBinding(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[ClosureBindingDb](graph_4762, id_4762) +class ClosureBinding(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 8.toShort, seq_4762) with ClosureBindingBase - with StoredNode { - override def closureBindingId: Option[String] = get().closureBindingId - override def closureOriginalName: Option[String] = get().closureOriginalName - override def evaluationStrategy: String = get().evaluationStrategy - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "EVALUATION_STRATEGY" => ClosureBinding.PropertyDefaults.EvaluationStrategy - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def refOut: Iterator[AstNode] = get().refOut - override def _refOut = get()._refOut - - /** Traverse to LOCAL via REF OUT edge. - */ - def _localViaRefOut: Option[Local] = get()._localViaRefOut - - /** Traverse to METHOD_PARAMETER_IN via REF OUT edge. - */ - def _methodParameterInViaRefOut: Option[MethodParameterIn] = get()._methodParameterInViaRefOut - - def captureIn: Iterator[Expression] = get().captureIn - override def _captureIn = get()._captureIn - - /** Traverse to METHOD_REF via CAPTURE IN edge. - */ - def _methodRefViaCaptureIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCaptureIn - - /** Traverse to TYPE_REF via CAPTURE IN edge. - */ - def _typeRefViaCaptureIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCaptureIn - - def capturedByIn: Iterator[AstNode] = get().capturedByIn - override def _capturedByIn = get()._capturedByIn - - /** Traverse to LOCAL via CAPTURED_BY IN edge. - */ - def _localViaCapturedByIn: overflowdb.traversal.Traversal[Local] = get()._localViaCapturedByIn - - /** Traverse to METHOD_PARAMETER_IN via CAPTURED_BY IN edge. - */ - def _methodParameterInViaCapturedByIn: overflowdb.traversal.Traversal[MethodParameterIn] = - get()._methodParameterInViaCapturedByIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - ClosureBinding.Label - } + with StaticType[ClosureBindingEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "closureBindingId" - case 2 => "closureOriginalName" - case 3 => "evaluationStrategy" + case 0 => "closureBindingId" + case 1 => "closureOriginalName" + case 2 => "evaluationStrategy" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => closureBindingId - case 2 => closureOriginalName - case 3 => evaluationStrategy + case 0 => this.closureBindingId + case 1 => this.closureOriginalName + case 2 => this.evaluationStrategy + case _ => null } override def productPrefix = "ClosureBinding" - override def productArity = 4 -} - -class ClosureBindingDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with ClosureBindingBase { - - override def layoutInformation: NodeLayoutInformation = ClosureBinding.layoutInformation + override def productArity = 3 - private var _closureBindingId: String = null - def closureBindingId: Option[String] = Option(_closureBindingId).asInstanceOf[Option[String]] - private var _closureOriginalName: String = null - def closureOriginalName: Option[String] = Option(_closureOriginalName).asInstanceOf[Option[String]] - private var _evaluationStrategy: String = ClosureBinding.PropertyDefaults.EvaluationStrategy - def evaluationStrategy: String = _evaluationStrategy - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - closureBindingId.map { value => properties.put("CLOSURE_BINDING_ID", value) } - closureOriginalName.map { value => properties.put("CLOSURE_ORIGINAL_NAME", value) } - properties.put("EVALUATION_STRATEGY", evaluationStrategy) + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[ClosureBinding] +} - properties +object NewClosureBinding { + def apply(): NewClosureBinding = new NewClosureBinding + private val outNeighbors: Map[String, Set[String]] = Map("REF" -> Set("LOCAL", "METHOD_PARAMETER_IN")) + private val inNeighbors: Map[String, Set[String]] = + Map("CAPTURE" -> Set("METHOD_REF", "TYPE_REF"), "CAPTURED_BY" -> Set("LOCAL", "METHOD_PARAMETER_IN")) + + object InsertionHelpers { + object NewNodeInserter_ClosureBinding_closureBindingId 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: NewClosureBinding => + generated.closureBindingId 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_ClosureBinding_closureOriginalName 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: NewClosureBinding => + generated.closureOriginalName 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_ClosureBinding_evaluationStrategy 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: NewClosureBinding => + dstCast(offset) = generated.evaluationStrategy + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - closureBindingId.map { value => properties.put("CLOSURE_BINDING_ID", value) } - closureOriginalName.map { value => properties.put("CLOSURE_ORIGINAL_NAME", value) } - if (!(("") == evaluationStrategy)) { properties.put("EVALUATION_STRATEGY", evaluationStrategy) } +class NewClosureBinding extends NewNode(8.toShort) with ClosureBindingBase { + override type StoredNodeType = ClosureBinding + override def label: String = "CLOSURE_BINDING" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewClosureBinding.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewClosureBinding.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def refOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](0) - override def _refOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _localViaRefOut: Option[Local] = refOut.collectAll[Local].nextOption() - def _methodParameterInViaRefOut: Option[MethodParameterIn] = refOut.collectAll[MethodParameterIn].nextOption() - - def captureIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](1) - override def _captureIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _methodRefViaCaptureIn: overflowdb.traversal.Traversal[MethodRef] = captureIn.collectAll[MethodRef] - def _typeRefViaCaptureIn: overflowdb.traversal.Traversal[TypeRef] = captureIn.collectAll[TypeRef] - - def capturedByIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](2) - override def _capturedByIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _localViaCapturedByIn: overflowdb.traversal.Traversal[Local] = capturedByIn.collectAll[Local] - def _methodParameterInViaCapturedByIn: overflowdb.traversal.Traversal[MethodParameterIn] = - capturedByIn.collectAll[MethodParameterIn] + var closureBindingId: Option[String] = None + var closureOriginalName: Option[String] = None + var evaluationStrategy: String = "": String + def closureBindingId(value: Option[String]): this.type = { this.closureBindingId = value; this } + def closureBindingId(value: String): this.type = { this.closureBindingId = Option(value); this } + def closureOriginalName(value: Option[String]): this.type = { this.closureOriginalName = value; this } + def closureOriginalName(value: String): this.type = { this.closureOriginalName = Option(value); this } + def evaluationStrategy(value: String): this.type = { this.evaluationStrategy = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 8, closureBindingId.size) + interface.countProperty(this, 9, closureOriginalName.size) + interface.countProperty(this, 19, 1) + } - override def label: String = { - ClosureBinding.Label + override def copy: this.type = { + val newInstance = new NewClosureBinding + newInstance.closureBindingId = this.closureBindingId + newInstance.closureOriginalName = this.closureOriginalName + newInstance.evaluationStrategy = this.evaluationStrategy + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "closureBindingId" - case 2 => "closureOriginalName" - case 3 => "evaluationStrategy" + case 0 => "closureBindingId" + case 1 => "closureOriginalName" + case 2 => "evaluationStrategy" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => closureBindingId - case 2 => closureOriginalName - case 3 => evaluationStrategy - } - - override def productPrefix = "ClosureBinding" - override def productArity = 4 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[ClosureBindingDb] - - override def property(key: String): Any = { - key match { - case "CLOSURE_BINDING_ID" => this._closureBindingId - case "CLOSURE_ORIGINAL_NAME" => this._closureOriginalName - case "EVALUATION_STRATEGY" => this._evaluationStrategy - + case 0 => this.closureBindingId + case 1 => this.closureOriginalName + case 2 => this.evaluationStrategy case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CLOSURE_BINDING_ID" => this._closureBindingId = value.asInstanceOf[String] - case "CLOSURE_ORIGINAL_NAME" => this._closureOriginalName = value.asInstanceOf[String] - case "EVALUATION_STRATEGY" => this._evaluationStrategy = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._closureBindingId = newNode.asInstanceOf[NewClosureBinding].closureBindingId match { - case None => null; case Some(value) => value - } - this._closureOriginalName = newNode.asInstanceOf[NewClosureBinding].closureOriginalName match { - case None => null; case Some(value) => value - } - this._evaluationStrategy = newNode.asInstanceOf[NewClosureBinding].evaluationStrategy - - } + override def productPrefix = "NewClosureBinding" + override def productArity = 3 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewClosureBinding] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Comment.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Comment.scala index b852a6814..9ae374802 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Comment.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Comment.scala @@ -1,279 +1,1554 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Comment { - def apply(graph: Graph, id: Long) = new Comment(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait CommentEMT extends AnyRef with AstNodeEMT with HasFilenameEMT - val Label = "COMMENT" +trait CommentBase extends AbstractNode with AstNodeBase with StaticType[CommentEMT] { - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val Filename = "FILENAME" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val all: Set[String] = Set(Code, ColumnNumber, Filename, LineNumber, Order) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + if (("": String) != this.filename) res.put("FILENAME", this.filename) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val Filename = new overflowdb.PropertyKey[String]("FILENAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +object Comment { + val Label = "COMMENT" + object PropertyNames { - } + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - object PropertyDefaults { - val Code = "" - val Filename = "" - val Order = -1: Int - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List(io.shiftleft.codepropertygraph.generated.edges.SourceFile.layoutInformation).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.SourceFile.layoutInformation - ).asJava - ) + /** The path of the source file this node was generated from, relative to the root path in the meta data node. This + * field must be set but may be set to the value `` to indicate that no source file can be associated with + * the node, e.g., because the node represents an entity known to exist because it is referenced, but for which the + * file that is is declared in is unknown. + */ + val Filename = "FILENAME" + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - object Edges { - val Out: Array[String] = Array("SOURCE_FILE") - val In: Array[String] = Array("AST", "SOURCE_FILE") + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" } + object Properties { - val factory = new NodeFactory[CommentDb] { - override val forLabel = Comment.Label + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") - override def createNode(ref: NodeRef[CommentDb]) = - new CommentDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") - override def createNodeRef(graph: Graph, id: Long) = Comment(graph, id) - } -} - -trait CommentBase extends AbstractNode with AstNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] + /** The path of the source file this node was generated from, relative to the root path in the meta data node. This + * field must be set but may be set to the value `` to indicate that no source file can be associated with + * the node, e.g., because the node represents an entity known to exist because it is referenced, but for which the + * file that is is declared in is unknown. + */ + val Filename = flatgraph.SinglePropertyKey[String](kind = 21, name = "FILENAME", default = "") - def code: String - def columnNumber: Option[scala.Int] - def filename: String - def lineNumber: Option[scala.Int] - def order: scala.Int + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } + object PropertyDefaults { + val Code = "" + val Filename = "" + val Order = -1: Int + } } -class Comment(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[CommentDb](graph_4762, id_4762) +class Comment(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 9.toShort, seq_4762) with CommentBase - with StoredNode - with AstNode { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def filename: String = get().filename - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => Comment.PropertyDefaults.Code - case "FILENAME" => Comment.PropertyDefaults.Filename - case "ORDER" => Comment.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def sourceFileOut: Iterator[Comment] = get().sourceFileOut - override def _sourceFileOut = get()._sourceFileOut - - /** Traverse to COMMENT via SOURCE_FILE OUT edge. - */ - def file: overflowdb.traversal.Traversal[Comment] = get().file - - def astIn: Iterator[File] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to FILE via AST IN edge. - */ - def _fileViaAstIn: overflowdb.traversal.Traversal[File] = get()._fileViaAstIn - - def sourceFileIn: Iterator[Comment] = get().sourceFileIn - override def _sourceFileIn = get()._sourceFileIn - - /** Traverse to COMMENT via SOURCE_FILE IN edge. - */ - def _commentViaSourceFileIn: overflowdb.traversal.Traversal[Comment] = get()._commentViaSourceFileIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Comment.Label - } + with AstNode + with StaticType[CommentEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "filename" - case 4 => "lineNumber" - case 5 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "filename" + case 3 => "lineNumber" + case 4 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => filename - case 4 => lineNumber - case 5 => order + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.filename + case 3 => this.lineNumber + case 4 => this.order + case _ => null } override def productPrefix = "Comment" - override def productArity = 6 -} - -class CommentDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with AstNode with CommentBase { - - override def layoutInformation: NodeLayoutInformation = Comment.layoutInformation + override def productArity = 5 - private var _code: String = Comment.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _filename: String = Comment.PropertyDefaults.Filename - def filename: String = _filename - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = Comment.PropertyDefaults.Order - def order: scala.Int = _order + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Comment] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - properties.put("FILENAME", filename) - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) +object NewComment { + def apply(): NewComment = new NewComment + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_Comment_code 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: NewComment => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Comment_columnNumber 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[Int]] + 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: NewComment => + generated.columnNumber 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_Comment_filename 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: NewComment => + dstCast(offset) = generated.filename + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Comment_lineNumber 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[Int]] + 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: NewComment => + generated.lineNumber 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_Comment_order 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[Int]] + 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: NewComment => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (!(("") == filename)) { properties.put("FILENAME", filename) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } +class NewComment extends NewNode(9.toShort) with CommentBase with AstNodeNew { + override type StoredNodeType = Comment + override def label: String = "COMMENT" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewComment.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewComment.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def sourceFileOut: Iterator[Comment] = createAdjacentNodeScalaIteratorByOffSet[Comment](0) - override def _sourceFileOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def file: overflowdb.traversal.Traversal[Comment] = sourceFileOut.collectAll[Comment] - - def astIn: Iterator[File] = createAdjacentNodeScalaIteratorByOffSet[File](1) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _fileViaAstIn: overflowdb.traversal.Traversal[File] = astIn.collectAll[File] - - def sourceFileIn: Iterator[Comment] = createAdjacentNodeScalaIteratorByOffSet[Comment](2) - override def _sourceFileIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _commentViaSourceFileIn: overflowdb.traversal.Traversal[Comment] = sourceFileIn.collectAll[Comment] + var code: String = "": String + var columnNumber: Option[Int] = None + var filename: String = "": String + var lineNumber: Option[Int] = None + var order: Int = -1: Int + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def filename(value: String): this.type = { this.filename = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 21, 1) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + } - override def label: String = { - Comment.Label + override def copy: this.type = { + val newInstance = new NewComment + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.filename = this.filename + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "filename" - case 4 => "lineNumber" - case 5 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "filename" + case 3 => "lineNumber" + case 4 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => filename - case 4 => lineNumber - case 5 => order - } - - override def productPrefix = "Comment" - override def productArity = 6 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[CommentDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "FILENAME" => this._filename - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.filename + case 3 => this.lineNumber + case 4 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "FILENAME" => this._filename = value.asInstanceOf[String] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewComment].code - this._columnNumber = newNode.asInstanceOf[NewComment].columnNumber match { - case None => null; case Some(value) => value - } - this._filename = newNode.asInstanceOf[NewComment].filename - this._lineNumber = newNode.asInstanceOf[NewComment].lineNumber match { - case None => null; case Some(value) => value - } - this._order = newNode.asInstanceOf[NewComment].order - - } + override def productPrefix = "NewComment" + override def productArity = 5 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewComment] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ConfigFile.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ConfigFile.scala index 1b44a85c2..6d07924bd 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ConfigFile.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ConfigFile.scala @@ -1,187 +1,179 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object ConfigFile { - def apply(graph: Graph, id: Long) = new ConfigFile(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait ConfigFileEMT extends AnyRef with HasContentEMT with HasNameEMT - val Label = "CONFIG_FILE" +trait ConfigFileBase extends AbstractNode with StaticType[ConfigFileEMT] { - object PropertyNames { - val Content = "CONTENT" - val Name = "NAME" - val all: Set[String] = Set(Content, Name) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.content) res.put("CONTENT", this.content) + if (("": String) != this.name) res.put("NAME", this.name) + res } +} - object Properties { - val Content = new overflowdb.PropertyKey[String]("CONTENT") - val Name = new overflowdb.PropertyKey[String]("NAME") +object ConfigFile { + val Label = "CONFIG_FILE" + object PropertyNames { - } + /** Certain files, e.g., configuration files, may be included in the CPG as-is. For such files, the `CONTENT` field + * contains the files content. + */ + val Content = "CONTENT" - object PropertyDefaults { - val Content = "" - val Name = "" + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" } + object Properties { - val layoutInformation = new NodeLayoutInformation(Label, PropertyNames.allAsJava, List().asJava, List().asJava) + /** Certain files, e.g., configuration files, may be included in the CPG as-is. For such files, the `CONTENT` field + * contains the files content. + */ + val Content = flatgraph.SinglePropertyKey[String](kind = 14, name = "CONTENT", default = "") - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array() + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") } - - val factory = new NodeFactory[ConfigFileDb] { - override val forLabel = ConfigFile.Label - - override def createNode(ref: NodeRef[ConfigFileDb]) = - new ConfigFileDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = ConfigFile(graph, id) + object PropertyDefaults { + val Content = "" + val Name = "" } } -trait ConfigFileBase extends AbstractNode { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def content: String - def name: String - -} - -class ConfigFile(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[ConfigFileDb](graph_4762, id_4762) +class ConfigFile(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 10.toShort, seq_4762) with ConfigFileBase - with StoredNode { - override def content: String = get().content - override def name: String = get().name - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CONTENT" => ConfigFile.PropertyDefaults.Content - case "NAME" => ConfigFile.PropertyDefaults.Name - case _ => super.propertyDefaultValue(propertyKey) - } - } - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - ConfigFile.Label - } + with StaticType[ConfigFileEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "content" - case 2 => "name" + case 0 => "content" + case 1 => "name" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => content - case 2 => name + case 0 => this.content + case 1 => this.name + case _ => null } override def productPrefix = "ConfigFile" - override def productArity = 3 -} - -class ConfigFileDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with ConfigFileBase { - - override def layoutInformation: NodeLayoutInformation = ConfigFile.layoutInformation + override def productArity = 2 - private var _content: String = ConfigFile.PropertyDefaults.Content - def content: String = _content - private var _name: String = ConfigFile.PropertyDefaults.Name - def name: String = _name - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CONTENT", content) - properties.put("NAME", name) + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[ConfigFile] +} - properties +object NewConfigFile { + def apply(): NewConfigFile = new NewConfigFile + private val outNeighbors: Map[String, Set[String]] = Map() + private val inNeighbors: Map[String, Set[String]] = Map() + + object InsertionHelpers { + object NewNodeInserter_ConfigFile_content 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: NewConfigFile => + dstCast(offset) = generated.content + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_ConfigFile_name 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: NewConfigFile => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == content)) { properties.put("CONTENT", content) } - if (!(("") == name)) { properties.put("NAME", name) } +class NewConfigFile extends NewNode(10.toShort) with ConfigFileBase { + override type StoredNodeType = ConfigFile + override def label: String = "CONFIG_FILE" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewConfigFile.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewConfigFile.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ + var content: String = "": String + var name: String = "": String + def content(value: String): this.type = { this.content = value; this } + def name(value: String): this.type = { this.name = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 14, 1) + interface.countProperty(this, 39, 1) + } - override def label: String = { - ConfigFile.Label + override def copy: this.type = { + val newInstance = new NewConfigFile + newInstance.content = this.content + newInstance.name = this.name + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "content" - case 2 => "name" + case 0 => "content" + case 1 => "name" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => content - case 2 => name - } - - override def productPrefix = "ConfigFile" - override def productArity = 3 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[ConfigFileDb] - - override def property(key: String): Any = { - key match { - case "CONTENT" => this._content - case "NAME" => this._name - + case 0 => this.content + case 1 => this.name case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CONTENT" => this._content = value.asInstanceOf[String] - case "NAME" => this._name = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._content = newNode.asInstanceOf[NewConfigFile].content - this._name = newNode.asInstanceOf[NewConfigFile].name - - } + override def productPrefix = "NewConfigFile" + override def productArity = 2 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewConfigFile] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ControlStructure.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ControlStructure.scala index d58ff1607..9dab4190c 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ControlStructure.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/ControlStructure.scala @@ -1,39 +1,116 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object ControlStructure { - def apply(graph: Graph, id: Long) = new ControlStructure(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait ControlStructureEMT extends AnyRef with ExpressionEMT with HasControlStructureTypeEMT with HasParserTypeNameEMT - val Label = "CONTROL_STRUCTURE" +trait ControlStructureBase extends AbstractNode with ExpressionBase with StaticType[ControlStructureEMT] { + + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + if (("": String) != this.controlStructureType) res.put("CONTROL_STRUCTURE_TYPE", this.controlStructureType) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + if (("": String) != this.parserTypeName) res.put("PARSER_TYPE_NAME", this.parserTypeName) + res + } +} +object ControlStructure { + val Label = "CONTROL_STRUCTURE" object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" + + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** The `CONTROL_STRUCTURE_TYPE` field indicates which kind of control structure a `CONTROL_STRUCTURE` node + * represents. The available types are the following: BREAK, CONTINUE, DO, WHILE, FOR, GOTO, IF, ELSE, TRY, THROW + * and SWITCH. + */ val ControlStructureType = "CONTROL_STRUCTURE_TYPE" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val ParserTypeName = "PARSER_TYPE_NAME" - val all: Set[String] = - Set(ArgumentIndex, ArgumentName, Code, ColumnNumber, ControlStructureType, LineNumber, Order, ParserTypeName) - val allAsJava: java.util.Set[String] = all.asJava - } - object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val ControlStructureType = new overflowdb.PropertyKey[String]("CONTROL_STRUCTURE_TYPE") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val ParserTypeName = new overflowdb.PropertyKey[String]("PARSER_TYPE_NAME") + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + /** AST node type name emitted by parser. */ + val ParserTypeName = "PARSER_TYPE_NAME" } + object Properties { + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** The `CONTROL_STRUCTURE_TYPE` field indicates which kind of control structure a `CONTROL_STRUCTURE` node + * represents. The available types are the following: BREAK, CONTINUE, DO, WHILE, FOR, GOTO, IF, ELSE, TRY, THROW + * and SWITCH. + */ + val ControlStructureType = + flatgraph.SinglePropertyKey[String](kind = 15, name = "CONTROL_STRUCTURE_TYPE", default = "") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** AST node type name emitted by parser. */ + val ParserTypeName = flatgraph.SinglePropertyKey[String](kind = 46, name = "PARSER_TYPE_NAME", default = "") + } object PropertyDefaults { val ArgumentIndex = -1: Int val Code = "" @@ -41,1007 +118,1579 @@ object ControlStructure { val Order = -1: Int val ParserTypeName = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Condition.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Condition.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Receiver.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array( - "ARGUMENT", - "AST", - "CDG", - "CFG", - "CONDITION", - "DOMINATE", - "EVAL_TYPE", - "POST_DOMINATE", - "REACHING_DEF", - "TAGGED_BY" - ) - val In: Array[String] = Array( - "ARGUMENT", - "AST", - "CDG", - "CFG", - "CONDITION", - "CONTAINS", - "DOMINATE", - "POST_DOMINATE", - "REACHING_DEF", - "RECEIVER" - ) - } - - val factory = new NodeFactory[ControlStructureDb] { - override val forLabel = ControlStructure.Label - - override def createNode(ref: NodeRef[ControlStructureDb]) = - new ControlStructureDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = ControlStructure(graph, id) - } } -trait ControlStructureBase extends AbstractNode with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def controlStructureType: String - def lineNumber: Option[scala.Int] - def order: scala.Int - def parserTypeName: String - -} - -class ControlStructure(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[ControlStructureDb](graph_4762, id_4762) +class ControlStructure(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 11.toShort, seq_4762) with ControlStructureBase - with StoredNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def controlStructureType: String = get().controlStructureType - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def parserTypeName: String = get().parserTypeName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => ControlStructure.PropertyDefaults.ArgumentIndex - case "CODE" => ControlStructure.PropertyDefaults.Code - case "CONTROL_STRUCTURE_TYPE" => ControlStructure.PropertyDefaults.ControlStructureType - case "ORDER" => ControlStructure.PropertyDefaults.Order - case "PARSER_TYPE_NAME" => ControlStructure.PropertyDefaults.ParserTypeName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def argumentOut: Iterator[TemplateDom] = get().argumentOut - override def _argumentOut = get()._argumentOut - - def astOut: Iterator[AstNode] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to BLOCK via AST OUT edge. - */ - def _blockViaAstOut: overflowdb.traversal.Traversal[Block] = get()._blockViaAstOut - - /** Traverse to CALL via AST OUT edge. - */ - def _callViaAstOut: overflowdb.traversal.Traversal[Call] = get()._callViaAstOut - - /** Traverse to CONTROL_STRUCTURE via AST OUT edge. - */ - def _controlStructureViaAstOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaAstOut - - /** Traverse to IDENTIFIER via AST OUT edge. - */ - def _identifierViaAstOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaAstOut - - /** Traverse to JUMP_LABEL via AST OUT edge. - */ - def _jumpLabelViaAstOut: overflowdb.traversal.Traversal[JumpLabel] = get()._jumpLabelViaAstOut - - /** Traverse to JUMP_TARGET via AST OUT edge. - */ - def _jumpTargetViaAstOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaAstOut - - /** Traverse to LITERAL via AST OUT edge. - */ - def _literalViaAstOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaAstOut - - /** Traverse to LOCAL via AST OUT edge. - */ - def _localViaAstOut: overflowdb.traversal.Traversal[Local] = get()._localViaAstOut - - /** Traverse to METHOD_REF via AST OUT edge. - */ - def _methodRefViaAstOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaAstOut - - /** Traverse to MODIFIER via AST OUT edge. - */ - def _modifierViaAstOut: overflowdb.traversal.Traversal[Modifier] = get()._modifierViaAstOut - - /** Traverse to RETURN via AST OUT edge. - */ - def _returnViaAstOut: overflowdb.traversal.Traversal[Return] = get()._returnViaAstOut - - /** Traverse to TYPE_REF via AST OUT edge. - */ - def _typeRefViaAstOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaAstOut - - /** Traverse to UNKNOWN via AST OUT edge. - */ - def _unknownViaAstOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstOut - - def cdgOut: Iterator[CfgNode] = get().cdgOut - override def _cdgOut = get()._cdgOut - - /** Traverse to BLOCK via CDG OUT edge. - */ - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgOut - - /** Traverse to CALL via CDG OUT edge. - */ - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = get()._callViaCdgOut - - /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. - */ - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgOut - - /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. - */ - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgOut - - /** Traverse to IDENTIFIER via CDG OUT edge. - */ - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgOut - - /** Traverse to JUMP_TARGET via CDG OUT edge. - */ - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgOut - - /** Traverse to LITERAL via CDG OUT edge. - */ - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgOut - - /** Traverse to METHOD_REF via CDG OUT edge. - */ - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgOut - - /** Traverse to METHOD_RETURN via CDG OUT edge. - */ - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaCdgOut - - /** Traverse to RETURN via CDG OUT edge. - */ - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = get()._returnViaCdgOut - - /** Traverse to TYPE_REF via CDG OUT edge. - */ - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgOut - - /** Traverse to UNKNOWN via CDG OUT edge. - */ - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgOut - - def cfgOut: Iterator[CfgNode] = get().cfgOut - override def _cfgOut = get()._cfgOut - - /** Traverse to CFG_NODE via CFG OUT edge. - */ - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = get()._cfgNodeViaCfgOut - - def conditionOut: Iterator[CfgNode] = get().conditionOut - override def _conditionOut = get()._conditionOut - - /** Traverse to BLOCK via CONDITION OUT edge. - */ - def _blockViaConditionOut: overflowdb.traversal.Traversal[Block] = get()._blockViaConditionOut - - /** Traverse to CALL via CONDITION OUT edge. - */ - def _callViaConditionOut: overflowdb.traversal.Traversal[Call] = get()._callViaConditionOut - - /** Traverse to CONTROL_STRUCTURE via CONDITION OUT edge. - */ - def _controlStructureViaConditionOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaConditionOut - - /** Traverse to IDENTIFIER via CONDITION OUT edge. - */ - def _identifierViaConditionOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaConditionOut - - /** Traverse to JUMP_TARGET via CONDITION OUT edge. - */ - def _jumpTargetViaConditionOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaConditionOut - - /** Traverse to LITERAL via CONDITION OUT edge. - */ - def _literalViaConditionOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaConditionOut - - /** Traverse to METHOD_REF via CONDITION OUT edge. - */ - def _methodRefViaConditionOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaConditionOut - - /** Traverse to RETURN via CONDITION OUT edge. - */ - def _returnViaConditionOut: overflowdb.traversal.Traversal[Return] = get()._returnViaConditionOut - - /** Traverse to TYPE_REF via CONDITION OUT edge. - */ - def _typeRefViaConditionOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaConditionOut - - /** Traverse to UNKNOWN via CONDITION OUT edge. - */ - def _unknownViaConditionOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaConditionOut - - def dominateOut: Iterator[CfgNode] = get().dominateOut - override def _dominateOut = get()._dominateOut - - /** Traverse to BLOCK via DOMINATE OUT edge. - */ - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateOut - - /** Traverse to CALL via DOMINATE OUT edge. - */ - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaDominateOut - - /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. - */ - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateOut - - /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. - */ - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateOut - - /** Traverse to IDENTIFIER via DOMINATE OUT edge. - */ - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateOut - - /** Traverse to JUMP_TARGET via DOMINATE OUT edge. - */ - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateOut - - /** Traverse to LITERAL via DOMINATE OUT edge. - */ - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateOut - - /** Traverse to METHOD_REF via DOMINATE OUT edge. - */ - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateOut - - /** Traverse to METHOD_RETURN via DOMINATE OUT edge. - */ - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaDominateOut - - /** Traverse to RETURN via DOMINATE OUT edge. - */ - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateOut - - /** Traverse to TYPE_REF via DOMINATE OUT edge. - */ - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateOut - - /** Traverse to UNKNOWN via DOMINATE OUT edge. - */ - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateOut - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** Traverse to TYPE via EVAL_TYPE OUT edge. - */ - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = get()._typeViaEvalTypeOut - - def postDominateOut: Iterator[CfgNode] = get().postDominateOut - override def _postDominateOut = get()._postDominateOut - - /** Traverse to BLOCK via POST_DOMINATE OUT edge. - */ - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateOut - - /** Traverse to CALL via POST_DOMINATE OUT edge. - */ - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateOut - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. - */ - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateOut - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateOut - - /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateOut - - /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. - */ - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateOut - - /** Traverse to LITERAL via POST_DOMINATE OUT edge. - */ - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateOut - - /** Traverse to METHOD via POST_DOMINATE OUT edge. - */ - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = get()._methodViaPostDominateOut - - /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. - */ - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateOut - - /** Traverse to RETURN via POST_DOMINATE OUT edge. - */ - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateOut - - /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. - */ - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateOut - - /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. - */ - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateOut - - def reachingDefOut: Iterator[CfgNode] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to CALL via REACHING_DEF OUT edge. - */ - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefOut - - /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. - */ - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefOut - - /** Traverse to LITERAL via REACHING_DEF OUT edge. - */ - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefOut - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. - */ - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefOut - - /** Traverse to METHOD_REF via REACHING_DEF OUT edge. - */ - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefOut - - /** Traverse to RETURN via REACHING_DEF OUT edge. - */ - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefOut - - /** Traverse to TYPE_REF via REACHING_DEF OUT edge. - */ - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def argumentIn: Iterator[Expression] = get().argumentIn - override def _argumentIn = get()._argumentIn - - /** Traverse to CALL via ARGUMENT IN edge. - */ - def _callViaArgumentIn: overflowdb.traversal.Traversal[Call] = get()._callViaArgumentIn - - /** Traverse to RETURN via ARGUMENT IN edge. - */ - def _returnViaArgumentIn: overflowdb.traversal.Traversal[Return] = get()._returnViaArgumentIn - - def astIn: Iterator[Expression] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to BLOCK via AST IN edge. - */ - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = get()._blockViaAstIn - - /** Traverse to CALL via AST IN edge. - */ - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = get()._callViaAstIn - - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaAstIn - - /** Traverse to RETURN via AST IN edge. - */ - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = get()._returnViaAstIn - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - def cdgIn: Iterator[CfgNode] = get().cdgIn - override def _cdgIn = get()._cdgIn - - /** Traverse to BLOCK via CDG IN edge. - */ - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgIn - - /** Traverse to CALL via CDG IN edge. - */ - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = get()._callViaCdgIn - - /** Traverse to CONTROL_STRUCTURE via CDG IN edge. - */ - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgIn - - /** Traverse to FIELD_IDENTIFIER via CDG IN edge. - */ - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgIn - - /** Traverse to IDENTIFIER via CDG IN edge. - */ - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgIn - - /** Traverse to JUMP_TARGET via CDG IN edge. - */ - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgIn - - /** Traverse to LITERAL via CDG IN edge. - */ - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgIn - - /** Traverse to METHOD_REF via CDG IN edge. - */ - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgIn - - /** Traverse to TYPE_REF via CDG IN edge. - */ - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgIn - - /** Traverse to UNKNOWN via CDG IN edge. - */ - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def conditionIn: Iterator[ControlStructure] = get().conditionIn - override def _conditionIn = get()._conditionIn - - /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. - */ - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaConditionIn - - def containsIn: Iterator[Method] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to METHOD via CONTAINS IN edge. - */ - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsIn - - def dominateIn: Iterator[CfgNode] = get().dominateIn - override def _dominateIn = get()._dominateIn - - /** Traverse to BLOCK via DOMINATE IN edge. - */ - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateIn - - /** Traverse to CALL via DOMINATE IN edge. - */ - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaDominateIn - - /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. - */ - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateIn - - /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. - */ - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateIn - - /** Traverse to IDENTIFIER via DOMINATE IN edge. - */ - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateIn - - /** Traverse to JUMP_TARGET via DOMINATE IN edge. - */ - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateIn - - /** Traverse to LITERAL via DOMINATE IN edge. - */ - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateIn - - /** Traverse to METHOD_REF via DOMINATE IN edge. - */ - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateIn - - /** Traverse to RETURN via DOMINATE IN edge. - */ - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateIn - - /** Traverse to TYPE_REF via DOMINATE IN edge. - */ - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateIn - - /** Traverse to UNKNOWN via DOMINATE IN edge. - */ - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateIn - - def postDominateIn: Iterator[CfgNode] = get().postDominateIn - override def _postDominateIn = get()._postDominateIn - - /** Traverse to BLOCK via POST_DOMINATE IN edge. - */ - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateIn - - /** Traverse to CALL via POST_DOMINATE IN edge. - */ - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateIn - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. - */ - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateIn - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. - */ - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateIn - - /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. - */ - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateIn - - /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. - */ - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateIn - - /** Traverse to LITERAL via POST_DOMINATE IN edge. - */ - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateIn - - /** Traverse to METHOD_REF via POST_DOMINATE IN edge. - */ - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateIn - - /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. - */ - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaPostDominateIn - - /** Traverse to RETURN via POST_DOMINATE IN edge. - */ - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateIn - - /** Traverse to TYPE_REF via POST_DOMINATE IN edge. - */ - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateIn - - /** Traverse to UNKNOWN via POST_DOMINATE IN edge. - */ - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateIn - - def reachingDefIn: Iterator[TemplateDom] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - def receiverIn: Iterator[Call] = get().receiverIn - override def _receiverIn = get()._receiverIn - - /** Traverse to CALL via RECEIVER IN edge. - */ - def _callViaReceiverIn: overflowdb.traversal.Traversal[Call] = get()._callViaReceiverIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - ControlStructure.Label - } + with Expression + with StaticType[ControlStructureEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "controlStructureType" - case 6 => "lineNumber" - case 7 => "order" - case 8 => "parserTypeName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "controlStructureType" + case 5 => "lineNumber" + case 6 => "order" + case 7 => "parserTypeName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => controlStructureType - case 6 => lineNumber - case 7 => order - case 8 => parserTypeName + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.controlStructureType + case 5 => this.lineNumber + case 6 => this.order + case 7 => this.parserTypeName + case _ => null } override def productPrefix = "ControlStructure" - override def productArity = 9 -} - -class ControlStructureDb(ref: NodeRef[NodeDb]) - extends NodeDb(ref) - with StoredNode - with Expression - with ControlStructureBase { - - override def layoutInformation: NodeLayoutInformation = ControlStructure.layoutInformation + override def productArity = 8 - private var _argumentIndex: Integer = ControlStructure.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = ControlStructure.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _controlStructureType: String = ControlStructure.PropertyDefaults.ControlStructureType - def controlStructureType: String = _controlStructureType - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = ControlStructure.PropertyDefaults.Order - def order: scala.Int = _order - private var _parserTypeName: String = ControlStructure.PropertyDefaults.ParserTypeName - def parserTypeName: String = _parserTypeName + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[ControlStructure] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - properties.put("CONTROL_STRUCTURE_TYPE", controlStructureType) - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) - properties.put("PARSER_TYPE_NAME", parserTypeName) +object NewControlStructure { + def apply(): NewControlStructure = new NewControlStructure + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_ControlStructure_argumentIndex 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[Int]] + 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: NewControlStructure => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_ControlStructure_argumentName 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: NewControlStructure => + generated.argumentName 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_ControlStructure_code 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: NewControlStructure => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_ControlStructure_columnNumber 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[Int]] + 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: NewControlStructure => + generated.columnNumber 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_ControlStructure_controlStructureType 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: NewControlStructure => + dstCast(offset) = generated.controlStructureType + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_ControlStructure_lineNumber 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[Int]] + 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: NewControlStructure => + generated.lineNumber 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_ControlStructure_order 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[Int]] + 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: NewControlStructure => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_ControlStructure_parserTypeName 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: NewControlStructure => + dstCast(offset) = generated.parserTypeName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (!(("") == controlStructureType)) { properties.put("CONTROL_STRUCTURE_TYPE", controlStructureType) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (!(("") == parserTypeName)) { properties.put("PARSER_TYPE_NAME", parserTypeName) } +class NewControlStructure extends NewNode(11.toShort) with ControlStructureBase with ExpressionNew { + override type StoredNodeType = ControlStructure + override def label: String = "CONTROL_STRUCTURE" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewControlStructure.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewControlStructure.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def argumentOut: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - - def astOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](1) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _blockViaAstOut: overflowdb.traversal.Traversal[Block] = astOut.collectAll[Block] - def _callViaAstOut: overflowdb.traversal.Traversal[Call] = astOut.collectAll[Call] - def _controlStructureViaAstOut: overflowdb.traversal.Traversal[ControlStructure] = astOut.collectAll[ControlStructure] - def _identifierViaAstOut: overflowdb.traversal.Traversal[Identifier] = astOut.collectAll[Identifier] - def _jumpLabelViaAstOut: overflowdb.traversal.Traversal[JumpLabel] = astOut.collectAll[JumpLabel] - def _jumpTargetViaAstOut: overflowdb.traversal.Traversal[JumpTarget] = astOut.collectAll[JumpTarget] - def _literalViaAstOut: overflowdb.traversal.Traversal[Literal] = astOut.collectAll[Literal] - def _localViaAstOut: overflowdb.traversal.Traversal[Local] = astOut.collectAll[Local] - def _methodRefViaAstOut: overflowdb.traversal.Traversal[MethodRef] = astOut.collectAll[MethodRef] - def _modifierViaAstOut: overflowdb.traversal.Traversal[Modifier] = astOut.collectAll[Modifier] - def _returnViaAstOut: overflowdb.traversal.Traversal[Return] = astOut.collectAll[Return] - def _typeRefViaAstOut: overflowdb.traversal.Traversal[TypeRef] = astOut.collectAll[TypeRef] - def _unknownViaAstOut: overflowdb.traversal.Traversal[Unknown] = astOut.collectAll[Unknown] - - def cdgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](2) - override def _cdgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = cdgOut.collectAll[Block] - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = cdgOut.collectAll[Call] - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = cdgOut.collectAll[ControlStructure] - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = cdgOut.collectAll[FieldIdentifier] - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = cdgOut.collectAll[Identifier] - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = cdgOut.collectAll[JumpTarget] - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = cdgOut.collectAll[Literal] - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = cdgOut.collectAll[MethodRef] - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = cdgOut.collectAll[MethodReturn] - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = cdgOut.collectAll[Return] - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = cdgOut.collectAll[TypeRef] - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = cdgOut.collectAll[Unknown] - - def cfgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](3) - override def _cfgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = cfgOut.collectAll[CfgNode] - - def conditionOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _conditionOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _blockViaConditionOut: overflowdb.traversal.Traversal[Block] = conditionOut.collectAll[Block] - def _callViaConditionOut: overflowdb.traversal.Traversal[Call] = conditionOut.collectAll[Call] - def _controlStructureViaConditionOut: overflowdb.traversal.Traversal[ControlStructure] = - conditionOut.collectAll[ControlStructure] - def _identifierViaConditionOut: overflowdb.traversal.Traversal[Identifier] = conditionOut.collectAll[Identifier] - def _jumpTargetViaConditionOut: overflowdb.traversal.Traversal[JumpTarget] = conditionOut.collectAll[JumpTarget] - def _literalViaConditionOut: overflowdb.traversal.Traversal[Literal] = conditionOut.collectAll[Literal] - def _methodRefViaConditionOut: overflowdb.traversal.Traversal[MethodRef] = conditionOut.collectAll[MethodRef] - def _returnViaConditionOut: overflowdb.traversal.Traversal[Return] = conditionOut.collectAll[Return] - def _typeRefViaConditionOut: overflowdb.traversal.Traversal[TypeRef] = conditionOut.collectAll[TypeRef] - def _unknownViaConditionOut: overflowdb.traversal.Traversal[Unknown] = conditionOut.collectAll[Unknown] - - def dominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](5) - override def _dominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = dominateOut.collectAll[Block] - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = dominateOut.collectAll[Call] - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - dominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateOut.collectAll[FieldIdentifier] - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = dominateOut.collectAll[Identifier] - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = dominateOut.collectAll[JumpTarget] - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = dominateOut.collectAll[Literal] - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = dominateOut.collectAll[MethodRef] - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = dominateOut.collectAll[MethodReturn] - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = dominateOut.collectAll[Return] - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = dominateOut.collectAll[TypeRef] - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = dominateOut.collectAll[Unknown] - - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](6) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def postDominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](7) - override def _postDominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = postDominateOut.collectAll[Block] - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = postDominateOut.collectAll[Call] - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - postDominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateOut.collectAll[FieldIdentifier] - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = postDominateOut.collectAll[Identifier] - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = postDominateOut.collectAll[JumpTarget] - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = postDominateOut.collectAll[Literal] - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = postDominateOut.collectAll[Method] - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = postDominateOut.collectAll[MethodRef] - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = postDominateOut.collectAll[Return] - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = postDominateOut.collectAll[TypeRef] - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = postDominateOut.collectAll[Unknown] - - def reachingDefOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](8) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = reachingDefOut.collectAll[Call] - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = reachingDefOut.collectAll[Identifier] - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = reachingDefOut.collectAll[Literal] - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefOut.collectAll[MethodParameterOut] - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = reachingDefOut.collectAll[MethodRef] - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = reachingDefOut.collectAll[Return] - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = reachingDefOut.collectAll[TypeRef] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](9) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def argumentIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](10) - override def _argumentIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](10) - def _callViaArgumentIn: overflowdb.traversal.Traversal[Call] = argumentIn.collectAll[Call] - def _returnViaArgumentIn: overflowdb.traversal.Traversal[Return] = argumentIn.collectAll[Return] - - def astIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](11) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](11) - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = astIn.collectAll[Block] - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = astIn.collectAll[Call] - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = astIn.collectAll[ControlStructure] - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = astIn.collectAll[Return] - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - - def cdgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](12) - override def _cdgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = cdgIn.collectAll[Block] - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = cdgIn.collectAll[Call] - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = cdgIn.collectAll[ControlStructure] - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = cdgIn.collectAll[FieldIdentifier] - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = cdgIn.collectAll[Identifier] - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = cdgIn.collectAll[JumpTarget] - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = cdgIn.collectAll[Literal] - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = cdgIn.collectAll[MethodRef] - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = cdgIn.collectAll[TypeRef] - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = cdgIn.collectAll[Unknown] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](13) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](13) - - def conditionIn: Iterator[ControlStructure] = createAdjacentNodeScalaIteratorByOffSet[ControlStructure](14) - override def _conditionIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](14) - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - conditionIn.collectAll[ControlStructure] - - def containsIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](15) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](15) - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = containsIn.collectAll[Method] - - def dominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](16) - override def _dominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](16) - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = dominateIn.collectAll[Block] - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = dominateIn.collectAll[Call] - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - dominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateIn.collectAll[FieldIdentifier] - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = dominateIn.collectAll[Identifier] - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = dominateIn.collectAll[JumpTarget] - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = dominateIn.collectAll[Literal] - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = dominateIn.collectAll[MethodRef] - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = dominateIn.collectAll[Return] - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = dominateIn.collectAll[TypeRef] - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = dominateIn.collectAll[Unknown] - - def postDominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](17) - override def _postDominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](17) - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = postDominateIn.collectAll[Block] - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = postDominateIn.collectAll[Call] - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - postDominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateIn.collectAll[FieldIdentifier] - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = postDominateIn.collectAll[Identifier] - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = postDominateIn.collectAll[JumpTarget] - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = postDominateIn.collectAll[Literal] - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = postDominateIn.collectAll[MethodRef] - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - postDominateIn.collectAll[MethodReturn] - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = postDominateIn.collectAll[Return] - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = postDominateIn.collectAll[TypeRef] - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = postDominateIn.collectAll[Unknown] - - def reachingDefIn: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](18) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](18) - - def receiverIn: Iterator[Call] = createAdjacentNodeScalaIteratorByOffSet[Call](19) - override def _receiverIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](19) - def _callViaReceiverIn: overflowdb.traversal.Traversal[Call] = receiverIn.collectAll[Call] + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var controlStructureType: String = "": String + var lineNumber: Option[Int] = None + var order: Int = -1: Int + var parserTypeName: String = "": String + def argumentIndex(value: Int): this.type = { this.argumentIndex = value; this } + def argumentName(value: Option[String]): this.type = { this.argumentName = value; this } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def controlStructureType(value: String): this.type = { this.controlStructureType = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def order(value: Int): this.type = { this.order = value; this } + def parserTypeName(value: String): this.type = { this.parserTypeName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 15, 1) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 46, 1) + } - override def label: String = { - ControlStructure.Label + override def copy: this.type = { + val newInstance = new NewControlStructure + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.controlStructureType = this.controlStructureType + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.parserTypeName = this.parserTypeName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "controlStructureType" - case 6 => "lineNumber" - case 7 => "order" - case 8 => "parserTypeName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "controlStructureType" + case 5 => "lineNumber" + case 6 => "order" + case 7 => "parserTypeName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => controlStructureType - case 6 => lineNumber - case 7 => order - case 8 => parserTypeName - } - - override def productPrefix = "ControlStructure" - override def productArity = 9 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[ControlStructureDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "CONTROL_STRUCTURE_TYPE" => this._controlStructureType - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - case "PARSER_TYPE_NAME" => this._parserTypeName - + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.controlStructureType + case 5 => this.lineNumber + case 6 => this.order + case 7 => this.parserTypeName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "CONTROL_STRUCTURE_TYPE" => this._controlStructureType = value.asInstanceOf[String] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "PARSER_TYPE_NAME" => this._parserTypeName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewControlStructure].argumentIndex - this._argumentName = newNode.asInstanceOf[NewControlStructure].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewControlStructure].code - this._columnNumber = newNode.asInstanceOf[NewControlStructure].columnNumber match { - case None => null; case Some(value) => value - } - this._controlStructureType = newNode.asInstanceOf[NewControlStructure].controlStructureType - this._lineNumber = newNode.asInstanceOf[NewControlStructure].lineNumber match { - case None => null; case Some(value) => value - } - this._order = newNode.asInstanceOf[NewControlStructure].order - this._parserTypeName = newNode.asInstanceOf[NewControlStructure].parserTypeName - - } + override def productPrefix = "NewControlStructure" + override def productArity = 8 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewControlStructure] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Declaration.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Declaration.scala deleted file mode 100644 index 0a6a34cc2..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Declaration.scala +++ /dev/null @@ -1,36 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.nodes - -object Declaration { - object PropertyNames { - val Name = "NAME" - val all: Set[String] = Set(Name) - } - - object Properties { - val Name = new overflowdb.PropertyKey[String]("NAME") - } - - object PropertyDefaults { - val Name = "" - } - - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array() - } - -} - -trait DeclarationBase extends AbstractNode { - def name: String -} - -trait DeclarationNew extends NewNode { - def name_=(value: String): Unit - def name: String -} - -trait Declaration extends StoredNode with DeclarationBase { - import overflowdb.traversal._ - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Dependency.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Dependency.scala index 163b5d804..5f580ef26 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Dependency.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Dependency.scala @@ -1,219 +1,224 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Dependency { - def apply(graph: Graph, id: Long) = new Dependency(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait DependencyEMT extends AnyRef with HasDependencyGroupIdEMT with HasNameEMT with HasVersionEMT - val Label = "DEPENDENCY" +trait DependencyBase extends AbstractNode with StaticType[DependencyEMT] { - object PropertyNames { - val DependencyGroupId = "DEPENDENCY_GROUP_ID" - val Name = "NAME" - val Version = "VERSION" - val all: Set[String] = Set(DependencyGroupId, Name, Version) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + this.dependencyGroupId.foreach { p => res.put("DEPENDENCY_GROUP_ID", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if (("": String) != this.version) res.put("VERSION", this.version) + res } +} - object Properties { - val DependencyGroupId = new overflowdb.PropertyKey[String]("DEPENDENCY_GROUP_ID") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Version = new overflowdb.PropertyKey[String]("VERSION") - - } +object Dependency { + val Label = "DEPENDENCY" + object PropertyNames { - object PropertyDefaults { - val Name = "" - val Version = "" - } + /** The group ID for a dependency */ + val DependencyGroupId = "DEPENDENCY_GROUP_ID" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List().asJava, - List(io.shiftleft.codepropertygraph.generated.edges.Imports.layoutInformation).asJava - ) + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array("IMPORTS") + /** 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 = "VERSION" } + object Properties { - val factory = new NodeFactory[DependencyDb] { - override val forLabel = Dependency.Label + /** The group ID for a dependency */ + val DependencyGroupId = flatgraph.OptionalPropertyKey[String](kind = 16, name = "DEPENDENCY_GROUP_ID") - override def createNode(ref: NodeRef[DependencyDb]) = - new DependencyDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") - override def createNodeRef(graph: Graph, id: Long) = Dependency(graph, id) + /** 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 = 54, name = "VERSION", default = "") + } + object PropertyDefaults { + val Name = "" + val Version = "" } } -trait DependencyBase extends AbstractNode { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def dependencyGroupId: Option[String] - def name: String - def version: String - -} - -class Dependency(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[DependencyDb](graph_4762, id_4762) +class Dependency(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 12.toShort, seq_4762) with DependencyBase - with StoredNode { - override def dependencyGroupId: Option[String] = get().dependencyGroupId - override def name: String = get().name - override def version: String = get().version - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "NAME" => Dependency.PropertyDefaults.Name - case "VERSION" => Dependency.PropertyDefaults.Version - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def importsIn: Iterator[Import] = get().importsIn - override def _importsIn = get()._importsIn - - /** Traverse to IMPORT via IMPORTS IN edge. - */ - def _importViaImportsIn: overflowdb.traversal.Traversal[Import] = get()._importViaImportsIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Dependency.Label - } + with StaticType[DependencyEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "dependencyGroupId" - case 2 => "name" - case 3 => "version" + case 0 => "dependencyGroupId" + case 1 => "name" + case 2 => "version" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => dependencyGroupId - case 2 => name - case 3 => version + case 0 => this.dependencyGroupId + case 1 => this.name + case 2 => this.version + case _ => null } override def productPrefix = "Dependency" - override def productArity = 4 -} - -class DependencyDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with DependencyBase { - - override def layoutInformation: NodeLayoutInformation = Dependency.layoutInformation - - private var _dependencyGroupId: String = null - def dependencyGroupId: Option[String] = Option(_dependencyGroupId).asInstanceOf[Option[String]] - private var _name: String = Dependency.PropertyDefaults.Name - def name: String = _name - private var _version: String = Dependency.PropertyDefaults.Version - def version: String = _version + override def productArity = 3 - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - dependencyGroupId.map { value => properties.put("DEPENDENCY_GROUP_ID", value) } - properties.put("NAME", name) - properties.put("VERSION", version) + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Dependency] +} - properties +object NewDependency { + def apply(): NewDependency = new NewDependency + private val outNeighbors: Map[String, Set[String]] = Map() + private val inNeighbors: Map[String, Set[String]] = Map("IMPORTS" -> Set("IMPORT")) + + object InsertionHelpers { + object NewNodeInserter_Dependency_dependencyGroupId 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: NewDependency => + generated.dependencyGroupId 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_Dependency_name 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: NewDependency => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Dependency_version 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: NewDependency => + dstCast(offset) = generated.version + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - dependencyGroupId.map { value => properties.put("DEPENDENCY_GROUP_ID", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!(("") == version)) { properties.put("VERSION", version) } +class NewDependency extends NewNode(12.toShort) with DependencyBase { + override type StoredNodeType = Dependency + override def label: String = "DEPENDENCY" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewDependency.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewDependency.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def importsIn: Iterator[Import] = createAdjacentNodeScalaIteratorByOffSet[Import](0) - override def _importsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _importViaImportsIn: overflowdb.traversal.Traversal[Import] = importsIn.collectAll[Import] + var dependencyGroupId: Option[String] = None + var name: String = "": String + var version: String = "": String + def dependencyGroupId(value: Option[String]): this.type = { this.dependencyGroupId = value; this } + def dependencyGroupId(value: String): this.type = { this.dependencyGroupId = Option(value); this } + def name(value: String): this.type = { this.name = value; this } + def version(value: String): this.type = { this.version = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 16, dependencyGroupId.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 54, 1) + } - override def label: String = { - Dependency.Label + override def copy: this.type = { + val newInstance = new NewDependency + newInstance.dependencyGroupId = this.dependencyGroupId + newInstance.name = this.name + newInstance.version = this.version + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "dependencyGroupId" - case 2 => "name" - case 3 => "version" + case 0 => "dependencyGroupId" + case 1 => "name" + case 2 => "version" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => dependencyGroupId - case 2 => name - case 3 => version - } - - override def productPrefix = "Dependency" - override def productArity = 4 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[DependencyDb] - - override def property(key: String): Any = { - key match { - case "DEPENDENCY_GROUP_ID" => this._dependencyGroupId - case "NAME" => this._name - case "VERSION" => this._version - + case 0 => this.dependencyGroupId + case 1 => this.name + case 2 => this.version case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "DEPENDENCY_GROUP_ID" => this._dependencyGroupId = value.asInstanceOf[String] - case "NAME" => this._name = value.asInstanceOf[String] - case "VERSION" => this._version = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._dependencyGroupId = newNode.asInstanceOf[NewDependency].dependencyGroupId match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewDependency].name - this._version = newNode.asInstanceOf[NewDependency].version - - } + override def productPrefix = "NewDependency" + override def productArity = 3 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewDependency] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Expression.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Expression.scala deleted file mode 100644 index ed5875b81..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Expression.scala +++ /dev/null @@ -1,128 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.nodes - -object Expression { - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val all: Set[String] = Set(ArgumentIndex, ArgumentName, Code, ColumnNumber, LineNumber, Order) - } - - object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - } - - object PropertyDefaults { - val ArgumentIndex = -1: Int - val Code = "" - val Order = -1: Int - } - - object Edges { - val Out: Array[String] = Array("ARGUMENT") - val In: Array[String] = Array("AST", "REACHING_DEF") - } - -} - -trait ExpressionBase extends AbstractNode with AstNodeBase with CfgNodeBase { - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def order: scala.Int -} - -trait ExpressionNew extends NewNode with AstNodeNew with CfgNodeNew { - def argumentIndex_=(value: scala.Int): Unit - def argumentName_=(value: Option[String]): Unit - def code_=(value: String): Unit - def columnNumber_=(value: Option[scala.Int]): Unit - def lineNumber_=(value: Option[scala.Int]): Unit - def order_=(value: scala.Int): Unit - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def order: scala.Int -} - -trait Expression extends StoredNode with ExpressionBase with AstNode with CfgNode { - import overflowdb.traversal._ - def argumentOut: Iterator[? <: StoredNode] - - /** Traverse to EXPRESSION via ARGUMENT OUT edge. - */ - def _expressionViaArgumentOut: overflowdb.traversal.Traversal[Expression] = - argumentOut.collectAll[Expression] - - /** Traverse to AST_NODE via ARGUMENT OUT edge. - */ - def _astNodeViaArgumentOut: overflowdb.traversal.Traversal[AstNode] = - argumentOut.collectAll[AstNode] - - /** Traverse to CFG_NODE via ARGUMENT OUT edge. - */ - def _cfgNodeViaArgumentOut: overflowdb.traversal.Traversal[CfgNode] = - argumentOut.collectAll[CfgNode] - - /** Traverse to TEMPLATE_DOM via ARGUMENT OUT edge. - */ - def _templateDomViaArgumentOut: overflowdb.traversal.Traversal[TemplateDom] = - argumentOut.collectAll[TemplateDom] - - def astIn: Iterator[? <: StoredNode] - - /** Traverse to EXPRESSION via AST IN edge. - */ - def _expressionViaAstIn: overflowdb.traversal.Traversal[Expression] = - astIn.collectAll[Expression] - - /** Traverse to AST_NODE via AST IN edge. - */ - def _astNodeViaAstIn: overflowdb.traversal.Traversal[AstNode] = - astIn.collectAll[AstNode] - - /** Traverse to CFG_NODE via AST IN edge. - */ - def _cfgNodeViaAstIn: overflowdb.traversal.Traversal[CfgNode] = - astIn.collectAll[CfgNode] - - /** Traverse to TEMPLATE_DOM via AST IN edge. - */ - def _templateDomViaAstIn: overflowdb.traversal.Traversal[TemplateDom] = - astIn.collectAll[TemplateDom] - - def reachingDefIn: Iterator[? <: StoredNode] - - /** Traverse to EXPRESSION via REACHING_DEF IN edge. - */ - def _expressionViaReachingDefIn: overflowdb.traversal.Traversal[Expression] = - reachingDefIn.collectAll[Expression] - - /** Traverse to AST_NODE via REACHING_DEF IN edge. - */ - def _astNodeViaReachingDefIn: overflowdb.traversal.Traversal[AstNode] = - reachingDefIn.collectAll[AstNode] - - /** Traverse to CFG_NODE via REACHING_DEF IN edge. - */ - def _cfgNodeViaReachingDefIn: overflowdb.traversal.Traversal[CfgNode] = - reachingDefIn.collectAll[CfgNode] - - /** Traverse to TEMPLATE_DOM via REACHING_DEF IN edge. - */ - def _templateDomViaReachingDefIn: overflowdb.traversal.Traversal[TemplateDom] = - reachingDefIn.collectAll[TemplateDom] - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/FieldIdentifier.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/FieldIdentifier.scala index 7fb5ad758..be3312d20 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/FieldIdentifier.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/FieldIdentifier.scala @@ -1,799 +1,1658 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object FieldIdentifier { - def apply(graph: Graph, id: Long) = new FieldIdentifier(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait FieldIdentifierEMT extends AnyRef with ExpressionEMT with HasCanonicalNameEMT - val Label = "FIELD_IDENTIFIER" +trait FieldIdentifierBase extends AbstractNode with ExpressionBase with StaticType[FieldIdentifierEMT] { - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val CanonicalName = "CANONICAL_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val all: Set[String] = Set(ArgumentIndex, ArgumentName, CanonicalName, Code, ColumnNumber, LineNumber, Order) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.canonicalName) res.put("CANONICAL_NAME", this.canonicalName) + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val CanonicalName = new overflowdb.PropertyKey[String]("CANONICAL_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +object FieldIdentifier { + val Label = "FIELD_IDENTIFIER" + object PropertyNames { + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" + + /** This field holds the canonical name of a `FIELD_IDENTIFIER`. It is typically identical to the CODE field, but + * canonicalized according to source language semantics. Human readable names are preferable. `FIELD_IDENTIFIER` + * nodes must share identical `CANONICAL_NAME` if and only if they alias, e.g., in C-style unions (if the aliasing + * relationship is unknown or there are partial overlaps, then one must make a reasonable guess, and trade off + * between false negatives and false positives). + */ + val CanonicalName = "CANONICAL_NAME" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" } + object Properties { + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") + + /** This field holds the canonical name of a `FIELD_IDENTIFIER`. It is typically identical to the CODE field, but + * canonicalized according to source language semantics. Human readable names are preferable. `FIELD_IDENTIFIER` + * nodes must share identical `CANONICAL_NAME` if and only if they alias, e.g., in C-style unions (if the aliasing + * relationship is unknown or there are partial overlaps, then one must make a reasonable guess, and trade off + * between false negatives and false positives). + */ + val CanonicalName = flatgraph.SinglePropertyKey[String](kind = 5, name = "CANONICAL_NAME", default = "") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } object PropertyDefaults { val ArgumentIndex = -1: Int val CanonicalName = "" val Code = "" val Order = -1: Int } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array("ARGUMENT", "CDG", "CFG", "DOMINATE", "POST_DOMINATE", "TAGGED_BY") - val In: Array[String] = - Array("ARGUMENT", "AST", "CDG", "CFG", "CONTAINS", "DOMINATE", "POST_DOMINATE", "REACHING_DEF") - } - - val factory = new NodeFactory[FieldIdentifierDb] { - override val forLabel = FieldIdentifier.Label - - override def createNode(ref: NodeRef[FieldIdentifierDb]) = - new FieldIdentifierDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = FieldIdentifier(graph, id) - } } -trait FieldIdentifierBase extends AbstractNode with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def argumentName: Option[String] - def canonicalName: String - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def order: scala.Int - -} - -class FieldIdentifier(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[FieldIdentifierDb](graph_4762, id_4762) +class FieldIdentifier(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 13.toShort, seq_4762) with FieldIdentifierBase - with StoredNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def canonicalName: String = get().canonicalName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => FieldIdentifier.PropertyDefaults.ArgumentIndex - case "CANONICAL_NAME" => FieldIdentifier.PropertyDefaults.CanonicalName - case "CODE" => FieldIdentifier.PropertyDefaults.Code - case "ORDER" => FieldIdentifier.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def argumentOut: Iterator[TemplateDom] = get().argumentOut - override def _argumentOut = get()._argumentOut - - def cdgOut: Iterator[CfgNode] = get().cdgOut - override def _cdgOut = get()._cdgOut - - /** Traverse to BLOCK via CDG OUT edge. - */ - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgOut - - /** Traverse to CALL via CDG OUT edge. - */ - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = get()._callViaCdgOut - - /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. - */ - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgOut - - /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. - */ - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgOut - - /** Traverse to IDENTIFIER via CDG OUT edge. - */ - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgOut - - /** Traverse to JUMP_TARGET via CDG OUT edge. - */ - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgOut - - /** Traverse to LITERAL via CDG OUT edge. - */ - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgOut - - /** Traverse to METHOD_REF via CDG OUT edge. - */ - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgOut - - /** Traverse to METHOD_RETURN via CDG OUT edge. - */ - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaCdgOut - - /** Traverse to RETURN via CDG OUT edge. - */ - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = get()._returnViaCdgOut - - /** Traverse to TYPE_REF via CDG OUT edge. - */ - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgOut - - /** Traverse to UNKNOWN via CDG OUT edge. - */ - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgOut - - def cfgOut: Iterator[AstNode] = get().cfgOut - override def _cfgOut = get()._cfgOut - - /** Traverse to CALL via CFG OUT edge. - */ - def _callViaCfgOut: overflowdb.traversal.Traversal[Call] = get()._callViaCfgOut - - /** Traverse to CFG_NODE via CFG OUT edge. - */ - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = get()._cfgNodeViaCfgOut - - def dominateOut: Iterator[CfgNode] = get().dominateOut - override def _dominateOut = get()._dominateOut - - /** Traverse to BLOCK via DOMINATE OUT edge. - */ - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateOut - - /** Traverse to CALL via DOMINATE OUT edge. - */ - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaDominateOut - - /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. - */ - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateOut - - /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. - */ - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateOut - - /** Traverse to IDENTIFIER via DOMINATE OUT edge. - */ - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateOut - - /** Traverse to JUMP_TARGET via DOMINATE OUT edge. - */ - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateOut - - /** Traverse to LITERAL via DOMINATE OUT edge. - */ - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateOut - - /** Traverse to METHOD_REF via DOMINATE OUT edge. - */ - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateOut - - /** Traverse to METHOD_RETURN via DOMINATE OUT edge. - */ - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaDominateOut - - /** Traverse to RETURN via DOMINATE OUT edge. - */ - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateOut - - /** Traverse to TYPE_REF via DOMINATE OUT edge. - */ - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateOut - - /** Traverse to UNKNOWN via DOMINATE OUT edge. - */ - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateOut - - def postDominateOut: Iterator[CfgNode] = get().postDominateOut - override def _postDominateOut = get()._postDominateOut - - /** Traverse to BLOCK via POST_DOMINATE OUT edge. - */ - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateOut - - /** Traverse to CALL via POST_DOMINATE OUT edge. - */ - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateOut - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. - */ - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateOut - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateOut - - /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateOut - - /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. - */ - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateOut - - /** Traverse to LITERAL via POST_DOMINATE OUT edge. - */ - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateOut - - /** Traverse to METHOD via POST_DOMINATE OUT edge. - */ - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = get()._methodViaPostDominateOut - - /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. - */ - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateOut - - /** Traverse to RETURN via POST_DOMINATE OUT edge. - */ - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateOut - - /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. - */ - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateOut - - /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. - */ - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def argumentIn: Iterator[Call] = get().argumentIn - override def _argumentIn = get()._argumentIn - - /** Traverse to CALL via ARGUMENT IN edge. - */ - def _callViaArgumentIn: Call = get()._callViaArgumentIn - - def astIn: Iterator[Expression] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to CALL via AST IN edge. - */ - def _callViaAstIn: Call = get()._callViaAstIn - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - def cdgIn: Iterator[CfgNode] = get().cdgIn - override def _cdgIn = get()._cdgIn - - /** Traverse to BLOCK via CDG IN edge. - */ - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgIn - - /** Traverse to CALL via CDG IN edge. - */ - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = get()._callViaCdgIn - - /** Traverse to CONTROL_STRUCTURE via CDG IN edge. - */ - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgIn - - /** Traverse to FIELD_IDENTIFIER via CDG IN edge. - */ - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgIn - - /** Traverse to IDENTIFIER via CDG IN edge. - */ - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgIn - - /** Traverse to JUMP_TARGET via CDG IN edge. - */ - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgIn - - /** Traverse to LITERAL via CDG IN edge. - */ - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgIn - - /** Traverse to METHOD_REF via CDG IN edge. - */ - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgIn - - /** Traverse to TYPE_REF via CDG IN edge. - */ - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgIn - - /** Traverse to UNKNOWN via CDG IN edge. - */ - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def containsIn: Iterator[Method] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to METHOD via CONTAINS IN edge. - */ - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsIn - - def dominateIn: Iterator[CfgNode] = get().dominateIn - override def _dominateIn = get()._dominateIn - - /** Traverse to BLOCK via DOMINATE IN edge. - */ - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateIn - - /** Traverse to CALL via DOMINATE IN edge. - */ - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaDominateIn - - /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. - */ - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateIn - - /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. - */ - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateIn - - /** Traverse to IDENTIFIER via DOMINATE IN edge. - */ - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateIn - - /** Traverse to JUMP_TARGET via DOMINATE IN edge. - */ - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateIn - - /** Traverse to LITERAL via DOMINATE IN edge. - */ - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateIn - - /** Traverse to METHOD via DOMINATE IN edge. - */ - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = get()._methodViaDominateIn - - /** Traverse to METHOD_REF via DOMINATE IN edge. - */ - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateIn - - /** Traverse to RETURN via DOMINATE IN edge. - */ - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateIn - - /** Traverse to TYPE_REF via DOMINATE IN edge. - */ - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateIn - - /** Traverse to UNKNOWN via DOMINATE IN edge. - */ - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateIn - - def postDominateIn: Iterator[CfgNode] = get().postDominateIn - override def _postDominateIn = get()._postDominateIn - - /** Traverse to BLOCK via POST_DOMINATE IN edge. - */ - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateIn - - /** Traverse to CALL via POST_DOMINATE IN edge. - */ - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateIn - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. - */ - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateIn - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. - */ - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateIn - - /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. - */ - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateIn - - /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. - */ - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateIn - - /** Traverse to LITERAL via POST_DOMINATE IN edge. - */ - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateIn - - /** Traverse to METHOD_REF via POST_DOMINATE IN edge. - */ - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateIn - - /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. - */ - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaPostDominateIn - - /** Traverse to RETURN via POST_DOMINATE IN edge. - */ - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateIn - - /** Traverse to TYPE_REF via POST_DOMINATE IN edge. - */ - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateIn - - /** Traverse to UNKNOWN via POST_DOMINATE IN edge. - */ - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateIn - - def reachingDefIn: Iterator[TemplateDom] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - FieldIdentifier.Label - } + with Expression + with StaticType[FieldIdentifierEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "canonicalName" - case 4 => "code" - case 5 => "columnNumber" - case 6 => "lineNumber" - case 7 => "order" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "canonicalName" + case 3 => "code" + case 4 => "columnNumber" + case 5 => "lineNumber" + case 6 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => canonicalName - case 4 => code - case 5 => columnNumber - case 6 => lineNumber - case 7 => order + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.canonicalName + case 3 => this.code + case 4 => this.columnNumber + case 5 => this.lineNumber + case 6 => this.order + case _ => null } override def productPrefix = "FieldIdentifier" - override def productArity = 8 + override def productArity = 7 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[FieldIdentifier] } -class FieldIdentifierDb(ref: NodeRef[NodeDb]) - extends NodeDb(ref) - with StoredNode - with Expression - with FieldIdentifierBase { - - override def layoutInformation: NodeLayoutInformation = FieldIdentifier.layoutInformation - - private var _argumentIndex: Integer = FieldIdentifier.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _canonicalName: String = FieldIdentifier.PropertyDefaults.CanonicalName - def canonicalName: String = _canonicalName - private var _code: String = FieldIdentifier.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = FieldIdentifier.PropertyDefaults.Order - def order: scala.Int = _order - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CANONICAL_NAME", canonicalName) - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) - - properties - } +object NewFieldIdentifier { + def apply(): NewFieldIdentifier = new NewFieldIdentifier + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == canonicalName)) { properties.put("CANONICAL_NAME", canonicalName) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - - properties + object InsertionHelpers { + object NewNodeInserter_FieldIdentifier_argumentIndex 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[Int]] + 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: NewFieldIdentifier => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_FieldIdentifier_argumentName 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: NewFieldIdentifier => + generated.argumentName 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_FieldIdentifier_canonicalName 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: NewFieldIdentifier => + dstCast(offset) = generated.canonicalName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_FieldIdentifier_code 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: NewFieldIdentifier => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_FieldIdentifier_columnNumber 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[Int]] + 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: NewFieldIdentifier => + generated.columnNumber 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_FieldIdentifier_lineNumber 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[Int]] + 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: NewFieldIdentifier => + generated.lineNumber 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_FieldIdentifier_order 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[Int]] + 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: NewFieldIdentifier => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} + +class NewFieldIdentifier extends NewNode(13.toShort) with FieldIdentifierBase with ExpressionNew { + override type StoredNodeType = FieldIdentifier + override def label: String = "FIELD_IDENTIFIER" - import overflowdb.traversal._ - def argumentOut: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - - def cdgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](1) - override def _cdgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = cdgOut.collectAll[Block] - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = cdgOut.collectAll[Call] - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = cdgOut.collectAll[ControlStructure] - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = cdgOut.collectAll[FieldIdentifier] - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = cdgOut.collectAll[Identifier] - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = cdgOut.collectAll[JumpTarget] - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = cdgOut.collectAll[Literal] - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = cdgOut.collectAll[MethodRef] - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = cdgOut.collectAll[MethodReturn] - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = cdgOut.collectAll[Return] - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = cdgOut.collectAll[TypeRef] - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = cdgOut.collectAll[Unknown] - - def cfgOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](2) - override def _cfgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _callViaCfgOut: overflowdb.traversal.Traversal[Call] = cfgOut.collectAll[Call] - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = cfgOut.collectAll[CfgNode] - - def dominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](3) - override def _dominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = dominateOut.collectAll[Block] - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = dominateOut.collectAll[Call] - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - dominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateOut.collectAll[FieldIdentifier] - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = dominateOut.collectAll[Identifier] - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = dominateOut.collectAll[JumpTarget] - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = dominateOut.collectAll[Literal] - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = dominateOut.collectAll[MethodRef] - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = dominateOut.collectAll[MethodReturn] - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = dominateOut.collectAll[Return] - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = dominateOut.collectAll[TypeRef] - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = dominateOut.collectAll[Unknown] - - def postDominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _postDominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = postDominateOut.collectAll[Block] - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = postDominateOut.collectAll[Call] - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - postDominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateOut.collectAll[FieldIdentifier] - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = postDominateOut.collectAll[Identifier] - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = postDominateOut.collectAll[JumpTarget] - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = postDominateOut.collectAll[Literal] - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = postDominateOut.collectAll[Method] - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = postDominateOut.collectAll[MethodRef] - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = postDominateOut.collectAll[Return] - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = postDominateOut.collectAll[TypeRef] - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = postDominateOut.collectAll[Unknown] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](5) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def argumentIn: Iterator[Call] = createAdjacentNodeScalaIteratorByOffSet[Call](6) - override def _argumentIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _callViaArgumentIn: Call = try { argumentIn.collectAll[Call].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label ARGUMENT to an adjacent CALL is mandatory, but not defined for this FIELD_IDENTIFIER node with id=" + id, - e - ) + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewFieldIdentifier.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewFieldIdentifier.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def astIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](7) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _callViaAstIn: Call = try { astIn.collectAll[Call].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent CALL is mandatory, but not defined for this FIELD_IDENTIFIER node with id=" + id, - e - ) + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var canonicalName: String = "": String + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var order: Int = -1: Int + def argumentIndex(value: Int): this.type = { this.argumentIndex = value; this } + def argumentName(value: Option[String]): this.type = { this.argumentName = value; this } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def canonicalName(value: String): this.type = { this.canonicalName = value; this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 5, 1) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) } - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - - def cdgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](8) - override def _cdgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = cdgIn.collectAll[Block] - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = cdgIn.collectAll[Call] - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = cdgIn.collectAll[ControlStructure] - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = cdgIn.collectAll[FieldIdentifier] - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = cdgIn.collectAll[Identifier] - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = cdgIn.collectAll[JumpTarget] - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = cdgIn.collectAll[Literal] - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = cdgIn.collectAll[MethodRef] - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = cdgIn.collectAll[TypeRef] - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = cdgIn.collectAll[Unknown] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](9) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - - def containsIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](10) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](10) - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = containsIn.collectAll[Method] - - def dominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](11) - override def _dominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](11) - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = dominateIn.collectAll[Block] - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = dominateIn.collectAll[Call] - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - dominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateIn.collectAll[FieldIdentifier] - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = dominateIn.collectAll[Identifier] - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = dominateIn.collectAll[JumpTarget] - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = dominateIn.collectAll[Literal] - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = dominateIn.collectAll[Method] - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = dominateIn.collectAll[MethodRef] - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = dominateIn.collectAll[Return] - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = dominateIn.collectAll[TypeRef] - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = dominateIn.collectAll[Unknown] - - def postDominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](12) - override def _postDominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = postDominateIn.collectAll[Block] - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = postDominateIn.collectAll[Call] - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - postDominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateIn.collectAll[FieldIdentifier] - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = postDominateIn.collectAll[Identifier] - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = postDominateIn.collectAll[JumpTarget] - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = postDominateIn.collectAll[Literal] - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = postDominateIn.collectAll[MethodRef] - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - postDominateIn.collectAll[MethodReturn] - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = postDominateIn.collectAll[Return] - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = postDominateIn.collectAll[TypeRef] - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = postDominateIn.collectAll[Unknown] - - def reachingDefIn: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](13) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](13) - - override def label: String = { - FieldIdentifier.Label + + override def copy: this.type = { + val newInstance = new NewFieldIdentifier + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.canonicalName = this.canonicalName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "canonicalName" - case 4 => "code" - case 5 => "columnNumber" - case 6 => "lineNumber" - case 7 => "order" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "canonicalName" + case 3 => "code" + case 4 => "columnNumber" + case 5 => "lineNumber" + case 6 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => canonicalName - case 4 => code - case 5 => columnNumber - case 6 => lineNumber - case 7 => order - } - - override def productPrefix = "FieldIdentifier" - override def productArity = 8 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[FieldIdentifierDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CANONICAL_NAME" => this._canonicalName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.canonicalName + case 3 => this.code + case 4 => this.columnNumber + case 5 => this.lineNumber + case 6 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CANONICAL_NAME" => this._canonicalName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewFieldIdentifier].argumentIndex - this._argumentName = newNode.asInstanceOf[NewFieldIdentifier].argumentName match { - case None => null; case Some(value) => value - } - this._canonicalName = newNode.asInstanceOf[NewFieldIdentifier].canonicalName - this._code = newNode.asInstanceOf[NewFieldIdentifier].code - this._columnNumber = newNode.asInstanceOf[NewFieldIdentifier].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewFieldIdentifier].lineNumber match { - case None => null; case Some(value) => value - } - this._order = newNode.asInstanceOf[NewFieldIdentifier].order - - } + override def productPrefix = "NewFieldIdentifier" + override def productArity = 7 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewFieldIdentifier] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/File.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/File.scala index af77be077..2e909c8fe 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/File.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/File.scala @@ -1,351 +1,1644 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object File { - def apply(graph: Graph, id: Long) = new File(graph, id) - - val Label = "FILE" - - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val Content = "CONTENT" - val Hash = "HASH" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val all: Set[String] = Set(Code, ColumnNumber, Content, Hash, LineNumber, Name, Order) - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val Content = new overflowdb.PropertyKey[String]("CONTENT") - val Hash = new overflowdb.PropertyKey[String]("HASH") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - - } - - object PropertyDefaults { - val Code = "" - val Content = "" - val Name = "" - val Order = -1: Int - } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List(io.shiftleft.codepropertygraph.generated.edges.SourceFile.layoutInformation).asJava - ) - - object Edges { - val Out: Array[String] = Array("AST", "CONTAINS", "TAGGED_BY") - val In: Array[String] = Array("SOURCE_FILE") - } - - val factory = new NodeFactory[FileDb] { - override val forLabel = File.Label +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait FileEMT extends AnyRef with AstNodeEMT with HasContentEMT with HasHashEMT with HasNameEMT - override def createNode(ref: NodeRef[FileDb]) = - new FileDb(ref.asInstanceOf[NodeRef[NodeDb]]) +trait FileBase extends AbstractNode with AstNodeBase with StaticType[FileEMT] { - override def createNodeRef(graph: Graph, id: Long) = File(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + if (("": String) != this.content) res.put("CONTENT", this.content) + this.hash.foreach { p => res.put("HASH", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } } -trait FileBase extends AbstractNode with AstNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def code: String - def columnNumber: Option[scala.Int] - def content: String - def hash: Option[String] - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int - -} - -class File(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[FileDb](graph_4762, id_4762) - with FileBase - with StoredNode - with AstNode { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def content: String = get().content - override def hash: Option[String] = get().hash - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => File.PropertyDefaults.Code - case "CONTENT" => File.PropertyDefaults.Content - case "NAME" => File.PropertyDefaults.Name - case "ORDER" => File.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def astOut: Iterator[AstNode] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to COMMENT via AST OUT edge. - */ - def comment: overflowdb.traversal.Traversal[Comment] = get().comment +object File { + val Label = "FILE" + object PropertyNames { - /** Traverse to IMPORT via AST OUT edge. - */ - def _importViaAstOut: overflowdb.traversal.Traversal[Import] = get()._importViaAstOut + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - /** Traverse to NAMESPACE_BLOCK via AST OUT edge. - */ - def _namespaceBlockViaAstOut: overflowdb.traversal.Traversal[NamespaceBlock] = get()._namespaceBlockViaAstOut + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - def containsOut: Iterator[AstNode] = get().containsOut - override def _containsOut = get()._containsOut + /** Certain files, e.g., configuration files, may be included in the CPG as-is. For such files, the `CONTENT` field + * contains the files content. + */ + val Content = "CONTENT" - /** Traverse to METHOD via CONTAINS OUT edge. - */ - def _methodViaContainsOut: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsOut + /** This property contains a hash value in the form of a string. Hashes can be used to summarize data, e.g., to + * summarize the contents of source files or sub graphs. Such summaries are useful to determine whether code has + * already been analyzed in incremental analysis pipelines. This property is optional to allow its calculation to + * be deferred or skipped if the hash is not needed. + */ + val Hash = "HASH" - /** Traverse to TEMPLATE_DOM via CONTAINS OUT edge. - */ - def _templateDomViaContainsOut: overflowdb.traversal.Traversal[TemplateDom] = get()._templateDomViaContainsOut + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - /** Traverse to TYPE_DECL via CONTAINS OUT edge. - */ - def _typeDeclViaContainsOut: overflowdb.traversal.Traversal[TypeDecl] = get()._typeDeclViaContainsOut + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + } + object Properties { - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") - def sourceFileIn: Iterator[AstNode] = get().sourceFileIn - override def _sourceFileIn = get()._sourceFileIn + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") - /** Traverse to METHOD via SOURCE_FILE IN edge. - */ - def method: overflowdb.traversal.Traversal[Method] = get().method + /** Certain files, e.g., configuration files, may be included in the CPG as-is. For such files, the `CONTENT` field + * contains the files content. + */ + val Content = flatgraph.SinglePropertyKey[String](kind = 14, name = "CONTENT", default = "") - /** Traverse to NAMESPACE_BLOCK via SOURCE_FILE IN edge. - */ - def namespaceBlock: overflowdb.traversal.Traversal[NamespaceBlock] = get().namespaceBlock + /** This property contains a hash value in the form of a string. Hashes can be used to summarize data, e.g., to + * summarize the contents of source files or sub graphs. Such summaries are useful to determine whether code has + * already been analyzed in incremental analysis pipelines. This property is optional to allow its calculation to + * be deferred or skipped if the hash is not needed. + */ + val Hash = flatgraph.OptionalPropertyKey[String](kind = 23, name = "HASH") - /** Traverse to TYPE_DECL via SOURCE_FILE IN edge. - */ - def typeDecl: overflowdb.traversal.Traversal[TypeDecl] = get().typeDecl + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - File.Label + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } + object PropertyDefaults { + val Code = "" + val Content = "" + val Name = "" + val Order = -1: Int } +} + +class File(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 14.toShort, seq_4762) + with FileBase + with AstNode + with StaticType[FileEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "content" - case 4 => "hash" - case 5 => "lineNumber" - case 6 => "name" - case 7 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "content" + case 3 => "hash" + case 4 => "lineNumber" + case 5 => "name" + case 6 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => content - case 4 => hash - case 5 => lineNumber - case 6 => name - case 7 => order + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.content + case 3 => this.hash + case 4 => this.lineNumber + case 5 => this.name + case 6 => this.order + case _ => null } override def productPrefix = "File" - override def productArity = 8 + override def productArity = 7 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[File] } -class FileDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with AstNode with FileBase { - - override def layoutInformation: NodeLayoutInformation = File.layoutInformation - - private var _code: String = File.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _content: String = File.PropertyDefaults.Content - def content: String = _content - private var _hash: String = null - def hash: Option[String] = Option(_hash).asInstanceOf[Option[String]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = File.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = File.PropertyDefaults.Order - def order: scala.Int = _order - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - properties.put("CONTENT", content) - hash.map { value => properties.put("HASH", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - - properties +object NewFile { + def apply(): NewFile = new NewFile + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) + + object InsertionHelpers { + object NewNodeInserter_File_code 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: NewFile => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_File_columnNumber 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[Int]] + 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: NewFile => + generated.columnNumber 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_File_content 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: NewFile => + dstCast(offset) = generated.content + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_File_hash 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: NewFile => + generated.hash 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_File_lineNumber 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[Int]] + 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: NewFile => + generated.lineNumber 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_File_name 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: NewFile => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_File_order 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[Int]] + 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: NewFile => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + } +} + +class NewFile extends NewNode(14.toShort) with FileBase with AstNodeNew { + override type StoredNodeType = File + override def label: String = "FILE" + + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewFile.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewFile.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (!(("") == content)) { properties.put("CONTENT", content) } - hash.map { value => properties.put("HASH", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - - properties + var code: String = "": String + var columnNumber: Option[Int] = None + var content: String = "": String + var hash: Option[String] = None + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def content(value: String): this.type = { this.content = value; this } + def hash(value: Option[String]): this.type = { this.hash = value; this } + def hash(value: String): this.type = { this.hash = Option(value); this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 14, 1) + interface.countProperty(this, 23, hash.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) } - import overflowdb.traversal._ - def astOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](0) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def comment: overflowdb.traversal.Traversal[Comment] = astOut.collectAll[Comment] - def _importViaAstOut: overflowdb.traversal.Traversal[Import] = astOut.collectAll[Import] - def _namespaceBlockViaAstOut: overflowdb.traversal.Traversal[NamespaceBlock] = astOut.collectAll[NamespaceBlock] - - def containsOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](1) - override def _containsOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _methodViaContainsOut: overflowdb.traversal.Traversal[Method] = containsOut.collectAll[Method] - def _templateDomViaContainsOut: overflowdb.traversal.Traversal[TemplateDom] = containsOut.collectAll[TemplateDom] - def _typeDeclViaContainsOut: overflowdb.traversal.Traversal[TypeDecl] = containsOut.collectAll[TypeDecl] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](2) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def sourceFileIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](3) - override def _sourceFileIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def method: overflowdb.traversal.Traversal[Method] = sourceFileIn.collectAll[Method] - def namespaceBlock: overflowdb.traversal.Traversal[NamespaceBlock] = sourceFileIn.collectAll[NamespaceBlock] - def typeDecl: overflowdb.traversal.Traversal[TypeDecl] = sourceFileIn.collectAll[TypeDecl] - - override def label: String = { - File.Label + override def copy: this.type = { + val newInstance = new NewFile + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.content = this.content + newInstance.hash = this.hash + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "content" - case 4 => "hash" - case 5 => "lineNumber" - case 6 => "name" - case 7 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "content" + case 3 => "hash" + case 4 => "lineNumber" + case 5 => "name" + case 6 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => content - case 4 => hash - case 5 => lineNumber - case 6 => name - case 7 => order - } - - override def productPrefix = "File" - override def productArity = 8 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[FileDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "CONTENT" => this._content - case "HASH" => this._hash - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.content + case 3 => this.hash + case 4 => this.lineNumber + case 5 => this.name + case 6 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "CONTENT" => this._content = value.asInstanceOf[String] - case "HASH" => this._hash = value.asInstanceOf[String] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewFile].code - this._columnNumber = newNode.asInstanceOf[NewFile].columnNumber match { - case None => null; case Some(value) => value - } - this._content = newNode.asInstanceOf[NewFile].content - this._hash = newNode.asInstanceOf[NewFile].hash match { case None => null; case Some(value) => value } - this._lineNumber = newNode.asInstanceOf[NewFile].lineNumber match { case None => null; case Some(value) => value } - this._name = newNode.asInstanceOf[NewFile].name - this._order = newNode.asInstanceOf[NewFile].order - - } + override def productPrefix = "NewFile" + override def productArity = 7 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewFile] } 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 41d3b10d5..b001087ff 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 @@ -1,261 +1,179 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Finding { - def apply(graph: Graph, id: Long) = new Finding(graph, id) - - val Label = "FINDING" +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait FindingEMT extends AnyRef - object PropertyNames { - val Evidence = "evidence" - val Keyvaluepairs = "keyValuePairs" - val all: Set[String] = Set(Evidence, Keyvaluepairs) - val allAsJava: java.util.Set[String] = all.asJava +trait FindingBase extends AbstractNode with StaticType[FindingEMT] { + def evidence: IndexedSeq[AbstractNode] + def keyValuePairs: IndexedSeq[KeyValuePairBase] + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + val tmpevidence = this.evidence; if (tmpevidence.nonEmpty) res.put("evidence", tmpevidence) + val tmpkeyValuePairs = this.keyValuePairs; if (tmpkeyValuePairs.nonEmpty) res.put("keyValuePairs", tmpkeyValuePairs) + res } +} - object Properties { - - val Evidence = new overflowdb.PropertyKey[IndexedSeq[StoredNode]]("evidence") - val Keyvaluepairs = new overflowdb.PropertyKey[IndexedSeq[KeyValuePair]]("keyValuePairs") +object Finding { + val Label = "FINDING" + object PropertyNames { + val Evidence = "evidence" + val Keyvaluepairs = "keyValuePairs" } - + object Properties {} object PropertyDefaults {} - - val layoutInformation = new NodeLayoutInformation(Label, PropertyNames.allAsJava, List().asJava, List().asJava) - - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array() - } - - val factory = new NodeFactory[FindingDb] { - override val forLabel = Finding.Label - - override def createNode(ref: NodeRef[FindingDb]) = - new FindingDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = Finding(graph, id) - } } -trait FindingBase extends AbstractNode { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def evidence: IndexedSeq[AbstractNode] - def keyValuePairs: IndexedSeq[KeyValuePairBase] -} - -class Finding(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[FindingDb](graph_4762, id_4762) +class Finding(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 15.toShort, seq_4762) with FindingBase - with StoredNode { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def evidence: collection.immutable.IndexedSeq[StoredNode] = get().evidence - - def keyValuePairs: collection.immutable.IndexedSeq[KeyValuePair] = get().keyValuePairs - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Finding.Label - } + with StaticType[FindingEMT] { + def evidence: IndexedSeq[StoredNode] = flatgraph.Accessors.getNodePropertyMulti[StoredNode](graph, nodeKind, 55, seq) + def keyValuePairs: IndexedSeq[KeyValuePair] = + flatgraph.Accessors.getNodePropertyMulti[KeyValuePair](graph, nodeKind, 56, seq) override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "evidence" - case 2 => "keyValuePairs" + case 0 => "evidence" + case 1 => "keyValuePairs" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => evidence - case 2 => keyValuePairs + case 0 => this.evidence + case 1 => this.keyValuePairs + case _ => null } override def productPrefix = "Finding" - override def productArity = 3 -} - -class FindingDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with FindingBase { - - override def layoutInformation: NodeLayoutInformation = Finding.layoutInformation + override def productArity = 2 - private var _evidence: IndexedSeq[StoredNode] = collection.immutable.ArraySeq.empty - def evidence: IndexedSeq[StoredNode] = this._evidence - - private var _keyValuePairs: IndexedSeq[KeyValuePair] = collection.immutable.ArraySeq.empty - def keyValuePairs: IndexedSeq[KeyValuePair] = this._keyValuePairs - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Finding] +} - if (this._evidence != null && this._evidence.nonEmpty) { properties.put("evidence", this.evidence) } - if (this._keyValuePairs != null && this._keyValuePairs.nonEmpty) { - properties.put("keyValuePairs", this.keyValuePairs) +object NewFinding { + def apply(): NewFinding = new NewFinding + private val outNeighbors: Map[String, Set[String]] = Map() + private val inNeighbors: Map[String, Set[String]] = Map() + + object InsertionHelpers { + object NewNodeInserter_Finding_evidence 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[flatgraph.GNode]] + 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: NewFinding => + for (item <- generated.evidence) { + dstCast(offset) = item match { + case newV: flatgraph.DNode => newV.storedRef.get; case oldV: flatgraph.GNode => oldV; + case null => null + } + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Finding_keyValuePairs 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[flatgraph.GNode]] + 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: NewFinding => + for (item <- generated.keyValuePairs) { + dstCast(offset) = item match { + case newV: flatgraph.DNode => newV.storedRef.get; case oldV: flatgraph.GNode => oldV; + case null => null + } + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - properties } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] +class NewFinding extends NewNode(15.toShort) with FindingBase { + override type StoredNodeType = Finding + override def label: String = "FINDING" - if (this._evidence != null && this._evidence.nonEmpty) { properties.put("evidence", this.evidence) } - if (this._keyValuePairs != null && this._keyValuePairs.nonEmpty) { - properties.put("keyValuePairs", this.keyValuePairs) - } - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewFinding.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewFinding.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ + var evidence: IndexedSeq[AbstractNode] = ArraySeq.empty + var keyValuePairs: IndexedSeq[KeyValuePairBase] = ArraySeq.empty + def evidence(value: IterableOnce[AbstractNode]): this.type = { this.evidence = value.iterator.to(ArraySeq); this } + def keyValuePairs(value: IterableOnce[KeyValuePairBase]): this.type = { + this.keyValuePairs = value.iterator.to(ArraySeq); this + } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 55, evidence.size) + evidence.foreach(interface.visitContainedNode) + interface.countProperty(this, 56, keyValuePairs.size) + keyValuePairs.foreach(interface.visitContainedNode) + } - override def label: String = { - Finding.Label + override def copy: this.type = { + val newInstance = new NewFinding + newInstance.evidence = this.evidence + newInstance.keyValuePairs = this.keyValuePairs + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "evidence" - case 2 => "keyValuePairs" + case 0 => "evidence" + case 1 => "keyValuePairs" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => evidence - case 2 => keyValuePairs - } - - override def productPrefix = "Finding" - override def productArity = 3 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[FindingDb] - - override def property(key: String): Any = { - key match { - - case "evidence" => this._evidence - case "keyValuePairs" => this._keyValuePairs - case _ => null + case 0 => this.evidence + case 1 => this.keyValuePairs + case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - - case "evidence" => - this._evidence = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: StoredNode => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[StoredNode]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[StoredNode]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[StoredNode]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "keyValuePairs" => - this._keyValuePairs = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: KeyValuePair => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => - collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[KeyValuePair]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[KeyValuePair]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[KeyValuePair]].toArray) - } else collection.immutable.ArraySeq.empty - } - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - - this._evidence = - if (newNode.asInstanceOf[NewFinding].evidence == null || newNode.asInstanceOf[NewFinding].evidence.isEmpty) { - collection.immutable.ArraySeq.empty - } else { - collection.immutable.ArraySeq.unsafeWrapArray( - newNode - .asInstanceOf[NewFinding] - .evidence - .map { - case null => throw new NullPointerException("NullPointers forbidden in contained nodes") - case newNode: NewNode => mapping(newNode).asInstanceOf[StoredNode] - case oldNode: StoredNode => oldNode.asInstanceOf[StoredNode] - case _ => throw new MatchError("unreachable") - } - .toArray - ) - } - - this._keyValuePairs = - if ( - newNode.asInstanceOf[NewFinding].keyValuePairs == null || newNode.asInstanceOf[NewFinding].keyValuePairs.isEmpty - ) { - collection.immutable.ArraySeq.empty - } else { - collection.immutable.ArraySeq.unsafeWrapArray( - newNode - .asInstanceOf[NewFinding] - .keyValuePairs - .map { - case null => throw new NullPointerException("NullPointers forbidden in contained nodes") - case newNode: NewNode => mapping(newNode).asInstanceOf[KeyValuePair] - case oldNode: StoredNode => oldNode.asInstanceOf[KeyValuePair] - case _ => throw new MatchError("unreachable") - } - .toArray - ) - } - - } + override def productPrefix = "NewFinding" + override def productArity = 2 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewFinding] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Identifier.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Identifier.scala index d40625a9d..c09b9d99b 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Identifier.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Identifier.scala @@ -1,53 +1,141 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait IdentifierEMT + extends AnyRef + with ExpressionEMT + with HasDynamicTypeHintFullNameEMT + with HasNameEMT + with HasPossibleTypesEMT + with HasTypeFullNameEMT + +trait IdentifierBase extends AbstractNode with ExpressionBase with StaticType[IdentifierEMT] { -object Identifier { - def apply(graph: Graph, id: Long) = new Identifier(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + val tmpDynamicTypeHintFullName = this.dynamicTypeHintFullName; + if (tmpDynamicTypeHintFullName.nonEmpty) res.put("DYNAMIC_TYPE_HINT_FULL_NAME", tmpDynamicTypeHintFullName) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + val tmpPossibleTypes = this.possibleTypes; + if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) + if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) + res + } +} +object Identifier { val Label = "IDENTIFIER" - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" + + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ val DynamicTypeHintFullName = "DYNAMIC_TYPE_HINT_FULL_NAME" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val PossibleTypes = "POSSIBLE_TYPES" - val TypeFullName = "TYPE_FULL_NAME" - val all: Set[String] = Set( - ArgumentIndex, - ArgumentName, - Code, - ColumnNumber, - DynamicTypeHintFullName, - LineNumber, - Name, - Order, - PossibleTypes, - TypeFullName - ) - val allAsJava: java.util.Set[String] = all.asJava - } - object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val DynamicTypeHintFullName = new overflowdb.PropertyKey[IndexedSeq[String]]("DYNAMIC_TYPE_HINT_FULL_NAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val PossibleTypes = new overflowdb.PropertyKey[IndexedSeq[String]]("POSSIBLE_TYPES") - val TypeFullName = new overflowdb.PropertyKey[String]("TYPE_FULL_NAME") + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = "POSSIBLE_TYPES" + + /** 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 = "TYPE_FULL_NAME" } + object Properties { + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ + val DynamicTypeHintFullName = flatgraph.MultiPropertyKey[String](kind = 18, name = "DYNAMIC_TYPE_HINT_FULL_NAME") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = flatgraph.MultiPropertyKey[String](kind = 47, name = "POSSIBLE_TYPES") + + /** 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 = 52, name = "TYPE_FULL_NAME", default = "") + } object PropertyDefaults { val ArgumentIndex = -1: Int val Code = "" @@ -55,1041 +143,1651 @@ object Identifier { val Order = -1: Int val TypeFullName = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Condition.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Receiver.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array( - "ARGUMENT", - "AST", - "CDG", - "CFG", - "DOMINATE", - "EVAL_TYPE", - "POST_DOMINATE", - "REACHING_DEF", - "REF", - "TAGGED_BY" - ) - val In: Array[String] = Array( - "ARGUMENT", - "AST", - "CDG", - "CFG", - "CONDITION", - "CONTAINS", - "DOMINATE", - "POST_DOMINATE", - "REACHING_DEF", - "RECEIVER" - ) - } - - val factory = new NodeFactory[IdentifierDb] { - override val forLabel = Identifier.Label - - override def createNode(ref: NodeRef[IdentifierDb]) = - new IdentifierDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = Identifier(graph, id) - } } -trait IdentifierBase extends AbstractNode with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def dynamicTypeHintFullName: IndexedSeq[String] - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int - def possibleTypes: IndexedSeq[String] - def typeFullName: String - -} - -class Identifier(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[IdentifierDb](graph_4762, id_4762) +class Identifier(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 16.toShort, seq_4762) with IdentifierBase - with StoredNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def dynamicTypeHintFullName: IndexedSeq[String] = get().dynamicTypeHintFullName - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def possibleTypes: IndexedSeq[String] = get().possibleTypes - override def typeFullName: String = get().typeFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => Identifier.PropertyDefaults.ArgumentIndex - case "CODE" => Identifier.PropertyDefaults.Code - case "NAME" => Identifier.PropertyDefaults.Name - case "ORDER" => Identifier.PropertyDefaults.Order - case "TYPE_FULL_NAME" => Identifier.PropertyDefaults.TypeFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def argumentOut: Iterator[TemplateDom] = get().argumentOut - override def _argumentOut = get()._argumentOut - - def astOut: Iterator[Annotation] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to ANNOTATION via AST OUT edge. - */ - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = get()._annotationViaAstOut - - def cdgOut: Iterator[CfgNode] = get().cdgOut - override def _cdgOut = get()._cdgOut - - /** Traverse to BLOCK via CDG OUT edge. - */ - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgOut - - /** Traverse to CALL via CDG OUT edge. - */ - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = get()._callViaCdgOut - - /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. - */ - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgOut - - /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. - */ - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgOut - - /** Traverse to IDENTIFIER via CDG OUT edge. - */ - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgOut - - /** Traverse to JUMP_TARGET via CDG OUT edge. - */ - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgOut - - /** Traverse to LITERAL via CDG OUT edge. - */ - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgOut - - /** Traverse to METHOD_REF via CDG OUT edge. - */ - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgOut - - /** Traverse to METHOD_RETURN via CDG OUT edge. - */ - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaCdgOut - - /** Traverse to RETURN via CDG OUT edge. - */ - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = get()._returnViaCdgOut - - /** Traverse to TYPE_REF via CDG OUT edge. - */ - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgOut - - /** Traverse to UNKNOWN via CDG OUT edge. - */ - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgOut - - def cfgOut: Iterator[CfgNode] = get().cfgOut - override def _cfgOut = get()._cfgOut - - /** Traverse to CFG_NODE via CFG OUT edge. - */ - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = get()._cfgNodeViaCfgOut - - def dominateOut: Iterator[CfgNode] = get().dominateOut - override def _dominateOut = get()._dominateOut - - /** Traverse to BLOCK via DOMINATE OUT edge. - */ - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateOut - - /** Traverse to CALL via DOMINATE OUT edge. - */ - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaDominateOut - - /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. - */ - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateOut - - /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. - */ - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateOut - - /** Traverse to IDENTIFIER via DOMINATE OUT edge. - */ - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateOut - - /** Traverse to JUMP_TARGET via DOMINATE OUT edge. - */ - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateOut - - /** Traverse to LITERAL via DOMINATE OUT edge. - */ - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateOut - - /** Traverse to METHOD_REF via DOMINATE OUT edge. - */ - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateOut - - /** Traverse to METHOD_RETURN via DOMINATE OUT edge. - */ - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaDominateOut - - /** Traverse to RETURN via DOMINATE OUT edge. - */ - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateOut - - /** Traverse to TYPE_REF via DOMINATE OUT edge. - */ - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateOut - - /** Traverse to UNKNOWN via DOMINATE OUT edge. - */ - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateOut - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** Traverse to TYPE via EVAL_TYPE OUT edge. - */ - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = get()._typeViaEvalTypeOut - - def postDominateOut: Iterator[CfgNode] = get().postDominateOut - override def _postDominateOut = get()._postDominateOut - - /** Traverse to BLOCK via POST_DOMINATE OUT edge. - */ - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateOut - - /** Traverse to CALL via POST_DOMINATE OUT edge. - */ - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateOut - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. - */ - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateOut - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateOut - - /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateOut - - /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. - */ - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateOut - - /** Traverse to LITERAL via POST_DOMINATE OUT edge. - */ - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateOut - - /** Traverse to METHOD via POST_DOMINATE OUT edge. - */ - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = get()._methodViaPostDominateOut - - /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. - */ - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateOut - - /** Traverse to RETURN via POST_DOMINATE OUT edge. - */ - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateOut - - /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. - */ - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateOut - - /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. - */ - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateOut - - def reachingDefOut: Iterator[CfgNode] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to CALL via REACHING_DEF OUT edge. - */ - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefOut - - /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. - */ - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefOut - - /** Traverse to LITERAL via REACHING_DEF OUT edge. - */ - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefOut - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. - */ - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefOut - - /** Traverse to METHOD_REF via REACHING_DEF OUT edge. - */ - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefOut - - /** Traverse to RETURN via REACHING_DEF OUT edge. - */ - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefOut - - /** Traverse to TYPE_REF via REACHING_DEF OUT edge. - */ - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefOut - - def refOut: Iterator[AstNode] = get().refOut - override def _refOut = get()._refOut - - /** Traverse to LOCAL via REF OUT edge. - */ - def _localViaRefOut: Option[Local] = get()._localViaRefOut - - /** Traverse to METHOD_PARAMETER_IN via REF OUT edge. - */ - def _methodParameterInViaRefOut: Option[MethodParameterIn] = get()._methodParameterInViaRefOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def argumentIn: Iterator[Expression] = get().argumentIn - override def _argumentIn = get()._argumentIn - - /** Traverse to CALL via ARGUMENT IN edge. - */ - def _callViaArgumentIn: Option[Call] = get()._callViaArgumentIn - - /** Traverse to RETURN via ARGUMENT IN edge. - */ - def _returnViaArgumentIn: Option[Return] = get()._returnViaArgumentIn - - def astIn: Iterator[Expression] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to BLOCK via AST IN edge. - */ - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = get()._blockViaAstIn - - /** Traverse to CALL via AST IN edge. - */ - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = get()._callViaAstIn - - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: Option[ControlStructure] = get()._controlStructureViaAstIn - - /** Traverse to RETURN via AST IN edge. - */ - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = get()._returnViaAstIn - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - def cdgIn: Iterator[CfgNode] = get().cdgIn - override def _cdgIn = get()._cdgIn - - /** Traverse to BLOCK via CDG IN edge. - */ - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgIn - - /** Traverse to CALL via CDG IN edge. - */ - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = get()._callViaCdgIn - - /** Traverse to CONTROL_STRUCTURE via CDG IN edge. - */ - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgIn - - /** Traverse to FIELD_IDENTIFIER via CDG IN edge. - */ - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgIn - - /** Traverse to IDENTIFIER via CDG IN edge. - */ - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgIn - - /** Traverse to JUMP_TARGET via CDG IN edge. - */ - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgIn - - /** Traverse to LITERAL via CDG IN edge. - */ - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgIn - - /** Traverse to METHOD_REF via CDG IN edge. - */ - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgIn - - /** Traverse to TYPE_REF via CDG IN edge. - */ - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgIn - - /** Traverse to UNKNOWN via CDG IN edge. - */ - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def conditionIn: Iterator[ControlStructure] = get().conditionIn - override def _conditionIn = get()._conditionIn - - /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. - */ - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaConditionIn - - def containsIn: Iterator[Method] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to METHOD via CONTAINS IN edge. - */ - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsIn - - def dominateIn: Iterator[CfgNode] = get().dominateIn - override def _dominateIn = get()._dominateIn - - /** Traverse to BLOCK via DOMINATE IN edge. - */ - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateIn - - /** Traverse to CALL via DOMINATE IN edge. - */ - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaDominateIn - - /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. - */ - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateIn - - /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. - */ - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateIn - - /** Traverse to IDENTIFIER via DOMINATE IN edge. - */ - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateIn - - /** Traverse to JUMP_TARGET via DOMINATE IN edge. - */ - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateIn - - /** Traverse to LITERAL via DOMINATE IN edge. - */ - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateIn - - /** Traverse to METHOD via DOMINATE IN edge. - */ - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = get()._methodViaDominateIn - - /** Traverse to METHOD_REF via DOMINATE IN edge. - */ - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateIn - - /** Traverse to RETURN via DOMINATE IN edge. - */ - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateIn - - /** Traverse to TYPE_REF via DOMINATE IN edge. - */ - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateIn - - /** Traverse to UNKNOWN via DOMINATE IN edge. - */ - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateIn - - def postDominateIn: Iterator[CfgNode] = get().postDominateIn - override def _postDominateIn = get()._postDominateIn - - /** Traverse to BLOCK via POST_DOMINATE IN edge. - */ - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateIn - - /** Traverse to CALL via POST_DOMINATE IN edge. - */ - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateIn - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. - */ - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateIn - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. - */ - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateIn - - /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. - */ - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateIn - - /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. - */ - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateIn - - /** Traverse to LITERAL via POST_DOMINATE IN edge. - */ - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateIn - - /** Traverse to METHOD_REF via POST_DOMINATE IN edge. - */ - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateIn - - /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. - */ - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaPostDominateIn - - /** Traverse to RETURN via POST_DOMINATE IN edge. - */ - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateIn - - /** Traverse to TYPE_REF via POST_DOMINATE IN edge. - */ - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateIn - - /** Traverse to UNKNOWN via POST_DOMINATE IN edge. - */ - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateIn - - def reachingDefIn: Iterator[CfgNode] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - /** Traverse to BLOCK via REACHING_DEF IN edge. - */ - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = get()._blockViaReachingDefIn - - /** Traverse to CALL via REACHING_DEF IN edge. - */ - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefIn - - /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. - */ - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaReachingDefIn - - /** Traverse to IDENTIFIER via REACHING_DEF IN edge. - */ - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefIn - - /** Traverse to LITERAL via REACHING_DEF IN edge. - */ - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefIn - - /** Traverse to METHOD via REACHING_DEF IN edge. - */ - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = get()._methodViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. - */ - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - get()._methodParameterInViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. - */ - def _methodParameterOutViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefIn - - /** Traverse to METHOD_REF via REACHING_DEF IN edge. - */ - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefIn - - /** Traverse to RETURN via REACHING_DEF IN edge. - */ - def _returnViaReachingDefIn: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefIn - - /** Traverse to TYPE_REF via REACHING_DEF IN edge. - */ - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefIn - - /** Traverse to UNKNOWN via REACHING_DEF IN edge. - */ - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaReachingDefIn - - def receiverIn: Iterator[Call] = get().receiverIn - override def _receiverIn = get()._receiverIn - - /** Traverse to CALL via RECEIVER IN edge. - */ - def _callViaReceiverIn: Option[Call] = get()._callViaReceiverIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Identifier.Label - } + with Expression + with StaticType[IdentifierEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "lineNumber" - case 7 => "name" - case 8 => "order" - case 9 => "possibleTypes" - case 10 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dynamicTypeHintFullName" + case 5 => "lineNumber" + case 6 => "name" + case 7 => "order" + case 8 => "possibleTypes" + case 9 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => dynamicTypeHintFullName - case 6 => lineNumber - case 7 => name - case 8 => order - case 9 => possibleTypes - case 10 => typeFullName + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dynamicTypeHintFullName + case 5 => this.lineNumber + case 6 => this.name + case 7 => this.order + case 8 => this.possibleTypes + case 9 => this.typeFullName + case _ => null } override def productPrefix = "Identifier" - override def productArity = 11 -} + override def productArity = 10 -class IdentifierDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with Expression with IdentifierBase { - - override def layoutInformation: NodeLayoutInformation = Identifier.layoutInformation + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Identifier] +} - private var _argumentIndex: Integer = Identifier.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = Identifier.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def dynamicTypeHintFullName: IndexedSeq[String] = _dynamicTypeHintFullName - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = Identifier.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = Identifier.PropertyDefaults.Order - def order: scala.Int = _order - private var _possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def possibleTypes: IndexedSeq[String] = _possibleTypes - private var _typeFullName: String = Identifier.PropertyDefaults.TypeFullName - def typeFullName: String = _typeFullName +object NewIdentifier { + def apply(): NewIdentifier = new NewIdentifier + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object InsertionHelpers { + object NewNodeInserter_Identifier_argumentIndex 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[Int]] + 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: NewIdentifier => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - properties.put("TYPE_FULL_NAME", typeFullName) - - properties - } - - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object NewNodeInserter_Identifier_argumentName 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: NewIdentifier => + generated.argumentName 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_Identifier_code 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: NewIdentifier => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Identifier_columnNumber 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[Int]] + 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: NewIdentifier => + generated.columnNumber 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_Identifier_dynamicTypeHintFullName 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: NewIdentifier => + for (item <- generated.dynamicTypeHintFullName) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Identifier_lineNumber 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[Int]] + 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: NewIdentifier => + generated.lineNumber 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_Identifier_name 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: NewIdentifier => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Identifier_order 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[Int]] + 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: NewIdentifier => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Identifier_possibleTypes 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: NewIdentifier => + for (item <- generated.possibleTypes) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Identifier_typeFullName 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: NewIdentifier => + dstCast(offset) = generated.typeFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - if (!(("") == typeFullName)) { properties.put("TYPE_FULL_NAME", typeFullName) } - - properties } +} - import overflowdb.traversal._ - def argumentOut: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - - def astOut: Iterator[Annotation] = createAdjacentNodeScalaIteratorByOffSet[Annotation](1) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = astOut.collectAll[Annotation] - - def cdgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](2) - override def _cdgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = cdgOut.collectAll[Block] - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = cdgOut.collectAll[Call] - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = cdgOut.collectAll[ControlStructure] - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = cdgOut.collectAll[FieldIdentifier] - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = cdgOut.collectAll[Identifier] - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = cdgOut.collectAll[JumpTarget] - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = cdgOut.collectAll[Literal] - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = cdgOut.collectAll[MethodRef] - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = cdgOut.collectAll[MethodReturn] - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = cdgOut.collectAll[Return] - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = cdgOut.collectAll[TypeRef] - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = cdgOut.collectAll[Unknown] - - def cfgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](3) - override def _cfgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = cfgOut.collectAll[CfgNode] - - def dominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _dominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = dominateOut.collectAll[Block] - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = dominateOut.collectAll[Call] - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - dominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateOut.collectAll[FieldIdentifier] - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = dominateOut.collectAll[Identifier] - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = dominateOut.collectAll[JumpTarget] - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = dominateOut.collectAll[Literal] - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = dominateOut.collectAll[MethodRef] - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = dominateOut.collectAll[MethodReturn] - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = dominateOut.collectAll[Return] - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = dominateOut.collectAll[TypeRef] - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = dominateOut.collectAll[Unknown] - - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](5) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def postDominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](6) - override def _postDominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = postDominateOut.collectAll[Block] - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = postDominateOut.collectAll[Call] - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - postDominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateOut.collectAll[FieldIdentifier] - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = postDominateOut.collectAll[Identifier] - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = postDominateOut.collectAll[JumpTarget] - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = postDominateOut.collectAll[Literal] - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = postDominateOut.collectAll[Method] - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = postDominateOut.collectAll[MethodRef] - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = postDominateOut.collectAll[Return] - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = postDominateOut.collectAll[TypeRef] - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = postDominateOut.collectAll[Unknown] - - def reachingDefOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](7) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = reachingDefOut.collectAll[Call] - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = reachingDefOut.collectAll[Identifier] - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = reachingDefOut.collectAll[Literal] - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefOut.collectAll[MethodParameterOut] - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = reachingDefOut.collectAll[MethodRef] - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = reachingDefOut.collectAll[Return] - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = reachingDefOut.collectAll[TypeRef] - - def refOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](8) - override def _refOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _localViaRefOut: Option[Local] = refOut.collectAll[Local].nextOption() - def _methodParameterInViaRefOut: Option[MethodParameterIn] = refOut.collectAll[MethodParameterIn].nextOption() - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](9) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def argumentIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](10) - override def _argumentIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](10) - def _callViaArgumentIn: Option[Call] = argumentIn.collectAll[Call].nextOption() - def _returnViaArgumentIn: Option[Return] = argumentIn.collectAll[Return].nextOption() - - def astIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](11) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](11) - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = astIn.collectAll[Block] - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = astIn.collectAll[Call] - def _controlStructureViaAstIn: Option[ControlStructure] = astIn.collectAll[ControlStructure].nextOption() - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = astIn.collectAll[Return] - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - - def cdgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](12) - override def _cdgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = cdgIn.collectAll[Block] - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = cdgIn.collectAll[Call] - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = cdgIn.collectAll[ControlStructure] - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = cdgIn.collectAll[FieldIdentifier] - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = cdgIn.collectAll[Identifier] - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = cdgIn.collectAll[JumpTarget] - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = cdgIn.collectAll[Literal] - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = cdgIn.collectAll[MethodRef] - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = cdgIn.collectAll[TypeRef] - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = cdgIn.collectAll[Unknown] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](13) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](13) - - def conditionIn: Iterator[ControlStructure] = createAdjacentNodeScalaIteratorByOffSet[ControlStructure](14) - override def _conditionIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](14) - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - conditionIn.collectAll[ControlStructure] - - def containsIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](15) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](15) - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = containsIn.collectAll[Method] - - def dominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](16) - override def _dominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](16) - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = dominateIn.collectAll[Block] - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = dominateIn.collectAll[Call] - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - dominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateIn.collectAll[FieldIdentifier] - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = dominateIn.collectAll[Identifier] - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = dominateIn.collectAll[JumpTarget] - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = dominateIn.collectAll[Literal] - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = dominateIn.collectAll[Method] - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = dominateIn.collectAll[MethodRef] - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = dominateIn.collectAll[Return] - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = dominateIn.collectAll[TypeRef] - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = dominateIn.collectAll[Unknown] - - def postDominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](17) - override def _postDominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](17) - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = postDominateIn.collectAll[Block] - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = postDominateIn.collectAll[Call] - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - postDominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateIn.collectAll[FieldIdentifier] - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = postDominateIn.collectAll[Identifier] - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = postDominateIn.collectAll[JumpTarget] - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = postDominateIn.collectAll[Literal] - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = postDominateIn.collectAll[MethodRef] - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - postDominateIn.collectAll[MethodReturn] - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = postDominateIn.collectAll[Return] - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = postDominateIn.collectAll[TypeRef] - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = postDominateIn.collectAll[Unknown] +class NewIdentifier extends NewNode(16.toShort) with IdentifierBase with ExpressionNew { + override type StoredNodeType = Identifier + override def label: String = "IDENTIFIER" - def reachingDefIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](18) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](18) - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = reachingDefIn.collectAll[Block] - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = reachingDefIn.collectAll[Call] - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - reachingDefIn.collectAll[ControlStructure] - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = reachingDefIn.collectAll[Identifier] - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = reachingDefIn.collectAll[Literal] - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = reachingDefIn.collectAll[Method] - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - reachingDefIn.collectAll[MethodParameterIn] - def _methodParameterOutViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefIn.collectAll[MethodParameterOut] - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = reachingDefIn.collectAll[MethodRef] - def _returnViaReachingDefIn: overflowdb.traversal.Traversal[Return] = reachingDefIn.collectAll[Return] - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = reachingDefIn.collectAll[TypeRef] - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = reachingDefIn.collectAll[Unknown] + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewIdentifier.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewIdentifier.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } - def receiverIn: Iterator[Call] = createAdjacentNodeScalaIteratorByOffSet[Call](19) - override def _receiverIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](19) - def _callViaReceiverIn: Option[Call] = receiverIn.collectAll[Call].nextOption() + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var dynamicTypeHintFullName: IndexedSeq[String] = ArraySeq.empty + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + var possibleTypes: IndexedSeq[String] = ArraySeq.empty + 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 } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { + this.dynamicTypeHintFullName = value.iterator.to(ArraySeq); this + } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + 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 typeFullName(value: String): this.type = { this.typeFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 18, dynamicTypeHintFullName.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 47, possibleTypes.size) + interface.countProperty(this, 52, 1) + } - override def label: String = { - Identifier.Label + override def copy: this.type = { + val newInstance = new NewIdentifier + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.possibleTypes = this.possibleTypes + newInstance.typeFullName = this.typeFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "lineNumber" - case 7 => "name" - case 8 => "order" - case 9 => "possibleTypes" - case 10 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dynamicTypeHintFullName" + case 5 => "lineNumber" + case 6 => "name" + case 7 => "order" + case 8 => "possibleTypes" + case 9 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => dynamicTypeHintFullName - case 6 => lineNumber - case 7 => name - case 8 => order - case 9 => possibleTypes - case 10 => typeFullName - } - - override def productPrefix = "Identifier" - override def productArity = 11 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[IdentifierDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "DYNAMIC_TYPE_HINT_FULL_NAME" => this._dynamicTypeHintFullName - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - case "POSSIBLE_TYPES" => this._possibleTypes - case "TYPE_FULL_NAME" => this._typeFullName - + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dynamicTypeHintFullName + case 5 => this.lineNumber + case 6 => this.name + case 7 => this.order + case 8 => this.possibleTypes + case 9 => this.typeFullName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "DYNAMIC_TYPE_HINT_FULL_NAME" => - this._dynamicTypeHintFullName = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "POSSIBLE_TYPES" => - this._possibleTypes = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "TYPE_FULL_NAME" => this._typeFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewIdentifier].argumentIndex - this._argumentName = newNode.asInstanceOf[NewIdentifier].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewIdentifier].code - this._columnNumber = newNode.asInstanceOf[NewIdentifier].columnNumber match { - case None => null; case Some(value) => value - } - this._dynamicTypeHintFullName = - if (newNode.asInstanceOf[NewIdentifier].dynamicTypeHintFullName != null) - newNode.asInstanceOf[NewIdentifier].dynamicTypeHintFullName - else collection.immutable.ArraySeq.empty - this._lineNumber = newNode.asInstanceOf[NewIdentifier].lineNumber match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewIdentifier].name - this._order = newNode.asInstanceOf[NewIdentifier].order - this._possibleTypes = - if (newNode.asInstanceOf[NewIdentifier].possibleTypes != null) newNode.asInstanceOf[NewIdentifier].possibleTypes - else collection.immutable.ArraySeq.empty - this._typeFullName = newNode.asInstanceOf[NewIdentifier].typeFullName - - } + override def productPrefix = "NewIdentifier" + override def productArity = 10 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewIdentifier] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Import.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Import.scala index 1cf38cbca..c5f6a2029 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Import.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Import.scala @@ -1,362 +1,1761 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Import { - def apply(graph: Graph, id: Long) = new Import(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait ImportEMT + extends AnyRef + with AstNodeEMT + with HasExplicitAsEMT + with HasImportedAsEMT + with HasImportedEntityEMT + with HasIsExplicitEMT + with HasIsWildcardEMT - val Label = "IMPORT" - - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val ExplicitAs = "EXPLICIT_AS" - val ImportedAs = "IMPORTED_AS" - val ImportedEntity = "IMPORTED_ENTITY" - val IsExplicit = "IS_EXPLICIT" - val IsWildcard = "IS_WILDCARD" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val all: Set[String] = - Set(Code, ColumnNumber, ExplicitAs, ImportedAs, ImportedEntity, IsExplicit, IsWildcard, LineNumber, Order) - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val ExplicitAs = new overflowdb.PropertyKey[Boolean]("EXPLICIT_AS") - val ImportedAs = new overflowdb.PropertyKey[String]("IMPORTED_AS") - val ImportedEntity = new overflowdb.PropertyKey[String]("IMPORTED_ENTITY") - val IsExplicit = new overflowdb.PropertyKey[Boolean]("IS_EXPLICIT") - val IsWildcard = new overflowdb.PropertyKey[Boolean]("IS_WILDCARD") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +trait ImportBase extends AbstractNode with AstNodeBase with StaticType[ImportEMT] { + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.explicitAs.foreach { p => res.put("EXPLICIT_AS", p) } + this.importedAs.foreach { p => res.put("IMPORTED_AS", p) } + this.importedEntity.foreach { p => res.put("IMPORTED_ENTITY", p) } + this.isExplicit.foreach { p => res.put("IS_EXPLICIT", p) } + this.isWildcard.foreach { p => res.put("IS_WILDCARD", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object PropertyDefaults { - val Code = "" - val Order = -1: Int - } +object Import { + val Label = "IMPORT" + object PropertyNames { - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Imports.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.IsCallForImport.layoutInformation - ).asJava - ) + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - object Edges { - val Out: Array[String] = Array("IMPORTS", "TAGGED_BY") - val In: Array[String] = Array("AST", "IS_CALL_FOR_IMPORT") - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - val factory = new NodeFactory[ImportDb] { - override val forLabel = Import.Label + /** Specifies whether the IMPORTED_AS property was explicitly present in the code. For languages like Java which do + * not allow a renaming during import this is always false. For e.g. Kotlin it depends on the existence of the "as" + * keyword. + */ + val ExplicitAs = "EXPLICIT_AS" - override def createNode(ref: NodeRef[ImportDb]) = - new ImportDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** The identifier under which the import can be accessed in the importing context. For a Java import this is always + * identical to the class name. But e.g. for a Kotlin import like "import java.nio.ByteBuffer as BBuffer" this + * would be "BBuffer". This property is ignored if IS_WILDCARD is true. + */ + val ImportedAs = "IMPORTED_AS" - override def createNodeRef(graph: Graph, id: Long) = Import(graph, id) - } -} + /** The identifying string of the imported entity. For a Java import like "import java.nio.ByteBuffer;" this would + * be "java.nio.ByteBuffer". + */ + val ImportedEntity = "IMPORTED_ENTITY" -trait ImportBase extends AbstractNode with AstNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] + /** Specifies whether this is an explicit import. Most languages have implicit default imports of some standard + * library elements and this flag is used to distinguish those from explicit imports found in the code base. + */ + val IsExplicit = "IS_EXPLICIT" - def code: String - def columnNumber: Option[scala.Int] - def explicitAs: Option[Boolean] - def importedAs: Option[String] - def importedEntity: Option[String] - def isExplicit: Option[Boolean] - def isWildcard: Option[Boolean] - def lineNumber: Option[scala.Int] - def order: scala.Int + /** Specifies whether this is a wildcard import. For a Java import like "import java.nio.*;" IS_WILDCARD would be + * "true" and IMPORTED_ENTITY would be "java.nio". For wildcard imports the IMPORTED_AS property is ignored. + */ + val IsWildcard = "IS_WILDCARD" -} + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" -class Import(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[ImportDb](graph_4762, id_4762) - with ImportBase - with StoredNode - with AstNode { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def explicitAs: Option[Boolean] = get().explicitAs - override def importedAs: Option[String] = get().importedAs - override def importedEntity: Option[String] = get().importedEntity - override def isExplicit: Option[Boolean] = get().isExplicit - override def isWildcard: Option[Boolean] = get().isWildcard - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => Import.PropertyDefaults.Code - case "ORDER" => Import.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" } + object Properties { - def importsOut: Iterator[Dependency] = get().importsOut - override def _importsOut = get()._importsOut - - /** Traverse to DEPENDENCY via IMPORTS OUT edge. - */ - def _dependencyViaImportsOut: overflowdb.traversal.Traversal[Dependency] = get()._dependencyViaImportsOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") - def astIn: Iterator[AstNode] = get().astIn - override def _astIn = get()._astIn + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") - /** Traverse to BLOCK via AST IN edge. - */ - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = get()._blockViaAstIn + /** Specifies whether the IMPORTED_AS property was explicitly present in the code. For languages like Java which do + * not allow a renaming during import this is always false. For e.g. Kotlin it depends on the existence of the "as" + * keyword. + */ + val ExplicitAs = flatgraph.OptionalPropertyKey[Boolean](kind = 20, name = "EXPLICIT_AS") - /** Traverse to FILE via AST IN edge. - */ - def _fileViaAstIn: overflowdb.traversal.Traversal[File] = get()._fileViaAstIn + /** The identifier under which the import can be accessed in the importing context. For a Java import this is always + * identical to the class name. But e.g. for a Kotlin import like "import java.nio.ByteBuffer as BBuffer" this + * would be "BBuffer". This property is ignored if IS_WILDCARD is true. + */ + val ImportedAs = flatgraph.OptionalPropertyKey[String](kind = 24, name = "IMPORTED_AS") - /** Traverse to TYPE_DECL via AST IN edge. - */ - def _typeDeclViaAstIn: overflowdb.traversal.Traversal[TypeDecl] = get()._typeDeclViaAstIn + /** The identifying string of the imported entity. For a Java import like "import java.nio.ByteBuffer;" this would + * be "java.nio.ByteBuffer". + */ + val ImportedEntity = flatgraph.OptionalPropertyKey[String](kind = 25, name = "IMPORTED_ENTITY") - def isCallForImportIn: Iterator[Call] = get().isCallForImportIn - override def _isCallForImportIn = get()._isCallForImportIn + /** Specifies whether this is an explicit import. Most languages have implicit default imports of some standard + * library elements and this flag is used to distinguish those from explicit imports found in the code base. + */ + val IsExplicit = flatgraph.OptionalPropertyKey[Boolean](kind = 28, name = "IS_EXPLICIT") - /** Traverse to CALL via IS_CALL_FOR_IMPORT IN edge. - */ - def _callViaIsCallForImportIn: overflowdb.traversal.Traversal[Call] = get()._callViaIsCallForImportIn + /** Specifies whether this is a wildcard import. For a Java import like "import java.nio.*;" IS_WILDCARD would be + * "true" and IMPORTED_ENTITY would be "java.nio". For wildcard imports the IMPORTED_AS property is ignored. + */ + val IsWildcard = flatgraph.OptionalPropertyKey[Boolean](kind = 31, name = "IS_WILDCARD") - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Import.Label + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) } + object PropertyDefaults { + val Code = "" + val Order = -1: Int + } +} + +class Import(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 17.toShort, seq_4762) + with ImportBase + with AstNode + with StaticType[ImportEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "explicitAs" - case 4 => "importedAs" - case 5 => "importedEntity" - case 6 => "isExplicit" - case 7 => "isWildcard" - case 8 => "lineNumber" - case 9 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "explicitAs" + case 3 => "importedAs" + case 4 => "importedEntity" + case 5 => "isExplicit" + case 6 => "isWildcard" + case 7 => "lineNumber" + case 8 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => explicitAs - case 4 => importedAs - case 5 => importedEntity - case 6 => isExplicit - case 7 => isWildcard - case 8 => lineNumber - case 9 => order + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.explicitAs + case 3 => this.importedAs + case 4 => this.importedEntity + case 5 => this.isExplicit + case 6 => this.isWildcard + case 7 => this.lineNumber + case 8 => this.order + case _ => null } override def productPrefix = "Import" - override def productArity = 10 + override def productArity = 9 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Import] } -class ImportDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with AstNode with ImportBase { - - override def layoutInformation: NodeLayoutInformation = Import.layoutInformation - - private var _code: String = Import.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _explicitAs: java.lang.Boolean = null - def explicitAs: Option[Boolean] = Option(_explicitAs).asInstanceOf[Option[Boolean]] - private var _importedAs: String = null - def importedAs: Option[String] = Option(_importedAs).asInstanceOf[Option[String]] - private var _importedEntity: String = null - def importedEntity: Option[String] = Option(_importedEntity).asInstanceOf[Option[String]] - private var _isExplicit: java.lang.Boolean = null - def isExplicit: Option[Boolean] = Option(_isExplicit).asInstanceOf[Option[Boolean]] - private var _isWildcard: java.lang.Boolean = null - def isWildcard: Option[Boolean] = Option(_isWildcard).asInstanceOf[Option[Boolean]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = Import.PropertyDefaults.Order - def order: scala.Int = _order - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - explicitAs.map { value => properties.put("EXPLICIT_AS", value) } - importedAs.map { value => properties.put("IMPORTED_AS", value) } - importedEntity.map { value => properties.put("IMPORTED_ENTITY", value) } - isExplicit.map { value => properties.put("IS_EXPLICIT", value) } - isWildcard.map { value => properties.put("IS_WILDCARD", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) - - properties - } +object NewImport { + def apply(): NewImport = new NewImport + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - explicitAs.map { value => properties.put("EXPLICIT_AS", value) } - importedAs.map { value => properties.put("IMPORTED_AS", value) } - importedEntity.map { value => properties.put("IMPORTED_ENTITY", value) } - isExplicit.map { value => properties.put("IS_EXPLICIT", value) } - isWildcard.map { value => properties.put("IS_WILDCARD", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - - properties + object InsertionHelpers { + object NewNodeInserter_Import_code 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: NewImport => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Import_columnNumber 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[Int]] + 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: NewImport => + generated.columnNumber 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_Import_explicitAs 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[Boolean]] + 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: NewImport => + generated.explicitAs 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_Import_importedAs 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: NewImport => + generated.importedAs 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_Import_importedEntity 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: NewImport => + generated.importedEntity 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_Import_isExplicit 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[Boolean]] + 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: NewImport => + generated.isExplicit 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_Import_isWildcard 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[Boolean]] + 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: NewImport => + generated.isWildcard 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_Import_lineNumber 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[Int]] + 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: NewImport => + generated.lineNumber 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_Import_order 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[Int]] + 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: NewImport => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - import overflowdb.traversal._ - def importsOut: Iterator[Dependency] = createAdjacentNodeScalaIteratorByOffSet[Dependency](0) - override def _importsOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _dependencyViaImportsOut: overflowdb.traversal.Traversal[Dependency] = importsOut.collectAll[Dependency] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](1) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] +class NewImport extends NewNode(17.toShort) with ImportBase with AstNodeNew { + override type StoredNodeType = Import + override def label: String = "IMPORT" - def astIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](2) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = astIn.collectAll[Block] - def _fileViaAstIn: overflowdb.traversal.Traversal[File] = astIn.collectAll[File] - def _typeDeclViaAstIn: overflowdb.traversal.Traversal[TypeDecl] = astIn.collectAll[TypeDecl] + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewImport.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewImport.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } - def isCallForImportIn: Iterator[Call] = createAdjacentNodeScalaIteratorByOffSet[Call](3) - override def _isCallForImportIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _callViaIsCallForImportIn: overflowdb.traversal.Traversal[Call] = isCallForImportIn.collectAll[Call] + var code: String = "": String + var columnNumber: Option[Int] = None + var explicitAs: Option[Boolean] = None + var importedAs: Option[String] = None + var importedEntity: Option[String] = None + var isExplicit: Option[Boolean] = None + var isWildcard: Option[Boolean] = None + var lineNumber: Option[Int] = None + var order: Int = -1: Int + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def explicitAs(value: Boolean): this.type = { this.explicitAs = Option(value); this } + def explicitAs(value: Option[Boolean]): this.type = { this.explicitAs = value; this } + def importedAs(value: Option[String]): this.type = { this.importedAs = value; this } + def importedAs(value: String): this.type = { this.importedAs = Option(value); this } + def importedEntity(value: Option[String]): this.type = { this.importedEntity = value; this } + def importedEntity(value: String): this.type = { this.importedEntity = Option(value); this } + def isExplicit(value: Boolean): this.type = { this.isExplicit = Option(value); this } + def isExplicit(value: Option[Boolean]): this.type = { this.isExplicit = value; this } + def isWildcard(value: Boolean): this.type = { this.isWildcard = Option(value); this } + def isWildcard(value: Option[Boolean]): this.type = { this.isWildcard = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 20, explicitAs.size) + interface.countProperty(this, 24, importedAs.size) + interface.countProperty(this, 25, importedEntity.size) + interface.countProperty(this, 28, isExplicit.size) + interface.countProperty(this, 31, isWildcard.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + } - override def label: String = { - Import.Label + override def copy: this.type = { + val newInstance = new NewImport + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.explicitAs = this.explicitAs + newInstance.importedAs = this.importedAs + newInstance.importedEntity = this.importedEntity + newInstance.isExplicit = this.isExplicit + newInstance.isWildcard = this.isWildcard + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "explicitAs" - case 4 => "importedAs" - case 5 => "importedEntity" - case 6 => "isExplicit" - case 7 => "isWildcard" - case 8 => "lineNumber" - case 9 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "explicitAs" + case 3 => "importedAs" + case 4 => "importedEntity" + case 5 => "isExplicit" + case 6 => "isWildcard" + case 7 => "lineNumber" + case 8 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => explicitAs - case 4 => importedAs - case 5 => importedEntity - case 6 => isExplicit - case 7 => isWildcard - case 8 => lineNumber - case 9 => order - } - - override def productPrefix = "Import" - override def productArity = 10 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[ImportDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "EXPLICIT_AS" => this._explicitAs - case "IMPORTED_AS" => this._importedAs - case "IMPORTED_ENTITY" => this._importedEntity - case "IS_EXPLICIT" => this._isExplicit - case "IS_WILDCARD" => this._isWildcard - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.explicitAs + case 3 => this.importedAs + case 4 => this.importedEntity + case 5 => this.isExplicit + case 6 => this.isWildcard + case 7 => this.lineNumber + case 8 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "EXPLICIT_AS" => this._explicitAs = value.asInstanceOf[Boolean] - case "IMPORTED_AS" => this._importedAs = value.asInstanceOf[String] - case "IMPORTED_ENTITY" => this._importedEntity = value.asInstanceOf[String] - case "IS_EXPLICIT" => this._isExplicit = value.asInstanceOf[Boolean] - case "IS_WILDCARD" => this._isWildcard = value.asInstanceOf[Boolean] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewImport].code - this._columnNumber = newNode.asInstanceOf[NewImport].columnNumber match { - case None => null; case Some(value) => value - } - this._explicitAs = newNode.asInstanceOf[NewImport].explicitAs match { case None => null; case Some(value) => value } - this._importedAs = newNode.asInstanceOf[NewImport].importedAs match { case None => null; case Some(value) => value } - this._importedEntity = newNode.asInstanceOf[NewImport].importedEntity match { - case None => null; case Some(value) => value - } - this._isExplicit = newNode.asInstanceOf[NewImport].isExplicit match { case None => null; case Some(value) => value } - this._isWildcard = newNode.asInstanceOf[NewImport].isWildcard match { case None => null; case Some(value) => value } - this._lineNumber = newNode.asInstanceOf[NewImport].lineNumber match { case None => null; case Some(value) => value } - this._order = newNode.asInstanceOf[NewImport].order - - } + override def productPrefix = "NewImport" + override def productArity = 9 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewImport] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/JumpLabel.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/JumpLabel.scala index ae14f7c7c..1f27e43ef 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/JumpLabel.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/JumpLabel.scala @@ -1,271 +1,1587 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object JumpLabel { - def apply(graph: Graph, id: Long) = new JumpLabel(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait JumpLabelEMT extends AnyRef with AstNodeEMT with HasNameEMT with HasParserTypeNameEMT - val Label = "JUMP_LABEL" +trait JumpLabelBase extends AbstractNode with AstNodeBase with StaticType[JumpLabelEMT] { - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val ParserTypeName = "PARSER_TYPE_NAME" - val all: Set[String] = Set(Code, ColumnNumber, LineNumber, Name, Order, ParserTypeName) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + if (("": String) != this.parserTypeName) res.put("PARSER_TYPE_NAME", this.parserTypeName) + res } +} - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val ParserTypeName = new overflowdb.PropertyKey[String]("PARSER_TYPE_NAME") - - } +object JumpLabel { + val Label = "JUMP_LABEL" + object PropertyNames { - object PropertyDefaults { - val Code = "" - val Name = "" - val Order = -1: Int - val ParserTypeName = "" - } + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List().asJava, - List(io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation).asJava - ) + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array("AST") - } + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - val factory = new NodeFactory[JumpLabelDb] { - override val forLabel = JumpLabel.Label + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - override def createNode(ref: NodeRef[JumpLabelDb]) = - new JumpLabelDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" - override def createNodeRef(graph: Graph, id: Long) = JumpLabel(graph, id) + /** AST node type name emitted by parser. */ + val ParserTypeName = "PARSER_TYPE_NAME" } -} - -trait JumpLabelBase extends AbstractNode with AstNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] + object Properties { - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int - def parserTypeName: String + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") -} - -class JumpLabel(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[JumpLabelDb](graph_4762, id_4762) - with JumpLabelBase - with StoredNode - with AstNode { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def parserTypeName: String = get().parserTypeName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => JumpLabel.PropertyDefaults.Code - case "NAME" => JumpLabel.PropertyDefaults.Name - case "ORDER" => JumpLabel.PropertyDefaults.Order - case "PARSER_TYPE_NAME" => JumpLabel.PropertyDefaults.ParserTypeName - case _ => super.propertyDefaultValue(propertyKey) - } - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") - def astIn: Iterator[ControlStructure] = get().astIn - override def _astIn = get()._astIn + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaAstIn + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - JumpLabel.Label + /** AST node type name emitted by parser. */ + val ParserTypeName = flatgraph.SinglePropertyKey[String](kind = 46, name = "PARSER_TYPE_NAME", default = "") } + object PropertyDefaults { + val Code = "" + val Name = "" + val Order = -1: Int + val ParserTypeName = "" + } +} + +class JumpLabel(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 18.toShort, seq_4762) + with JumpLabelBase + with AstNode + with StaticType[JumpLabelEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "name" - case 5 => "order" - case 6 => "parserTypeName" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "name" + case 4 => "order" + case 5 => "parserTypeName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => name - case 5 => order - case 6 => parserTypeName + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.name + case 4 => this.order + case 5 => this.parserTypeName + case _ => null } override def productPrefix = "JumpLabel" - override def productArity = 7 -} - -class JumpLabelDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with AstNode with JumpLabelBase { + override def productArity = 6 - override def layoutInformation: NodeLayoutInformation = JumpLabel.layoutInformation - - private var _code: String = JumpLabel.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = JumpLabel.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = JumpLabel.PropertyDefaults.Order - def order: scala.Int = _order - private var _parserTypeName: String = JumpLabel.PropertyDefaults.ParserTypeName - def parserTypeName: String = _parserTypeName + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[JumpLabel] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - properties.put("PARSER_TYPE_NAME", parserTypeName) +object NewJumpLabel { + def apply(): NewJumpLabel = new NewJumpLabel + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_JumpLabel_code 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: NewJumpLabel => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_JumpLabel_columnNumber 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[Int]] + 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: NewJumpLabel => + generated.columnNumber 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_JumpLabel_lineNumber 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[Int]] + 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: NewJumpLabel => + generated.lineNumber 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_JumpLabel_name 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: NewJumpLabel => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_JumpLabel_order 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[Int]] + 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: NewJumpLabel => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_JumpLabel_parserTypeName 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: NewJumpLabel => + dstCast(offset) = generated.parserTypeName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (!(("") == parserTypeName)) { properties.put("PARSER_TYPE_NAME", parserTypeName) } +class NewJumpLabel extends NewNode(18.toShort) with JumpLabelBase with AstNodeNew { + override type StoredNodeType = JumpLabel + override def label: String = "JUMP_LABEL" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewJumpLabel.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewJumpLabel.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def astIn: Iterator[ControlStructure] = createAdjacentNodeScalaIteratorByOffSet[ControlStructure](0) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = astIn.collectAll[ControlStructure] + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + var parserTypeName: String = "": String + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + def order(value: Int): this.type = { this.order = value; this } + def parserTypeName(value: String): this.type = { this.parserTypeName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 46, 1) + } - override def label: String = { - JumpLabel.Label + override def copy: this.type = { + val newInstance = new NewJumpLabel + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.parserTypeName = this.parserTypeName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "name" - case 5 => "order" - case 6 => "parserTypeName" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "name" + case 4 => "order" + case 5 => "parserTypeName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => name - case 5 => order - case 6 => parserTypeName - } - - override def productPrefix = "JumpLabel" - override def productArity = 7 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[JumpLabelDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - case "PARSER_TYPE_NAME" => this._parserTypeName - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.name + case 4 => this.order + case 5 => this.parserTypeName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "PARSER_TYPE_NAME" => this._parserTypeName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewJumpLabel].code - this._columnNumber = newNode.asInstanceOf[NewJumpLabel].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewJumpLabel].lineNumber match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewJumpLabel].name - this._order = newNode.asInstanceOf[NewJumpLabel].order - this._parserTypeName = newNode.asInstanceOf[NewJumpLabel].parserTypeName - - } + override def productPrefix = "NewJumpLabel" + override def productArity = 6 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewJumpLabel] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/JumpTarget.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/JumpTarget.scala index 65e67654a..b944ca345 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/JumpTarget.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/JumpTarget.scala @@ -1,781 +1,1640 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object JumpTarget { - def apply(graph: Graph, id: Long) = new JumpTarget(graph, id) - - val Label = "JUMP_TARGET" - - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val ParserTypeName = "PARSER_TYPE_NAME" - val all: Set[String] = Set(ArgumentIndex, Code, ColumnNumber, LineNumber, Name, Order, ParserTypeName) - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val ParserTypeName = new overflowdb.PropertyKey[String]("PARSER_TYPE_NAME") - - } +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait JumpTargetEMT extends AnyRef with CfgNodeEMT with HasArgumentIndexEMT with HasNameEMT with HasParserTypeNameEMT - object PropertyDefaults { - val ArgumentIndex = -1: Int - val Code = "" - val Name = "" - val Order = -1: Int - val ParserTypeName = "" - } +trait JumpTargetBase extends AbstractNode with CfgNodeBase with StaticType[JumpTargetEMT] { - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Condition.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array("CDG", "CFG", "DOMINATE", "POST_DOMINATE", "TAGGED_BY") - val In: Array[String] = Array("ARGUMENT", "AST", "CDG", "CFG", "CONDITION", "CONTAINS", "DOMINATE", "POST_DOMINATE") - } - - val factory = new NodeFactory[JumpTargetDb] { - override val forLabel = JumpTarget.Label - - override def createNode(ref: NodeRef[JumpTargetDb]) = - new JumpTargetDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = JumpTarget(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + if (("": String) != this.parserTypeName) res.put("PARSER_TYPE_NAME", this.parserTypeName) + res } } -trait JumpTargetBase extends AbstractNode with AstNodeBase with CfgNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int - def parserTypeName: String - -} - -class JumpTarget(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[JumpTargetDb](graph_4762, id_4762) - with JumpTargetBase - with StoredNode - with AstNode - with CfgNode { - override def argumentIndex: scala.Int = get().argumentIndex - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def parserTypeName: String = get().parserTypeName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => JumpTarget.PropertyDefaults.ArgumentIndex - case "CODE" => JumpTarget.PropertyDefaults.Code - case "NAME" => JumpTarget.PropertyDefaults.Name - case "ORDER" => JumpTarget.PropertyDefaults.Order - case "PARSER_TYPE_NAME" => JumpTarget.PropertyDefaults.ParserTypeName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def cdgOut: Iterator[CfgNode] = get().cdgOut - override def _cdgOut = get()._cdgOut - - /** Traverse to BLOCK via CDG OUT edge. - */ - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgOut - - /** Traverse to CALL via CDG OUT edge. - */ - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = get()._callViaCdgOut - - /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. - */ - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgOut - - /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. - */ - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgOut - - /** Traverse to IDENTIFIER via CDG OUT edge. - */ - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgOut - - /** Traverse to JUMP_TARGET via CDG OUT edge. - */ - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgOut - - /** Traverse to LITERAL via CDG OUT edge. - */ - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgOut - - /** Traverse to METHOD_REF via CDG OUT edge. - */ - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgOut - - /** Traverse to METHOD_RETURN via CDG OUT edge. - */ - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaCdgOut - - /** Traverse to RETURN via CDG OUT edge. - */ - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = get()._returnViaCdgOut - - /** Traverse to TYPE_REF via CDG OUT edge. - */ - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgOut - - /** Traverse to UNKNOWN via CDG OUT edge. - */ - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgOut - - def cfgOut: Iterator[CfgNode] = get().cfgOut - override def _cfgOut = get()._cfgOut - - /** Traverse to CFG_NODE via CFG OUT edge. - */ - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = get()._cfgNodeViaCfgOut - - def dominateOut: Iterator[CfgNode] = get().dominateOut - override def _dominateOut = get()._dominateOut - - /** Traverse to BLOCK via DOMINATE OUT edge. - */ - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateOut - - /** Traverse to CALL via DOMINATE OUT edge. - */ - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaDominateOut - - /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. - */ - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateOut - - /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. - */ - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateOut - - /** Traverse to IDENTIFIER via DOMINATE OUT edge. - */ - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateOut - - /** Traverse to JUMP_TARGET via DOMINATE OUT edge. - */ - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateOut - - /** Traverse to LITERAL via DOMINATE OUT edge. - */ - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateOut - - /** Traverse to METHOD_REF via DOMINATE OUT edge. - */ - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateOut - - /** Traverse to RETURN via DOMINATE OUT edge. - */ - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateOut - - /** Traverse to TYPE_REF via DOMINATE OUT edge. - */ - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateOut - - /** Traverse to UNKNOWN via DOMINATE OUT edge. - */ - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateOut - - def postDominateOut: Iterator[CfgNode] = get().postDominateOut - override def _postDominateOut = get()._postDominateOut - - /** Traverse to BLOCK via POST_DOMINATE OUT edge. - */ - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateOut - - /** Traverse to CALL via POST_DOMINATE OUT edge. - */ - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateOut - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. - */ - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateOut - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateOut - - /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateOut - - /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. - */ - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateOut - - /** Traverse to LITERAL via POST_DOMINATE OUT edge. - */ - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateOut - - /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. - */ - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateOut - - /** Traverse to RETURN via POST_DOMINATE OUT edge. - */ - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateOut - - /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. - */ - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateOut - - /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. - */ - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def argumentIn: Iterator[Expression] = get().argumentIn - override def _argumentIn = get()._argumentIn - - /** Traverse to CALL via ARGUMENT IN edge. - */ - def _callViaArgumentIn: overflowdb.traversal.Traversal[Call] = get()._callViaArgumentIn - - /** Traverse to RETURN via ARGUMENT IN edge. - */ - def _returnViaArgumentIn: overflowdb.traversal.Traversal[Return] = get()._returnViaArgumentIn - - def astIn: Iterator[Expression] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to BLOCK via AST IN edge. - */ - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = get()._blockViaAstIn - - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaAstIn - - /** Traverse to RETURN via AST IN edge. - */ - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = get()._returnViaAstIn - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - def cdgIn: Iterator[CfgNode] = get().cdgIn - override def _cdgIn = get()._cdgIn - - /** Traverse to BLOCK via CDG IN edge. - */ - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgIn - - /** Traverse to CALL via CDG IN edge. - */ - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = get()._callViaCdgIn - - /** Traverse to CONTROL_STRUCTURE via CDG IN edge. - */ - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgIn - - /** Traverse to FIELD_IDENTIFIER via CDG IN edge. - */ - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgIn +object JumpTarget { + val Label = "JUMP_TARGET" + object PropertyNames { - /** Traverse to IDENTIFIER via CDG IN edge. - */ - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgIn + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" - /** Traverse to JUMP_TARGET via CDG IN edge. - */ - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgIn + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - /** Traverse to LITERAL via CDG IN edge. - */ - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgIn + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - /** Traverse to METHOD_REF via CDG IN edge. - */ - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgIn + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - /** Traverse to TYPE_REF via CDG IN edge. - */ - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgIn + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - /** Traverse to UNKNOWN via CDG IN edge. - */ - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgIn + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn + /** AST node type name emitted by parser. */ + val ParserTypeName = "PARSER_TYPE_NAME" + } + object Properties { - def conditionIn: Iterator[ControlStructure] = get().conditionIn - override def _conditionIn = get()._conditionIn + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) - /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. - */ - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaConditionIn + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") - def containsIn: Iterator[Method] = get().containsIn - override def _containsIn = get()._containsIn + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") - /** Traverse to METHOD via CONTAINS IN edge. - */ - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsIn + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") - def dominateIn: Iterator[CfgNode] = get().dominateIn - override def _dominateIn = get()._dominateIn + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") - /** Traverse to BLOCK via DOMINATE IN edge. - */ - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateIn + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) - /** Traverse to CALL via DOMINATE IN edge. - */ - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaDominateIn - - /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. - */ - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateIn - - /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. - */ - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateIn - - /** Traverse to IDENTIFIER via DOMINATE IN edge. - */ - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateIn - - /** Traverse to JUMP_TARGET via DOMINATE IN edge. - */ - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateIn - - /** Traverse to LITERAL via DOMINATE IN edge. - */ - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateIn - - /** Traverse to METHOD_REF via DOMINATE IN edge. - */ - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateIn - - /** Traverse to RETURN via DOMINATE IN edge. - */ - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateIn - - /** Traverse to TYPE_REF via DOMINATE IN edge. - */ - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateIn - - /** Traverse to UNKNOWN via DOMINATE IN edge. - */ - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateIn - - def postDominateIn: Iterator[CfgNode] = get().postDominateIn - override def _postDominateIn = get()._postDominateIn - - /** Traverse to BLOCK via POST_DOMINATE IN edge. - */ - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateIn - - /** Traverse to CALL via POST_DOMINATE IN edge. - */ - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateIn - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. - */ - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateIn - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. - */ - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateIn - - /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. - */ - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateIn - - /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. - */ - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateIn - - /** Traverse to LITERAL via POST_DOMINATE IN edge. - */ - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateIn - - /** Traverse to METHOD_REF via POST_DOMINATE IN edge. - */ - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateIn - - /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. - */ - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaPostDominateIn - - /** Traverse to RETURN via POST_DOMINATE IN edge. - */ - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateIn - - /** Traverse to TYPE_REF via POST_DOMINATE IN edge. - */ - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateIn - - /** Traverse to UNKNOWN via POST_DOMINATE IN edge. - */ - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - JumpTarget.Label + /** AST node type name emitted by parser. */ + val ParserTypeName = flatgraph.SinglePropertyKey[String](kind = 46, name = "PARSER_TYPE_NAME", default = "") } + object PropertyDefaults { + val ArgumentIndex = -1: Int + val Code = "" + val Name = "" + val Order = -1: Int + val ParserTypeName = "" + } +} + +class JumpTarget(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 19.toShort, seq_4762) + with JumpTargetBase + with CfgNode + with StaticType[JumpTargetEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "code" - case 3 => "columnNumber" - case 4 => "lineNumber" - case 5 => "name" - case 6 => "order" - case 7 => "parserTypeName" + case 0 => "argumentIndex" + case 1 => "code" + case 2 => "columnNumber" + case 3 => "lineNumber" + case 4 => "name" + case 5 => "order" + case 6 => "parserTypeName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => code - case 3 => columnNumber - case 4 => lineNumber - case 5 => name - case 6 => order - case 7 => parserTypeName + case 0 => this.argumentIndex + case 1 => this.code + case 2 => this.columnNumber + case 3 => this.lineNumber + case 4 => this.name + case 5 => this.order + case 6 => this.parserTypeName + case _ => null } override def productPrefix = "JumpTarget" - override def productArity = 8 + override def productArity = 7 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[JumpTarget] } -class JumpTargetDb(ref: NodeRef[NodeDb]) - extends NodeDb(ref) - with StoredNode - with AstNode - with CfgNode - with JumpTargetBase { - - override def layoutInformation: NodeLayoutInformation = JumpTarget.layoutInformation - - private var _argumentIndex: Integer = JumpTarget.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _code: String = JumpTarget.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = JumpTarget.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = JumpTarget.PropertyDefaults.Order - def order: scala.Int = _order - private var _parserTypeName: String = JumpTarget.PropertyDefaults.ParserTypeName - def parserTypeName: String = _parserTypeName - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - properties.put("PARSER_TYPE_NAME", parserTypeName) - - properties +object NewJumpTarget { + def apply(): NewJumpTarget = new NewJumpTarget + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) + + object InsertionHelpers { + object NewNodeInserter_JumpTarget_argumentIndex 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[Int]] + 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: NewJumpTarget => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_JumpTarget_code 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: NewJumpTarget => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_JumpTarget_columnNumber 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[Int]] + 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: NewJumpTarget => + generated.columnNumber 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_JumpTarget_lineNumber 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[Int]] + 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: NewJumpTarget => + generated.lineNumber 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_JumpTarget_name 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: NewJumpTarget => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_JumpTarget_order 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[Int]] + 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: NewJumpTarget => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_JumpTarget_parserTypeName 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: NewJumpTarget => + dstCast(offset) = generated.parserTypeName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + } +} + +class NewJumpTarget extends NewNode(19.toShort) with JumpTargetBase with AstNodeNew with CfgNodeNew { + override type StoredNodeType = JumpTarget + override def label: String = "JUMP_TARGET" + + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewJumpTarget.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewJumpTarget.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (!(("") == parserTypeName)) { properties.put("PARSER_TYPE_NAME", parserTypeName) } - - properties + var argumentIndex: Int = -1: Int + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + var parserTypeName: String = "": String + def argumentIndex(value: Int): this.type = { this.argumentIndex = value; this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + def order(value: Int): this.type = { this.order = value; this } + def parserTypeName(value: String): this.type = { this.parserTypeName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 46, 1) } - import overflowdb.traversal._ - def cdgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](0) - override def _cdgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = cdgOut.collectAll[Block] - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = cdgOut.collectAll[Call] - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = cdgOut.collectAll[ControlStructure] - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = cdgOut.collectAll[FieldIdentifier] - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = cdgOut.collectAll[Identifier] - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = cdgOut.collectAll[JumpTarget] - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = cdgOut.collectAll[Literal] - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = cdgOut.collectAll[MethodRef] - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = cdgOut.collectAll[MethodReturn] - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = cdgOut.collectAll[Return] - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = cdgOut.collectAll[TypeRef] - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = cdgOut.collectAll[Unknown] - - def cfgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](1) - override def _cfgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = cfgOut.collectAll[CfgNode] - - def dominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](2) - override def _dominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = dominateOut.collectAll[Block] - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = dominateOut.collectAll[Call] - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - dominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateOut.collectAll[FieldIdentifier] - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = dominateOut.collectAll[Identifier] - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = dominateOut.collectAll[JumpTarget] - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = dominateOut.collectAll[Literal] - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = dominateOut.collectAll[MethodRef] - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = dominateOut.collectAll[Return] - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = dominateOut.collectAll[TypeRef] - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = dominateOut.collectAll[Unknown] - - def postDominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](3) - override def _postDominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = postDominateOut.collectAll[Block] - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = postDominateOut.collectAll[Call] - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - postDominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateOut.collectAll[FieldIdentifier] - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = postDominateOut.collectAll[Identifier] - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = postDominateOut.collectAll[JumpTarget] - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = postDominateOut.collectAll[Literal] - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = postDominateOut.collectAll[MethodRef] - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = postDominateOut.collectAll[Return] - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = postDominateOut.collectAll[TypeRef] - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = postDominateOut.collectAll[Unknown] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](4) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def argumentIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](5) - override def _argumentIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _callViaArgumentIn: overflowdb.traversal.Traversal[Call] = argumentIn.collectAll[Call] - def _returnViaArgumentIn: overflowdb.traversal.Traversal[Return] = argumentIn.collectAll[Return] - - def astIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](6) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = astIn.collectAll[Block] - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = astIn.collectAll[ControlStructure] - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = astIn.collectAll[Return] - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - - def cdgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](7) - override def _cdgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = cdgIn.collectAll[Block] - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = cdgIn.collectAll[Call] - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = cdgIn.collectAll[ControlStructure] - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = cdgIn.collectAll[FieldIdentifier] - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = cdgIn.collectAll[Identifier] - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = cdgIn.collectAll[JumpTarget] - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = cdgIn.collectAll[Literal] - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = cdgIn.collectAll[MethodRef] - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = cdgIn.collectAll[TypeRef] - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = cdgIn.collectAll[Unknown] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](8) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - - def conditionIn: Iterator[ControlStructure] = createAdjacentNodeScalaIteratorByOffSet[ControlStructure](9) - override def _conditionIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - conditionIn.collectAll[ControlStructure] - - def containsIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](10) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](10) - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = containsIn.collectAll[Method] - - def dominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](11) - override def _dominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](11) - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = dominateIn.collectAll[Block] - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = dominateIn.collectAll[Call] - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - dominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateIn.collectAll[FieldIdentifier] - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = dominateIn.collectAll[Identifier] - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = dominateIn.collectAll[JumpTarget] - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = dominateIn.collectAll[Literal] - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = dominateIn.collectAll[MethodRef] - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = dominateIn.collectAll[Return] - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = dominateIn.collectAll[TypeRef] - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = dominateIn.collectAll[Unknown] - - def postDominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](12) - override def _postDominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = postDominateIn.collectAll[Block] - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = postDominateIn.collectAll[Call] - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - postDominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateIn.collectAll[FieldIdentifier] - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = postDominateIn.collectAll[Identifier] - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = postDominateIn.collectAll[JumpTarget] - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = postDominateIn.collectAll[Literal] - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = postDominateIn.collectAll[MethodRef] - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - postDominateIn.collectAll[MethodReturn] - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = postDominateIn.collectAll[Return] - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = postDominateIn.collectAll[TypeRef] - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = postDominateIn.collectAll[Unknown] - - override def label: String = { - JumpTarget.Label + override def copy: this.type = { + val newInstance = new NewJumpTarget + newInstance.argumentIndex = this.argumentIndex + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.parserTypeName = this.parserTypeName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "code" - case 3 => "columnNumber" - case 4 => "lineNumber" - case 5 => "name" - case 6 => "order" - case 7 => "parserTypeName" + case 0 => "argumentIndex" + case 1 => "code" + case 2 => "columnNumber" + case 3 => "lineNumber" + case 4 => "name" + case 5 => "order" + case 6 => "parserTypeName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => code - case 3 => columnNumber - case 4 => lineNumber - case 5 => name - case 6 => order - case 7 => parserTypeName - } - - override def productPrefix = "JumpTarget" - override def productArity = 8 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[JumpTargetDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - case "PARSER_TYPE_NAME" => this._parserTypeName - + case 0 => this.argumentIndex + case 1 => this.code + case 2 => this.columnNumber + case 3 => this.lineNumber + case 4 => this.name + case 5 => this.order + case 6 => this.parserTypeName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "PARSER_TYPE_NAME" => this._parserTypeName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewJumpTarget].argumentIndex - this._code = newNode.asInstanceOf[NewJumpTarget].code - this._columnNumber = newNode.asInstanceOf[NewJumpTarget].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewJumpTarget].lineNumber match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewJumpTarget].name - this._order = newNode.asInstanceOf[NewJumpTarget].order - this._parserTypeName = newNode.asInstanceOf[NewJumpTarget].parserTypeName - - } + override def productPrefix = "NewJumpTarget" + override def productArity = 7 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewJumpTarget] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/KeyValuePair.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/KeyValuePair.scala index 292de365a..de213d207 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/KeyValuePair.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/KeyValuePair.scala @@ -1,187 +1,175 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object KeyValuePair { - def apply(graph: Graph, id: Long) = new KeyValuePair(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait KeyValuePairEMT extends AnyRef with HasKeyEMT with HasValueEMT - val Label = "KEY_VALUE_PAIR" +trait KeyValuePairBase extends AbstractNode with StaticType[KeyValuePairEMT] { - object PropertyNames { - val Key = "KEY" - val Value = "VALUE" - val all: Set[String] = Set(Key, Value) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.key) res.put("KEY", this.key) + if (("": String) != this.value) res.put("VALUE", this.value) + res } +} - object Properties { - val Key = new overflowdb.PropertyKey[String]("KEY") - val Value = new overflowdb.PropertyKey[String]("VALUE") +object KeyValuePair { + val Label = "KEY_VALUE_PAIR" + object PropertyNames { - } + /** This property denotes a key of a key-value pair. */ + val Key = "KEY" - object PropertyDefaults { - val Key = "" - val Value = "" + /** This property denotes a string value as used in a key-value pair. */ + val Value = "VALUE" } + object Properties { - val layoutInformation = new NodeLayoutInformation(Label, PropertyNames.allAsJava, List().asJava, List().asJava) + /** This property denotes a key of a key-value pair. */ + val Key = flatgraph.SinglePropertyKey[String](kind = 32, name = "KEY", default = "") - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array() + /** This property denotes a string value as used in a key-value pair. */ + val Value = flatgraph.SinglePropertyKey[String](kind = 53, name = "VALUE", default = "") } - - val factory = new NodeFactory[KeyValuePairDb] { - override val forLabel = KeyValuePair.Label - - override def createNode(ref: NodeRef[KeyValuePairDb]) = - new KeyValuePairDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = KeyValuePair(graph, id) + object PropertyDefaults { + val Key = "" + val Value = "" } } -trait KeyValuePairBase extends AbstractNode { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def key: String - def value: String - -} - -class KeyValuePair(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[KeyValuePairDb](graph_4762, id_4762) +class KeyValuePair(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 20.toShort, seq_4762) with KeyValuePairBase - with StoredNode { - override def key: String = get().key - override def value: String = get().value - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "KEY" => KeyValuePair.PropertyDefaults.Key - case "VALUE" => KeyValuePair.PropertyDefaults.Value - case _ => super.propertyDefaultValue(propertyKey) - } - } - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - KeyValuePair.Label - } + with StaticType[KeyValuePairEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "key" - case 2 => "value" + case 0 => "key" + case 1 => "value" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => key - case 2 => value + case 0 => this.key + case 1 => this.value + case _ => null } override def productPrefix = "KeyValuePair" - override def productArity = 3 -} - -class KeyValuePairDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with KeyValuePairBase { - - override def layoutInformation: NodeLayoutInformation = KeyValuePair.layoutInformation + override def productArity = 2 - private var _key: String = KeyValuePair.PropertyDefaults.Key - def key: String = _key - private var _value: String = KeyValuePair.PropertyDefaults.Value - def value: String = _value - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("KEY", key) - properties.put("VALUE", value) + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[KeyValuePair] +} - properties +object NewKeyValuePair { + def apply(): NewKeyValuePair = new NewKeyValuePair + private val outNeighbors: Map[String, Set[String]] = Map() + private val inNeighbors: Map[String, Set[String]] = Map() + + object InsertionHelpers { + object NewNodeInserter_KeyValuePair_key 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: NewKeyValuePair => + dstCast(offset) = generated.key + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_KeyValuePair_value 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: NewKeyValuePair => + dstCast(offset) = generated.value + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == key)) { properties.put("KEY", key) } - if (!(("") == value)) { properties.put("VALUE", value) } +class NewKeyValuePair extends NewNode(20.toShort) with KeyValuePairBase { + override type StoredNodeType = KeyValuePair + override def label: String = "KEY_VALUE_PAIR" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewKeyValuePair.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewKeyValuePair.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ + var key: String = "": String + var value: String = "": String + def key(value: String): this.type = { this.key = value; this } + def value(value: String): this.type = { this.value = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 32, 1) + interface.countProperty(this, 53, 1) + } - override def label: String = { - KeyValuePair.Label + override def copy: this.type = { + val newInstance = new NewKeyValuePair + newInstance.key = this.key + newInstance.value = this.value + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "key" - case 2 => "value" + case 0 => "key" + case 1 => "value" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => key - case 2 => value - } - - override def productPrefix = "KeyValuePair" - override def productArity = 3 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[KeyValuePairDb] - - override def property(key: String): Any = { - key match { - case "KEY" => this._key - case "VALUE" => this._value - + case 0 => this.key + case 1 => this.value case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "KEY" => this._key = value.asInstanceOf[String] - case "VALUE" => this._value = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._key = newNode.asInstanceOf[NewKeyValuePair].key - this._value = newNode.asInstanceOf[NewKeyValuePair].value - - } + override def productPrefix = "NewKeyValuePair" + override def productArity = 2 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewKeyValuePair] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Literal.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Literal.scala index f2a73df5b..d306d0e4b 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Literal.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Literal.scala @@ -1,1057 +1,1751 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait LiteralEMT + extends AnyRef + with ExpressionEMT + with HasDynamicTypeHintFullNameEMT + with HasPossibleTypesEMT + with HasTypeFullNameEMT + +trait LiteralBase extends AbstractNode with ExpressionBase with StaticType[LiteralEMT] { -object Literal { - def apply(graph: Graph, id: Long) = new Literal(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + val tmpDynamicTypeHintFullName = this.dynamicTypeHintFullName; + if (tmpDynamicTypeHintFullName.nonEmpty) res.put("DYNAMIC_TYPE_HINT_FULL_NAME", tmpDynamicTypeHintFullName) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + val tmpPossibleTypes = this.possibleTypes; + if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) + if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) + res + } +} +object Literal { val Label = "LITERAL" - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" + + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ val DynamicTypeHintFullName = "DYNAMIC_TYPE_HINT_FULL_NAME" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val PossibleTypes = "POSSIBLE_TYPES" - val TypeFullName = "TYPE_FULL_NAME" - val all: Set[String] = Set( - ArgumentIndex, - ArgumentName, - Code, - ColumnNumber, - DynamicTypeHintFullName, - LineNumber, - Order, - PossibleTypes, - TypeFullName - ) - val allAsJava: java.util.Set[String] = all.asJava - } + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = "POSSIBLE_TYPES" + + /** 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 = "TYPE_FULL_NAME" + } object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val DynamicTypeHintFullName = new overflowdb.PropertyKey[IndexedSeq[String]]("DYNAMIC_TYPE_HINT_FULL_NAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val PossibleTypes = new overflowdb.PropertyKey[IndexedSeq[String]]("POSSIBLE_TYPES") - val TypeFullName = new overflowdb.PropertyKey[String]("TYPE_FULL_NAME") + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ + val DynamicTypeHintFullName = flatgraph.MultiPropertyKey[String](kind = 18, name = "DYNAMIC_TYPE_HINT_FULL_NAME") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = flatgraph.MultiPropertyKey[String](kind = 47, name = "POSSIBLE_TYPES") + + /** 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 = 52, name = "TYPE_FULL_NAME", default = "") } - object PropertyDefaults { val ArgumentIndex = -1: Int val Code = "" val Order = -1: Int val TypeFullName = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Condition.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Receiver.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = - Array("ARGUMENT", "AST", "CDG", "CFG", "DOMINATE", "EVAL_TYPE", "POST_DOMINATE", "REACHING_DEF", "TAGGED_BY") - val In: Array[String] = Array( - "ARGUMENT", - "AST", - "CDG", - "CFG", - "CONDITION", - "CONTAINS", - "DOMINATE", - "POST_DOMINATE", - "REACHING_DEF", - "RECEIVER" - ) - } - - val factory = new NodeFactory[LiteralDb] { - override val forLabel = Literal.Label - - override def createNode(ref: NodeRef[LiteralDb]) = - new LiteralDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = Literal(graph, id) - } -} - -trait LiteralBase extends AbstractNode with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def dynamicTypeHintFullName: IndexedSeq[String] - def lineNumber: Option[scala.Int] - def order: scala.Int - def possibleTypes: IndexedSeq[String] - def typeFullName: String - } -class Literal(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[LiteralDb](graph_4762, id_4762) +class Literal(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 21.toShort, seq_4762) with LiteralBase - with StoredNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def dynamicTypeHintFullName: IndexedSeq[String] = get().dynamicTypeHintFullName - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def possibleTypes: IndexedSeq[String] = get().possibleTypes - override def typeFullName: String = get().typeFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => Literal.PropertyDefaults.ArgumentIndex - case "CODE" => Literal.PropertyDefaults.Code - case "ORDER" => Literal.PropertyDefaults.Order - case "TYPE_FULL_NAME" => Literal.PropertyDefaults.TypeFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def argumentOut: Iterator[TemplateDom] = get().argumentOut - override def _argumentOut = get()._argumentOut - - def astOut: Iterator[Annotation] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to ANNOTATION via AST OUT edge. - */ - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = get()._annotationViaAstOut - - def cdgOut: Iterator[CfgNode] = get().cdgOut - override def _cdgOut = get()._cdgOut - - /** Traverse to BLOCK via CDG OUT edge. - */ - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgOut - - /** Traverse to CALL via CDG OUT edge. - */ - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = get()._callViaCdgOut - - /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. - */ - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgOut - - /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. - */ - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgOut - - /** Traverse to IDENTIFIER via CDG OUT edge. - */ - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgOut - - /** Traverse to JUMP_TARGET via CDG OUT edge. - */ - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgOut - - /** Traverse to LITERAL via CDG OUT edge. - */ - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgOut - - /** Traverse to METHOD_REF via CDG OUT edge. - */ - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgOut - - /** Traverse to METHOD_RETURN via CDG OUT edge. - */ - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaCdgOut - - /** Traverse to RETURN via CDG OUT edge. - */ - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = get()._returnViaCdgOut - - /** Traverse to TYPE_REF via CDG OUT edge. - */ - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgOut - - /** Traverse to UNKNOWN via CDG OUT edge. - */ - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgOut - - def cfgOut: Iterator[CfgNode] = get().cfgOut - override def _cfgOut = get()._cfgOut - - /** Traverse to CFG_NODE via CFG OUT edge. - */ - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = get()._cfgNodeViaCfgOut - - def dominateOut: Iterator[CfgNode] = get().dominateOut - override def _dominateOut = get()._dominateOut - - /** Traverse to BLOCK via DOMINATE OUT edge. - */ - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateOut - - /** Traverse to CALL via DOMINATE OUT edge. - */ - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaDominateOut - - /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. - */ - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateOut - - /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. - */ - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateOut - - /** Traverse to IDENTIFIER via DOMINATE OUT edge. - */ - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateOut - - /** Traverse to JUMP_TARGET via DOMINATE OUT edge. - */ - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateOut - - /** Traverse to LITERAL via DOMINATE OUT edge. - */ - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateOut - - /** Traverse to METHOD_REF via DOMINATE OUT edge. - */ - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateOut - - /** Traverse to METHOD_RETURN via DOMINATE OUT edge. - */ - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaDominateOut - - /** Traverse to RETURN via DOMINATE OUT edge. - */ - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateOut - - /** Traverse to TYPE_REF via DOMINATE OUT edge. - */ - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateOut - - /** Traverse to UNKNOWN via DOMINATE OUT edge. - */ - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateOut - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** Traverse to TYPE via EVAL_TYPE OUT edge. - */ - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = get()._typeViaEvalTypeOut - - def postDominateOut: Iterator[CfgNode] = get().postDominateOut - override def _postDominateOut = get()._postDominateOut - - /** Traverse to BLOCK via POST_DOMINATE OUT edge. - */ - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateOut - - /** Traverse to CALL via POST_DOMINATE OUT edge. - */ - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateOut - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. - */ - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateOut - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateOut - - /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateOut - - /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. - */ - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateOut - - /** Traverse to LITERAL via POST_DOMINATE OUT edge. - */ - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateOut - - /** Traverse to METHOD via POST_DOMINATE OUT edge. - */ - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = get()._methodViaPostDominateOut - - /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. - */ - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateOut - - /** Traverse to RETURN via POST_DOMINATE OUT edge. - */ - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateOut - - /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. - */ - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateOut - - /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. - */ - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateOut - - def reachingDefOut: Iterator[CfgNode] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to CALL via REACHING_DEF OUT edge. - */ - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefOut - - /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. - */ - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefOut - - /** Traverse to LITERAL via REACHING_DEF OUT edge. - */ - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefOut - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. - */ - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefOut - - /** Traverse to METHOD_REF via REACHING_DEF OUT edge. - */ - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefOut - - /** Traverse to RETURN via REACHING_DEF OUT edge. - */ - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefOut - - /** Traverse to TYPE_REF via REACHING_DEF OUT edge. - */ - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def argumentIn: Iterator[Expression] = get().argumentIn - override def _argumentIn = get()._argumentIn - - /** Traverse to CALL via ARGUMENT IN edge. - */ - def _callViaArgumentIn: Option[Call] = get()._callViaArgumentIn - - /** Traverse to RETURN via ARGUMENT IN edge. - */ - def _returnViaArgumentIn: Option[Return] = get()._returnViaArgumentIn - - def astIn: Iterator[Expression] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to ARRAY_INITIALIZER via AST IN edge. - */ - def _arrayInitializerViaAstIn: overflowdb.traversal.Traversal[ArrayInitializer] = get()._arrayInitializerViaAstIn - - /** Traverse to BLOCK via AST IN edge. - */ - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = get()._blockViaAstIn - - /** Traverse to CALL via AST IN edge. - */ - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = get()._callViaAstIn - - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: ControlStructure = get()._controlStructureViaAstIn - - /** Traverse to RETURN via AST IN edge. - */ - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = get()._returnViaAstIn - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - def cdgIn: Iterator[CfgNode] = get().cdgIn - override def _cdgIn = get()._cdgIn - - /** Traverse to BLOCK via CDG IN edge. - */ - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgIn - - /** Traverse to CALL via CDG IN edge. - */ - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = get()._callViaCdgIn - - /** Traverse to CONTROL_STRUCTURE via CDG IN edge. - */ - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgIn - - /** Traverse to FIELD_IDENTIFIER via CDG IN edge. - */ - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgIn - - /** Traverse to IDENTIFIER via CDG IN edge. - */ - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgIn - - /** Traverse to JUMP_TARGET via CDG IN edge. - */ - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgIn - - /** Traverse to LITERAL via CDG IN edge. - */ - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgIn - - /** Traverse to METHOD_REF via CDG IN edge. - */ - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgIn - - /** Traverse to TYPE_REF via CDG IN edge. - */ - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgIn - - /** Traverse to UNKNOWN via CDG IN edge. - */ - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def conditionIn: Iterator[ControlStructure] = get().conditionIn - override def _conditionIn = get()._conditionIn - - /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. - */ - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaConditionIn - - def containsIn: Iterator[Method] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to METHOD via CONTAINS IN edge. - */ - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsIn - - def dominateIn: Iterator[CfgNode] = get().dominateIn - override def _dominateIn = get()._dominateIn - - /** Traverse to BLOCK via DOMINATE IN edge. - */ - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateIn - - /** Traverse to CALL via DOMINATE IN edge. - */ - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaDominateIn - - /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. - */ - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateIn - - /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. - */ - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateIn - - /** Traverse to IDENTIFIER via DOMINATE IN edge. - */ - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateIn - - /** Traverse to JUMP_TARGET via DOMINATE IN edge. - */ - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateIn - - /** Traverse to LITERAL via DOMINATE IN edge. - */ - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateIn - - /** Traverse to METHOD via DOMINATE IN edge. - */ - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = get()._methodViaDominateIn - - /** Traverse to METHOD_REF via DOMINATE IN edge. - */ - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateIn - - /** Traverse to RETURN via DOMINATE IN edge. - */ - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateIn - - /** Traverse to TYPE_REF via DOMINATE IN edge. - */ - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateIn - - /** Traverse to UNKNOWN via DOMINATE IN edge. - */ - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateIn - - def postDominateIn: Iterator[CfgNode] = get().postDominateIn - override def _postDominateIn = get()._postDominateIn - - /** Traverse to BLOCK via POST_DOMINATE IN edge. - */ - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateIn - - /** Traverse to CALL via POST_DOMINATE IN edge. - */ - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateIn - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. - */ - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateIn - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. - */ - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateIn - - /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. - */ - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateIn - - /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. - */ - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateIn - - /** Traverse to LITERAL via POST_DOMINATE IN edge. - */ - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateIn - - /** Traverse to METHOD_REF via POST_DOMINATE IN edge. - */ - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateIn - - /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. - */ - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaPostDominateIn - - /** Traverse to RETURN via POST_DOMINATE IN edge. - */ - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateIn - - /** Traverse to TYPE_REF via POST_DOMINATE IN edge. - */ - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateIn - - /** Traverse to UNKNOWN via POST_DOMINATE IN edge. - */ - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateIn - - def reachingDefIn: Iterator[CfgNode] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - /** Traverse to BLOCK via REACHING_DEF IN edge. - */ - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = get()._blockViaReachingDefIn - - /** Traverse to CALL via REACHING_DEF IN edge. - */ - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefIn - - /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. - */ - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaReachingDefIn - - /** Traverse to IDENTIFIER via REACHING_DEF IN edge. - */ - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefIn - - /** Traverse to LITERAL via REACHING_DEF IN edge. - */ - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefIn - - /** Traverse to METHOD via REACHING_DEF IN edge. - */ - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = get()._methodViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. - */ - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - get()._methodParameterInViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. - */ - def _methodParameterOutViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefIn - - /** Traverse to METHOD_REF via REACHING_DEF IN edge. - */ - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefIn - - /** Traverse to TYPE_REF via REACHING_DEF IN edge. - */ - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefIn - - /** Traverse to UNKNOWN via REACHING_DEF IN edge. - */ - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaReachingDefIn - - def receiverIn: Iterator[Call] = get().receiverIn - override def _receiverIn = get()._receiverIn - - /** Traverse to CALL via RECEIVER IN edge. - */ - def _callViaReceiverIn: Option[Call] = get()._callViaReceiverIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Literal.Label - } + with Expression + with StaticType[LiteralEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "lineNumber" - case 7 => "order" - case 8 => "possibleTypes" - case 9 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dynamicTypeHintFullName" + case 5 => "lineNumber" + case 6 => "order" + case 7 => "possibleTypes" + case 8 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => dynamicTypeHintFullName - case 6 => lineNumber - case 7 => order - case 8 => possibleTypes - case 9 => typeFullName + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dynamicTypeHintFullName + case 5 => this.lineNumber + case 6 => this.order + case 7 => this.possibleTypes + case 8 => this.typeFullName + case _ => null } override def productPrefix = "Literal" - override def productArity = 10 -} - -class LiteralDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with Expression with LiteralBase { + override def productArity = 9 - override def layoutInformation: NodeLayoutInformation = Literal.layoutInformation + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Literal] +} - private var _argumentIndex: Integer = Literal.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = Literal.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def dynamicTypeHintFullName: IndexedSeq[String] = _dynamicTypeHintFullName - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = Literal.PropertyDefaults.Order - def order: scala.Int = _order - private var _possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def possibleTypes: IndexedSeq[String] = _possibleTypes - private var _typeFullName: String = Literal.PropertyDefaults.TypeFullName - def typeFullName: String = _typeFullName +object NewLiteral { + def apply(): NewLiteral = new NewLiteral + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object InsertionHelpers { + object NewNodeInserter_Literal_argumentIndex 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[Int]] + 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: NewLiteral => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - properties.put("TYPE_FULL_NAME", typeFullName) - - properties - } - - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object NewNodeInserter_Literal_argumentName 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: NewLiteral => + generated.argumentName 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_Literal_code 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: NewLiteral => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Literal_columnNumber 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[Int]] + 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: NewLiteral => + generated.columnNumber 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_Literal_dynamicTypeHintFullName 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: NewLiteral => + for (item <- generated.dynamicTypeHintFullName) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Literal_lineNumber 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[Int]] + 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: NewLiteral => + generated.lineNumber 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_Literal_order 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[Int]] + 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: NewLiteral => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Literal_possibleTypes 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: NewLiteral => + for (item <- generated.possibleTypes) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Literal_typeFullName 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: NewLiteral => + dstCast(offset) = generated.typeFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - if (!(("") == typeFullName)) { properties.put("TYPE_FULL_NAME", typeFullName) } - - properties } +} - import overflowdb.traversal._ - def argumentOut: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - - def astOut: Iterator[Annotation] = createAdjacentNodeScalaIteratorByOffSet[Annotation](1) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = astOut.collectAll[Annotation] - - def cdgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](2) - override def _cdgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = cdgOut.collectAll[Block] - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = cdgOut.collectAll[Call] - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = cdgOut.collectAll[ControlStructure] - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = cdgOut.collectAll[FieldIdentifier] - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = cdgOut.collectAll[Identifier] - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = cdgOut.collectAll[JumpTarget] - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = cdgOut.collectAll[Literal] - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = cdgOut.collectAll[MethodRef] - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = cdgOut.collectAll[MethodReturn] - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = cdgOut.collectAll[Return] - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = cdgOut.collectAll[TypeRef] - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = cdgOut.collectAll[Unknown] - - def cfgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](3) - override def _cfgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = cfgOut.collectAll[CfgNode] - - def dominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _dominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = dominateOut.collectAll[Block] - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = dominateOut.collectAll[Call] - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - dominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateOut.collectAll[FieldIdentifier] - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = dominateOut.collectAll[Identifier] - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = dominateOut.collectAll[JumpTarget] - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = dominateOut.collectAll[Literal] - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = dominateOut.collectAll[MethodRef] - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = dominateOut.collectAll[MethodReturn] - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = dominateOut.collectAll[Return] - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = dominateOut.collectAll[TypeRef] - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = dominateOut.collectAll[Unknown] - - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](5) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def postDominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](6) - override def _postDominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = postDominateOut.collectAll[Block] - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = postDominateOut.collectAll[Call] - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - postDominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateOut.collectAll[FieldIdentifier] - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = postDominateOut.collectAll[Identifier] - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = postDominateOut.collectAll[JumpTarget] - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = postDominateOut.collectAll[Literal] - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = postDominateOut.collectAll[Method] - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = postDominateOut.collectAll[MethodRef] - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = postDominateOut.collectAll[Return] - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = postDominateOut.collectAll[TypeRef] - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = postDominateOut.collectAll[Unknown] - - def reachingDefOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](7) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = reachingDefOut.collectAll[Call] - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = reachingDefOut.collectAll[Identifier] - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = reachingDefOut.collectAll[Literal] - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefOut.collectAll[MethodParameterOut] - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = reachingDefOut.collectAll[MethodRef] - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = reachingDefOut.collectAll[Return] - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = reachingDefOut.collectAll[TypeRef] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](8) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def argumentIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](9) - override def _argumentIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - def _callViaArgumentIn: Option[Call] = argumentIn.collectAll[Call].nextOption() - def _returnViaArgumentIn: Option[Return] = argumentIn.collectAll[Return].nextOption() +class NewLiteral extends NewNode(21.toShort) with LiteralBase with ExpressionNew { + override type StoredNodeType = Literal + override def label: String = "LITERAL" - def astIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](10) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](10) - def _arrayInitializerViaAstIn: overflowdb.traversal.Traversal[ArrayInitializer] = astIn.collectAll[ArrayInitializer] - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = astIn.collectAll[Block] - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = astIn.collectAll[Call] - def _controlStructureViaAstIn: ControlStructure = try { astIn.collectAll[ControlStructure].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent CONTROL_STRUCTURE is mandatory, but not defined for this LITERAL node with id=" + id, - e - ) + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewLiteral.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewLiteral.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = astIn.collectAll[Return] - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - - def cdgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](11) - override def _cdgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](11) - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = cdgIn.collectAll[Block] - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = cdgIn.collectAll[Call] - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = cdgIn.collectAll[ControlStructure] - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = cdgIn.collectAll[FieldIdentifier] - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = cdgIn.collectAll[Identifier] - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = cdgIn.collectAll[JumpTarget] - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = cdgIn.collectAll[Literal] - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = cdgIn.collectAll[MethodRef] - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = cdgIn.collectAll[TypeRef] - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = cdgIn.collectAll[Unknown] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](12) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - - def conditionIn: Iterator[ControlStructure] = createAdjacentNodeScalaIteratorByOffSet[ControlStructure](13) - override def _conditionIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](13) - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - conditionIn.collectAll[ControlStructure] - - def containsIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](14) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](14) - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = containsIn.collectAll[Method] - - def dominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](15) - override def _dominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](15) - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = dominateIn.collectAll[Block] - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = dominateIn.collectAll[Call] - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - dominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateIn.collectAll[FieldIdentifier] - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = dominateIn.collectAll[Identifier] - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = dominateIn.collectAll[JumpTarget] - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = dominateIn.collectAll[Literal] - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = dominateIn.collectAll[Method] - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = dominateIn.collectAll[MethodRef] - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = dominateIn.collectAll[Return] - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = dominateIn.collectAll[TypeRef] - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = dominateIn.collectAll[Unknown] - - def postDominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](16) - override def _postDominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](16) - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = postDominateIn.collectAll[Block] - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = postDominateIn.collectAll[Call] - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - postDominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateIn.collectAll[FieldIdentifier] - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = postDominateIn.collectAll[Identifier] - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = postDominateIn.collectAll[JumpTarget] - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = postDominateIn.collectAll[Literal] - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = postDominateIn.collectAll[MethodRef] - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - postDominateIn.collectAll[MethodReturn] - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = postDominateIn.collectAll[Return] - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = postDominateIn.collectAll[TypeRef] - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = postDominateIn.collectAll[Unknown] - - def reachingDefIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](17) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](17) - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = reachingDefIn.collectAll[Block] - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = reachingDefIn.collectAll[Call] - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - reachingDefIn.collectAll[ControlStructure] - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = reachingDefIn.collectAll[Identifier] - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = reachingDefIn.collectAll[Literal] - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = reachingDefIn.collectAll[Method] - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - reachingDefIn.collectAll[MethodParameterIn] - def _methodParameterOutViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefIn.collectAll[MethodParameterOut] - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = reachingDefIn.collectAll[MethodRef] - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = reachingDefIn.collectAll[TypeRef] - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = reachingDefIn.collectAll[Unknown] - def receiverIn: Iterator[Call] = createAdjacentNodeScalaIteratorByOffSet[Call](18) - override def _receiverIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](18) - def _callViaReceiverIn: Option[Call] = receiverIn.collectAll[Call].nextOption() + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var dynamicTypeHintFullName: IndexedSeq[String] = ArraySeq.empty + var lineNumber: Option[Int] = None + var order: Int = -1: Int + var possibleTypes: IndexedSeq[String] = ArraySeq.empty + 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 } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { + this.dynamicTypeHintFullName = value.iterator.to(ArraySeq); this + } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + 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 typeFullName(value: String): this.type = { this.typeFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 18, dynamicTypeHintFullName.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 47, possibleTypes.size) + interface.countProperty(this, 52, 1) + } - override def label: String = { - Literal.Label + override def copy: this.type = { + val newInstance = new NewLiteral + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.possibleTypes = this.possibleTypes + newInstance.typeFullName = this.typeFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "lineNumber" - case 7 => "order" - case 8 => "possibleTypes" - case 9 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dynamicTypeHintFullName" + case 5 => "lineNumber" + case 6 => "order" + case 7 => "possibleTypes" + case 8 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => dynamicTypeHintFullName - case 6 => lineNumber - case 7 => order - case 8 => possibleTypes - case 9 => typeFullName - } - - override def productPrefix = "Literal" - override def productArity = 10 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[LiteralDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "DYNAMIC_TYPE_HINT_FULL_NAME" => this._dynamicTypeHintFullName - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - case "POSSIBLE_TYPES" => this._possibleTypes - case "TYPE_FULL_NAME" => this._typeFullName - + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dynamicTypeHintFullName + case 5 => this.lineNumber + case 6 => this.order + case 7 => this.possibleTypes + case 8 => this.typeFullName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "DYNAMIC_TYPE_HINT_FULL_NAME" => - this._dynamicTypeHintFullName = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "POSSIBLE_TYPES" => - this._possibleTypes = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "TYPE_FULL_NAME" => this._typeFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewLiteral].argumentIndex - this._argumentName = newNode.asInstanceOf[NewLiteral].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewLiteral].code - this._columnNumber = newNode.asInstanceOf[NewLiteral].columnNumber match { - case None => null; case Some(value) => value - } - this._dynamicTypeHintFullName = - if (newNode.asInstanceOf[NewLiteral].dynamicTypeHintFullName != null) - newNode.asInstanceOf[NewLiteral].dynamicTypeHintFullName - else collection.immutable.ArraySeq.empty - this._lineNumber = newNode.asInstanceOf[NewLiteral].lineNumber match { - case None => null; case Some(value) => value - } - this._order = newNode.asInstanceOf[NewLiteral].order - this._possibleTypes = - if (newNode.asInstanceOf[NewLiteral].possibleTypes != null) newNode.asInstanceOf[NewLiteral].possibleTypes - else collection.immutable.ArraySeq.empty - this._typeFullName = newNode.asInstanceOf[NewLiteral].typeFullName - - } + override def productPrefix = "NewLiteral" + override def productArity = 9 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewLiteral] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Local.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Local.scala index d79f9ec6c..fdb97232e 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Local.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Local.scala @@ -1,444 +1,1742 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Local { - def apply(graph: Graph, id: Long) = new Local(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait LocalEMT + extends AnyRef + with AstNodeEMT + with DeclarationEMT + with HasClosureBindingIdEMT + with HasDynamicTypeHintFullNameEMT + with HasPossibleTypesEMT + with HasTypeFullNameEMT - val Label = "LOCAL" +trait LocalBase extends AbstractNode with AstNodeBase with DeclarationBase with StaticType[LocalEMT] { + + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + this.closureBindingId.foreach { p => res.put("CLOSURE_BINDING_ID", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + val tmpDynamicTypeHintFullName = this.dynamicTypeHintFullName; + if (tmpDynamicTypeHintFullName.nonEmpty) res.put("DYNAMIC_TYPE_HINT_FULL_NAME", tmpDynamicTypeHintFullName) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + val tmpPossibleTypes = this.possibleTypes; + if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) + if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) + res + } +} +object Local { + val Label = "LOCAL" object PropertyNames { - val ClosureBindingId = "CLOSURE_BINDING_ID" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" + + /** Identifier which uniquely describes a CLOSURE_BINDING. This property is used to match captured LOCAL nodes with + * the corresponding CLOSURE_BINDING nodes + */ + val ClosureBindingId = "CLOSURE_BINDING_ID" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ val DynamicTypeHintFullName = "DYNAMIC_TYPE_HINT_FULL_NAME" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val PossibleTypes = "POSSIBLE_TYPES" - val TypeFullName = "TYPE_FULL_NAME" - val all: Set[String] = Set( - ClosureBindingId, - Code, - ColumnNumber, - DynamicTypeHintFullName, - LineNumber, - Name, - Order, - PossibleTypes, - TypeFullName - ) - val allAsJava: java.util.Set[String] = all.asJava - } - object Properties { - val ClosureBindingId = new overflowdb.PropertyKey[String]("CLOSURE_BINDING_ID") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val DynamicTypeHintFullName = new overflowdb.PropertyKey[IndexedSeq[String]]("DYNAMIC_TYPE_HINT_FULL_NAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val PossibleTypes = new overflowdb.PropertyKey[IndexedSeq[String]]("POSSIBLE_TYPES") - val TypeFullName = new overflowdb.PropertyKey[String]("TYPE_FULL_NAME") + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - } + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - object PropertyDefaults { - val Code = "" - val Name = "" - val Order = -1: Int - val TypeFullName = "" - } + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.CapturedBy.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation - ).asJava - ) + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = "POSSIBLE_TYPES" - object Edges { - val Out: Array[String] = Array("CAPTURED_BY", "EVAL_TYPE", "TAGGED_BY") - val In: Array[String] = Array("AST", "REF") + /** 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 = "TYPE_FULL_NAME" } + object Properties { - val factory = new NodeFactory[LocalDb] { - override val forLabel = Local.Label + /** Identifier which uniquely describes a CLOSURE_BINDING. This property is used to match captured LOCAL nodes with + * the corresponding CLOSURE_BINDING nodes + */ + val ClosureBindingId = flatgraph.OptionalPropertyKey[String](kind = 8, name = "CLOSURE_BINDING_ID") - override def createNode(ref: NodeRef[LocalDb]) = - new LocalDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") - override def createNodeRef(graph: Graph, id: Long) = Local(graph, id) - } -} + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ + val DynamicTypeHintFullName = flatgraph.MultiPropertyKey[String](kind = 18, name = "DYNAMIC_TYPE_HINT_FULL_NAME") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") -trait LocalBase extends AbstractNode with AstNodeBase with DeclarationBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) - def closureBindingId: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def dynamicTypeHintFullName: IndexedSeq[String] - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int - def possibleTypes: IndexedSeq[String] - def typeFullName: String + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = flatgraph.MultiPropertyKey[String](kind = 47, name = "POSSIBLE_TYPES") + /** 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 = 52, name = "TYPE_FULL_NAME", default = "") + } + object PropertyDefaults { + val Code = "" + val Name = "" + val Order = -1: Int + val TypeFullName = "" + } } -class Local(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[LocalDb](graph_4762, id_4762) +class Local(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 22.toShort, seq_4762) with LocalBase - with StoredNode with AstNode - with Declaration { - override def closureBindingId: Option[String] = get().closureBindingId - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def dynamicTypeHintFullName: IndexedSeq[String] = get().dynamicTypeHintFullName - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def possibleTypes: IndexedSeq[String] = get().possibleTypes - override def typeFullName: String = get().typeFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => Local.PropertyDefaults.Code - case "NAME" => Local.PropertyDefaults.Name - case "ORDER" => Local.PropertyDefaults.Order - case "TYPE_FULL_NAME" => Local.PropertyDefaults.TypeFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def capturedByOut: Iterator[ClosureBinding] = get().capturedByOut - override def _capturedByOut = get()._capturedByOut - - /** Traverse to CLOSURE_BINDING via CAPTURED_BY OUT edge. - */ - def _closureBindingViaCapturedByOut: overflowdb.traversal.Traversal[ClosureBinding] = - get()._closureBindingViaCapturedByOut - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** The type of the local. Traverse to TYPE via EVAL_TYPE OUT edge. - */ - /** The type of the local. */ - @overflowdb.traversal.help.Doc(info = """The type of the local.""") - def typ: overflowdb.traversal.Traversal[Type] = get().typ - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def astIn: Iterator[Expression] = get().astIn - override def _astIn = get()._astIn - - /** The block in which local is declared. Traverse to BLOCK via AST IN edge. - */ - /** The block in which local is declared. */ - @overflowdb.traversal.help.Doc(info = """The block in which local is declared.""") - def definingBlock: overflowdb.traversal.Traversal[Block] = get().definingBlock - - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaAstIn - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - def refIn: Iterator[StoredNode] = get().refIn - override def _refIn = get()._refIn - - /** Traverse to CLOSURE_BINDING via REF IN edge. - */ - def _closureBindingViaRefIn: overflowdb.traversal.Traversal[ClosureBinding] = get()._closureBindingViaRefIn - - /** Places (identifier) where this local is being referenced Traverse to IDENTIFIER via REF IN edge. - */ - /** Places (identifier) where this local is being referenced */ - @overflowdb.traversal.help.Doc(info = """Places (identifier) where this local is being referenced""") - def referencingIdentifiers: overflowdb.traversal.Traversal[Identifier] = get().referencingIdentifiers - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Local.Label - } + with Declaration + with StaticType[LocalEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "closureBindingId" - case 2 => "code" - case 3 => "columnNumber" - case 4 => "dynamicTypeHintFullName" - case 5 => "lineNumber" - case 6 => "name" - case 7 => "order" - case 8 => "possibleTypes" - case 9 => "typeFullName" + case 0 => "closureBindingId" + case 1 => "code" + case 2 => "columnNumber" + case 3 => "dynamicTypeHintFullName" + case 4 => "lineNumber" + case 5 => "name" + case 6 => "order" + case 7 => "possibleTypes" + case 8 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => closureBindingId - case 2 => code - case 3 => columnNumber - case 4 => dynamicTypeHintFullName - case 5 => lineNumber - case 6 => name - case 7 => order - case 8 => possibleTypes - case 9 => typeFullName + case 0 => this.closureBindingId + case 1 => this.code + case 2 => this.columnNumber + case 3 => this.dynamicTypeHintFullName + case 4 => this.lineNumber + case 5 => this.name + case 6 => this.order + case 7 => this.possibleTypes + case 8 => this.typeFullName + case _ => null } override def productPrefix = "Local" - override def productArity = 10 + override def productArity = 9 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Local] } -class LocalDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with AstNode with Declaration with LocalBase { - - override def layoutInformation: NodeLayoutInformation = Local.layoutInformation - - private var _closureBindingId: String = null - def closureBindingId: Option[String] = Option(_closureBindingId).asInstanceOf[Option[String]] - private var _code: String = Local.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def dynamicTypeHintFullName: IndexedSeq[String] = _dynamicTypeHintFullName - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = Local.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = Local.PropertyDefaults.Order - def order: scala.Int = _order - private var _possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def possibleTypes: IndexedSeq[String] = _possibleTypes - private var _typeFullName: String = Local.PropertyDefaults.TypeFullName - def typeFullName: String = _typeFullName - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - closureBindingId.map { value => properties.put("CLOSURE_BINDING_ID", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) - } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - properties.put("TYPE_FULL_NAME", typeFullName) +object NewLocal { + def apply(): NewLocal = new NewLocal + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_Local_closureBindingId 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: NewLocal => + generated.closureBindingId 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_Local_code 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: NewLocal => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Local_columnNumber 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[Int]] + 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: NewLocal => + generated.columnNumber 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_Local_dynamicTypeHintFullName 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: NewLocal => + for (item <- generated.dynamicTypeHintFullName) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Local_lineNumber 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[Int]] + 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: NewLocal => + generated.lineNumber 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_Local_name 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: NewLocal => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Local_order 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[Int]] + 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: NewLocal => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Local_possibleTypes 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: NewLocal => + for (item <- generated.possibleTypes) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Local_typeFullName 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: NewLocal => + dstCast(offset) = generated.typeFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - closureBindingId.map { value => properties.put("CLOSURE_BINDING_ID", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) - } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - if (!(("") == typeFullName)) { properties.put("TYPE_FULL_NAME", typeFullName) } +class NewLocal extends NewNode(22.toShort) with LocalBase with AstNodeNew with DeclarationNew { + override type StoredNodeType = Local + override def label: String = "LOCAL" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewLocal.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewLocal.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + + var closureBindingId: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var dynamicTypeHintFullName: IndexedSeq[String] = ArraySeq.empty + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + var possibleTypes: IndexedSeq[String] = ArraySeq.empty + var typeFullName: String = "": String + def closureBindingId(value: Option[String]): this.type = { this.closureBindingId = value; this } + def closureBindingId(value: String): this.type = { this.closureBindingId = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { + this.dynamicTypeHintFullName = value.iterator.to(ArraySeq); this + } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + 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 typeFullName(value: String): this.type = { this.typeFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 8, closureBindingId.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 18, dynamicTypeHintFullName.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 47, possibleTypes.size) + interface.countProperty(this, 52, 1) } - import overflowdb.traversal._ - def capturedByOut: Iterator[ClosureBinding] = createAdjacentNodeScalaIteratorByOffSet[ClosureBinding](0) - override def _capturedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _closureBindingViaCapturedByOut: overflowdb.traversal.Traversal[ClosureBinding] = - capturedByOut.collectAll[ClosureBinding] - - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](1) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def typ: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](2) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def astIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](3) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def definingBlock: overflowdb.traversal.Traversal[Block] = astIn.collectAll[Block] - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = astIn.collectAll[ControlStructure] - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - - def refIn: Iterator[StoredNode] = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - override def _refIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _closureBindingViaRefIn: overflowdb.traversal.Traversal[ClosureBinding] = refIn.collectAll[ClosureBinding] - def referencingIdentifiers: overflowdb.traversal.Traversal[Identifier] = refIn.collectAll[Identifier] - - override def label: String = { - Local.Label + override def copy: this.type = { + val newInstance = new NewLocal + newInstance.closureBindingId = this.closureBindingId + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.possibleTypes = this.possibleTypes + newInstance.typeFullName = this.typeFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "closureBindingId" - case 2 => "code" - case 3 => "columnNumber" - case 4 => "dynamicTypeHintFullName" - case 5 => "lineNumber" - case 6 => "name" - case 7 => "order" - case 8 => "possibleTypes" - case 9 => "typeFullName" + case 0 => "closureBindingId" + case 1 => "code" + case 2 => "columnNumber" + case 3 => "dynamicTypeHintFullName" + case 4 => "lineNumber" + case 5 => "name" + case 6 => "order" + case 7 => "possibleTypes" + case 8 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => closureBindingId - case 2 => code - case 3 => columnNumber - case 4 => dynamicTypeHintFullName - case 5 => lineNumber - case 6 => name - case 7 => order - case 8 => possibleTypes - case 9 => typeFullName - } - - override def productPrefix = "Local" - override def productArity = 10 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[LocalDb] - - override def property(key: String): Any = { - key match { - case "CLOSURE_BINDING_ID" => this._closureBindingId - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "DYNAMIC_TYPE_HINT_FULL_NAME" => this._dynamicTypeHintFullName - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - case "POSSIBLE_TYPES" => this._possibleTypes - case "TYPE_FULL_NAME" => this._typeFullName - + case 0 => this.closureBindingId + case 1 => this.code + case 2 => this.columnNumber + case 3 => this.dynamicTypeHintFullName + case 4 => this.lineNumber + case 5 => this.name + case 6 => this.order + case 7 => this.possibleTypes + case 8 => this.typeFullName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CLOSURE_BINDING_ID" => this._closureBindingId = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "DYNAMIC_TYPE_HINT_FULL_NAME" => - this._dynamicTypeHintFullName = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "POSSIBLE_TYPES" => - this._possibleTypes = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "TYPE_FULL_NAME" => this._typeFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._closureBindingId = newNode.asInstanceOf[NewLocal].closureBindingId match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewLocal].code - this._columnNumber = newNode.asInstanceOf[NewLocal].columnNumber match { - case None => null; case Some(value) => value - } - this._dynamicTypeHintFullName = - if (newNode.asInstanceOf[NewLocal].dynamicTypeHintFullName != null) - newNode.asInstanceOf[NewLocal].dynamicTypeHintFullName - else collection.immutable.ArraySeq.empty - this._lineNumber = newNode.asInstanceOf[NewLocal].lineNumber match { case None => null; case Some(value) => value } - this._name = newNode.asInstanceOf[NewLocal].name - this._order = newNode.asInstanceOf[NewLocal].order - this._possibleTypes = - if (newNode.asInstanceOf[NewLocal].possibleTypes != null) newNode.asInstanceOf[NewLocal].possibleTypes - else collection.immutable.ArraySeq.empty - this._typeFullName = newNode.asInstanceOf[NewLocal].typeFullName - - } + override def productPrefix = "NewLocal" + override def productArity = 9 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewLocal] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Location.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Location.scala index 3b0547aa1..1b95ae646 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Location.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Location.scala @@ -1,52 +1,101 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait LocationEMT + extends AnyRef + with HasClassNameEMT + with HasClassShortNameEMT + with HasFilenameEMT + with HasLineNumberEMT + with HasMethodFullNameEMT + with HasMethodShortNameEMT + with HasNodeLabelEMT + with HasPackageNameEMT + with HasSymbolEMT + +trait LocationBase extends AbstractNode with StaticType[LocationEMT] { + def node: Option[AbstractNode] + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.className) res.put("CLASS_NAME", this.className) + if (("": String) != this.classShortName) res.put("CLASS_SHORT_NAME", this.classShortName) + if (("": String) != this.filename) res.put("FILENAME", this.filename) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.methodFullName) res.put("METHOD_FULL_NAME", this.methodFullName) + if (("": String) != this.methodShortName) res.put("METHOD_SHORT_NAME", this.methodShortName) + if (("": String) != this.nodeLabel) res.put("NODE_LABEL", this.nodeLabel) + if (("": String) != this.packageName) res.put("PACKAGE_NAME", this.packageName) + if (("": String) != this.symbol) res.put("SYMBOL", this.symbol) + this.node.foreach { p => res.put("node", p) } + res + } +} object Location { - def apply(graph: Graph, id: Long) = new Location(graph, id) - val Label = "LOCATION" - object PropertyNames { - val ClassName = "CLASS_NAME" - val ClassShortName = "CLASS_SHORT_NAME" - val Filename = "FILENAME" - val LineNumber = "LINE_NUMBER" - val MethodFullName = "METHOD_FULL_NAME" + + val ClassName = "CLASS_NAME" + + val ClassShortName = "CLASS_SHORT_NAME" + + /** The path of the source file this node was generated from, relative to the root path in the meta data node. This + * field must be set but may be set to the value `` to indicate that no source file can be associated with + * the node, e.g., because the node represents an entity known to exist because it is referenced, but for which the + * file that is is declared in is unknown. + */ + val Filename = "FILENAME" + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** The FULL_NAME of a method. Used to link CALL and METHOD nodes. It is required to have exactly one METHOD node + * for each METHOD_FULL_NAME + */ + val MethodFullName = "METHOD_FULL_NAME" + val MethodShortName = "METHOD_SHORT_NAME" - val NodeLabel = "NODE_LABEL" - val PackageName = "PACKAGE_NAME" - val Symbol = "SYMBOL" - val Node = "node" - val all: Set[String] = Set( - ClassName, - ClassShortName, - Filename, - LineNumber, - MethodFullName, - MethodShortName, - NodeLabel, - PackageName, - Symbol, - Node - ) - val allAsJava: java.util.Set[String] = all.asJava - } + val NodeLabel = "NODE_LABEL" + + val PackageName = "PACKAGE_NAME" + + val Symbol = "SYMBOL" + val Node = "node" + } object Properties { - val ClassName = new overflowdb.PropertyKey[String]("CLASS_NAME") - val ClassShortName = new overflowdb.PropertyKey[String]("CLASS_SHORT_NAME") - val Filename = new overflowdb.PropertyKey[String]("FILENAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val MethodFullName = new overflowdb.PropertyKey[String]("METHOD_FULL_NAME") - val MethodShortName = new overflowdb.PropertyKey[String]("METHOD_SHORT_NAME") - val NodeLabel = new overflowdb.PropertyKey[String]("NODE_LABEL") - val PackageName = new overflowdb.PropertyKey[String]("PACKAGE_NAME") - val Symbol = new overflowdb.PropertyKey[String]("SYMBOL") - val Node = new overflowdb.PropertyKey[StoredNode]("node") + val ClassName = flatgraph.SinglePropertyKey[String](kind = 6, name = "CLASS_NAME", default = "") + val ClassShortName = flatgraph.SinglePropertyKey[String](kind = 7, name = "CLASS_SHORT_NAME", default = "") + + /** The path of the source file this node was generated from, relative to the root path in the meta data node. This + * field must be set but may be set to the value `` to indicate that no source file can be associated with + * the node, e.g., because the node represents an entity known to exist because it is referenced, but for which the + * file that is is declared in is unknown. + */ + val Filename = flatgraph.SinglePropertyKey[String](kind = 21, name = "FILENAME", default = "") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** The FULL_NAME of a method. Used to link CALL and METHOD nodes. It is required to have exactly one METHOD node + * for each METHOD_FULL_NAME + */ + val MethodFullName = flatgraph.SinglePropertyKey[String](kind = 36, name = "METHOD_FULL_NAME", default = "") + val MethodShortName = + flatgraph.SinglePropertyKey[String](kind = 37, name = "METHOD_SHORT_NAME", default = "") + val NodeLabel = flatgraph.SinglePropertyKey[String](kind = 40, name = "NODE_LABEL", default = "") + val PackageName = flatgraph.SinglePropertyKey[String](kind = 45, name = "PACKAGE_NAME", default = "") + val Symbol = flatgraph.SinglePropertyKey[String](kind = 50, name = "SYMBOL", default = "") } - object PropertyDefaults { val ClassName = "" val ClassShortName = "" @@ -57,278 +106,413 @@ object Location { val PackageName = "" val Symbol = "" } - - val layoutInformation = new NodeLayoutInformation(Label, PropertyNames.allAsJava, List().asJava, List().asJava) - - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array() - } - - val factory = new NodeFactory[LocationDb] { - override val forLabel = Location.Label - - override def createNode(ref: NodeRef[LocationDb]) = - new LocationDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = Location(graph, id) - } } -trait LocationBase extends AbstractNode { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def className: String - def classShortName: String - def filename: String - def lineNumber: Option[scala.Int] - def methodFullName: String - def methodShortName: String - def nodeLabel: String - def packageName: String - def symbol: String - - def node: Option[AbstractNode] -} - -class Location(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[LocationDb](graph_4762, id_4762) +class Location(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 23.toShort, seq_4762) with LocationBase - with StoredNode { - override def className: String = get().className - override def classShortName: String = get().classShortName - override def filename: String = get().filename - override def lineNumber: Option[scala.Int] = get().lineNumber - override def methodFullName: String = get().methodFullName - override def methodShortName: String = get().methodShortName - override def nodeLabel: String = get().nodeLabel - override def packageName: String = get().packageName - override def symbol: String = get().symbol - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CLASS_NAME" => Location.PropertyDefaults.ClassName - case "CLASS_SHORT_NAME" => Location.PropertyDefaults.ClassShortName - case "FILENAME" => Location.PropertyDefaults.Filename - case "METHOD_FULL_NAME" => Location.PropertyDefaults.MethodFullName - case "METHOD_SHORT_NAME" => Location.PropertyDefaults.MethodShortName - case "NODE_LABEL" => Location.PropertyDefaults.NodeLabel - case "PACKAGE_NAME" => Location.PropertyDefaults.PackageName - case "SYMBOL" => Location.PropertyDefaults.Symbol - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def node: Option[StoredNode] = get().node - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Location.Label - } + with StaticType[LocationEMT] { + def node: Option[StoredNode] = flatgraph.Accessors.getNodePropertyOption[StoredNode](graph, nodeKind, 57, seq) override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "className" - case 2 => "classShortName" - case 3 => "filename" - case 4 => "lineNumber" - case 5 => "methodFullName" - case 6 => "methodShortName" - case 7 => "nodeLabel" - case 8 => "packageName" - case 9 => "symbol" - case 10 => "node" + case 0 => "className" + case 1 => "classShortName" + case 2 => "filename" + case 3 => "lineNumber" + case 4 => "methodFullName" + case 5 => "methodShortName" + case 6 => "nodeLabel" + case 7 => "packageName" + case 8 => "symbol" + case 9 => "node" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => className - case 2 => classShortName - case 3 => filename - case 4 => lineNumber - case 5 => methodFullName - case 6 => methodShortName - case 7 => nodeLabel - case 8 => packageName - case 9 => symbol - case 10 => node + case 0 => this.className + case 1 => this.classShortName + case 2 => this.filename + case 3 => this.lineNumber + case 4 => this.methodFullName + case 5 => this.methodShortName + case 6 => this.nodeLabel + case 7 => this.packageName + case 8 => this.symbol + case 9 => this.node + case _ => null } override def productPrefix = "Location" - override def productArity = 11 -} - -class LocationDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with LocationBase { + override def productArity = 10 - override def layoutInformation: NodeLayoutInformation = Location.layoutInformation + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Location] +} - private var _className: String = Location.PropertyDefaults.ClassName - def className: String = _className - private var _classShortName: String = Location.PropertyDefaults.ClassShortName - def classShortName: String = _classShortName - private var _filename: String = Location.PropertyDefaults.Filename - def filename: String = _filename - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _methodFullName: String = Location.PropertyDefaults.MethodFullName - def methodFullName: String = _methodFullName - private var _methodShortName: String = Location.PropertyDefaults.MethodShortName - def methodShortName: String = _methodShortName - private var _nodeLabel: String = Location.PropertyDefaults.NodeLabel - def nodeLabel: String = _nodeLabel - private var _packageName: String = Location.PropertyDefaults.PackageName - def packageName: String = _packageName - private var _symbol: String = Location.PropertyDefaults.Symbol - def symbol: String = _symbol +object NewLocation { + def apply(): NewLocation = new NewLocation + private val outNeighbors: Map[String, Set[String]] = Map() + private val inNeighbors: Map[String, Set[String]] = Map() + + object InsertionHelpers { + object NewNodeInserter_Location_className 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: NewLocation => + dstCast(offset) = generated.className + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Location_classShortName 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: NewLocation => + dstCast(offset) = generated.classShortName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Location_filename 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: NewLocation => + dstCast(offset) = generated.filename + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Location_lineNumber 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[Int]] + 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: NewLocation => + generated.lineNumber 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_Location_methodFullName 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: NewLocation => + dstCast(offset) = generated.methodFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Location_methodShortName 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: NewLocation => + dstCast(offset) = generated.methodShortName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Location_nodeLabel 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: NewLocation => + dstCast(offset) = generated.nodeLabel + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Location_packageName 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: NewLocation => + dstCast(offset) = generated.packageName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Location_symbol 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: NewLocation => + dstCast(offset) = generated.symbol + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Location_node 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[flatgraph.GNode]] + 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: NewLocation => + generated.node match { + case Some(item) => + dstCast(offset) = item match { + case newV: flatgraph.DNode => newV.storedRef.get; case oldV: flatgraph.GNode => oldV; + case null => null + } + offset += 1 + case _ => + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + } +} - private var _node: StoredNode = null - def node: Option[StoredNode] = Option(this._node) +class NewLocation extends NewNode(23.toShort) with LocationBase { + override type StoredNodeType = Location + override def label: String = "LOCATION" - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CLASS_NAME", className) - properties.put("CLASS_SHORT_NAME", classShortName) - properties.put("FILENAME", filename) - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("METHOD_FULL_NAME", methodFullName) - properties.put("METHOD_SHORT_NAME", methodShortName) - properties.put("NODE_LABEL", nodeLabel) - properties.put("PACKAGE_NAME", packageName) - properties.put("SYMBOL", symbol) - node.map { value => properties.put("node", value) } - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewLocation.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == className)) { properties.put("CLASS_NAME", className) } - if (!(("") == classShortName)) { properties.put("CLASS_SHORT_NAME", classShortName) } - if (!(("") == filename)) { properties.put("FILENAME", filename) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == methodFullName)) { properties.put("METHOD_FULL_NAME", methodFullName) } - if (!(("") == methodShortName)) { properties.put("METHOD_SHORT_NAME", methodShortName) } - if (!(("") == nodeLabel)) { properties.put("NODE_LABEL", nodeLabel) } - if (!(("") == packageName)) { properties.put("PACKAGE_NAME", packageName) } - if (!(("") == symbol)) { properties.put("SYMBOL", symbol) } - node.map { value => properties.put("node", value) } - properties + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewLocation.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ + var className: String = "": String + var classShortName: String = "": String + var filename: String = "": String + var lineNumber: Option[Int] = None + var methodFullName: String = "": String + var methodShortName: String = "": String + var node: Option[AbstractNode] = None + var nodeLabel: String = "": String + var packageName: String = "": String + var symbol: String = "": String + def className(value: String): this.type = { this.className = value; this } + def classShortName(value: String): this.type = { this.classShortName = value; this } + def filename(value: String): this.type = { this.filename = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def methodFullName(value: String): this.type = { this.methodFullName = value; this } + def methodShortName(value: String): this.type = { this.methodShortName = value; this } + def node(value: AbstractNode): this.type = { this.node = Option(value); this } + def node(value: Option[AbstractNode]): this.type = { this.node = value; this } + def nodeLabel(value: String): this.type = { this.nodeLabel = value; this } + def packageName(value: String): this.type = { this.packageName = value; this } + def symbol(value: String): this.type = { this.symbol = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 6, 1) + interface.countProperty(this, 7, 1) + interface.countProperty(this, 21, 1) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 36, 1) + interface.countProperty(this, 37, 1) + interface.countProperty(this, 40, 1) + interface.countProperty(this, 45, 1) + interface.countProperty(this, 50, 1) + interface.countProperty(this, 57, node.size) + node.foreach(interface.visitContainedNode) + } - override def label: String = { - Location.Label + override def copy: this.type = { + val newInstance = new NewLocation + newInstance.className = this.className + newInstance.classShortName = this.classShortName + newInstance.filename = this.filename + newInstance.lineNumber = this.lineNumber + newInstance.methodFullName = this.methodFullName + newInstance.methodShortName = this.methodShortName + newInstance.nodeLabel = this.nodeLabel + newInstance.packageName = this.packageName + newInstance.symbol = this.symbol + newInstance.node = this.node + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "className" - case 2 => "classShortName" - case 3 => "filename" - case 4 => "lineNumber" - case 5 => "methodFullName" - case 6 => "methodShortName" - case 7 => "nodeLabel" - case 8 => "packageName" - case 9 => "symbol" - case 10 => "node" + case 0 => "className" + case 1 => "classShortName" + case 2 => "filename" + case 3 => "lineNumber" + case 4 => "methodFullName" + case 5 => "methodShortName" + case 6 => "nodeLabel" + case 7 => "packageName" + case 8 => "symbol" + case 9 => "node" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => className - case 2 => classShortName - case 3 => filename - case 4 => lineNumber - case 5 => methodFullName - case 6 => methodShortName - case 7 => nodeLabel - case 8 => packageName - case 9 => symbol - case 10 => node - } - - override def productPrefix = "Location" - override def productArity = 11 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[LocationDb] - - override def property(key: String): Any = { - key match { - case "CLASS_NAME" => this._className - case "CLASS_SHORT_NAME" => this._classShortName - case "FILENAME" => this._filename - case "LINE_NUMBER" => this._lineNumber - case "METHOD_FULL_NAME" => this._methodFullName - case "METHOD_SHORT_NAME" => this._methodShortName - case "NODE_LABEL" => this._nodeLabel - case "PACKAGE_NAME" => this._packageName - case "SYMBOL" => this._symbol - case "node" => this._node - case _ => null - } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CLASS_NAME" => this._className = value.asInstanceOf[String] - case "CLASS_SHORT_NAME" => this._classShortName = value.asInstanceOf[String] - case "FILENAME" => this._filename = value.asInstanceOf[String] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "METHOD_FULL_NAME" => this._methodFullName = value.asInstanceOf[String] - case "METHOD_SHORT_NAME" => this._methodShortName = value.asInstanceOf[String] - case "NODE_LABEL" => this._nodeLabel = value.asInstanceOf[String] - case "PACKAGE_NAME" => this._packageName = value.asInstanceOf[String] - case "SYMBOL" => this._symbol = value.asInstanceOf[String] - case "node" => this._node = value.asInstanceOf[StoredNode] - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) + case 0 => this.className + case 1 => this.classShortName + case 2 => this.filename + case 3 => this.lineNumber + case 4 => this.methodFullName + case 5 => this.methodShortName + case 6 => this.nodeLabel + case 7 => this.packageName + case 8 => this.symbol + case 9 => this.node + case _ => null } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._className = newNode.asInstanceOf[NewLocation].className - this._classShortName = newNode.asInstanceOf[NewLocation].classShortName - this._filename = newNode.asInstanceOf[NewLocation].filename - this._lineNumber = newNode.asInstanceOf[NewLocation].lineNumber match { - case None => null; case Some(value) => value - } - this._methodFullName = newNode.asInstanceOf[NewLocation].methodFullName - this._methodShortName = newNode.asInstanceOf[NewLocation].methodShortName - this._nodeLabel = newNode.asInstanceOf[NewLocation].nodeLabel - this._packageName = newNode.asInstanceOf[NewLocation].packageName - this._symbol = newNode.asInstanceOf[NewLocation].symbol - this._node = newNode.asInstanceOf[NewLocation].node match { - case null | None => null - case Some(newNode: NewNode) => mapping(newNode).asInstanceOf[StoredNode] - case Some(oldNode: StoredNode) => oldNode.asInstanceOf[StoredNode] - case _ => throw new MatchError("unreachable") - } - - } + override def productPrefix = "NewLocation" + override def productArity = 10 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewLocation] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Member.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Member.scala index dbee46bc8..f6e3b5168 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Member.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Member.scala @@ -1,460 +1,1781 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Member { - def apply(graph: Graph, id: Long) = new Member(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait MemberEMT + extends AnyRef + with AstNodeEMT + with DeclarationEMT + with HasAstParentFullNameEMT + with HasAstParentTypeEMT + with HasDynamicTypeHintFullNameEMT + with HasPossibleTypesEMT + with HasTypeFullNameEMT - val Label = "MEMBER" +trait MemberBase extends AbstractNode with AstNodeBase with DeclarationBase with StaticType[MemberEMT] { + + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.astParentFullName) res.put("AST_PARENT_FULL_NAME", this.astParentFullName) + if (("": String) != this.astParentType) res.put("AST_PARENT_TYPE", this.astParentType) + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + val tmpDynamicTypeHintFullName = this.dynamicTypeHintFullName; + if (tmpDynamicTypeHintFullName.nonEmpty) res.put("DYNAMIC_TYPE_HINT_FULL_NAME", tmpDynamicTypeHintFullName) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + val tmpPossibleTypes = this.possibleTypes; + if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) + if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) + res + } +} +object Member { + val Label = "MEMBER" object PropertyNames { - val AstParentFullName = "AST_PARENT_FULL_NAME" - val AstParentType = "AST_PARENT_TYPE" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" + + /** This field holds the FULL_NAME of the AST parent of an entity. */ + val AstParentFullName = "AST_PARENT_FULL_NAME" + + /** The type of the AST parent. Since this is only used in some parts of the graph, the list does not include all + * possible parents by intention. Possible parents: METHOD, TYPE_DECL, NAMESPACE_BLOCK. + */ + val AstParentType = "AST_PARENT_TYPE" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ val DynamicTypeHintFullName = "DYNAMIC_TYPE_HINT_FULL_NAME" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val PossibleTypes = "POSSIBLE_TYPES" - val TypeFullName = "TYPE_FULL_NAME" - val all: Set[String] = Set( - AstParentFullName, - AstParentType, - Code, - ColumnNumber, - DynamicTypeHintFullName, - LineNumber, - Name, - Order, - PossibleTypes, - TypeFullName - ) - val allAsJava: java.util.Set[String] = all.asJava - } - object Properties { - val AstParentFullName = new overflowdb.PropertyKey[String]("AST_PARENT_FULL_NAME") - val AstParentType = new overflowdb.PropertyKey[String]("AST_PARENT_TYPE") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val DynamicTypeHintFullName = new overflowdb.PropertyKey[IndexedSeq[String]]("DYNAMIC_TYPE_HINT_FULL_NAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val PossibleTypes = new overflowdb.PropertyKey[IndexedSeq[String]]("POSSIBLE_TYPES") - val TypeFullName = new overflowdb.PropertyKey[String]("TYPE_FULL_NAME") + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - } + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - object PropertyDefaults { - val AstParentFullName = "" - val AstParentType = "" - val Code = "" - val Name = "" - val Order = -1: Int - val TypeFullName = "" - } + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation - ).asJava - ) + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = "POSSIBLE_TYPES" - object Edges { - val Out: Array[String] = Array("AST", "EVAL_TYPE", "TAGGED_BY") - val In: Array[String] = Array("AST", "REF") + /** 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 = "TYPE_FULL_NAME" } + object Properties { - val factory = new NodeFactory[MemberDb] { - override val forLabel = Member.Label + /** This field holds the FULL_NAME of the AST parent of an entity. */ + val AstParentFullName = + flatgraph.SinglePropertyKey[String](kind = 3, name = "AST_PARENT_FULL_NAME", default = "") - override def createNode(ref: NodeRef[MemberDb]) = - new MemberDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** The type of the AST parent. Since this is only used in some parts of the graph, the list does not include all + * possible parents by intention. Possible parents: METHOD, TYPE_DECL, NAMESPACE_BLOCK. + */ + val AstParentType = flatgraph.SinglePropertyKey[String](kind = 4, name = "AST_PARENT_TYPE", default = "") - override def createNodeRef(graph: Graph, id: Long) = Member(graph, id) - } -} + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") -trait MemberBase extends AbstractNode with AstNodeBase with DeclarationBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ + val DynamicTypeHintFullName = flatgraph.MultiPropertyKey[String](kind = 18, name = "DYNAMIC_TYPE_HINT_FULL_NAME") - def astParentFullName: String - def astParentType: String - def code: String - def columnNumber: Option[scala.Int] - def dynamicTypeHintFullName: IndexedSeq[String] - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int - def possibleTypes: IndexedSeq[String] - def typeFullName: String + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = flatgraph.MultiPropertyKey[String](kind = 47, name = "POSSIBLE_TYPES") + + /** 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 = 52, name = "TYPE_FULL_NAME", default = "") + } + object PropertyDefaults { + val AstParentFullName = "" + val AstParentType = "" + val Code = "" + val Name = "" + val Order = -1: Int + val TypeFullName = "" + } } -class Member(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[MemberDb](graph_4762, id_4762) +class Member(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 24.toShort, seq_4762) with MemberBase - with StoredNode with AstNode - with Declaration { - override def astParentFullName: String = get().astParentFullName - override def astParentType: String = get().astParentType - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def dynamicTypeHintFullName: IndexedSeq[String] = get().dynamicTypeHintFullName - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def possibleTypes: IndexedSeq[String] = get().possibleTypes - override def typeFullName: String = get().typeFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "AST_PARENT_FULL_NAME" => Member.PropertyDefaults.AstParentFullName - case "AST_PARENT_TYPE" => Member.PropertyDefaults.AstParentType - case "CODE" => Member.PropertyDefaults.Code - case "NAME" => Member.PropertyDefaults.Name - case "ORDER" => Member.PropertyDefaults.Order - case "TYPE_FULL_NAME" => Member.PropertyDefaults.TypeFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def astOut: Iterator[AstNode] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to ANNOTATION via AST OUT edge. - */ - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = get()._annotationViaAstOut - - /** Traverse to MODIFIER via AST OUT edge. - */ - def _modifierViaAstOut: overflowdb.traversal.Traversal[Modifier] = get()._modifierViaAstOut - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** Traverse to member type Traverse to TYPE via EVAL_TYPE OUT edge. - */ - /** Traverse to member type */ - @overflowdb.traversal.help.Doc(info = """Traverse to member type""") - def typ: overflowdb.traversal.Traversal[Type] = get().typ - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def astIn: Iterator[AstNode] = get().astIn - override def _astIn = get()._astIn - - /** The type declaration this member is defined in Traverse to TYPE_DECL via AST IN edge. - */ - /** The type declaration this member is defined in */ - @overflowdb.traversal.help.Doc(info = """The type declaration this member is defined in""") - def typeDecl: TypeDecl = get().typeDecl - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - def refIn: Iterator[Call] = get().refIn - override def _refIn = get()._refIn - - /** Traverse to CALL via REF IN edge. - */ - def _callViaRefIn: overflowdb.traversal.Traversal[Call] = get()._callViaRefIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Member.Label - } + with Declaration + with StaticType[MemberEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "astParentFullName" - case 2 => "astParentType" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "lineNumber" - case 7 => "name" - case 8 => "order" - case 9 => "possibleTypes" - case 10 => "typeFullName" + case 0 => "astParentFullName" + case 1 => "astParentType" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dynamicTypeHintFullName" + case 5 => "lineNumber" + case 6 => "name" + case 7 => "order" + case 8 => "possibleTypes" + case 9 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => astParentFullName - case 2 => astParentType - case 3 => code - case 4 => columnNumber - case 5 => dynamicTypeHintFullName - case 6 => lineNumber - case 7 => name - case 8 => order - case 9 => possibleTypes - case 10 => typeFullName + case 0 => this.astParentFullName + case 1 => this.astParentType + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dynamicTypeHintFullName + case 5 => this.lineNumber + case 6 => this.name + case 7 => this.order + case 8 => this.possibleTypes + case 9 => this.typeFullName + case _ => null } override def productPrefix = "Member" - override def productArity = 11 + override def productArity = 10 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Member] } -class MemberDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with AstNode with Declaration with MemberBase { - - override def layoutInformation: NodeLayoutInformation = Member.layoutInformation - - private var _astParentFullName: String = Member.PropertyDefaults.AstParentFullName - def astParentFullName: String = _astParentFullName - private var _astParentType: String = Member.PropertyDefaults.AstParentType - def astParentType: String = _astParentType - private var _code: String = Member.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def dynamicTypeHintFullName: IndexedSeq[String] = _dynamicTypeHintFullName - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = Member.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = Member.PropertyDefaults.Order - def order: scala.Int = _order - private var _possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def possibleTypes: IndexedSeq[String] = _possibleTypes - private var _typeFullName: String = Member.PropertyDefaults.TypeFullName - def typeFullName: String = _typeFullName - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("AST_PARENT_FULL_NAME", astParentFullName) - properties.put("AST_PARENT_TYPE", astParentType) - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) - } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - properties.put("TYPE_FULL_NAME", typeFullName) +object NewMember { + def apply(): NewMember = new NewMember + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_Member_astParentFullName 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: NewMember => + dstCast(offset) = generated.astParentFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Member_astParentType 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: NewMember => + dstCast(offset) = generated.astParentType + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Member_code 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: NewMember => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Member_columnNumber 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[Int]] + 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: NewMember => + generated.columnNumber 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_Member_dynamicTypeHintFullName 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: NewMember => + for (item <- generated.dynamicTypeHintFullName) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Member_lineNumber 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[Int]] + 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: NewMember => + generated.lineNumber 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_Member_name 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: NewMember => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Member_order 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[Int]] + 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: NewMember => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Member_possibleTypes 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: NewMember => + for (item <- generated.possibleTypes) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Member_typeFullName 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: NewMember => + dstCast(offset) = generated.typeFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == astParentFullName)) { properties.put("AST_PARENT_FULL_NAME", astParentFullName) } - if (!(("") == astParentType)) { properties.put("AST_PARENT_TYPE", astParentType) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) - } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - if (!(("") == typeFullName)) { properties.put("TYPE_FULL_NAME", typeFullName) } +class NewMember extends NewNode(24.toShort) with MemberBase with AstNodeNew with DeclarationNew { + override type StoredNodeType = Member + override def label: String = "MEMBER" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMember.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - - import overflowdb.traversal._ - def astOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](0) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = astOut.collectAll[Annotation] - def _modifierViaAstOut: overflowdb.traversal.Traversal[Modifier] = astOut.collectAll[Modifier] - - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](1) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def typ: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](2) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def astIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](3) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def typeDecl: TypeDecl = try { astIn.collectAll[TypeDecl].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent TYPE_DECL is mandatory, but not defined for this MEMBER node with id=" + id, - e - ) + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMember.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - def refIn: Iterator[Call] = createAdjacentNodeScalaIteratorByOffSet[Call](4) - override def _refIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _callViaRefIn: overflowdb.traversal.Traversal[Call] = refIn.collectAll[Call] + var astParentFullName: String = "": String + var astParentType: String = "": String + var code: String = "": String + var columnNumber: Option[Int] = None + var dynamicTypeHintFullName: IndexedSeq[String] = ArraySeq.empty + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + var possibleTypes: IndexedSeq[String] = ArraySeq.empty + var typeFullName: String = "": String + def astParentFullName(value: String): this.type = { this.astParentFullName = value; this } + def astParentType(value: String): this.type = { this.astParentType = value; this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { + this.dynamicTypeHintFullName = value.iterator.to(ArraySeq); this + } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + 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 typeFullName(value: String): this.type = { this.typeFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 3, 1) + interface.countProperty(this, 4, 1) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 18, dynamicTypeHintFullName.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 47, possibleTypes.size) + interface.countProperty(this, 52, 1) + } - override def label: String = { - Member.Label + override def copy: this.type = { + val newInstance = new NewMember + newInstance.astParentFullName = this.astParentFullName + newInstance.astParentType = this.astParentType + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.possibleTypes = this.possibleTypes + newInstance.typeFullName = this.typeFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "astParentFullName" - case 2 => "astParentType" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "lineNumber" - case 7 => "name" - case 8 => "order" - case 9 => "possibleTypes" - case 10 => "typeFullName" + case 0 => "astParentFullName" + case 1 => "astParentType" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dynamicTypeHintFullName" + case 5 => "lineNumber" + case 6 => "name" + case 7 => "order" + case 8 => "possibleTypes" + case 9 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => astParentFullName - case 2 => astParentType - case 3 => code - case 4 => columnNumber - case 5 => dynamicTypeHintFullName - case 6 => lineNumber - case 7 => name - case 8 => order - case 9 => possibleTypes - case 10 => typeFullName - } - - override def productPrefix = "Member" - override def productArity = 11 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[MemberDb] - - override def property(key: String): Any = { - key match { - case "AST_PARENT_FULL_NAME" => this._astParentFullName - case "AST_PARENT_TYPE" => this._astParentType - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "DYNAMIC_TYPE_HINT_FULL_NAME" => this._dynamicTypeHintFullName - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - case "POSSIBLE_TYPES" => this._possibleTypes - case "TYPE_FULL_NAME" => this._typeFullName - + case 0 => this.astParentFullName + case 1 => this.astParentType + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dynamicTypeHintFullName + case 5 => this.lineNumber + case 6 => this.name + case 7 => this.order + case 8 => this.possibleTypes + case 9 => this.typeFullName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "AST_PARENT_FULL_NAME" => this._astParentFullName = value.asInstanceOf[String] - case "AST_PARENT_TYPE" => this._astParentType = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "DYNAMIC_TYPE_HINT_FULL_NAME" => - this._dynamicTypeHintFullName = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "POSSIBLE_TYPES" => - this._possibleTypes = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "TYPE_FULL_NAME" => this._typeFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._astParentFullName = newNode.asInstanceOf[NewMember].astParentFullName - this._astParentType = newNode.asInstanceOf[NewMember].astParentType - this._code = newNode.asInstanceOf[NewMember].code - this._columnNumber = newNode.asInstanceOf[NewMember].columnNumber match { - case None => null; case Some(value) => value - } - this._dynamicTypeHintFullName = - if (newNode.asInstanceOf[NewMember].dynamicTypeHintFullName != null) - newNode.asInstanceOf[NewMember].dynamicTypeHintFullName - else collection.immutable.ArraySeq.empty - this._lineNumber = newNode.asInstanceOf[NewMember].lineNumber match { case None => null; case Some(value) => value } - this._name = newNode.asInstanceOf[NewMember].name - this._order = newNode.asInstanceOf[NewMember].order - this._possibleTypes = - if (newNode.asInstanceOf[NewMember].possibleTypes != null) newNode.asInstanceOf[NewMember].possibleTypes - else collection.immutable.ArraySeq.empty - this._typeFullName = newNode.asInstanceOf[NewMember].typeFullName - - } + override def productPrefix = "NewMember" + override def productArity = 10 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMember] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MetaData.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MetaData.scala index 04327b54d..a3d89505f 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MetaData.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MetaData.scala @@ -1,253 +1,333 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait MetaDataEMT + extends AnyRef + with HasHashEMT + with HasLanguageEMT + with HasOverlaysEMT + with HasRootEMT + with HasVersionEMT + +trait MetaDataBase extends AbstractNode with StaticType[MetaDataEMT] { -object MetaData { - def apply(graph: Graph, id: Long) = new MetaData(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + this.hash.foreach { p => res.put("HASH", p) } + if (("": String) != this.language) res.put("LANGUAGE", this.language) + val tmpOverlays = this.overlays; if (tmpOverlays.nonEmpty) res.put("OVERLAYS", tmpOverlays) + if (("": String) != this.root) res.put("ROOT", this.root) + if (("": String) != this.version) res.put("VERSION", this.version) + res + } +} +object MetaData { val Label = "META_DATA" - object PropertyNames { - val Hash = "HASH" - val Language = "LANGUAGE" - val Overlays = "OVERLAYS" - val Root = "ROOT" - val Version = "VERSION" - val all: Set[String] = Set(Hash, Language, Overlays, Root, Version) - val allAsJava: java.util.Set[String] = all.asJava - } + /** This property contains a hash value in the form of a string. Hashes can be used to summarize data, e.g., to + * summarize the contents of source files or sub graphs. Such summaries are useful to determine whether code has + * already been analyzed in incremental analysis pipelines. This property is optional to allow its calculation to + * be deferred or skipped if the hash is not needed. + */ + val Hash = "HASH" + + /** This field indicates which CPG language frontend generated the CPG. Frontend developers may freely choose a + * value that describes their frontend so long as it is not used by an existing frontend. Reserved values are to + * date: C, LLVM, GHIDRA, PHP. + */ + val Language = "LANGUAGE" + + /** The field contains the names of the overlays applied to this CPG, in order of their application. Names are + * free-form strings, that is, this specification does not dictate them but rather requires tool producers and + * consumers to communicate them between each other. + */ + val Overlays = "OVERLAYS" + + /** The path to the root directory of the source/binary this CPG is generated from. */ + val Root = "ROOT" + + /** 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 = "VERSION" + } object Properties { - val Hash = new overflowdb.PropertyKey[String]("HASH") - val Language = new overflowdb.PropertyKey[String]("LANGUAGE") - val Overlays = new overflowdb.PropertyKey[IndexedSeq[String]]("OVERLAYS") - val Root = new overflowdb.PropertyKey[String]("ROOT") - val Version = new overflowdb.PropertyKey[String]("VERSION") + /** This property contains a hash value in the form of a string. Hashes can be used to summarize data, e.g., to + * summarize the contents of source files or sub graphs. Such summaries are useful to determine whether code has + * already been analyzed in incremental analysis pipelines. This property is optional to allow its calculation to + * be deferred or skipped if the hash is not needed. + */ + val Hash = flatgraph.OptionalPropertyKey[String](kind = 23, name = "HASH") + + /** This field indicates which CPG language frontend generated the CPG. Frontend developers may freely choose a + * value that describes their frontend so long as it is not used by an existing frontend. Reserved values are to + * date: C, LLVM, GHIDRA, PHP. + */ + val Language = flatgraph.SinglePropertyKey[String](kind = 33, name = "LANGUAGE", default = "") + + /** The field contains the names of the overlays applied to this CPG, in order of their application. Names are + * free-form strings, that is, this specification does not dictate them but rather requires tool producers and + * consumers to communicate them between each other. + */ + val Overlays = flatgraph.MultiPropertyKey[String](kind = 44, name = "OVERLAYS") + + /** The path to the root directory of the source/binary this CPG is generated from. */ + val Root = flatgraph.SinglePropertyKey[String](kind = 48, name = "ROOT", 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 = 54, name = "VERSION", default = "") } - object PropertyDefaults { val Language = "" val Root = "" val Version = "" } - - val layoutInformation = new NodeLayoutInformation(Label, PropertyNames.allAsJava, List().asJava, List().asJava) - - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array() - } - - val factory = new NodeFactory[MetaDataDb] { - override val forLabel = MetaData.Label - - override def createNode(ref: NodeRef[MetaDataDb]) = - new MetaDataDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = MetaData(graph, id) - } -} - -trait MetaDataBase extends AbstractNode { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def hash: Option[String] - def language: String - def overlays: IndexedSeq[String] - def root: String - def version: String - } -class MetaData(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[MetaDataDb](graph_4762, id_4762) +class MetaData(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 25.toShort, seq_4762) with MetaDataBase - with StoredNode { - override def hash: Option[String] = get().hash - override def language: String = get().language - override def overlays: IndexedSeq[String] = get().overlays - override def root: String = get().root - override def version: String = get().version - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "LANGUAGE" => MetaData.PropertyDefaults.Language - case "ROOT" => MetaData.PropertyDefaults.Root - case "VERSION" => MetaData.PropertyDefaults.Version - case _ => super.propertyDefaultValue(propertyKey) - } - } - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - MetaData.Label - } + with StaticType[MetaDataEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "hash" - case 2 => "language" - case 3 => "overlays" - case 4 => "root" - case 5 => "version" + case 0 => "hash" + case 1 => "language" + case 2 => "overlays" + case 3 => "root" + case 4 => "version" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => hash - case 2 => language - case 3 => overlays - case 4 => root - case 5 => version + case 0 => this.hash + case 1 => this.language + case 2 => this.overlays + case 3 => this.root + case 4 => this.version + case _ => null } override def productPrefix = "MetaData" - override def productArity = 6 -} - -class MetaDataDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with MetaDataBase { + override def productArity = 5 - override def layoutInformation: NodeLayoutInformation = MetaData.layoutInformation - - private var _hash: String = null - def hash: Option[String] = Option(_hash).asInstanceOf[Option[String]] - private var _language: String = MetaData.PropertyDefaults.Language - def language: String = _language - private var _overlays: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def overlays: IndexedSeq[String] = _overlays - private var _root: String = MetaData.PropertyDefaults.Root - def root: String = _root - private var _version: String = MetaData.PropertyDefaults.Version - def version: String = _version + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[MetaData] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - hash.map { value => properties.put("HASH", value) } - properties.put("LANGUAGE", language) - if (this._overlays != null && this._overlays.nonEmpty) { properties.put("OVERLAYS", overlays) } - properties.put("ROOT", root) - properties.put("VERSION", version) - - properties +object NewMetaData { + def apply(): NewMetaData = new NewMetaData + private val outNeighbors: Map[String, Set[String]] = Map() + private val inNeighbors: Map[String, Set[String]] = Map() + + object InsertionHelpers { + object NewNodeInserter_MetaData_hash 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: NewMetaData => + generated.hash 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_MetaData_language 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: NewMetaData => + dstCast(offset) = generated.language + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MetaData_overlays 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: NewMetaData => + for (item <- generated.overlays) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MetaData_root 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: NewMetaData => + dstCast(offset) = generated.root + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MetaData_version 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: NewMetaData => + dstCast(offset) = generated.version + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - hash.map { value => properties.put("HASH", value) } - if (!(("") == language)) { properties.put("LANGUAGE", language) } - if (this._overlays != null && this._overlays.nonEmpty) { properties.put("OVERLAYS", overlays) } - if (!(("") == root)) { properties.put("ROOT", root) } - if (!(("") == version)) { properties.put("VERSION", version) } +class NewMetaData extends NewNode(25.toShort) with MetaDataBase { + override type StoredNodeType = MetaData + override def label: String = "META_DATA" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMetaData.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMetaData.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ + var hash: Option[String] = None + var language: String = "": String + var overlays: IndexedSeq[String] = ArraySeq.empty + var root: String = "": String + var version: String = "": String + def hash(value: Option[String]): this.type = { this.hash = value; this } + def hash(value: String): this.type = { this.hash = Option(value); this } + def language(value: String): this.type = { this.language = value; this } + def overlays(value: IterableOnce[String]): this.type = { this.overlays = value.iterator.to(ArraySeq); this } + def root(value: String): this.type = { this.root = value; this } + def version(value: String): this.type = { this.version = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 23, hash.size) + interface.countProperty(this, 33, 1) + interface.countProperty(this, 44, overlays.size) + interface.countProperty(this, 48, 1) + interface.countProperty(this, 54, 1) + } - override def label: String = { - MetaData.Label + override def copy: this.type = { + val newInstance = new NewMetaData + newInstance.hash = this.hash + newInstance.language = this.language + newInstance.overlays = this.overlays + newInstance.root = this.root + newInstance.version = this.version + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "hash" - case 2 => "language" - case 3 => "overlays" - case 4 => "root" - case 5 => "version" + case 0 => "hash" + case 1 => "language" + case 2 => "overlays" + case 3 => "root" + case 4 => "version" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => hash - case 2 => language - case 3 => overlays - case 4 => root - case 5 => version - } - - override def productPrefix = "MetaData" - override def productArity = 6 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[MetaDataDb] - - override def property(key: String): Any = { - key match { - case "HASH" => this._hash - case "LANGUAGE" => this._language - case "OVERLAYS" => this._overlays - case "ROOT" => this._root - case "VERSION" => this._version - + case 0 => this.hash + case 1 => this.language + case 2 => this.overlays + case 3 => this.root + case 4 => this.version case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "HASH" => this._hash = value.asInstanceOf[String] - case "LANGUAGE" => this._language = value.asInstanceOf[String] - case "OVERLAYS" => - this._overlays = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "ROOT" => this._root = value.asInstanceOf[String] - case "VERSION" => this._version = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._hash = newNode.asInstanceOf[NewMetaData].hash match { case None => null; case Some(value) => value } - this._language = newNode.asInstanceOf[NewMetaData].language - this._overlays = - if (newNode.asInstanceOf[NewMetaData].overlays != null) newNode.asInstanceOf[NewMetaData].overlays - else collection.immutable.ArraySeq.empty - this._root = newNode.asInstanceOf[NewMetaData].root - this._version = newNode.asInstanceOf[NewMetaData].version - - } + override def productPrefix = "NewMetaData" + override def productArity = 5 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMetaData] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Method.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Method.scala index 1fed14484..06c980202 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Method.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Method.scala @@ -1,71 +1,220 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait MethodEMT + extends AnyRef + with CfgNodeEMT + with DeclarationEMT + with HasAstParentFullNameEMT + with HasAstParentTypeEMT + with HasColumnNumberEndEMT + with HasFilenameEMT + with HasFullNameEMT + with HasHashEMT + with HasIsExternalEMT + with HasLineNumberEndEMT + with HasOffsetEMT + with HasOffsetEndEMT + with HasSignatureEMT + +trait MethodBase extends AbstractNode with CfgNodeBase with DeclarationBase with StaticType[MethodEMT] { -object Method { - def apply(graph: Graph, id: Long) = new Method(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.astParentFullName) res.put("AST_PARENT_FULL_NAME", this.astParentFullName) + if (("": String) != this.astParentType) res.put("AST_PARENT_TYPE", this.astParentType) + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.columnNumberEnd.foreach { p => res.put("COLUMN_NUMBER_END", p) } + if (("": String) != this.filename) res.put("FILENAME", this.filename) + if (("": String) != this.fullName) res.put("FULL_NAME", this.fullName) + this.hash.foreach { p => res.put("HASH", p) } + if ((false: Boolean) != this.isExternal) res.put("IS_EXTERNAL", this.isExternal) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + this.lineNumberEnd.foreach { p => res.put("LINE_NUMBER_END", p) } + if (("": String) != this.name) res.put("NAME", this.name) + this.offset.foreach { p => res.put("OFFSET", p) } + this.offsetEnd.foreach { p => res.put("OFFSET_END", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + if (("": String) != this.signature) res.put("SIGNATURE", this.signature) + res + } +} +object Method { val Label = "METHOD" - object PropertyNames { + + /** This field holds the FULL_NAME of the AST parent of an entity. */ val AstParentFullName = "AST_PARENT_FULL_NAME" - val AstParentType = "AST_PARENT_TYPE" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val ColumnNumberEnd = "COLUMN_NUMBER_END" - val Filename = "FILENAME" - val FullName = "FULL_NAME" - val Hash = "HASH" - val IsExternal = "IS_EXTERNAL" - val LineNumber = "LINE_NUMBER" - val LineNumberEnd = "LINE_NUMBER_END" - val Name = "NAME" - val Offset = "OFFSET" - val OffsetEnd = "OFFSET_END" - val Order = "ORDER" - val Signature = "SIGNATURE" - val all: Set[String] = Set( - AstParentFullName, - AstParentType, - Code, - ColumnNumber, - ColumnNumberEnd, - Filename, - FullName, - Hash, - IsExternal, - LineNumber, - LineNumberEnd, - Name, - Offset, - OffsetEnd, - Order, - Signature - ) - val allAsJava: java.util.Set[String] = all.asJava - } + /** The type of the AST parent. Since this is only used in some parts of the graph, the list does not include all + * possible parents by intention. Possible parents: METHOD, TYPE_DECL, NAMESPACE_BLOCK. + */ + val AstParentType = "AST_PARENT_TYPE" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** This optional fields provides the column number at which the program construct represented by the node ends. + */ + val ColumnNumberEnd = "COLUMN_NUMBER_END" + + /** The path of the source file this node was generated from, relative to the root path in the meta data node. This + * field must be set but may be set to the value `` to indicate that no source file can be associated with + * the node, e.g., because the node represents an entity known to exist because it is referenced, but for which the + * file that is is declared in is unknown. + */ + val Filename = "FILENAME" + + /** This is the fully-qualified name of an entity, e.g., the fully-qualified name of a method or type. The details + * of what constitutes a fully-qualified name are language specific. This field SHOULD be human readable. + */ + val FullName = "FULL_NAME" + + /** This property contains a hash value in the form of a string. Hashes can be used to summarize data, e.g., to + * summarize the contents of source files or sub graphs. Such summaries are useful to determine whether code has + * already been analyzed in incremental analysis pipelines. This property is optional to allow its calculation to + * be deferred or skipped if the hash is not needed. + */ + val Hash = "HASH" + + /** Indicates that the construct (METHOD or TYPE_DECL) is external, that is, it is referenced but not defined in the + * code (applies both to insular parsing and to library functions where we have header files only) + */ + val IsExternal = "IS_EXTERNAL" + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** This optional fields provides the line number at which the program construct represented by the node ends. + */ + val LineNumberEnd = "LINE_NUMBER_END" + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" + + /** Start offset into the CONTENT property of the corresponding FILE node. The offset is such that parts of the + * content can easily be accessed via `content.substring(offset, offsetEnd)`. This means that the offset must be + * measured in utf16 encoding (i.e. neither in characters/codeunits nor in byte-offsets into a utf8 encoding). E.g. + * for METHOD nodes this start offset points to the start of the methods source code in the string holding the + * source code of the entire file. + */ + val Offset = "OFFSET" + + /** End offset (exclusive) into the CONTENT property of the corresponding FILE node. See OFFSET documentation for + * finer details. E.g. for METHOD nodes this end offset points to the first code position which is not part of the + * method. + */ + val OffsetEnd = "OFFSET_END" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + + /** The method signature encodes the types of parameters in a string. The string SHOULD be human readable and + * suitable for differentiating methods with different parameter types sufficiently to allow for resolving of + * function overloading. The present specification does not enforce a strict format for the signature, that is, it + * can be chosen by the frontend implementor to fit the source language. + */ + val Signature = "SIGNATURE" + } object Properties { - val AstParentFullName = new overflowdb.PropertyKey[String]("AST_PARENT_FULL_NAME") - val AstParentType = new overflowdb.PropertyKey[String]("AST_PARENT_TYPE") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val ColumnNumberEnd = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER_END") - val Filename = new overflowdb.PropertyKey[String]("FILENAME") - val FullName = new overflowdb.PropertyKey[String]("FULL_NAME") - val Hash = new overflowdb.PropertyKey[String]("HASH") - val IsExternal = new overflowdb.PropertyKey[Boolean]("IS_EXTERNAL") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val LineNumberEnd = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER_END") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Offset = new overflowdb.PropertyKey[scala.Int]("OFFSET") - val OffsetEnd = new overflowdb.PropertyKey[scala.Int]("OFFSET_END") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val Signature = new overflowdb.PropertyKey[String]("SIGNATURE") + /** This field holds the FULL_NAME of the AST parent of an entity. */ + val AstParentFullName = + flatgraph.SinglePropertyKey[String](kind = 3, name = "AST_PARENT_FULL_NAME", default = "") + + /** The type of the AST parent. Since this is only used in some parts of the graph, the list does not include all + * possible parents by intention. Possible parents: METHOD, TYPE_DECL, NAMESPACE_BLOCK. + */ + val AstParentType = flatgraph.SinglePropertyKey[String](kind = 4, name = "AST_PARENT_TYPE", default = "") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** This optional fields provides the column number at which the program construct represented by the node ends. + */ + val ColumnNumberEnd = flatgraph.OptionalPropertyKey[Int](kind = 12, name = "COLUMN_NUMBER_END") + + /** The path of the source file this node was generated from, relative to the root path in the meta data node. This + * field must be set but may be set to the value `` to indicate that no source file can be associated with + * the node, e.g., because the node represents an entity known to exist because it is referenced, but for which the + * file that is is declared in is unknown. + */ + val Filename = flatgraph.SinglePropertyKey[String](kind = 21, name = "FILENAME", default = "") + + /** This is the fully-qualified name of an entity, e.g., the fully-qualified name of a method or type. The details + * of what constitutes a fully-qualified name are language specific. This field SHOULD be human readable. + */ + val FullName = flatgraph.SinglePropertyKey[String](kind = 22, name = "FULL_NAME", default = "") + + /** This property contains a hash value in the form of a string. Hashes can be used to summarize data, e.g., to + * summarize the contents of source files or sub graphs. Such summaries are useful to determine whether code has + * already been analyzed in incremental analysis pipelines. This property is optional to allow its calculation to + * be deferred or skipped if the hash is not needed. + */ + val Hash = flatgraph.OptionalPropertyKey[String](kind = 23, name = "HASH") + + /** Indicates that the construct (METHOD or TYPE_DECL) is external, that is, it is referenced but not defined in the + * code (applies both to insular parsing and to library functions where we have header files only) + */ + val IsExternal = flatgraph.SinglePropertyKey[Boolean](kind = 29, name = "IS_EXTERNAL", default = false) + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** This optional fields provides the line number at which the program construct represented by the node ends. + */ + val LineNumberEnd = flatgraph.OptionalPropertyKey[Int](kind = 35, name = "LINE_NUMBER_END") + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") + + /** Start offset into the CONTENT property of the corresponding FILE node. The offset is such that parts of the + * content can easily be accessed via `content.substring(offset, offsetEnd)`. This means that the offset must be + * measured in utf16 encoding (i.e. neither in characters/codeunits nor in byte-offsets into a utf8 encoding). E.g. + * for METHOD nodes this start offset points to the start of the methods source code in the string holding the + * source code of the entire file. + */ + val Offset = flatgraph.OptionalPropertyKey[Int](kind = 41, name = "OFFSET") + + /** End offset (exclusive) into the CONTENT property of the corresponding FILE node. See OFFSET documentation for + * finer details. E.g. for METHOD nodes this end offset points to the first code position which is not part of the + * method. + */ + val OffsetEnd = flatgraph.OptionalPropertyKey[Int](kind = 42, name = "OFFSET_END") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** The method signature encodes the types of parameters in a string. The string SHOULD be human readable and + * suitable for differentiating methods with different parameter types sufficiently to allow for resolving of + * function overloading. The present specification does not enforce a strict format for the signature, that is, it + * can be chosen by the frontend implementor to fit the source language. + */ + val Signature = flatgraph.SinglePropertyKey[String](kind = 49, name = "SIGNATURE", default = "") } - object PropertyDefaults { val AstParentFullName = "" val AstParentType = "" @@ -77,817 +226,1864 @@ object Method { val Order = -1: Int val Signature = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.SourceFile.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Call.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array("AST", "CFG", "CONTAINS", "DOMINATE", "REACHING_DEF", "SOURCE_FILE", "TAGGED_BY") - val In: Array[String] = Array("AST", "CALL", "CFG", "CONTAINS", "POST_DOMINATE", "REF") - } - - val factory = new NodeFactory[MethodDb] { - override val forLabel = Method.Label - - override def createNode(ref: NodeRef[MethodDb]) = - new MethodDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = Method(graph, id) - } } -trait MethodBase extends AbstractNode with AstNodeBase with CfgNodeBase with DeclarationBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def astParentFullName: String - def astParentType: String - def code: String - def columnNumber: Option[scala.Int] - def columnNumberEnd: Option[scala.Int] - def filename: String - def fullName: String - def hash: Option[String] - def isExternal: Boolean - def lineNumber: Option[scala.Int] - def lineNumberEnd: Option[scala.Int] - def name: String - def offset: Option[scala.Int] - def offsetEnd: Option[scala.Int] - def order: scala.Int - def signature: String - -} - -class Method(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[MethodDb](graph_4762, id_4762) +class Method(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 26.toShort, seq_4762) with MethodBase - with StoredNode - with AstNode with CfgNode - with Declaration { - override def astParentFullName: String = get().astParentFullName - override def astParentType: String = get().astParentType - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def columnNumberEnd: Option[scala.Int] = get().columnNumberEnd - override def filename: String = get().filename - override def fullName: String = get().fullName - override def hash: Option[String] = get().hash - override def isExternal: Boolean = get().isExternal - override def lineNumber: Option[scala.Int] = get().lineNumber - override def lineNumberEnd: Option[scala.Int] = get().lineNumberEnd - override def name: String = get().name - override def offset: Option[scala.Int] = get().offset - override def offsetEnd: Option[scala.Int] = get().offsetEnd - override def order: scala.Int = get().order - override def signature: String = get().signature - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "AST_PARENT_FULL_NAME" => Method.PropertyDefaults.AstParentFullName - case "AST_PARENT_TYPE" => Method.PropertyDefaults.AstParentType - case "CODE" => Method.PropertyDefaults.Code - case "FILENAME" => Method.PropertyDefaults.Filename - case "FULL_NAME" => Method.PropertyDefaults.FullName - case "IS_EXTERNAL" => Method.PropertyDefaults.IsExternal - case "NAME" => Method.PropertyDefaults.Name - case "ORDER" => Method.PropertyDefaults.Order - case "SIGNATURE" => Method.PropertyDefaults.Signature - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def astOut: Iterator[AstNode] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to ANNOTATION via AST OUT edge. - */ - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = get()._annotationViaAstOut - - /** Root of the abstract syntax tree Traverse to BLOCK via AST OUT edge. - */ - /** Root of the abstract syntax tree */ - @overflowdb.traversal.help.Doc(info = """Root of the abstract syntax tree""") - def block: Block = get().block - - /** Traverse to METHOD via AST OUT edge. - */ - def _methodViaAstOut: overflowdb.traversal.Traversal[Method] = get()._methodViaAstOut - - /** Parameters of the method Traverse to METHOD_PARAMETER_IN via AST OUT edge. - */ - /** Parameters of the method */ - @overflowdb.traversal.help.Doc(info = """Parameters of the method""") - def parameter: overflowdb.traversal.Traversal[MethodParameterIn] = get().parameter - - /** Traverse to METHOD_PARAMETER_OUT via AST OUT edge. - */ - def _methodParameterOutViaAstOut: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaAstOut - - /** Formal return parameters Traverse to METHOD_RETURN via AST OUT edge. - */ - /** Formal return parameters */ - @overflowdb.traversal.help.Doc(info = """Formal return parameters""") - def methodReturn: MethodReturn = get().methodReturn - - /** Traverse to MODIFIER via AST OUT edge. - */ - def _modifierViaAstOut: overflowdb.traversal.Traversal[Modifier] = get()._modifierViaAstOut - - /** Traverse to TYPE_DECL via AST OUT edge. - */ - def _typeDeclViaAstOut: overflowdb.traversal.Traversal[TypeDecl] = get()._typeDeclViaAstOut - - /** Traverse to TYPE_PARAMETER via AST OUT edge. - */ - def _typeParameterViaAstOut: overflowdb.traversal.Traversal[TypeParameter] = get()._typeParameterViaAstOut - - def cfgOut: Iterator[AstNode] = get().cfgOut - override def _cfgOut = get()._cfgOut - - /** First control flow graph node Traverse to CFG_NODE via CFG OUT edge. - */ - /** First control flow graph node */ - @overflowdb.traversal.help.Doc(info = """First control flow graph node""") - def cfgFirst: overflowdb.traversal.Traversal[CfgNode] = get().cfgFirst - - /** Traverse to METHOD_RETURN via CFG OUT edge. - */ - def _methodReturnViaCfgOut: Option[MethodReturn] = get()._methodReturnViaCfgOut - - def containsOut: Iterator[CfgNode] = get().containsOut - override def _containsOut = get()._containsOut - - /** Traverse to BLOCK via CONTAINS OUT edge. - */ - def _blockViaContainsOut: overflowdb.traversal.Traversal[Block] = get()._blockViaContainsOut - - /** Traverse to CALL via CONTAINS OUT edge. - */ - def _callViaContainsOut: overflowdb.traversal.Traversal[Call] = get()._callViaContainsOut - - /** Traverse to CONTROL_STRUCTURE via CONTAINS OUT edge. - */ - def _controlStructureViaContainsOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaContainsOut - - /** Traverse to FIELD_IDENTIFIER via CONTAINS OUT edge. - */ - def _fieldIdentifierViaContainsOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaContainsOut - - /** Traverse to IDENTIFIER via CONTAINS OUT edge. - */ - def _identifierViaContainsOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaContainsOut - - /** Traverse to JUMP_TARGET via CONTAINS OUT edge. - */ - def _jumpTargetViaContainsOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaContainsOut - - /** Literals used in the method Traverse to LITERAL via CONTAINS OUT edge. - */ - /** Literals used in the method */ - @overflowdb.traversal.help.Doc(info = """Literals used in the method""") - def literal: overflowdb.traversal.Traversal[Literal] = get().literal - - /** Traverse to METHOD_REF via CONTAINS OUT edge. - */ - def _methodRefViaContainsOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaContainsOut - - /** Traverse to RETURN via CONTAINS OUT edge. - */ - def _returnViaContainsOut: overflowdb.traversal.Traversal[Return] = get()._returnViaContainsOut - - /** Traverse to TEMPLATE_DOM via CONTAINS OUT edge. - */ - def _templateDomViaContainsOut: overflowdb.traversal.Traversal[TemplateDom] = get()._templateDomViaContainsOut - - /** Traverse to TYPE_REF via CONTAINS OUT edge. - */ - def _typeRefViaContainsOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaContainsOut - - /** Traverse to UNKNOWN via CONTAINS OUT edge. - */ - def _unknownViaContainsOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaContainsOut - - def dominateOut: Iterator[CfgNode] = get().dominateOut - override def _dominateOut = get()._dominateOut - - /** Traverse to BLOCK via DOMINATE OUT edge. - */ - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateOut - - /** Traverse to CALL via DOMINATE OUT edge. - */ - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaDominateOut - - /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. - */ - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateOut - - /** Traverse to IDENTIFIER via DOMINATE OUT edge. - */ - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateOut - - /** Traverse to LITERAL via DOMINATE OUT edge. - */ - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateOut - - /** Traverse to METHOD_REF via DOMINATE OUT edge. - */ - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateOut - - /** Traverse to METHOD_RETURN via DOMINATE OUT edge. - */ - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaDominateOut - - /** Traverse to RETURN via DOMINATE OUT edge. - */ - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateOut - - /** Traverse to TYPE_REF via DOMINATE OUT edge. - */ - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateOut - - /** Traverse to UNKNOWN via DOMINATE OUT edge. - */ - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateOut - - def reachingDefOut: Iterator[CfgNode] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to CALL via REACHING_DEF OUT edge. - */ - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefOut - - /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. - */ - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefOut - - /** Traverse to LITERAL via REACHING_DEF OUT edge. - */ - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefOut - - /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF OUT edge. - */ - def _methodParameterInViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterIn] = - get()._methodParameterInViaReachingDefOut - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. - */ - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefOut - - /** Traverse to METHOD_REF via REACHING_DEF OUT edge. - */ - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefOut - - /** Traverse to RETURN via REACHING_DEF OUT edge. - */ - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefOut - - /** Traverse to TYPE_REF via REACHING_DEF OUT edge. - */ - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefOut - - def sourceFileOut: Iterator[File] = get().sourceFileOut - override def _sourceFileOut = get()._sourceFileOut - - /** Traverse to FILE via SOURCE_FILE OUT edge. - */ - def _fileViaSourceFileOut: overflowdb.traversal.Traversal[File] = get()._fileViaSourceFileOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def astIn: Iterator[AstNode] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to METHOD via AST IN edge. - */ - def _methodViaAstIn: Option[Method] = get()._methodViaAstIn - - /** Traverse to NAMESPACE_BLOCK via AST IN edge. - */ - def _namespaceBlockViaAstIn: Option[NamespaceBlock] = get()._namespaceBlockViaAstIn - - /** Traverse to TYPE_DECL via AST IN edge. - */ - def _typeDeclViaAstIn: Option[TypeDecl] = get()._typeDeclViaAstIn - - def callIn: Iterator[Call] = get().callIn - override def _callIn = get()._callIn - - /** Traverse to CALL via CALL IN edge. - */ - def _callViaCallIn: overflowdb.traversal.Traversal[Call] = get()._callViaCallIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def containsIn: Iterator[AstNode] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to FILE via CONTAINS IN edge. - */ - def _fileViaContainsIn: overflowdb.traversal.Traversal[File] = get()._fileViaContainsIn - - /** Traverse to TYPE_DECL via CONTAINS IN edge. - */ - def _typeDeclViaContainsIn: overflowdb.traversal.Traversal[TypeDecl] = get()._typeDeclViaContainsIn - - def postDominateIn: Iterator[CfgNode] = get().postDominateIn - override def _postDominateIn = get()._postDominateIn - - /** Traverse to BLOCK via POST_DOMINATE IN edge. - */ - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateIn - - /** Traverse to CALL via POST_DOMINATE IN edge. - */ - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateIn - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. - */ - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateIn - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. - */ - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateIn - - /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. - */ - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateIn - - /** Traverse to LITERAL via POST_DOMINATE IN edge. - */ - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateIn - - /** Traverse to METHOD_REF via POST_DOMINATE IN edge. - */ - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateIn - - /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. - */ - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaPostDominateIn - - /** Traverse to RETURN via POST_DOMINATE IN edge. - */ - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateIn - - /** Traverse to TYPE_REF via POST_DOMINATE IN edge. - */ - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateIn - - /** Traverse to UNKNOWN via POST_DOMINATE IN edge. - */ - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateIn - - def refIn: Iterator[StoredNode] = get().refIn - override def _refIn = get()._refIn - - /** Traverse to BINDING via REF IN edge. - */ - def _bindingViaRefIn: overflowdb.traversal.Traversal[Binding] = get()._bindingViaRefIn - - /** Traverse to METHOD_REF via REF IN edge. - */ - def _methodRefViaRefIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaRefIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Method.Label - } + with Declaration + with StaticType[MethodEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "astParentFullName" - case 2 => "astParentType" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "columnNumberEnd" - case 6 => "filename" - case 7 => "fullName" - case 8 => "hash" - case 9 => "isExternal" - case 10 => "lineNumber" - case 11 => "lineNumberEnd" - case 12 => "name" - case 13 => "offset" - case 14 => "offsetEnd" - case 15 => "order" - case 16 => "signature" + case 0 => "astParentFullName" + case 1 => "astParentType" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "columnNumberEnd" + case 5 => "filename" + case 6 => "fullName" + case 7 => "hash" + case 8 => "isExternal" + case 9 => "lineNumber" + case 10 => "lineNumberEnd" + case 11 => "name" + case 12 => "offset" + case 13 => "offsetEnd" + case 14 => "order" + case 15 => "signature" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => astParentFullName - case 2 => astParentType - case 3 => code - case 4 => columnNumber - case 5 => columnNumberEnd - case 6 => filename - case 7 => fullName - case 8 => hash - case 9 => isExternal - case 10 => lineNumber - case 11 => lineNumberEnd - case 12 => name - case 13 => offset - case 14 => offsetEnd - case 15 => order - case 16 => signature + case 0 => this.astParentFullName + case 1 => this.astParentType + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.columnNumberEnd + case 5 => this.filename + case 6 => this.fullName + case 7 => this.hash + case 8 => this.isExternal + case 9 => this.lineNumber + case 10 => this.lineNumberEnd + case 11 => this.name + case 12 => this.offset + case 13 => this.offsetEnd + case 14 => this.order + case 15 => this.signature + case _ => null } override def productPrefix = "Method" - override def productArity = 17 + override def productArity = 16 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Method] } -class MethodDb(ref: NodeRef[NodeDb]) - extends NodeDb(ref) - with StoredNode - with AstNode - with CfgNode - with Declaration - with MethodBase { - - override def layoutInformation: NodeLayoutInformation = Method.layoutInformation - - private var _astParentFullName: String = Method.PropertyDefaults.AstParentFullName - def astParentFullName: String = _astParentFullName - private var _astParentType: String = Method.PropertyDefaults.AstParentType - def astParentType: String = _astParentType - private var _code: String = Method.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _columnNumberEnd: Integer = null - def columnNumberEnd: Option[scala.Int] = Option(_columnNumberEnd).asInstanceOf[Option[scala.Int]] - private var _filename: String = Method.PropertyDefaults.Filename - def filename: String = _filename - private var _fullName: String = Method.PropertyDefaults.FullName - def fullName: String = _fullName - private var _hash: String = null - def hash: Option[String] = Option(_hash).asInstanceOf[Option[String]] - private var _isExternal: java.lang.Boolean = Method.PropertyDefaults.IsExternal - def isExternal: Boolean = _isExternal - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumberEnd: Integer = null - def lineNumberEnd: Option[scala.Int] = Option(_lineNumberEnd).asInstanceOf[Option[scala.Int]] - private var _name: String = Method.PropertyDefaults.Name - def name: String = _name - private var _offset: Integer = null - def offset: Option[scala.Int] = Option(_offset).asInstanceOf[Option[scala.Int]] - private var _offsetEnd: Integer = null - def offsetEnd: Option[scala.Int] = Option(_offsetEnd).asInstanceOf[Option[scala.Int]] - private var _order: Integer = Method.PropertyDefaults.Order - def order: scala.Int = _order - private var _signature: String = Method.PropertyDefaults.Signature - def signature: String = _signature - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("AST_PARENT_FULL_NAME", astParentFullName) - properties.put("AST_PARENT_TYPE", astParentType) - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - columnNumberEnd.map { value => properties.put("COLUMN_NUMBER_END", value) } - properties.put("FILENAME", filename) - properties.put("FULL_NAME", fullName) - hash.map { value => properties.put("HASH", value) } - properties.put("IS_EXTERNAL", isExternal) - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - lineNumberEnd.map { value => properties.put("LINE_NUMBER_END", value) } - properties.put("NAME", name) - offset.map { value => properties.put("OFFSET", value) } - offsetEnd.map { value => properties.put("OFFSET_END", value) } - properties.put("ORDER", order) - properties.put("SIGNATURE", signature) - - properties - } +object NewMethod { + def apply(): NewMethod = new NewMethod + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == astParentFullName)) { properties.put("AST_PARENT_FULL_NAME", astParentFullName) } - if (!(("") == astParentType)) { properties.put("AST_PARENT_TYPE", astParentType) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - columnNumberEnd.map { value => properties.put("COLUMN_NUMBER_END", value) } - if (!(("") == filename)) { properties.put("FILENAME", filename) } - if (!(("") == fullName)) { properties.put("FULL_NAME", fullName) } - hash.map { value => properties.put("HASH", value) } - if (!((false) == isExternal)) { properties.put("IS_EXTERNAL", isExternal) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - lineNumberEnd.map { value => properties.put("LINE_NUMBER_END", value) } - if (!(("") == name)) { properties.put("NAME", name) } - offset.map { value => properties.put("OFFSET", value) } - offsetEnd.map { value => properties.put("OFFSET_END", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (!(("") == signature)) { properties.put("SIGNATURE", signature) } - - properties + object InsertionHelpers { + object NewNodeInserter_Method_astParentFullName 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: NewMethod => + dstCast(offset) = generated.astParentFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Method_astParentType 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: NewMethod => + dstCast(offset) = generated.astParentType + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Method_code 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: NewMethod => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Method_columnNumber 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[Int]] + 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: NewMethod => + generated.columnNumber 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_Method_columnNumberEnd 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[Int]] + 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: NewMethod => + generated.columnNumberEnd 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_Method_filename 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: NewMethod => + dstCast(offset) = generated.filename + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Method_fullName 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: NewMethod => + dstCast(offset) = generated.fullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Method_hash 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: NewMethod => + generated.hash 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_Method_isExternal 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[Boolean]] + 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: NewMethod => + dstCast(offset) = generated.isExternal + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Method_lineNumber 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[Int]] + 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: NewMethod => + generated.lineNumber 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_Method_lineNumberEnd 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[Int]] + 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: NewMethod => + generated.lineNumberEnd 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_Method_name 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: NewMethod => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Method_offset 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[Int]] + 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: NewMethod => + generated.offset 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_Method_offsetEnd 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[Int]] + 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: NewMethod => + generated.offsetEnd 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_Method_order 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[Int]] + 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: NewMethod => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Method_signature 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: NewMethod => + dstCast(offset) = generated.signature + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} + +class NewMethod extends NewNode(26.toShort) with MethodBase with AstNodeNew with CfgNodeNew with DeclarationNew { + override type StoredNodeType = Method + override def label: String = "METHOD" - import overflowdb.traversal._ - def astOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](0) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = astOut.collectAll[Annotation] - def block: Block = try { astOut.collectAll[Block].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "OUT edge with label AST to an adjacent BLOCK is mandatory, but not defined for this METHOD node with id=" + id, - e - ) + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMethod.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMethod.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def _methodViaAstOut: overflowdb.traversal.Traversal[Method] = astOut.collectAll[Method] - def parameter: overflowdb.traversal.Traversal[MethodParameterIn] = astOut.collectAll[MethodParameterIn] - def _methodParameterOutViaAstOut: overflowdb.traversal.Traversal[MethodParameterOut] = - astOut.collectAll[MethodParameterOut] - def methodReturn: MethodReturn = try { astOut.collectAll[MethodReturn].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "OUT edge with label AST to an adjacent METHOD_RETURN is mandatory, but not defined for this METHOD node with id=" + id, - e - ) + + var astParentFullName: String = "": String + var astParentType: String = "": String + var code: String = "": String + var columnNumber: Option[Int] = None + var columnNumberEnd: Option[Int] = None + var filename: String = "": String + var fullName: String = "": String + var hash: Option[String] = None + var isExternal: Boolean = false: Boolean + var lineNumber: Option[Int] = None + var lineNumberEnd: Option[Int] = None + var name: String = "": String + var offset: Option[Int] = None + var offsetEnd: Option[Int] = None + var order: Int = -1: Int + var signature: String = "": String + def astParentFullName(value: String): this.type = { this.astParentFullName = value; this } + def astParentType(value: String): this.type = { this.astParentType = value; this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def columnNumberEnd(value: Int): this.type = { this.columnNumberEnd = Option(value); this } + def columnNumberEnd(value: Option[Int]): this.type = { this.columnNumberEnd = value; this } + def filename(value: String): this.type = { this.filename = value; this } + def fullName(value: String): this.type = { this.fullName = value; this } + def hash(value: Option[String]): this.type = { this.hash = value; this } + def hash(value: String): this.type = { this.hash = Option(value); this } + def isExternal(value: Boolean): this.type = { this.isExternal = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def lineNumberEnd(value: Int): this.type = { this.lineNumberEnd = Option(value); this } + def lineNumberEnd(value: Option[Int]): this.type = { this.lineNumberEnd = value; this } + def name(value: String): this.type = { this.name = value; this } + def offset(value: Int): this.type = { this.offset = Option(value); this } + def offset(value: Option[Int]): this.type = { this.offset = value; this } + def offsetEnd(value: Int): this.type = { this.offsetEnd = Option(value); this } + def offsetEnd(value: Option[Int]): this.type = { this.offsetEnd = value; this } + def order(value: Int): this.type = { this.order = value; this } + def signature(value: String): this.type = { this.signature = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 3, 1) + interface.countProperty(this, 4, 1) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 12, columnNumberEnd.size) + interface.countProperty(this, 21, 1) + interface.countProperty(this, 22, 1) + interface.countProperty(this, 23, hash.size) + interface.countProperty(this, 29, 1) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 35, lineNumberEnd.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 41, offset.size) + interface.countProperty(this, 42, offsetEnd.size) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 49, 1) } - def _modifierViaAstOut: overflowdb.traversal.Traversal[Modifier] = astOut.collectAll[Modifier] - def _typeDeclViaAstOut: overflowdb.traversal.Traversal[TypeDecl] = astOut.collectAll[TypeDecl] - def _typeParameterViaAstOut: overflowdb.traversal.Traversal[TypeParameter] = astOut.collectAll[TypeParameter] - - def cfgOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](1) - override def _cfgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def cfgFirst: overflowdb.traversal.Traversal[CfgNode] = cfgOut.collectAll[CfgNode] - def _methodReturnViaCfgOut: Option[MethodReturn] = cfgOut.collectAll[MethodReturn].nextOption() - - def containsOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](2) - override def _containsOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _blockViaContainsOut: overflowdb.traversal.Traversal[Block] = containsOut.collectAll[Block] - def _callViaContainsOut: overflowdb.traversal.Traversal[Call] = containsOut.collectAll[Call] - def _controlStructureViaContainsOut: overflowdb.traversal.Traversal[ControlStructure] = - containsOut.collectAll[ControlStructure] - def _fieldIdentifierViaContainsOut: overflowdb.traversal.Traversal[FieldIdentifier] = - containsOut.collectAll[FieldIdentifier] - def _identifierViaContainsOut: overflowdb.traversal.Traversal[Identifier] = containsOut.collectAll[Identifier] - def _jumpTargetViaContainsOut: overflowdb.traversal.Traversal[JumpTarget] = containsOut.collectAll[JumpTarget] - def literal: overflowdb.traversal.Traversal[Literal] = containsOut.collectAll[Literal] - def _methodRefViaContainsOut: overflowdb.traversal.Traversal[MethodRef] = containsOut.collectAll[MethodRef] - def _returnViaContainsOut: overflowdb.traversal.Traversal[Return] = containsOut.collectAll[Return] - def _templateDomViaContainsOut: overflowdb.traversal.Traversal[TemplateDom] = containsOut.collectAll[TemplateDom] - def _typeRefViaContainsOut: overflowdb.traversal.Traversal[TypeRef] = containsOut.collectAll[TypeRef] - def _unknownViaContainsOut: overflowdb.traversal.Traversal[Unknown] = containsOut.collectAll[Unknown] - - def dominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](3) - override def _dominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = dominateOut.collectAll[Block] - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = dominateOut.collectAll[Call] - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateOut.collectAll[FieldIdentifier] - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = dominateOut.collectAll[Identifier] - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = dominateOut.collectAll[Literal] - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = dominateOut.collectAll[MethodRef] - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = dominateOut.collectAll[MethodReturn] - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = dominateOut.collectAll[Return] - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = dominateOut.collectAll[TypeRef] - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = dominateOut.collectAll[Unknown] - - def reachingDefOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = reachingDefOut.collectAll[Call] - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = reachingDefOut.collectAll[Identifier] - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = reachingDefOut.collectAll[Literal] - def _methodParameterInViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterIn] = - reachingDefOut.collectAll[MethodParameterIn] - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefOut.collectAll[MethodParameterOut] - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = reachingDefOut.collectAll[MethodRef] - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = reachingDefOut.collectAll[Return] - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = reachingDefOut.collectAll[TypeRef] - - def sourceFileOut: Iterator[File] = createAdjacentNodeScalaIteratorByOffSet[File](5) - override def _sourceFileOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _fileViaSourceFileOut: overflowdb.traversal.Traversal[File] = sourceFileOut.collectAll[File] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](6) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def astIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](7) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _methodViaAstIn: Option[Method] = astIn.collectAll[Method].nextOption() - def _namespaceBlockViaAstIn: Option[NamespaceBlock] = astIn.collectAll[NamespaceBlock].nextOption() - def _typeDeclViaAstIn: Option[TypeDecl] = astIn.collectAll[TypeDecl].nextOption() - - def callIn: Iterator[Call] = createAdjacentNodeScalaIteratorByOffSet[Call](8) - override def _callIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _callViaCallIn: overflowdb.traversal.Traversal[Call] = callIn.collectAll[Call] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](9) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - - def containsIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](10) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](10) - def _fileViaContainsIn: overflowdb.traversal.Traversal[File] = containsIn.collectAll[File] - def _typeDeclViaContainsIn: overflowdb.traversal.Traversal[TypeDecl] = containsIn.collectAll[TypeDecl] - - def postDominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](11) - override def _postDominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](11) - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = postDominateIn.collectAll[Block] - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = postDominateIn.collectAll[Call] - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - postDominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateIn.collectAll[FieldIdentifier] - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = postDominateIn.collectAll[Identifier] - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = postDominateIn.collectAll[Literal] - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = postDominateIn.collectAll[MethodRef] - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - postDominateIn.collectAll[MethodReturn] - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = postDominateIn.collectAll[Return] - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = postDominateIn.collectAll[TypeRef] - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = postDominateIn.collectAll[Unknown] - - def refIn: Iterator[StoredNode] = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - override def _refIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - def _bindingViaRefIn: overflowdb.traversal.Traversal[Binding] = refIn.collectAll[Binding] - def _methodRefViaRefIn: overflowdb.traversal.Traversal[MethodRef] = refIn.collectAll[MethodRef] - - override def label: String = { - Method.Label + + override def copy: this.type = { + val newInstance = new NewMethod + newInstance.astParentFullName = this.astParentFullName + newInstance.astParentType = this.astParentType + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.columnNumberEnd = this.columnNumberEnd + newInstance.filename = this.filename + newInstance.fullName = this.fullName + newInstance.hash = this.hash + newInstance.isExternal = this.isExternal + newInstance.lineNumber = this.lineNumber + newInstance.lineNumberEnd = this.lineNumberEnd + newInstance.name = this.name + newInstance.offset = this.offset + newInstance.offsetEnd = this.offsetEnd + newInstance.order = this.order + newInstance.signature = this.signature + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "astParentFullName" - case 2 => "astParentType" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "columnNumberEnd" - case 6 => "filename" - case 7 => "fullName" - case 8 => "hash" - case 9 => "isExternal" - case 10 => "lineNumber" - case 11 => "lineNumberEnd" - case 12 => "name" - case 13 => "offset" - case 14 => "offsetEnd" - case 15 => "order" - case 16 => "signature" + case 0 => "astParentFullName" + case 1 => "astParentType" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "columnNumberEnd" + case 5 => "filename" + case 6 => "fullName" + case 7 => "hash" + case 8 => "isExternal" + case 9 => "lineNumber" + case 10 => "lineNumberEnd" + case 11 => "name" + case 12 => "offset" + case 13 => "offsetEnd" + case 14 => "order" + case 15 => "signature" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => astParentFullName - case 2 => astParentType - case 3 => code - case 4 => columnNumber - case 5 => columnNumberEnd - case 6 => filename - case 7 => fullName - case 8 => hash - case 9 => isExternal - case 10 => lineNumber - case 11 => lineNumberEnd - case 12 => name - case 13 => offset - case 14 => offsetEnd - case 15 => order - case 16 => signature - } - - override def productPrefix = "Method" - override def productArity = 17 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[MethodDb] - - override def property(key: String): Any = { - key match { - case "AST_PARENT_FULL_NAME" => this._astParentFullName - case "AST_PARENT_TYPE" => this._astParentType - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "COLUMN_NUMBER_END" => this._columnNumberEnd - case "FILENAME" => this._filename - case "FULL_NAME" => this._fullName - case "HASH" => this._hash - case "IS_EXTERNAL" => this._isExternal - case "LINE_NUMBER" => this._lineNumber - case "LINE_NUMBER_END" => this._lineNumberEnd - case "NAME" => this._name - case "OFFSET" => this._offset - case "OFFSET_END" => this._offsetEnd - case "ORDER" => this._order - case "SIGNATURE" => this._signature - - case _ => null - } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "AST_PARENT_FULL_NAME" => this._astParentFullName = value.asInstanceOf[String] - case "AST_PARENT_TYPE" => this._astParentType = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "COLUMN_NUMBER_END" => this._columnNumberEnd = value.asInstanceOf[scala.Int] - case "FILENAME" => this._filename = value.asInstanceOf[String] - case "FULL_NAME" => this._fullName = value.asInstanceOf[String] - case "HASH" => this._hash = value.asInstanceOf[String] - case "IS_EXTERNAL" => this._isExternal = value.asInstanceOf[Boolean] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER_END" => this._lineNumberEnd = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "OFFSET" => this._offset = value.asInstanceOf[scala.Int] - case "OFFSET_END" => this._offsetEnd = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "SIGNATURE" => this._signature = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._astParentFullName = newNode.asInstanceOf[NewMethod].astParentFullName - this._astParentType = newNode.asInstanceOf[NewMethod].astParentType - this._code = newNode.asInstanceOf[NewMethod].code - this._columnNumber = newNode.asInstanceOf[NewMethod].columnNumber match { - case None => null; case Some(value) => value - } - this._columnNumberEnd = newNode.asInstanceOf[NewMethod].columnNumberEnd match { - case None => null; case Some(value) => value + case 0 => this.astParentFullName + case 1 => this.astParentType + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.columnNumberEnd + case 5 => this.filename + case 6 => this.fullName + case 7 => this.hash + case 8 => this.isExternal + case 9 => this.lineNumber + case 10 => this.lineNumberEnd + case 11 => this.name + case 12 => this.offset + case 13 => this.offsetEnd + case 14 => this.order + case 15 => this.signature + case _ => null } - this._filename = newNode.asInstanceOf[NewMethod].filename - this._fullName = newNode.asInstanceOf[NewMethod].fullName - this._hash = newNode.asInstanceOf[NewMethod].hash match { case None => null; case Some(value) => value } - this._isExternal = newNode.asInstanceOf[NewMethod].isExternal - this._lineNumber = newNode.asInstanceOf[NewMethod].lineNumber match { case None => null; case Some(value) => value } - this._lineNumberEnd = newNode.asInstanceOf[NewMethod].lineNumberEnd match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewMethod].name - this._offset = newNode.asInstanceOf[NewMethod].offset match { case None => null; case Some(value) => value } - this._offsetEnd = newNode.asInstanceOf[NewMethod].offsetEnd match { case None => null; case Some(value) => value } - this._order = newNode.asInstanceOf[NewMethod].order - this._signature = newNode.asInstanceOf[NewMethod].signature - - graph.indexManager.putIfIndexed("FULL_NAME", newNode.asInstanceOf[NewMethod].fullName, this.ref) - } + override def productPrefix = "NewMethod" + override def productArity = 16 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMethod] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodParameterIn.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodParameterIn.scala index 3d13c84ef..c225e31c3 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodParameterIn.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodParameterIn.scala @@ -1,59 +1,170 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait MethodParameterInEMT + extends AnyRef + with CfgNodeEMT + with DeclarationEMT + with HasClosureBindingIdEMT + with HasDynamicTypeHintFullNameEMT + with HasEvaluationStrategyEMT + with HasIndexEMT + with HasIsVariadicEMT + with HasPossibleTypesEMT + with HasTypeFullNameEMT + +trait MethodParameterInBase + extends AbstractNode + with CfgNodeBase + with DeclarationBase + with StaticType[MethodParameterInEMT] { -object MethodParameterIn { - def apply(graph: Graph, id: Long) = new MethodParameterIn(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + this.closureBindingId.foreach { p => res.put("CLOSURE_BINDING_ID", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + val tmpDynamicTypeHintFullName = this.dynamicTypeHintFullName; + if (tmpDynamicTypeHintFullName.nonEmpty) res.put("DYNAMIC_TYPE_HINT_FULL_NAME", tmpDynamicTypeHintFullName) + if (("": String) != this.evaluationStrategy) res.put("EVALUATION_STRATEGY", this.evaluationStrategy) + if ((-1: Int) != this.index) res.put("INDEX", this.index) + if ((false: Boolean) != this.isVariadic) res.put("IS_VARIADIC", this.isVariadic) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + val tmpPossibleTypes = this.possibleTypes; + if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) + if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) + res + } +} +object MethodParameterIn { val Label = "METHOD_PARAMETER_IN" - object PropertyNames { - val ClosureBindingId = "CLOSURE_BINDING_ID" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" + + /** Identifier which uniquely describes a CLOSURE_BINDING. This property is used to match captured LOCAL nodes with + * the corresponding CLOSURE_BINDING nodes + */ + val ClosureBindingId = "CLOSURE_BINDING_ID" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ val DynamicTypeHintFullName = "DYNAMIC_TYPE_HINT_FULL_NAME" - val EvaluationStrategy = "EVALUATION_STRATEGY" - val Index = "INDEX" - val IsVariadic = "IS_VARIADIC" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val PossibleTypes = "POSSIBLE_TYPES" - val TypeFullName = "TYPE_FULL_NAME" - val all: Set[String] = Set( - ClosureBindingId, - Code, - ColumnNumber, - DynamicTypeHintFullName, - EvaluationStrategy, - Index, - IsVariadic, - LineNumber, - Name, - Order, - PossibleTypes, - TypeFullName - ) - val allAsJava: java.util.Set[String] = all.asJava - } + /** For formal method input parameters, output parameters, and return parameters, this field holds the evaluation + * strategy, which is one of the following: 1) `BY_REFERENCE` indicates that the parameter is passed by reference, + * 2) `BY_VALUE` indicates that it is passed by value, that is, a copy is made, 3) `BY_SHARING` the parameter is a + * pointer/reference and it is shared with the caller/callee. While a copy of the pointer is made, a copy of the + * object that it points to is not made. + */ + val EvaluationStrategy = "EVALUATION_STRATEGY" + + /** Specifies an index, e.g., for a parameter or argument. Explicit parameters are numbered from 1 to N, while index + * 0 is reserved for implicit self / this parameter. + */ + val Index = "INDEX" + + /** Specifies whether a parameter is the variadic argument handling parameter of a variadic method. Only one + * parameter of a method is allowed to have this property set to true. + */ + val IsVariadic = "IS_VARIADIC" + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = "POSSIBLE_TYPES" + + /** 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 = "TYPE_FULL_NAME" + } object Properties { - val ClosureBindingId = new overflowdb.PropertyKey[String]("CLOSURE_BINDING_ID") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val DynamicTypeHintFullName = new overflowdb.PropertyKey[IndexedSeq[String]]("DYNAMIC_TYPE_HINT_FULL_NAME") - val EvaluationStrategy = new overflowdb.PropertyKey[String]("EVALUATION_STRATEGY") - val Index = new overflowdb.PropertyKey[scala.Int]("INDEX") - val IsVariadic = new overflowdb.PropertyKey[Boolean]("IS_VARIADIC") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val PossibleTypes = new overflowdb.PropertyKey[IndexedSeq[String]]("POSSIBLE_TYPES") - val TypeFullName = new overflowdb.PropertyKey[String]("TYPE_FULL_NAME") + /** Identifier which uniquely describes a CLOSURE_BINDING. This property is used to match captured LOCAL nodes with + * the corresponding CLOSURE_BINDING nodes + */ + val ClosureBindingId = flatgraph.OptionalPropertyKey[String](kind = 8, name = "CLOSURE_BINDING_ID") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ + val DynamicTypeHintFullName = flatgraph.MultiPropertyKey[String](kind = 18, name = "DYNAMIC_TYPE_HINT_FULL_NAME") + + /** For formal method input parameters, output parameters, and return parameters, this field holds the evaluation + * strategy, which is one of the following: 1) `BY_REFERENCE` indicates that the parameter is passed by reference, + * 2) `BY_VALUE` indicates that it is passed by value, that is, a copy is made, 3) `BY_SHARING` the parameter is a + * pointer/reference and it is shared with the caller/callee. While a copy of the pointer is made, a copy of the + * object that it points to is not made. + */ + val EvaluationStrategy = + flatgraph.SinglePropertyKey[String](kind = 19, name = "EVALUATION_STRATEGY", default = "") + + /** Specifies an index, e.g., for a parameter or argument. Explicit parameters are numbered from 1 to N, while index + * 0 is reserved for implicit self / this parameter. + */ + val Index = flatgraph.SinglePropertyKey[Int](kind = 26, name = "INDEX", default = -1: Int) + + /** Specifies whether a parameter is the variadic argument handling parameter of a variadic method. Only one + * parameter of a method is allowed to have this property set to true. + */ + val IsVariadic = flatgraph.SinglePropertyKey[Boolean](kind = 30, name = "IS_VARIADIC", default = false) + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = flatgraph.MultiPropertyKey[String](kind = 47, name = "POSSIBLE_TYPES") + + /** 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 = 52, name = "TYPE_FULL_NAME", default = "") } - object PropertyDefaults { val Code = "" val EvaluationStrategy = "" @@ -63,544 +174,1723 @@ object MethodParameterIn { val Order = -1: Int val TypeFullName = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.CapturedBy.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ParameterLink.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array("AST", "CAPTURED_BY", "EVAL_TYPE", "PARAMETER_LINK", "REACHING_DEF", "TAGGED_BY") - val In: Array[String] = Array("AST", "CFG", "REACHING_DEF", "REF") - } - - val factory = new NodeFactory[MethodParameterInDb] { - override val forLabel = MethodParameterIn.Label - - override def createNode(ref: NodeRef[MethodParameterInDb]) = - new MethodParameterInDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = MethodParameterIn(graph, id) - } -} - -trait MethodParameterInBase extends AbstractNode with AstNodeBase with CfgNodeBase with DeclarationBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def closureBindingId: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def dynamicTypeHintFullName: IndexedSeq[String] - def evaluationStrategy: String - def index: scala.Int - def isVariadic: Boolean - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int - def possibleTypes: IndexedSeq[String] - def typeFullName: String - } -class MethodParameterIn(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[MethodParameterInDb](graph_4762, id_4762) +class MethodParameterIn(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 27.toShort, seq_4762) with MethodParameterInBase - with StoredNode - with AstNode with CfgNode - with Declaration { - override def closureBindingId: Option[String] = get().closureBindingId - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def dynamicTypeHintFullName: IndexedSeq[String] = get().dynamicTypeHintFullName - override def evaluationStrategy: String = get().evaluationStrategy - override def index: scala.Int = get().index - override def isVariadic: Boolean = get().isVariadic - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def possibleTypes: IndexedSeq[String] = get().possibleTypes - override def typeFullName: String = get().typeFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => MethodParameterIn.PropertyDefaults.Code - case "EVALUATION_STRATEGY" => MethodParameterIn.PropertyDefaults.EvaluationStrategy - case "INDEX" => MethodParameterIn.PropertyDefaults.Index - case "IS_VARIADIC" => MethodParameterIn.PropertyDefaults.IsVariadic - case "NAME" => MethodParameterIn.PropertyDefaults.Name - case "ORDER" => MethodParameterIn.PropertyDefaults.Order - case "TYPE_FULL_NAME" => MethodParameterIn.PropertyDefaults.TypeFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def astOut: Iterator[Expression] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to ANNOTATION via AST OUT edge. - */ - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = get()._annotationViaAstOut - - /** Traverse to UNKNOWN via AST OUT edge. - */ - def _unknownViaAstOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstOut - - def capturedByOut: Iterator[ClosureBinding] = get().capturedByOut - override def _capturedByOut = get()._capturedByOut - - /** Traverse to CLOSURE_BINDING via CAPTURED_BY OUT edge. - */ - def _closureBindingViaCapturedByOut: overflowdb.traversal.Traversal[ClosureBinding] = - get()._closureBindingViaCapturedByOut - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** Traverse to parameter type Traverse to TYPE via EVAL_TYPE OUT edge. - */ - /** Traverse to parameter type */ - @overflowdb.traversal.help.Doc(info = """Traverse to parameter type""") - def typ: Type = get().typ - - def parameterLinkOut: Iterator[MethodParameterOut] = get().parameterLinkOut - override def _parameterLinkOut = get()._parameterLinkOut - - /** Traverse to corresponding formal output parameter Traverse to METHOD_PARAMETER_OUT via PARAMETER_LINK OUT edge. - */ - /** Traverse to corresponding formal output parameter */ - @overflowdb.traversal.help.Doc(info = """Traverse to corresponding formal output parameter""") - def asOutput: overflowdb.traversal.Traversal[MethodParameterOut] = get().asOutput - - def reachingDefOut: Iterator[CfgNode] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to CALL via REACHING_DEF OUT edge. - */ - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefOut - - /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. - */ - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefOut - - /** Traverse to LITERAL via REACHING_DEF OUT edge. - */ - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefOut - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. - */ - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefOut - - /** Traverse to METHOD_REF via REACHING_DEF OUT edge. - */ - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefOut - - /** Traverse to RETURN via REACHING_DEF OUT edge. - */ - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefOut - - /** Traverse to TYPE_REF via REACHING_DEF OUT edge. - */ - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def astIn: Iterator[Method] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to method associated with this formal parameter Traverse to METHOD via AST IN edge. - */ - /** Traverse to method associated with this formal parameter */ - @overflowdb.traversal.help.Doc(info = """Traverse to method associated with this formal parameter""") - def method: Method = get().method - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def reachingDefIn: Iterator[Method] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - /** Traverse to METHOD via REACHING_DEF IN edge. - */ - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = get()._methodViaReachingDefIn - - def refIn: Iterator[StoredNode] = get().refIn - override def _refIn = get()._refIn - - /** Traverse to CLOSURE_BINDING via REF IN edge. - */ - def _closureBindingViaRefIn: overflowdb.traversal.Traversal[ClosureBinding] = get()._closureBindingViaRefIn - - /** Places (identifier) where this parameter is being referenced Traverse to IDENTIFIER via REF IN edge. - */ - /** Places (identifier) where this parameter is being referenced */ - @overflowdb.traversal.help.Doc(info = """Places (identifier) where this parameter is being referenced""") - def referencingIdentifiers: overflowdb.traversal.Traversal[Identifier] = get().referencingIdentifiers - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - MethodParameterIn.Label - } + with Declaration + with StaticType[MethodParameterInEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "closureBindingId" - case 2 => "code" - case 3 => "columnNumber" - case 4 => "dynamicTypeHintFullName" - case 5 => "evaluationStrategy" - case 6 => "index" - case 7 => "isVariadic" - case 8 => "lineNumber" - case 9 => "name" - case 10 => "order" - case 11 => "possibleTypes" - case 12 => "typeFullName" + case 0 => "closureBindingId" + case 1 => "code" + case 2 => "columnNumber" + case 3 => "dynamicTypeHintFullName" + case 4 => "evaluationStrategy" + case 5 => "index" + case 6 => "isVariadic" + case 7 => "lineNumber" + case 8 => "name" + case 9 => "order" + case 10 => "possibleTypes" + case 11 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => closureBindingId - case 2 => code - case 3 => columnNumber - case 4 => dynamicTypeHintFullName - case 5 => evaluationStrategy - case 6 => index - case 7 => isVariadic - case 8 => lineNumber - case 9 => name - case 10 => order - case 11 => possibleTypes - case 12 => typeFullName + case 0 => this.closureBindingId + case 1 => this.code + case 2 => this.columnNumber + case 3 => this.dynamicTypeHintFullName + case 4 => this.evaluationStrategy + case 5 => this.index + case 6 => this.isVariadic + case 7 => this.lineNumber + case 8 => this.name + case 9 => this.order + case 10 => this.possibleTypes + case 11 => this.typeFullName + case _ => null } override def productPrefix = "MethodParameterIn" - override def productArity = 13 + override def productArity = 12 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[MethodParameterIn] } -class MethodParameterInDb(ref: NodeRef[NodeDb]) - extends NodeDb(ref) - with StoredNode - with AstNode - with CfgNode - with Declaration - with MethodParameterInBase { - - override def layoutInformation: NodeLayoutInformation = MethodParameterIn.layoutInformation - - private var _closureBindingId: String = null - def closureBindingId: Option[String] = Option(_closureBindingId).asInstanceOf[Option[String]] - private var _code: String = MethodParameterIn.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def dynamicTypeHintFullName: IndexedSeq[String] = _dynamicTypeHintFullName - private var _evaluationStrategy: String = MethodParameterIn.PropertyDefaults.EvaluationStrategy - def evaluationStrategy: String = _evaluationStrategy - private var _index: Integer = MethodParameterIn.PropertyDefaults.Index - def index: scala.Int = _index - private var _isVariadic: java.lang.Boolean = MethodParameterIn.PropertyDefaults.IsVariadic - def isVariadic: Boolean = _isVariadic - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = MethodParameterIn.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = MethodParameterIn.PropertyDefaults.Order - def order: scala.Int = _order - private var _possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def possibleTypes: IndexedSeq[String] = _possibleTypes - private var _typeFullName: String = MethodParameterIn.PropertyDefaults.TypeFullName - def typeFullName: String = _typeFullName - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - closureBindingId.map { value => properties.put("CLOSURE_BINDING_ID", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) - } - properties.put("EVALUATION_STRATEGY", evaluationStrategy) - properties.put("INDEX", index) - properties.put("IS_VARIADIC", isVariadic) - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - properties.put("TYPE_FULL_NAME", typeFullName) - - properties - } +object NewMethodParameterIn { + def apply(): NewMethodParameterIn = new NewMethodParameterIn + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - closureBindingId.map { value => properties.put("CLOSURE_BINDING_ID", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object InsertionHelpers { + object NewNodeInserter_MethodParameterIn_closureBindingId 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: NewMethodParameterIn => + generated.closureBindingId 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_MethodParameterIn_code 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: NewMethodParameterIn => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterIn_columnNumber 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[Int]] + 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: NewMethodParameterIn => + generated.columnNumber 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_MethodParameterIn_dynamicTypeHintFullName 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: NewMethodParameterIn => + for (item <- generated.dynamicTypeHintFullName) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterIn_evaluationStrategy 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: NewMethodParameterIn => + dstCast(offset) = generated.evaluationStrategy + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterIn_index 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[Int]] + 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: NewMethodParameterIn => + dstCast(offset) = generated.index + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterIn_isVariadic 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[Boolean]] + 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: NewMethodParameterIn => + dstCast(offset) = generated.isVariadic + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterIn_lineNumber 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[Int]] + 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: NewMethodParameterIn => + generated.lineNumber 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_MethodParameterIn_name 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: NewMethodParameterIn => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterIn_order 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[Int]] + 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: NewMethodParameterIn => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterIn_possibleTypes 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: NewMethodParameterIn => + for (item <- generated.possibleTypes) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterIn_typeFullName 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: NewMethodParameterIn => + dstCast(offset) = generated.typeFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - if (!(("") == evaluationStrategy)) { properties.put("EVALUATION_STRATEGY", evaluationStrategy) } - if (!((-1: Int) == index)) { properties.put("INDEX", index) } - if (!((false) == isVariadic)) { properties.put("IS_VARIADIC", isVariadic) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - if (!(("") == typeFullName)) { properties.put("TYPE_FULL_NAME", typeFullName) } - - properties } +} - import overflowdb.traversal._ - def astOut: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](0) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = astOut.collectAll[Annotation] - def _unknownViaAstOut: overflowdb.traversal.Traversal[Unknown] = astOut.collectAll[Unknown] - - def capturedByOut: Iterator[ClosureBinding] = createAdjacentNodeScalaIteratorByOffSet[ClosureBinding](1) - override def _capturedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _closureBindingViaCapturedByOut: overflowdb.traversal.Traversal[ClosureBinding] = - capturedByOut.collectAll[ClosureBinding] - - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](2) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def typ: Type = try { evalTypeOut.collectAll[Type].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "OUT edge with label EVAL_TYPE to an adjacent TYPE is mandatory, but not defined for this METHOD_PARAMETER_IN node with id=" + id, - e - ) +class NewMethodParameterIn + extends NewNode(27.toShort) + with MethodParameterInBase + with AstNodeNew + with CfgNodeNew + with DeclarationNew { + override type StoredNodeType = MethodParameterIn + override def label: String = "METHOD_PARAMETER_IN" + + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMethodParameterIn.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - - def parameterLinkOut: Iterator[MethodParameterOut] = createAdjacentNodeScalaIteratorByOffSet[MethodParameterOut](3) - override def _parameterLinkOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def asOutput: overflowdb.traversal.Traversal[MethodParameterOut] = parameterLinkOut.collectAll[MethodParameterOut] - - def reachingDefOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = reachingDefOut.collectAll[Call] - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = reachingDefOut.collectAll[Identifier] - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = reachingDefOut.collectAll[Literal] - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefOut.collectAll[MethodParameterOut] - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = reachingDefOut.collectAll[MethodRef] - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = reachingDefOut.collectAll[Return] - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = reachingDefOut.collectAll[TypeRef] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](5) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def astIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](6) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def method: Method = try { astIn.collectAll[Method].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent METHOD is mandatory, but not defined for this METHOD_PARAMETER_IN node with id=" + id, - e - ) + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMethodParameterIn.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](7) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - - def reachingDefIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](8) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = reachingDefIn.collectAll[Method] - - def refIn: Iterator[StoredNode] = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - override def _refIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - def _closureBindingViaRefIn: overflowdb.traversal.Traversal[ClosureBinding] = refIn.collectAll[ClosureBinding] - def referencingIdentifiers: overflowdb.traversal.Traversal[Identifier] = refIn.collectAll[Identifier] + var closureBindingId: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var dynamicTypeHintFullName: IndexedSeq[String] = ArraySeq.empty + var evaluationStrategy: String = "": String + var index: Int = -1: Int + var isVariadic: Boolean = false: Boolean + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + var possibleTypes: IndexedSeq[String] = ArraySeq.empty + var typeFullName: String = "": String + def closureBindingId(value: Option[String]): this.type = { this.closureBindingId = value; this } + def closureBindingId(value: String): this.type = { this.closureBindingId = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { + this.dynamicTypeHintFullName = value.iterator.to(ArraySeq); this + } + def evaluationStrategy(value: String): this.type = { this.evaluationStrategy = value; this } + def index(value: Int): this.type = { this.index = value; this } + def isVariadic(value: Boolean): this.type = { this.isVariadic = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + 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 typeFullName(value: String): this.type = { this.typeFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 8, closureBindingId.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 18, dynamicTypeHintFullName.size) + interface.countProperty(this, 19, 1) + interface.countProperty(this, 26, 1) + interface.countProperty(this, 30, 1) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 47, possibleTypes.size) + interface.countProperty(this, 52, 1) + } - override def label: String = { - MethodParameterIn.Label + override def copy: this.type = { + val newInstance = new NewMethodParameterIn + newInstance.closureBindingId = this.closureBindingId + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName + newInstance.evaluationStrategy = this.evaluationStrategy + newInstance.index = this.index + newInstance.isVariadic = this.isVariadic + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.possibleTypes = this.possibleTypes + newInstance.typeFullName = this.typeFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "closureBindingId" - case 2 => "code" - case 3 => "columnNumber" - case 4 => "dynamicTypeHintFullName" - case 5 => "evaluationStrategy" - case 6 => "index" - case 7 => "isVariadic" - case 8 => "lineNumber" - case 9 => "name" - case 10 => "order" - case 11 => "possibleTypes" - case 12 => "typeFullName" + case 0 => "closureBindingId" + case 1 => "code" + case 2 => "columnNumber" + case 3 => "dynamicTypeHintFullName" + case 4 => "evaluationStrategy" + case 5 => "index" + case 6 => "isVariadic" + case 7 => "lineNumber" + case 8 => "name" + case 9 => "order" + case 10 => "possibleTypes" + case 11 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => closureBindingId - case 2 => code - case 3 => columnNumber - case 4 => dynamicTypeHintFullName - case 5 => evaluationStrategy - case 6 => index - case 7 => isVariadic - case 8 => lineNumber - case 9 => name - case 10 => order - case 11 => possibleTypes - case 12 => typeFullName - } - - override def productPrefix = "MethodParameterIn" - override def productArity = 13 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[MethodParameterInDb] - - override def property(key: String): Any = { - key match { - case "CLOSURE_BINDING_ID" => this._closureBindingId - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "DYNAMIC_TYPE_HINT_FULL_NAME" => this._dynamicTypeHintFullName - case "EVALUATION_STRATEGY" => this._evaluationStrategy - case "INDEX" => this._index - case "IS_VARIADIC" => this._isVariadic - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - case "POSSIBLE_TYPES" => this._possibleTypes - case "TYPE_FULL_NAME" => this._typeFullName - - case _ => null - } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CLOSURE_BINDING_ID" => this._closureBindingId = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "DYNAMIC_TYPE_HINT_FULL_NAME" => - this._dynamicTypeHintFullName = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "EVALUATION_STRATEGY" => this._evaluationStrategy = value.asInstanceOf[String] - case "INDEX" => this._index = value.asInstanceOf[scala.Int] - case "IS_VARIADIC" => this._isVariadic = value.asInstanceOf[Boolean] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "POSSIBLE_TYPES" => - this._possibleTypes = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "TYPE_FULL_NAME" => this._typeFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) + case 0 => this.closureBindingId + case 1 => this.code + case 2 => this.columnNumber + case 3 => this.dynamicTypeHintFullName + case 4 => this.evaluationStrategy + case 5 => this.index + case 6 => this.isVariadic + case 7 => this.lineNumber + case 8 => this.name + case 9 => this.order + case 10 => this.possibleTypes + case 11 => this.typeFullName + case _ => null } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._closureBindingId = newNode.asInstanceOf[NewMethodParameterIn].closureBindingId match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewMethodParameterIn].code - this._columnNumber = newNode.asInstanceOf[NewMethodParameterIn].columnNumber match { - case None => null; case Some(value) => value - } - this._dynamicTypeHintFullName = - if (newNode.asInstanceOf[NewMethodParameterIn].dynamicTypeHintFullName != null) - newNode.asInstanceOf[NewMethodParameterIn].dynamicTypeHintFullName - else collection.immutable.ArraySeq.empty - this._evaluationStrategy = newNode.asInstanceOf[NewMethodParameterIn].evaluationStrategy - this._index = newNode.asInstanceOf[NewMethodParameterIn].index - this._isVariadic = newNode.asInstanceOf[NewMethodParameterIn].isVariadic - this._lineNumber = newNode.asInstanceOf[NewMethodParameterIn].lineNumber match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewMethodParameterIn].name - this._order = newNode.asInstanceOf[NewMethodParameterIn].order - this._possibleTypes = - if (newNode.asInstanceOf[NewMethodParameterIn].possibleTypes != null) - newNode.asInstanceOf[NewMethodParameterIn].possibleTypes - else collection.immutable.ArraySeq.empty - this._typeFullName = newNode.asInstanceOf[NewMethodParameterIn].typeFullName - - } + override def productPrefix = "NewMethodParameterIn" + override def productArity = 12 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMethodParameterIn] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodParameterOut.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodParameterOut.scala index dac7c1f82..eafa014fd 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodParameterOut.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodParameterOut.scala @@ -1,41 +1,136 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait MethodParameterOutEMT + extends AnyRef + with CfgNodeEMT + with DeclarationEMT + with HasEvaluationStrategyEMT + with HasIndexEMT + with HasIsVariadicEMT + with HasTypeFullNameEMT + +trait MethodParameterOutBase + extends AbstractNode + with CfgNodeBase + with DeclarationBase + with StaticType[MethodParameterOutEMT] { -object MethodParameterOut { - def apply(graph: Graph, id: Long) = new MethodParameterOut(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + if (("": String) != this.evaluationStrategy) res.put("EVALUATION_STRATEGY", this.evaluationStrategy) + if ((-1: Int) != this.index) res.put("INDEX", this.index) + if ((false: Boolean) != this.isVariadic) res.put("IS_VARIADIC", this.isVariadic) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) + res + } +} +object MethodParameterOut { val Label = "METHOD_PARAMETER_OUT" - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** For formal method input parameters, output parameters, and return parameters, this field holds the evaluation + * strategy, which is one of the following: 1) `BY_REFERENCE` indicates that the parameter is passed by reference, + * 2) `BY_VALUE` indicates that it is passed by value, that is, a copy is made, 3) `BY_SHARING` the parameter is a + * pointer/reference and it is shared with the caller/callee. While a copy of the pointer is made, a copy of the + * object that it points to is not made. + */ val EvaluationStrategy = "EVALUATION_STRATEGY" - val Index = "INDEX" - val IsVariadic = "IS_VARIADIC" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val TypeFullName = "TYPE_FULL_NAME" - val all: Set[String] = - Set(Code, ColumnNumber, EvaluationStrategy, Index, IsVariadic, LineNumber, Name, Order, TypeFullName) - val allAsJava: java.util.Set[String] = all.asJava - } + /** Specifies an index, e.g., for a parameter or argument. Explicit parameters are numbered from 1 to N, while index + * 0 is reserved for implicit self / this parameter. + */ + val Index = "INDEX" + + /** Specifies whether a parameter is the variadic argument handling parameter of a variadic method. Only one + * parameter of a method is allowed to have this property set to true. + */ + val IsVariadic = "IS_VARIADIC" + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + + /** 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 = "TYPE_FULL_NAME" + } object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val EvaluationStrategy = new overflowdb.PropertyKey[String]("EVALUATION_STRATEGY") - val Index = new overflowdb.PropertyKey[scala.Int]("INDEX") - val IsVariadic = new overflowdb.PropertyKey[Boolean]("IS_VARIADIC") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val TypeFullName = new overflowdb.PropertyKey[String]("TYPE_FULL_NAME") + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** For formal method input parameters, output parameters, and return parameters, this field holds the evaluation + * strategy, which is one of the following: 1) `BY_REFERENCE` indicates that the parameter is passed by reference, + * 2) `BY_VALUE` indicates that it is passed by value, that is, a copy is made, 3) `BY_SHARING` the parameter is a + * pointer/reference and it is shared with the caller/callee. While a copy of the pointer is made, a copy of the + * object that it points to is not made. + */ + val EvaluationStrategy = + flatgraph.SinglePropertyKey[String](kind = 19, name = "EVALUATION_STRATEGY", default = "") + + /** Specifies an index, e.g., for a parameter or argument. Explicit parameters are numbered from 1 to N, while index + * 0 is reserved for implicit self / this parameter. + */ + val Index = flatgraph.SinglePropertyKey[Int](kind = 26, name = "INDEX", default = -1: Int) + + /** Specifies whether a parameter is the variadic argument handling parameter of a variadic method. Only one + * parameter of a method is allowed to have this property set to true. + */ + val IsVariadic = flatgraph.SinglePropertyKey[Boolean](kind = 30, name = "IS_VARIADIC", default = false) + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** 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 = 52, name = "TYPE_FULL_NAME", default = "") } - object PropertyDefaults { val Code = "" val EvaluationStrategy = "" @@ -45,445 +140,1613 @@ object MethodParameterOut { val Order = -1: Int val TypeFullName = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ParameterLink.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array("EVAL_TYPE", "REACHING_DEF", "TAGGED_BY") - val In: Array[String] = Array("AST", "CFG", "PARAMETER_LINK", "REACHING_DEF") - } - - val factory = new NodeFactory[MethodParameterOutDb] { - override val forLabel = MethodParameterOut.Label - - override def createNode(ref: NodeRef[MethodParameterOutDb]) = - new MethodParameterOutDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = MethodParameterOut(graph, id) - } } -trait MethodParameterOutBase extends AbstractNode with AstNodeBase with CfgNodeBase with DeclarationBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def code: String - def columnNumber: Option[scala.Int] - def evaluationStrategy: String - def index: scala.Int - def isVariadic: Boolean - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int - def typeFullName: String - -} - -class MethodParameterOut(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[MethodParameterOutDb](graph_4762, id_4762) +class MethodParameterOut(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 28.toShort, seq_4762) with MethodParameterOutBase - with StoredNode - with AstNode with CfgNode - with Declaration { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def evaluationStrategy: String = get().evaluationStrategy - override def index: scala.Int = get().index - override def isVariadic: Boolean = get().isVariadic - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def typeFullName: String = get().typeFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => MethodParameterOut.PropertyDefaults.Code - case "EVALUATION_STRATEGY" => MethodParameterOut.PropertyDefaults.EvaluationStrategy - case "INDEX" => MethodParameterOut.PropertyDefaults.Index - case "IS_VARIADIC" => MethodParameterOut.PropertyDefaults.IsVariadic - case "NAME" => MethodParameterOut.PropertyDefaults.Name - case "ORDER" => MethodParameterOut.PropertyDefaults.Order - case "TYPE_FULL_NAME" => MethodParameterOut.PropertyDefaults.TypeFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** Traverse to parameter type Traverse to TYPE via EVAL_TYPE OUT edge. - */ - /** Traverse to parameter type */ - @overflowdb.traversal.help.Doc(info = """Traverse to parameter type""") - def typ: overflowdb.traversal.Traversal[Type] = get().typ - - def reachingDefOut: Iterator[Expression] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to CALL via REACHING_DEF OUT edge. - */ - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefOut - - /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. - */ - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefOut - - /** Traverse to LITERAL via REACHING_DEF OUT edge. - */ - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefOut - - /** Traverse to METHOD_REF via REACHING_DEF OUT edge. - */ - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefOut - - /** Traverse to RETURN via REACHING_DEF OUT edge. - */ - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefOut - - /** Traverse to TYPE_REF via REACHING_DEF OUT edge. - */ - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def astIn: Iterator[Method] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to METHOD via AST IN edge. - */ - def method: Method = get().method - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def parameterLinkIn: Iterator[MethodParameterIn] = get().parameterLinkIn - override def _parameterLinkIn = get()._parameterLinkIn - - /** Traverse to METHOD_PARAMETER_IN via PARAMETER_LINK IN edge. - */ - def asInput: overflowdb.traversal.Traversal[MethodParameterIn] = get().asInput - - def reachingDefIn: Iterator[CfgNode] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - /** Traverse to BLOCK via REACHING_DEF IN edge. - */ - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = get()._blockViaReachingDefIn - - /** Traverse to CALL via REACHING_DEF IN edge. - */ - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefIn - - /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. - */ - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaReachingDefIn - - /** Traverse to IDENTIFIER via REACHING_DEF IN edge. - */ - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefIn - - /** Traverse to LITERAL via REACHING_DEF IN edge. - */ - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefIn - - /** Traverse to METHOD via REACHING_DEF IN edge. - */ - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = get()._methodViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. - */ - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - get()._methodParameterInViaReachingDefIn - - /** Traverse to METHOD_REF via REACHING_DEF IN edge. - */ - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefIn - - /** Traverse to RETURN via REACHING_DEF IN edge. - */ - def _returnViaReachingDefIn: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefIn - - /** Traverse to TYPE_REF via REACHING_DEF IN edge. - */ - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefIn - - /** Traverse to UNKNOWN via REACHING_DEF IN edge. - */ - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaReachingDefIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - MethodParameterOut.Label - } + with Declaration + with StaticType[MethodParameterOutEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "evaluationStrategy" - case 4 => "index" - case 5 => "isVariadic" - case 6 => "lineNumber" - case 7 => "name" - case 8 => "order" - case 9 => "typeFullName" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "evaluationStrategy" + case 3 => "index" + case 4 => "isVariadic" + case 5 => "lineNumber" + case 6 => "name" + case 7 => "order" + case 8 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => evaluationStrategy - case 4 => index - case 5 => isVariadic - case 6 => lineNumber - case 7 => name - case 8 => order - case 9 => typeFullName + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.evaluationStrategy + case 3 => this.index + case 4 => this.isVariadic + case 5 => this.lineNumber + case 6 => this.name + case 7 => this.order + case 8 => this.typeFullName + case _ => null } override def productPrefix = "MethodParameterOut" - override def productArity = 10 + override def productArity = 9 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[MethodParameterOut] } -class MethodParameterOutDb(ref: NodeRef[NodeDb]) - extends NodeDb(ref) - with StoredNode - with AstNode - with CfgNode - with Declaration - with MethodParameterOutBase { - - override def layoutInformation: NodeLayoutInformation = MethodParameterOut.layoutInformation - - private var _code: String = MethodParameterOut.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _evaluationStrategy: String = MethodParameterOut.PropertyDefaults.EvaluationStrategy - def evaluationStrategy: String = _evaluationStrategy - private var _index: Integer = MethodParameterOut.PropertyDefaults.Index - def index: scala.Int = _index - private var _isVariadic: java.lang.Boolean = MethodParameterOut.PropertyDefaults.IsVariadic - def isVariadic: Boolean = _isVariadic - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = MethodParameterOut.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = MethodParameterOut.PropertyDefaults.Order - def order: scala.Int = _order - private var _typeFullName: String = MethodParameterOut.PropertyDefaults.TypeFullName - def typeFullName: String = _typeFullName - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - properties.put("EVALUATION_STRATEGY", evaluationStrategy) - properties.put("INDEX", index) - properties.put("IS_VARIADIC", isVariadic) - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - properties.put("TYPE_FULL_NAME", typeFullName) - - properties +object NewMethodParameterOut { + def apply(): NewMethodParameterOut = new NewMethodParameterOut + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) + + object InsertionHelpers { + object NewNodeInserter_MethodParameterOut_code 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: NewMethodParameterOut => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterOut_columnNumber 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[Int]] + 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: NewMethodParameterOut => + generated.columnNumber 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_MethodParameterOut_evaluationStrategy 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: NewMethodParameterOut => + dstCast(offset) = generated.evaluationStrategy + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterOut_index 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[Int]] + 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: NewMethodParameterOut => + dstCast(offset) = generated.index + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterOut_isVariadic 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[Boolean]] + 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: NewMethodParameterOut => + dstCast(offset) = generated.isVariadic + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterOut_lineNumber 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[Int]] + 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: NewMethodParameterOut => + generated.lineNumber 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_MethodParameterOut_name 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: NewMethodParameterOut => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterOut_order 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[Int]] + 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: NewMethodParameterOut => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodParameterOut_typeFullName 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: NewMethodParameterOut => + dstCast(offset) = generated.typeFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (!(("") == evaluationStrategy)) { properties.put("EVALUATION_STRATEGY", evaluationStrategy) } - if (!((-1: Int) == index)) { properties.put("INDEX", index) } - if (!((false) == isVariadic)) { properties.put("IS_VARIADIC", isVariadic) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (!(("") == typeFullName)) { properties.put("TYPE_FULL_NAME", typeFullName) } - - properties +class NewMethodParameterOut + extends NewNode(28.toShort) + with MethodParameterOutBase + with AstNodeNew + with CfgNodeNew + with DeclarationNew { + override type StoredNodeType = MethodParameterOut + override def label: String = "METHOD_PARAMETER_OUT" + + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMethodParameterOut.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMethodParameterOut.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](0) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def typ: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def reachingDefOut: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](1) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = reachingDefOut.collectAll[Call] - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = reachingDefOut.collectAll[Identifier] - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = reachingDefOut.collectAll[Literal] - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = reachingDefOut.collectAll[MethodRef] - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = reachingDefOut.collectAll[Return] - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = reachingDefOut.collectAll[TypeRef] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](2) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def astIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](3) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def method: Method = try { astIn.collectAll[Method].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent METHOD is mandatory, but not defined for this METHOD_PARAMETER_OUT node with id=" + id, - e - ) + var code: String = "": String + var columnNumber: Option[Int] = None + var evaluationStrategy: String = "": String + var index: Int = -1: Int + var isVariadic: Boolean = false: Boolean + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + var typeFullName: String = "": String + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def evaluationStrategy(value: String): this.type = { this.evaluationStrategy = value; this } + def index(value: Int): this.type = { this.index = value; this } + def isVariadic(value: Boolean): this.type = { this.isVariadic = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + def order(value: Int): this.type = { this.order = value; this } + def typeFullName(value: String): this.type = { this.typeFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 19, 1) + interface.countProperty(this, 26, 1) + interface.countProperty(this, 30, 1) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 52, 1) } - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - - def parameterLinkIn: Iterator[MethodParameterIn] = createAdjacentNodeScalaIteratorByOffSet[MethodParameterIn](5) - override def _parameterLinkIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def asInput: overflowdb.traversal.Traversal[MethodParameterIn] = parameterLinkIn.collectAll[MethodParameterIn] - - def reachingDefIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](6) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = reachingDefIn.collectAll[Block] - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = reachingDefIn.collectAll[Call] - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - reachingDefIn.collectAll[ControlStructure] - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = reachingDefIn.collectAll[Identifier] - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = reachingDefIn.collectAll[Literal] - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = reachingDefIn.collectAll[Method] - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - reachingDefIn.collectAll[MethodParameterIn] - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = reachingDefIn.collectAll[MethodRef] - def _returnViaReachingDefIn: overflowdb.traversal.Traversal[Return] = reachingDefIn.collectAll[Return] - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = reachingDefIn.collectAll[TypeRef] - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = reachingDefIn.collectAll[Unknown] - - override def label: String = { - MethodParameterOut.Label + override def copy: this.type = { + val newInstance = new NewMethodParameterOut + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.evaluationStrategy = this.evaluationStrategy + newInstance.index = this.index + newInstance.isVariadic = this.isVariadic + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.typeFullName = this.typeFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "evaluationStrategy" - case 4 => "index" - case 5 => "isVariadic" - case 6 => "lineNumber" - case 7 => "name" - case 8 => "order" - case 9 => "typeFullName" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "evaluationStrategy" + case 3 => "index" + case 4 => "isVariadic" + case 5 => "lineNumber" + case 6 => "name" + case 7 => "order" + case 8 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => evaluationStrategy - case 4 => index - case 5 => isVariadic - case 6 => lineNumber - case 7 => name - case 8 => order - case 9 => typeFullName - } - - override def productPrefix = "MethodParameterOut" - override def productArity = 10 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[MethodParameterOutDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "EVALUATION_STRATEGY" => this._evaluationStrategy - case "INDEX" => this._index - case "IS_VARIADIC" => this._isVariadic - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - case "TYPE_FULL_NAME" => this._typeFullName - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.evaluationStrategy + case 3 => this.index + case 4 => this.isVariadic + case 5 => this.lineNumber + case 6 => this.name + case 7 => this.order + case 8 => this.typeFullName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "EVALUATION_STRATEGY" => this._evaluationStrategy = value.asInstanceOf[String] - case "INDEX" => this._index = value.asInstanceOf[scala.Int] - case "IS_VARIADIC" => this._isVariadic = value.asInstanceOf[Boolean] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "TYPE_FULL_NAME" => this._typeFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewMethodParameterOut].code - this._columnNumber = newNode.asInstanceOf[NewMethodParameterOut].columnNumber match { - case None => null; case Some(value) => value - } - this._evaluationStrategy = newNode.asInstanceOf[NewMethodParameterOut].evaluationStrategy - this._index = newNode.asInstanceOf[NewMethodParameterOut].index - this._isVariadic = newNode.asInstanceOf[NewMethodParameterOut].isVariadic - this._lineNumber = newNode.asInstanceOf[NewMethodParameterOut].lineNumber match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewMethodParameterOut].name - this._order = newNode.asInstanceOf[NewMethodParameterOut].order - this._typeFullName = newNode.asInstanceOf[NewMethodParameterOut].typeFullName - - } + override def productPrefix = "NewMethodParameterOut" + override def productArity = 9 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMethodParameterOut] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodRef.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodRef.scala index 275bc9f15..4f04821aa 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodRef.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodRef.scala @@ -1,53 +1,145 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait MethodRefEMT + extends AnyRef + with ExpressionEMT + with HasDynamicTypeHintFullNameEMT + with HasMethodFullNameEMT + with HasPossibleTypesEMT + with HasTypeFullNameEMT + +trait MethodRefBase extends AbstractNode with ExpressionBase with StaticType[MethodRefEMT] { -object MethodRef { - def apply(graph: Graph, id: Long) = new MethodRef(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + val tmpDynamicTypeHintFullName = this.dynamicTypeHintFullName; + if (tmpDynamicTypeHintFullName.nonEmpty) res.put("DYNAMIC_TYPE_HINT_FULL_NAME", tmpDynamicTypeHintFullName) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.methodFullName) res.put("METHOD_FULL_NAME", this.methodFullName) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + val tmpPossibleTypes = this.possibleTypes; + if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) + if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) + res + } +} +object MethodRef { val Label = "METHOD_REF" - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" + + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ val DynamicTypeHintFullName = "DYNAMIC_TYPE_HINT_FULL_NAME" - val LineNumber = "LINE_NUMBER" - val MethodFullName = "METHOD_FULL_NAME" - val Order = "ORDER" - val PossibleTypes = "POSSIBLE_TYPES" - val TypeFullName = "TYPE_FULL_NAME" - val all: Set[String] = Set( - ArgumentIndex, - ArgumentName, - Code, - ColumnNumber, - DynamicTypeHintFullName, - LineNumber, - MethodFullName, - Order, - PossibleTypes, - TypeFullName - ) - val allAsJava: java.util.Set[String] = all.asJava - } + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** The FULL_NAME of a method. Used to link CALL and METHOD nodes. It is required to have exactly one METHOD node + * for each METHOD_FULL_NAME + */ + val MethodFullName = "METHOD_FULL_NAME" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = "POSSIBLE_TYPES" + + /** 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 = "TYPE_FULL_NAME" + } object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val DynamicTypeHintFullName = new overflowdb.PropertyKey[IndexedSeq[String]]("DYNAMIC_TYPE_HINT_FULL_NAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val MethodFullName = new overflowdb.PropertyKey[String]("METHOD_FULL_NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val PossibleTypes = new overflowdb.PropertyKey[IndexedSeq[String]]("POSSIBLE_TYPES") - val TypeFullName = new overflowdb.PropertyKey[String]("TYPE_FULL_NAME") + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ + val DynamicTypeHintFullName = flatgraph.MultiPropertyKey[String](kind = 18, name = "DYNAMIC_TYPE_HINT_FULL_NAME") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** The FULL_NAME of a method. Used to link CALL and METHOD nodes. It is required to have exactly one METHOD node + * for each METHOD_FULL_NAME + */ + val MethodFullName = flatgraph.SinglePropertyKey[String](kind = 36, name = "METHOD_FULL_NAME", default = "") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = flatgraph.MultiPropertyKey[String](kind = 47, name = "POSSIBLE_TYPES") + + /** 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 = 52, name = "TYPE_FULL_NAME", default = "") } - object PropertyDefaults { val ArgumentIndex = -1: Int val Code = "" @@ -55,1066 +147,1651 @@ object MethodRef { val Order = -1: Int val TypeFullName = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Capture.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Condition.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Receiver.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array( - "ARGUMENT", - "AST", - "CAPTURE", - "CDG", - "CFG", - "DOMINATE", - "EVAL_TYPE", - "POST_DOMINATE", - "REACHING_DEF", - "REF", - "TAGGED_BY" - ) - val In: Array[String] = Array( - "ARGUMENT", - "AST", - "CDG", - "CFG", - "CONDITION", - "CONTAINS", - "DOMINATE", - "POST_DOMINATE", - "REACHING_DEF", - "RECEIVER" - ) - } - - val factory = new NodeFactory[MethodRefDb] { - override val forLabel = MethodRef.Label - - override def createNode(ref: NodeRef[MethodRefDb]) = - new MethodRefDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = MethodRef(graph, id) - } -} - -trait MethodRefBase extends AbstractNode with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def dynamicTypeHintFullName: IndexedSeq[String] - def lineNumber: Option[scala.Int] - def methodFullName: String - def order: scala.Int - def possibleTypes: IndexedSeq[String] - def typeFullName: String - } -class MethodRef(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[MethodRefDb](graph_4762, id_4762) +class MethodRef(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 29.toShort, seq_4762) with MethodRefBase - with StoredNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def dynamicTypeHintFullName: IndexedSeq[String] = get().dynamicTypeHintFullName - override def lineNumber: Option[scala.Int] = get().lineNumber - override def methodFullName: String = get().methodFullName - override def order: scala.Int = get().order - override def possibleTypes: IndexedSeq[String] = get().possibleTypes - override def typeFullName: String = get().typeFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => MethodRef.PropertyDefaults.ArgumentIndex - case "CODE" => MethodRef.PropertyDefaults.Code - case "METHOD_FULL_NAME" => MethodRef.PropertyDefaults.MethodFullName - case "ORDER" => MethodRef.PropertyDefaults.Order - case "TYPE_FULL_NAME" => MethodRef.PropertyDefaults.TypeFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def argumentOut: Iterator[TemplateDom] = get().argumentOut - override def _argumentOut = get()._argumentOut - - def astOut: Iterator[Annotation] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to ANNOTATION via AST OUT edge. - */ - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = get()._annotationViaAstOut - - def captureOut: Iterator[ClosureBinding] = get().captureOut - override def _captureOut = get()._captureOut - - /** Traverse to CLOSURE_BINDING via CAPTURE OUT edge. - */ - def _closureBindingViaCaptureOut: overflowdb.traversal.Traversal[ClosureBinding] = get()._closureBindingViaCaptureOut - - def cdgOut: Iterator[CfgNode] = get().cdgOut - override def _cdgOut = get()._cdgOut - - /** Traverse to BLOCK via CDG OUT edge. - */ - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgOut - - /** Traverse to CALL via CDG OUT edge. - */ - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = get()._callViaCdgOut - - /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. - */ - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgOut - - /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. - */ - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgOut - - /** Traverse to IDENTIFIER via CDG OUT edge. - */ - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgOut - - /** Traverse to JUMP_TARGET via CDG OUT edge. - */ - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgOut - - /** Traverse to LITERAL via CDG OUT edge. - */ - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgOut - - /** Traverse to METHOD_REF via CDG OUT edge. - */ - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgOut - - /** Traverse to METHOD_RETURN via CDG OUT edge. - */ - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaCdgOut - - /** Traverse to RETURN via CDG OUT edge. - */ - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = get()._returnViaCdgOut - - /** Traverse to TYPE_REF via CDG OUT edge. - */ - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgOut - - /** Traverse to UNKNOWN via CDG OUT edge. - */ - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgOut - - def cfgOut: Iterator[AstNode] = get().cfgOut - override def _cfgOut = get()._cfgOut - - /** Traverse to CFG_NODE via CFG OUT edge. - */ - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = get()._cfgNodeViaCfgOut - - /** Traverse to METHOD_RETURN via CFG OUT edge. - */ - def _methodReturnViaCfgOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaCfgOut - - def dominateOut: Iterator[CfgNode] = get().dominateOut - override def _dominateOut = get()._dominateOut - - /** Traverse to BLOCK via DOMINATE OUT edge. - */ - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateOut - - /** Traverse to CALL via DOMINATE OUT edge. - */ - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaDominateOut - - /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. - */ - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateOut - - /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. - */ - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateOut - - /** Traverse to IDENTIFIER via DOMINATE OUT edge. - */ - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateOut - - /** Traverse to JUMP_TARGET via DOMINATE OUT edge. - */ - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateOut - - /** Traverse to LITERAL via DOMINATE OUT edge. - */ - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateOut - - /** Traverse to METHOD_REF via DOMINATE OUT edge. - */ - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateOut - - /** Traverse to METHOD_RETURN via DOMINATE OUT edge. - */ - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaDominateOut - - /** Traverse to RETURN via DOMINATE OUT edge. - */ - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateOut - - /** Traverse to TYPE_REF via DOMINATE OUT edge. - */ - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateOut - - /** Traverse to UNKNOWN via DOMINATE OUT edge. - */ - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateOut - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** Traverse to TYPE via EVAL_TYPE OUT edge. - */ - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = get()._typeViaEvalTypeOut - - def postDominateOut: Iterator[CfgNode] = get().postDominateOut - override def _postDominateOut = get()._postDominateOut - - /** Traverse to BLOCK via POST_DOMINATE OUT edge. - */ - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateOut - - /** Traverse to CALL via POST_DOMINATE OUT edge. - */ - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateOut - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. - */ - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateOut - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateOut - - /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateOut - - /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. - */ - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateOut - - /** Traverse to LITERAL via POST_DOMINATE OUT edge. - */ - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateOut - - /** Traverse to METHOD via POST_DOMINATE OUT edge. - */ - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = get()._methodViaPostDominateOut - - /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. - */ - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateOut - - /** Traverse to RETURN via POST_DOMINATE OUT edge. - */ - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateOut - - /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. - */ - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateOut - - /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. - */ - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateOut - - def reachingDefOut: Iterator[CfgNode] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to CALL via REACHING_DEF OUT edge. - */ - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefOut - - /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. - */ - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefOut - - /** Traverse to LITERAL via REACHING_DEF OUT edge. - */ - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefOut - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. - */ - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefOut - - /** Traverse to METHOD_REF via REACHING_DEF OUT edge. - */ - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefOut - - /** Traverse to RETURN via REACHING_DEF OUT edge. - */ - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefOut - - /** Traverse to TYPE_REF via REACHING_DEF OUT edge. - */ - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefOut - - def refOut: Iterator[Method] = get().refOut - override def _refOut = get()._refOut - - /** Traverse to referenced method. Traverse to METHOD via REF OUT edge. - */ - /** Traverse to referenced method. */ - @overflowdb.traversal.help.Doc(info = """Traverse to referenced method.""") - def referencedMethod: Method = get().referencedMethod - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def argumentIn: Iterator[Expression] = get().argumentIn - override def _argumentIn = get()._argumentIn - - /** Traverse to CALL via ARGUMENT IN edge. - */ - def _callViaArgumentIn: Option[Call] = get()._callViaArgumentIn - - /** Traverse to RETURN via ARGUMENT IN edge. - */ - def _returnViaArgumentIn: Option[Return] = get()._returnViaArgumentIn - - def astIn: Iterator[Expression] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to BLOCK via AST IN edge. - */ - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = get()._blockViaAstIn - - /** Traverse to CALL via AST IN edge. - */ - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = get()._callViaAstIn - - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: ControlStructure = get()._controlStructureViaAstIn - - /** Traverse to RETURN via AST IN edge. - */ - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = get()._returnViaAstIn - - def cdgIn: Iterator[CfgNode] = get().cdgIn - override def _cdgIn = get()._cdgIn - - /** Traverse to BLOCK via CDG IN edge. - */ - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgIn - - /** Traverse to CALL via CDG IN edge. - */ - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = get()._callViaCdgIn - - /** Traverse to CONTROL_STRUCTURE via CDG IN edge. - */ - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgIn - - /** Traverse to FIELD_IDENTIFIER via CDG IN edge. - */ - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgIn - - /** Traverse to IDENTIFIER via CDG IN edge. - */ - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgIn - - /** Traverse to JUMP_TARGET via CDG IN edge. - */ - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgIn - - /** Traverse to LITERAL via CDG IN edge. - */ - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgIn - - /** Traverse to METHOD_REF via CDG IN edge. - */ - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgIn - - /** Traverse to TYPE_REF via CDG IN edge. - */ - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgIn - - /** Traverse to UNKNOWN via CDG IN edge. - */ - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def conditionIn: Iterator[ControlStructure] = get().conditionIn - override def _conditionIn = get()._conditionIn - - /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. - */ - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaConditionIn - - def containsIn: Iterator[Method] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to METHOD via CONTAINS IN edge. - */ - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsIn - - def dominateIn: Iterator[CfgNode] = get().dominateIn - override def _dominateIn = get()._dominateIn - - /** Traverse to BLOCK via DOMINATE IN edge. - */ - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateIn - - /** Traverse to CALL via DOMINATE IN edge. - */ - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaDominateIn - - /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. - */ - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateIn - - /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. - */ - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateIn - - /** Traverse to IDENTIFIER via DOMINATE IN edge. - */ - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateIn - - /** Traverse to JUMP_TARGET via DOMINATE IN edge. - */ - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateIn - - /** Traverse to LITERAL via DOMINATE IN edge. - */ - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateIn - - /** Traverse to METHOD via DOMINATE IN edge. - */ - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = get()._methodViaDominateIn - - /** Traverse to METHOD_REF via DOMINATE IN edge. - */ - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateIn - - /** Traverse to RETURN via DOMINATE IN edge. - */ - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateIn - - /** Traverse to TYPE_REF via DOMINATE IN edge. - */ - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateIn - - /** Traverse to UNKNOWN via DOMINATE IN edge. - */ - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateIn - - def postDominateIn: Iterator[CfgNode] = get().postDominateIn - override def _postDominateIn = get()._postDominateIn - - /** Traverse to BLOCK via POST_DOMINATE IN edge. - */ - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateIn - - /** Traverse to CALL via POST_DOMINATE IN edge. - */ - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateIn - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. - */ - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateIn - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. - */ - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateIn - - /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. - */ - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateIn - - /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. - */ - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateIn - - /** Traverse to LITERAL via POST_DOMINATE IN edge. - */ - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateIn - - /** Traverse to METHOD_REF via POST_DOMINATE IN edge. - */ - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateIn - - /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. - */ - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaPostDominateIn - - /** Traverse to RETURN via POST_DOMINATE IN edge. - */ - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateIn - - /** Traverse to TYPE_REF via POST_DOMINATE IN edge. - */ - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateIn - - /** Traverse to UNKNOWN via POST_DOMINATE IN edge. - */ - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateIn - - def reachingDefIn: Iterator[CfgNode] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - /** Traverse to BLOCK via REACHING_DEF IN edge. - */ - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = get()._blockViaReachingDefIn - - /** Traverse to CALL via REACHING_DEF IN edge. - */ - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefIn - - /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. - */ - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaReachingDefIn - - /** Traverse to IDENTIFIER via REACHING_DEF IN edge. - */ - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefIn - - /** Traverse to LITERAL via REACHING_DEF IN edge. - */ - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefIn - - /** Traverse to METHOD via REACHING_DEF IN edge. - */ - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = get()._methodViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. - */ - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - get()._methodParameterInViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. - */ - def _methodParameterOutViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefIn - - /** Traverse to METHOD_REF via REACHING_DEF IN edge. - */ - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefIn - - /** Traverse to RETURN via REACHING_DEF IN edge. - */ - def _returnViaReachingDefIn: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefIn - - /** Traverse to TYPE_REF via REACHING_DEF IN edge. - */ - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefIn - - /** Traverse to UNKNOWN via REACHING_DEF IN edge. - */ - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaReachingDefIn - - def receiverIn: Iterator[Call] = get().receiverIn - override def _receiverIn = get()._receiverIn - - /** Traverse to CALL via RECEIVER IN edge. - */ - def _callViaReceiverIn: Option[Call] = get()._callViaReceiverIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - MethodRef.Label - } + with Expression + with StaticType[MethodRefEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "lineNumber" - case 7 => "methodFullName" - case 8 => "order" - case 9 => "possibleTypes" - case 10 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dynamicTypeHintFullName" + case 5 => "lineNumber" + case 6 => "methodFullName" + case 7 => "order" + case 8 => "possibleTypes" + case 9 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => dynamicTypeHintFullName - case 6 => lineNumber - case 7 => methodFullName - case 8 => order - case 9 => possibleTypes - case 10 => typeFullName + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dynamicTypeHintFullName + case 5 => this.lineNumber + case 6 => this.methodFullName + case 7 => this.order + case 8 => this.possibleTypes + case 9 => this.typeFullName + case _ => null } override def productPrefix = "MethodRef" - override def productArity = 11 -} + override def productArity = 10 -class MethodRefDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with Expression with MethodRefBase { - - override def layoutInformation: NodeLayoutInformation = MethodRef.layoutInformation + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[MethodRef] +} - private var _argumentIndex: Integer = MethodRef.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = MethodRef.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def dynamicTypeHintFullName: IndexedSeq[String] = _dynamicTypeHintFullName - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _methodFullName: String = MethodRef.PropertyDefaults.MethodFullName - def methodFullName: String = _methodFullName - private var _order: Integer = MethodRef.PropertyDefaults.Order - def order: scala.Int = _order - private var _possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def possibleTypes: IndexedSeq[String] = _possibleTypes - private var _typeFullName: String = MethodRef.PropertyDefaults.TypeFullName - def typeFullName: String = _typeFullName +object NewMethodRef { + def apply(): NewMethodRef = new NewMethodRef + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object InsertionHelpers { + object NewNodeInserter_MethodRef_argumentIndex 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[Int]] + 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: NewMethodRef => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("METHOD_FULL_NAME", methodFullName) - properties.put("ORDER", order) - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - properties.put("TYPE_FULL_NAME", typeFullName) - - properties - } - - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object NewNodeInserter_MethodRef_argumentName 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: NewMethodRef => + generated.argumentName 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_MethodRef_code 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: NewMethodRef => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodRef_columnNumber 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[Int]] + 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: NewMethodRef => + generated.columnNumber 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_MethodRef_dynamicTypeHintFullName 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: NewMethodRef => + for (item <- generated.dynamicTypeHintFullName) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodRef_lineNumber 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[Int]] + 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: NewMethodRef => + generated.lineNumber 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_MethodRef_methodFullName 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: NewMethodRef => + dstCast(offset) = generated.methodFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodRef_order 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[Int]] + 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: NewMethodRef => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodRef_possibleTypes 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: NewMethodRef => + for (item <- generated.possibleTypes) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodRef_typeFullName 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: NewMethodRef => + dstCast(offset) = generated.typeFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == methodFullName)) { properties.put("METHOD_FULL_NAME", methodFullName) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - if (!(("") == typeFullName)) { properties.put("TYPE_FULL_NAME", typeFullName) } - - properties } +} - import overflowdb.traversal._ - def argumentOut: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - - def astOut: Iterator[Annotation] = createAdjacentNodeScalaIteratorByOffSet[Annotation](1) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = astOut.collectAll[Annotation] - - def captureOut: Iterator[ClosureBinding] = createAdjacentNodeScalaIteratorByOffSet[ClosureBinding](2) - override def _captureOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _closureBindingViaCaptureOut: overflowdb.traversal.Traversal[ClosureBinding] = - captureOut.collectAll[ClosureBinding] - - def cdgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](3) - override def _cdgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = cdgOut.collectAll[Block] - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = cdgOut.collectAll[Call] - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = cdgOut.collectAll[ControlStructure] - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = cdgOut.collectAll[FieldIdentifier] - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = cdgOut.collectAll[Identifier] - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = cdgOut.collectAll[JumpTarget] - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = cdgOut.collectAll[Literal] - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = cdgOut.collectAll[MethodRef] - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = cdgOut.collectAll[MethodReturn] - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = cdgOut.collectAll[Return] - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = cdgOut.collectAll[TypeRef] - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = cdgOut.collectAll[Unknown] - - def cfgOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](4) - override def _cfgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = cfgOut.collectAll[CfgNode] - def _methodReturnViaCfgOut: overflowdb.traversal.Traversal[MethodReturn] = cfgOut.collectAll[MethodReturn] - - def dominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](5) - override def _dominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = dominateOut.collectAll[Block] - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = dominateOut.collectAll[Call] - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - dominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateOut.collectAll[FieldIdentifier] - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = dominateOut.collectAll[Identifier] - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = dominateOut.collectAll[JumpTarget] - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = dominateOut.collectAll[Literal] - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = dominateOut.collectAll[MethodRef] - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = dominateOut.collectAll[MethodReturn] - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = dominateOut.collectAll[Return] - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = dominateOut.collectAll[TypeRef] - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = dominateOut.collectAll[Unknown] - - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](6) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def postDominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](7) - override def _postDominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = postDominateOut.collectAll[Block] - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = postDominateOut.collectAll[Call] - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - postDominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateOut.collectAll[FieldIdentifier] - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = postDominateOut.collectAll[Identifier] - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = postDominateOut.collectAll[JumpTarget] - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = postDominateOut.collectAll[Literal] - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = postDominateOut.collectAll[Method] - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = postDominateOut.collectAll[MethodRef] - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = postDominateOut.collectAll[Return] - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = postDominateOut.collectAll[TypeRef] - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = postDominateOut.collectAll[Unknown] - - def reachingDefOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](8) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = reachingDefOut.collectAll[Call] - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = reachingDefOut.collectAll[Identifier] - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = reachingDefOut.collectAll[Literal] - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefOut.collectAll[MethodParameterOut] - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = reachingDefOut.collectAll[MethodRef] - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = reachingDefOut.collectAll[Return] - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = reachingDefOut.collectAll[TypeRef] +class NewMethodRef extends NewNode(29.toShort) with MethodRefBase with ExpressionNew { + override type StoredNodeType = MethodRef + override def label: String = "METHOD_REF" - def refOut: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](9) - override def _refOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - def referencedMethod: Method = try { refOut.collectAll[Method].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "OUT edge with label REF to an adjacent METHOD is mandatory, but not defined for this METHOD_REF node with id=" + id, - e - ) + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMethodRef.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](10) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](10) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def argumentIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](11) - override def _argumentIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](11) - def _callViaArgumentIn: Option[Call] = argumentIn.collectAll[Call].nextOption() - def _returnViaArgumentIn: Option[Return] = argumentIn.collectAll[Return].nextOption() - - def astIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](12) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = astIn.collectAll[Block] - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = astIn.collectAll[Call] - def _controlStructureViaAstIn: ControlStructure = try { astIn.collectAll[ControlStructure].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent CONTROL_STRUCTURE is mandatory, but not defined for this METHOD_REF node with id=" + id, - e - ) + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMethodRef.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = astIn.collectAll[Return] - - def cdgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](13) - override def _cdgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](13) - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = cdgIn.collectAll[Block] - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = cdgIn.collectAll[Call] - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = cdgIn.collectAll[ControlStructure] - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = cdgIn.collectAll[FieldIdentifier] - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = cdgIn.collectAll[Identifier] - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = cdgIn.collectAll[JumpTarget] - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = cdgIn.collectAll[Literal] - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = cdgIn.collectAll[MethodRef] - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = cdgIn.collectAll[TypeRef] - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = cdgIn.collectAll[Unknown] - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](14) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](14) - - def conditionIn: Iterator[ControlStructure] = createAdjacentNodeScalaIteratorByOffSet[ControlStructure](15) - override def _conditionIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](15) - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - conditionIn.collectAll[ControlStructure] - - def containsIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](16) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](16) - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = containsIn.collectAll[Method] - - def dominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](17) - override def _dominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](17) - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = dominateIn.collectAll[Block] - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = dominateIn.collectAll[Call] - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - dominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateIn.collectAll[FieldIdentifier] - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = dominateIn.collectAll[Identifier] - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = dominateIn.collectAll[JumpTarget] - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = dominateIn.collectAll[Literal] - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = dominateIn.collectAll[Method] - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = dominateIn.collectAll[MethodRef] - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = dominateIn.collectAll[Return] - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = dominateIn.collectAll[TypeRef] - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = dominateIn.collectAll[Unknown] - - def postDominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](18) - override def _postDominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](18) - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = postDominateIn.collectAll[Block] - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = postDominateIn.collectAll[Call] - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - postDominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateIn.collectAll[FieldIdentifier] - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = postDominateIn.collectAll[Identifier] - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = postDominateIn.collectAll[JumpTarget] - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = postDominateIn.collectAll[Literal] - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = postDominateIn.collectAll[MethodRef] - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - postDominateIn.collectAll[MethodReturn] - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = postDominateIn.collectAll[Return] - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = postDominateIn.collectAll[TypeRef] - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = postDominateIn.collectAll[Unknown] - - def reachingDefIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](19) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](19) - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = reachingDefIn.collectAll[Block] - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = reachingDefIn.collectAll[Call] - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - reachingDefIn.collectAll[ControlStructure] - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = reachingDefIn.collectAll[Identifier] - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = reachingDefIn.collectAll[Literal] - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = reachingDefIn.collectAll[Method] - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - reachingDefIn.collectAll[MethodParameterIn] - def _methodParameterOutViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefIn.collectAll[MethodParameterOut] - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = reachingDefIn.collectAll[MethodRef] - def _returnViaReachingDefIn: overflowdb.traversal.Traversal[Return] = reachingDefIn.collectAll[Return] - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = reachingDefIn.collectAll[TypeRef] - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = reachingDefIn.collectAll[Unknown] - - def receiverIn: Iterator[Call] = createAdjacentNodeScalaIteratorByOffSet[Call](20) - override def _receiverIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](20) - def _callViaReceiverIn: Option[Call] = receiverIn.collectAll[Call].nextOption() + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var dynamicTypeHintFullName: IndexedSeq[String] = ArraySeq.empty + var lineNumber: Option[Int] = None + var methodFullName: String = "": String + var order: Int = -1: Int + var possibleTypes: IndexedSeq[String] = ArraySeq.empty + 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 } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { + this.dynamicTypeHintFullName = value.iterator.to(ArraySeq); this + } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def methodFullName(value: String): this.type = { this.methodFullName = value; this } + 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 typeFullName(value: String): this.type = { this.typeFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 18, dynamicTypeHintFullName.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 36, 1) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 47, possibleTypes.size) + interface.countProperty(this, 52, 1) + } - override def label: String = { - MethodRef.Label + override def copy: this.type = { + val newInstance = new NewMethodRef + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName + newInstance.lineNumber = this.lineNumber + newInstance.methodFullName = this.methodFullName + newInstance.order = this.order + newInstance.possibleTypes = this.possibleTypes + newInstance.typeFullName = this.typeFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "lineNumber" - case 7 => "methodFullName" - case 8 => "order" - case 9 => "possibleTypes" - case 10 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dynamicTypeHintFullName" + case 5 => "lineNumber" + case 6 => "methodFullName" + case 7 => "order" + case 8 => "possibleTypes" + case 9 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => dynamicTypeHintFullName - case 6 => lineNumber - case 7 => methodFullName - case 8 => order - case 9 => possibleTypes - case 10 => typeFullName - } - - override def productPrefix = "MethodRef" - override def productArity = 11 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[MethodRefDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "DYNAMIC_TYPE_HINT_FULL_NAME" => this._dynamicTypeHintFullName - case "LINE_NUMBER" => this._lineNumber - case "METHOD_FULL_NAME" => this._methodFullName - case "ORDER" => this._order - case "POSSIBLE_TYPES" => this._possibleTypes - case "TYPE_FULL_NAME" => this._typeFullName - + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dynamicTypeHintFullName + case 5 => this.lineNumber + case 6 => this.methodFullName + case 7 => this.order + case 8 => this.possibleTypes + case 9 => this.typeFullName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "DYNAMIC_TYPE_HINT_FULL_NAME" => - this._dynamicTypeHintFullName = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "METHOD_FULL_NAME" => this._methodFullName = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "POSSIBLE_TYPES" => - this._possibleTypes = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "TYPE_FULL_NAME" => this._typeFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewMethodRef].argumentIndex - this._argumentName = newNode.asInstanceOf[NewMethodRef].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewMethodRef].code - this._columnNumber = newNode.asInstanceOf[NewMethodRef].columnNumber match { - case None => null; case Some(value) => value - } - this._dynamicTypeHintFullName = - if (newNode.asInstanceOf[NewMethodRef].dynamicTypeHintFullName != null) - newNode.asInstanceOf[NewMethodRef].dynamicTypeHintFullName - else collection.immutable.ArraySeq.empty - this._lineNumber = newNode.asInstanceOf[NewMethodRef].lineNumber match { - case None => null; case Some(value) => value - } - this._methodFullName = newNode.asInstanceOf[NewMethodRef].methodFullName - this._order = newNode.asInstanceOf[NewMethodRef].order - this._possibleTypes = - if (newNode.asInstanceOf[NewMethodRef].possibleTypes != null) newNode.asInstanceOf[NewMethodRef].possibleTypes - else collection.immutable.ArraySeq.empty - this._typeFullName = newNode.asInstanceOf[NewMethodRef].typeFullName - - } + override def productPrefix = "NewMethodRef" + override def productArity = 10 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMethodRef] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodReturn.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodReturn.scala index 0d4673118..655e41ba4 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodReturn.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/MethodReturn.scala @@ -1,606 +1,1702 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait MethodReturnEMT + extends AnyRef + with CfgNodeEMT + with HasDynamicTypeHintFullNameEMT + with HasEvaluationStrategyEMT + with HasPossibleTypesEMT + with HasTypeFullNameEMT + +trait MethodReturnBase extends AbstractNode with CfgNodeBase with StaticType[MethodReturnEMT] { -object MethodReturn { - def apply(graph: Graph, id: Long) = new MethodReturn(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + val tmpDynamicTypeHintFullName = this.dynamicTypeHintFullName; + if (tmpDynamicTypeHintFullName.nonEmpty) res.put("DYNAMIC_TYPE_HINT_FULL_NAME", tmpDynamicTypeHintFullName) + if (("": String) != this.evaluationStrategy) res.put("EVALUATION_STRATEGY", this.evaluationStrategy) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + val tmpPossibleTypes = this.possibleTypes; + if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) + if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) + res + } +} +object MethodReturn { val Label = "METHOD_RETURN" - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ val DynamicTypeHintFullName = "DYNAMIC_TYPE_HINT_FULL_NAME" - val EvaluationStrategy = "EVALUATION_STRATEGY" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val PossibleTypes = "POSSIBLE_TYPES" - val TypeFullName = "TYPE_FULL_NAME" - val all: Set[String] = Set( - Code, - ColumnNumber, - DynamicTypeHintFullName, - EvaluationStrategy, - LineNumber, - Order, - PossibleTypes, - TypeFullName - ) - val allAsJava: java.util.Set[String] = all.asJava - } + /** For formal method input parameters, output parameters, and return parameters, this field holds the evaluation + * strategy, which is one of the following: 1) `BY_REFERENCE` indicates that the parameter is passed by reference, + * 2) `BY_VALUE` indicates that it is passed by value, that is, a copy is made, 3) `BY_SHARING` the parameter is a + * pointer/reference and it is shared with the caller/callee. While a copy of the pointer is made, a copy of the + * object that it points to is not made. + */ + val EvaluationStrategy = "EVALUATION_STRATEGY" + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = "POSSIBLE_TYPES" + + /** 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 = "TYPE_FULL_NAME" + } object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val DynamicTypeHintFullName = new overflowdb.PropertyKey[IndexedSeq[String]]("DYNAMIC_TYPE_HINT_FULL_NAME") - val EvaluationStrategy = new overflowdb.PropertyKey[String]("EVALUATION_STRATEGY") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val PossibleTypes = new overflowdb.PropertyKey[IndexedSeq[String]]("POSSIBLE_TYPES") - val TypeFullName = new overflowdb.PropertyKey[String]("TYPE_FULL_NAME") + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ + val DynamicTypeHintFullName = flatgraph.MultiPropertyKey[String](kind = 18, name = "DYNAMIC_TYPE_HINT_FULL_NAME") + + /** For formal method input parameters, output parameters, and return parameters, this field holds the evaluation + * strategy, which is one of the following: 1) `BY_REFERENCE` indicates that the parameter is passed by reference, + * 2) `BY_VALUE` indicates that it is passed by value, that is, a copy is made, 3) `BY_SHARING` the parameter is a + * pointer/reference and it is shared with the caller/callee. While a copy of the pointer is made, a copy of the + * object that it points to is not made. + */ + val EvaluationStrategy = + flatgraph.SinglePropertyKey[String](kind = 19, name = "EVALUATION_STRATEGY", default = "") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = flatgraph.MultiPropertyKey[String](kind = 47, name = "POSSIBLE_TYPES") + + /** 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 = 52, name = "TYPE_FULL_NAME", default = "") } - object PropertyDefaults { val Code = "" val EvaluationStrategy = "" val Order = -1: Int val TypeFullName = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array("EVAL_TYPE", "POST_DOMINATE", "TAGGED_BY") - val In: Array[String] = Array("AST", "CDG", "CFG", "DOMINATE", "REACHING_DEF") - } - - val factory = new NodeFactory[MethodReturnDb] { - override val forLabel = MethodReturn.Label - - override def createNode(ref: NodeRef[MethodReturnDb]) = - new MethodReturnDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = MethodReturn(graph, id) - } -} - -trait MethodReturnBase extends AbstractNode with CfgNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def code: String - def columnNumber: Option[scala.Int] - def dynamicTypeHintFullName: IndexedSeq[String] - def evaluationStrategy: String - def lineNumber: Option[scala.Int] - def order: scala.Int - def possibleTypes: IndexedSeq[String] - def typeFullName: String - } -class MethodReturn(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[MethodReturnDb](graph_4762, id_4762) +class MethodReturn(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 30.toShort, seq_4762) with MethodReturnBase - with StoredNode - with CfgNode { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def dynamicTypeHintFullName: IndexedSeq[String] = get().dynamicTypeHintFullName - override def evaluationStrategy: String = get().evaluationStrategy - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def possibleTypes: IndexedSeq[String] = get().possibleTypes - override def typeFullName: String = get().typeFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => MethodReturn.PropertyDefaults.Code - case "EVALUATION_STRATEGY" => MethodReturn.PropertyDefaults.EvaluationStrategy - case "ORDER" => MethodReturn.PropertyDefaults.Order - case "TYPE_FULL_NAME" => MethodReturn.PropertyDefaults.TypeFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** Traverse to TYPE via EVAL_TYPE OUT edge. - */ - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = get()._typeViaEvalTypeOut - - def postDominateOut: Iterator[CfgNode] = get().postDominateOut - override def _postDominateOut = get()._postDominateOut - - /** Traverse to BLOCK via POST_DOMINATE OUT edge. - */ - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateOut - - /** Traverse to CALL via POST_DOMINATE OUT edge. - */ - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateOut - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. - */ - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateOut - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateOut - - /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateOut - - /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. - */ - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateOut - - /** Traverse to LITERAL via POST_DOMINATE OUT edge. - */ - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateOut - - /** Traverse to METHOD via POST_DOMINATE OUT edge. - */ - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = get()._methodViaPostDominateOut - - /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. - */ - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateOut - - /** Traverse to RETURN via POST_DOMINATE OUT edge. - */ - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateOut - - /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. - */ - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateOut - - /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. - */ - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def astIn: Iterator[Method] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to METHOD via AST IN edge. - */ - def _methodViaAstIn: Method = get()._methodViaAstIn - - def cdgIn: Iterator[CfgNode] = get().cdgIn - override def _cdgIn = get()._cdgIn - - /** Traverse to BLOCK via CDG IN edge. - */ - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgIn - - /** Traverse to CALL via CDG IN edge. - */ - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = get()._callViaCdgIn - - /** Traverse to CONTROL_STRUCTURE via CDG IN edge. - */ - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgIn - - /** Traverse to FIELD_IDENTIFIER via CDG IN edge. - */ - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgIn - - /** Traverse to IDENTIFIER via CDG IN edge. - */ - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgIn - - /** Traverse to JUMP_TARGET via CDG IN edge. - */ - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgIn - - /** Traverse to LITERAL via CDG IN edge. - */ - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgIn - - /** Traverse to METHOD_REF via CDG IN edge. - */ - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgIn - - /** Traverse to TYPE_REF via CDG IN edge. - */ - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgIn - - /** Traverse to UNKNOWN via CDG IN edge. - */ - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - /** Traverse to RETURN via CFG IN edge. - */ - def toReturn: overflowdb.traversal.Traversal[Return] = get().toReturn - - def dominateIn: Iterator[CfgNode] = get().dominateIn - override def _dominateIn = get()._dominateIn - - /** Traverse to BLOCK via DOMINATE IN edge. - */ - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateIn - - /** Traverse to CALL via DOMINATE IN edge. - */ - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaDominateIn - - /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. - */ - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateIn - - /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. - */ - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateIn - - /** Traverse to IDENTIFIER via DOMINATE IN edge. - */ - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateIn - - /** Traverse to LITERAL via DOMINATE IN edge. - */ - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateIn - - /** Traverse to METHOD via DOMINATE IN edge. - */ - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = get()._methodViaDominateIn - - /** Traverse to METHOD_REF via DOMINATE IN edge. - */ - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateIn - - /** Traverse to RETURN via DOMINATE IN edge. - */ - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateIn - - /** Traverse to TYPE_REF via DOMINATE IN edge. - */ - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateIn - - /** Traverse to UNKNOWN via DOMINATE IN edge. - */ - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateIn - - def reachingDefIn: Iterator[Return] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - /** Traverse to RETURN via REACHING_DEF IN edge. - */ - def _returnViaReachingDefIn: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - MethodReturn.Label - } + with CfgNode + with StaticType[MethodReturnEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "dynamicTypeHintFullName" - case 4 => "evaluationStrategy" - case 5 => "lineNumber" - case 6 => "order" - case 7 => "possibleTypes" - case 8 => "typeFullName" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "dynamicTypeHintFullName" + case 3 => "evaluationStrategy" + case 4 => "lineNumber" + case 5 => "order" + case 6 => "possibleTypes" + case 7 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => dynamicTypeHintFullName - case 4 => evaluationStrategy - case 5 => lineNumber - case 6 => order - case 7 => possibleTypes - case 8 => typeFullName + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.dynamicTypeHintFullName + case 3 => this.evaluationStrategy + case 4 => this.lineNumber + case 5 => this.order + case 6 => this.possibleTypes + case 7 => this.typeFullName + case _ => null } override def productPrefix = "MethodReturn" - override def productArity = 9 + override def productArity = 8 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[MethodReturn] } -class MethodReturnDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with CfgNode with MethodReturnBase { - - override def layoutInformation: NodeLayoutInformation = MethodReturn.layoutInformation - - private var _code: String = MethodReturn.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def dynamicTypeHintFullName: IndexedSeq[String] = _dynamicTypeHintFullName - private var _evaluationStrategy: String = MethodReturn.PropertyDefaults.EvaluationStrategy - def evaluationStrategy: String = _evaluationStrategy - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = MethodReturn.PropertyDefaults.Order - def order: scala.Int = _order - private var _possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def possibleTypes: IndexedSeq[String] = _possibleTypes - private var _typeFullName: String = MethodReturn.PropertyDefaults.TypeFullName - def typeFullName: String = _typeFullName - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) - } - properties.put("EVALUATION_STRATEGY", evaluationStrategy) - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - properties.put("TYPE_FULL_NAME", typeFullName) +object NewMethodReturn { + def apply(): NewMethodReturn = new NewMethodReturn + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_MethodReturn_code 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: NewMethodReturn => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodReturn_columnNumber 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[Int]] + 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: NewMethodReturn => + generated.columnNumber 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_MethodReturn_dynamicTypeHintFullName 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: NewMethodReturn => + for (item <- generated.dynamicTypeHintFullName) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodReturn_evaluationStrategy 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: NewMethodReturn => + dstCast(offset) = generated.evaluationStrategy + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodReturn_lineNumber 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[Int]] + 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: NewMethodReturn => + generated.lineNumber 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_MethodReturn_order 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[Int]] + 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: NewMethodReturn => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodReturn_possibleTypes 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: NewMethodReturn => + for (item <- generated.possibleTypes) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_MethodReturn_typeFullName 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: NewMethodReturn => + dstCast(offset) = generated.typeFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) - } - if (!(("") == evaluationStrategy)) { properties.put("EVALUATION_STRATEGY", evaluationStrategy) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - if (!(("") == typeFullName)) { properties.put("TYPE_FULL_NAME", typeFullName) } +class NewMethodReturn extends NewNode(30.toShort) with MethodReturnBase with CfgNodeNew { + override type StoredNodeType = MethodReturn + override def label: String = "METHOD_RETURN" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMethodReturn.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewMethodReturn.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](0) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def postDominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](1) - override def _postDominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = postDominateOut.collectAll[Block] - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = postDominateOut.collectAll[Call] - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - postDominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateOut.collectAll[FieldIdentifier] - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = postDominateOut.collectAll[Identifier] - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = postDominateOut.collectAll[JumpTarget] - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = postDominateOut.collectAll[Literal] - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = postDominateOut.collectAll[Method] - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = postDominateOut.collectAll[MethodRef] - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = postDominateOut.collectAll[Return] - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = postDominateOut.collectAll[TypeRef] - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = postDominateOut.collectAll[Unknown] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](2) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def astIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](3) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _methodViaAstIn: Method = try { astIn.collectAll[Method].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent METHOD is mandatory, but not defined for this METHOD_RETURN node with id=" + id, - e - ) + var code: String = "": String + var columnNumber: Option[Int] = None + var dynamicTypeHintFullName: IndexedSeq[String] = ArraySeq.empty + var evaluationStrategy: String = "": String + var lineNumber: Option[Int] = None + var order: Int = -1: Int + var possibleTypes: IndexedSeq[String] = ArraySeq.empty + var typeFullName: String = "": String + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { + this.dynamicTypeHintFullName = value.iterator.to(ArraySeq); this + } + def evaluationStrategy(value: String): this.type = { this.evaluationStrategy = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + 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 typeFullName(value: String): this.type = { this.typeFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 18, dynamicTypeHintFullName.size) + interface.countProperty(this, 19, 1) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 47, possibleTypes.size) + interface.countProperty(this, 52, 1) } - def cdgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _cdgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = cdgIn.collectAll[Block] - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = cdgIn.collectAll[Call] - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = cdgIn.collectAll[ControlStructure] - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = cdgIn.collectAll[FieldIdentifier] - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = cdgIn.collectAll[Identifier] - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = cdgIn.collectAll[JumpTarget] - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = cdgIn.collectAll[Literal] - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = cdgIn.collectAll[MethodRef] - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = cdgIn.collectAll[TypeRef] - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = cdgIn.collectAll[Unknown] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](5) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def toReturn: overflowdb.traversal.Traversal[Return] = cfgIn.collectAll[Return] - - def dominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](6) - override def _dominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = dominateIn.collectAll[Block] - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = dominateIn.collectAll[Call] - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - dominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateIn.collectAll[FieldIdentifier] - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = dominateIn.collectAll[Identifier] - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = dominateIn.collectAll[Literal] - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = dominateIn.collectAll[Method] - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = dominateIn.collectAll[MethodRef] - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = dominateIn.collectAll[Return] - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = dominateIn.collectAll[TypeRef] - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = dominateIn.collectAll[Unknown] - - def reachingDefIn: Iterator[Return] = createAdjacentNodeScalaIteratorByOffSet[Return](7) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _returnViaReachingDefIn: overflowdb.traversal.Traversal[Return] = reachingDefIn.collectAll[Return] - - override def label: String = { - MethodReturn.Label + override def copy: this.type = { + val newInstance = new NewMethodReturn + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName + newInstance.evaluationStrategy = this.evaluationStrategy + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.possibleTypes = this.possibleTypes + newInstance.typeFullName = this.typeFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "dynamicTypeHintFullName" - case 4 => "evaluationStrategy" - case 5 => "lineNumber" - case 6 => "order" - case 7 => "possibleTypes" - case 8 => "typeFullName" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "dynamicTypeHintFullName" + case 3 => "evaluationStrategy" + case 4 => "lineNumber" + case 5 => "order" + case 6 => "possibleTypes" + case 7 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => dynamicTypeHintFullName - case 4 => evaluationStrategy - case 5 => lineNumber - case 6 => order - case 7 => possibleTypes - case 8 => typeFullName - } - - override def productPrefix = "MethodReturn" - override def productArity = 9 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[MethodReturnDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "DYNAMIC_TYPE_HINT_FULL_NAME" => this._dynamicTypeHintFullName - case "EVALUATION_STRATEGY" => this._evaluationStrategy - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - case "POSSIBLE_TYPES" => this._possibleTypes - case "TYPE_FULL_NAME" => this._typeFullName - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.dynamicTypeHintFullName + case 3 => this.evaluationStrategy + case 4 => this.lineNumber + case 5 => this.order + case 6 => this.possibleTypes + case 7 => this.typeFullName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "DYNAMIC_TYPE_HINT_FULL_NAME" => - this._dynamicTypeHintFullName = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "EVALUATION_STRATEGY" => this._evaluationStrategy = value.asInstanceOf[String] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "POSSIBLE_TYPES" => - this._possibleTypes = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "TYPE_FULL_NAME" => this._typeFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewMethodReturn].code - this._columnNumber = newNode.asInstanceOf[NewMethodReturn].columnNumber match { - case None => null; case Some(value) => value - } - this._dynamicTypeHintFullName = - if (newNode.asInstanceOf[NewMethodReturn].dynamicTypeHintFullName != null) - newNode.asInstanceOf[NewMethodReturn].dynamicTypeHintFullName - else collection.immutable.ArraySeq.empty - this._evaluationStrategy = newNode.asInstanceOf[NewMethodReturn].evaluationStrategy - this._lineNumber = newNode.asInstanceOf[NewMethodReturn].lineNumber match { - case None => null; case Some(value) => value - } - this._order = newNode.asInstanceOf[NewMethodReturn].order - this._possibleTypes = - if (newNode.asInstanceOf[NewMethodReturn].possibleTypes != null) - newNode.asInstanceOf[NewMethodReturn].possibleTypes - else collection.immutable.ArraySeq.empty - this._typeFullName = newNode.asInstanceOf[NewMethodReturn].typeFullName - - } + override def productPrefix = "NewMethodReturn" + override def productArity = 8 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMethodReturn] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Modifier.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Modifier.scala index a80c0dc73..2a4e1aa74 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Modifier.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Modifier.scala @@ -1,288 +1,1550 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Modifier { - def apply(graph: Graph, id: Long) = new Modifier(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait ModifierEMT extends AnyRef with AstNodeEMT with HasModifierTypeEMT - val Label = "MODIFIER" +trait ModifierBase extends AbstractNode with AstNodeBase with StaticType[ModifierEMT] { - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val ModifierType = "MODIFIER_TYPE" - val Order = "ORDER" - val all: Set[String] = Set(Code, ColumnNumber, LineNumber, ModifierType, Order) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.modifierType) res.put("MODIFIER_TYPE", this.modifierType) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val ModifierType = new overflowdb.PropertyKey[String]("MODIFIER_TYPE") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +object Modifier { + val Label = "MODIFIER" + object PropertyNames { - } + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - object PropertyDefaults { - val Code = "" - val ModifierType = "" - val Order = -1: Int - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List().asJava, - List(io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation).asJava - ) + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array("AST") - } + /** The modifier type is a free-form string. The following are known modifier types: `STATIC`, `PUBLIC`, + * `PROTECTED`, `PRIVATE`, `ABSTRACT`, `NATIVE`, `CONSTRUCTOR`, `VIRTUAL`. + */ + val ModifierType = "MODIFIER_TYPE" - val factory = new NodeFactory[ModifierDb] { - override val forLabel = Modifier.Label + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + } + object Properties { - override def createNode(ref: NodeRef[ModifierDb]) = - new ModifierDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") - override def createNodeRef(graph: Graph, id: Long) = Modifier(graph, id) - } -} + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") -trait ModifierBase extends AbstractNode with AstNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def modifierType: String - def order: scala.Int + /** The modifier type is a free-form string. The following are known modifier types: `STATIC`, `PUBLIC`, + * `PROTECTED`, `PRIVATE`, `ABSTRACT`, `NATIVE`, `CONSTRUCTOR`, `VIRTUAL`. + */ + val ModifierType = flatgraph.SinglePropertyKey[String](kind = 38, name = "MODIFIER_TYPE", default = "") + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } + object PropertyDefaults { + val Code = "" + val ModifierType = "" + val Order = -1: Int + } } -class Modifier(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[ModifierDb](graph_4762, id_4762) +class Modifier(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 31.toShort, seq_4762) with ModifierBase - with StoredNode - with AstNode { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def modifierType: String = get().modifierType - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => Modifier.PropertyDefaults.Code - case "MODIFIER_TYPE" => Modifier.PropertyDefaults.ModifierType - case "ORDER" => Modifier.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def astIn: Iterator[AstNode] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaAstIn - - /** Traverse to MEMBER via AST IN edge. - */ - def _memberViaAstIn: overflowdb.traversal.Traversal[Member] = get()._memberViaAstIn - - /** Traverse to METHOD via AST IN edge. - */ - def _methodViaAstIn: Method = get()._methodViaAstIn - - /** Traverse to TYPE_DECL via AST IN edge. - */ - def _typeDeclViaAstIn: TypeDecl = get()._typeDeclViaAstIn - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Modifier.Label - } + with AstNode + with StaticType[ModifierEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "modifierType" - case 5 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "modifierType" + case 4 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => modifierType - case 5 => order + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.modifierType + case 4 => this.order + case _ => null } override def productPrefix = "Modifier" - override def productArity = 6 -} - -class ModifierDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with AstNode with ModifierBase { + override def productArity = 5 - override def layoutInformation: NodeLayoutInformation = Modifier.layoutInformation - - private var _code: String = Modifier.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _modifierType: String = Modifier.PropertyDefaults.ModifierType - def modifierType: String = _modifierType - private var _order: Integer = Modifier.PropertyDefaults.Order - def order: scala.Int = _order + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Modifier] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("MODIFIER_TYPE", modifierType) - properties.put("ORDER", order) +object NewModifier { + def apply(): NewModifier = new NewModifier + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_Modifier_code 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: NewModifier => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Modifier_columnNumber 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[Int]] + 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: NewModifier => + generated.columnNumber 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_Modifier_lineNumber 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[Int]] + 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: NewModifier => + generated.lineNumber 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_Modifier_modifierType 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: NewModifier => + dstCast(offset) = generated.modifierType + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Modifier_order 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[Int]] + 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: NewModifier => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == modifierType)) { properties.put("MODIFIER_TYPE", modifierType) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } +class NewModifier extends NewNode(31.toShort) with ModifierBase with AstNodeNew { + override type StoredNodeType = Modifier + override def label: String = "MODIFIER" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewModifier.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - - import overflowdb.traversal._ - def astIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](0) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = astIn.collectAll[ControlStructure] - def _memberViaAstIn: overflowdb.traversal.Traversal[Member] = astIn.collectAll[Member] - def _methodViaAstIn: Method = try { astIn.collectAll[Method].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent METHOD is mandatory, but not defined for this MODIFIER node with id=" + id, - e - ) + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewModifier.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def _typeDeclViaAstIn: TypeDecl = try { astIn.collectAll[TypeDecl].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent TYPE_DECL is mandatory, but not defined for this MODIFIER node with id=" + id, - e - ) + + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var modifierType: String = "": String + var order: Int = -1: Int + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def modifierType(value: String): this.type = { this.modifierType = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 38, 1) + interface.countProperty(this, 43, 1) } - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - override def label: String = { - Modifier.Label + override def copy: this.type = { + val newInstance = new NewModifier + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.modifierType = this.modifierType + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "modifierType" - case 5 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "modifierType" + case 4 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => modifierType - case 5 => order - } - - override def productPrefix = "Modifier" - override def productArity = 6 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[ModifierDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "MODIFIER_TYPE" => this._modifierType - case "ORDER" => this._order - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.modifierType + case 4 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "MODIFIER_TYPE" => this._modifierType = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewModifier].code - this._columnNumber = newNode.asInstanceOf[NewModifier].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewModifier].lineNumber match { - case None => null; case Some(value) => value - } - this._modifierType = newNode.asInstanceOf[NewModifier].modifierType - this._order = newNode.asInstanceOf[NewModifier].order - - } + override def productPrefix = "NewModifier" + override def productArity = 5 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewModifier] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Namespace.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Namespace.scala index b15f99752..0b4361be9 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Namespace.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Namespace.scala @@ -1,254 +1,1546 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Namespace { - def apply(graph: Graph, id: Long) = new Namespace(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait NamespaceEMT extends AnyRef with AstNodeEMT with HasNameEMT - val Label = "NAMESPACE" +trait NamespaceBase extends AbstractNode with AstNodeBase with StaticType[NamespaceEMT] { - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val all: Set[String] = Set(Code, ColumnNumber, LineNumber, Name, Order) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +object Namespace { + val Label = "NAMESPACE" + object PropertyNames { - } + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - object PropertyDefaults { - val Code = "" - val Name = "" - val Order = -1: Int - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List().asJava, - List(io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation).asJava - ) + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array("REF") - } + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - val factory = new NodeFactory[NamespaceDb] { - override val forLabel = Namespace.Label + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + } + object Properties { - override def createNode(ref: NodeRef[NamespaceDb]) = - new NamespaceDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") - override def createNodeRef(graph: Graph, id: Long) = Namespace(graph, id) - } -} + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") -trait NamespaceBase extends AbstractNode with AstNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } + object PropertyDefaults { + val Code = "" + val Name = "" + val Order = -1: Int + } } -class Namespace(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[NamespaceDb](graph_4762, id_4762) +class Namespace(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 32.toShort, seq_4762) with NamespaceBase - with StoredNode - with AstNode { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => Namespace.PropertyDefaults.Code - case "NAME" => Namespace.PropertyDefaults.Name - case "ORDER" => Namespace.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def refIn: Iterator[NamespaceBlock] = get().refIn - override def _refIn = get()._refIn - - /** Traverse to NAMESPACE_BLOCK via REF IN edge. - */ - def _namespaceBlockViaRefIn: overflowdb.traversal.Traversal[NamespaceBlock] = get()._namespaceBlockViaRefIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Namespace.Label - } + with AstNode + with StaticType[NamespaceEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "name" - case 5 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "name" + case 4 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => name - case 5 => order + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.name + case 4 => this.order + case _ => null } override def productPrefix = "Namespace" - override def productArity = 6 -} - -class NamespaceDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with AstNode with NamespaceBase { + override def productArity = 5 - override def layoutInformation: NodeLayoutInformation = Namespace.layoutInformation + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Namespace] +} - private var _code: String = Namespace.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = Namespace.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = Namespace.PropertyDefaults.Order - def order: scala.Int = _order +object NewNamespace { + def apply(): NewNamespace = new NewNamespace + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - - properties + object InsertionHelpers { + object NewNodeInserter_Namespace_code 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: NewNamespace => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Namespace_columnNumber 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[Int]] + 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: NewNamespace => + generated.columnNumber 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_Namespace_lineNumber 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[Int]] + 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: NewNamespace => + generated.lineNumber 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_Namespace_name 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: NewNamespace => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Namespace_order 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[Int]] + 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: NewNamespace => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } +class NewNamespace extends NewNode(32.toShort) with NamespaceBase with AstNodeNew { + override type StoredNodeType = Namespace + override def label: String = "NAMESPACE" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewNamespace.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewNamespace.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def refIn: Iterator[NamespaceBlock] = createAdjacentNodeScalaIteratorByOffSet[NamespaceBlock](0) - override def _refIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _namespaceBlockViaRefIn: overflowdb.traversal.Traversal[NamespaceBlock] = refIn.collectAll[NamespaceBlock] + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + } - override def label: String = { - Namespace.Label + override def copy: this.type = { + val newInstance = new NewNamespace + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "name" - case 5 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "name" + case 4 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => name - case 5 => order - } - - override def productPrefix = "Namespace" - override def productArity = 6 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NamespaceDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.name + case 4 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewNamespace].code - this._columnNumber = newNode.asInstanceOf[NewNamespace].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewNamespace].lineNumber match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewNamespace].name - this._order = newNode.asInstanceOf[NewNamespace].order - - } + override def productPrefix = "NewNamespace" + override def productArity = 5 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewNamespace] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NamespaceBlock.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NamespaceBlock.scala index e93d62b02..0868d704a 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NamespaceBlock.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NamespaceBlock.scala @@ -1,331 +1,1640 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object NamespaceBlock { - def apply(graph: Graph, id: Long) = new NamespaceBlock(graph, id) - - val Label = "NAMESPACE_BLOCK" - - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val Filename = "FILENAME" - val FullName = "FULL_NAME" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val all: Set[String] = Set(Code, ColumnNumber, Filename, FullName, LineNumber, Name, Order) - val allAsJava: java.util.Set[String] = all.asJava - } - - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val Filename = new overflowdb.PropertyKey[String]("FILENAME") - val FullName = new overflowdb.PropertyKey[String]("FULL_NAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - - } +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait NamespaceBlockEMT extends AnyRef with AstNodeEMT with HasFilenameEMT with HasFullNameEMT with HasNameEMT - object PropertyDefaults { - val Code = "" - val Filename = "" - val FullName = "" - val Name = "" - val Order = -1: Int - } +trait NamespaceBlockBase extends AbstractNode with AstNodeBase with StaticType[NamespaceBlockEMT] { - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.SourceFile.layoutInformation - ).asJava, - List(io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation).asJava - ) - - object Edges { - val Out: Array[String] = Array("AST", "REF", "SOURCE_FILE") - val In: Array[String] = Array("AST") - } - - val factory = new NodeFactory[NamespaceBlockDb] { - override val forLabel = NamespaceBlock.Label - - override def createNode(ref: NodeRef[NamespaceBlockDb]) = - new NamespaceBlockDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = NamespaceBlock(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + if (("": String) != this.filename) res.put("FILENAME", this.filename) + if (("": String) != this.fullName) res.put("FULL_NAME", this.fullName) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } } -trait NamespaceBlockBase extends AbstractNode with AstNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] +object NamespaceBlock { + val Label = "NAMESPACE_BLOCK" + object PropertyNames { - def code: String - def columnNumber: Option[scala.Int] - def filename: String - def fullName: String - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" -} + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" -class NamespaceBlock(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[NamespaceBlockDb](graph_4762, id_4762) - with NamespaceBlockBase - with StoredNode - with AstNode { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def filename: String = get().filename - override def fullName: String = get().fullName - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => NamespaceBlock.PropertyDefaults.Code - case "FILENAME" => NamespaceBlock.PropertyDefaults.Filename - case "FULL_NAME" => NamespaceBlock.PropertyDefaults.FullName - case "NAME" => NamespaceBlock.PropertyDefaults.Name - case "ORDER" => NamespaceBlock.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } + /** The path of the source file this node was generated from, relative to the root path in the meta data node. This + * field must be set but may be set to the value `` to indicate that no source file can be associated with + * the node, e.g., because the node represents an entity known to exist because it is referenced, but for which the + * file that is is declared in is unknown. + */ + val Filename = "FILENAME" - def astOut: Iterator[AstNode] = get().astOut - override def _astOut = get()._astOut + /** This is the fully-qualified name of an entity, e.g., the fully-qualified name of a method or type. The details + * of what constitutes a fully-qualified name are language specific. This field SHOULD be human readable. + */ + val FullName = "FULL_NAME" - /** Traverse to METHOD via AST OUT edge. - */ - def _methodViaAstOut: overflowdb.traversal.Traversal[Method] = get()._methodViaAstOut + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - /** Traverse to TYPE_DECL via AST OUT edge. - */ - def _typeDeclViaAstOut: overflowdb.traversal.Traversal[TypeDecl] = get()._typeDeclViaAstOut + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - def refOut: Iterator[Namespace] = get().refOut - override def _refOut = get()._refOut + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + } + object Properties { - /** Traverse to NAMESPACE via REF OUT edge. - */ - def _namespaceViaRefOut: overflowdb.traversal.Traversal[Namespace] = get()._namespaceViaRefOut + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") - def sourceFileOut: Iterator[File] = get().sourceFileOut - override def _sourceFileOut = get()._sourceFileOut + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") - /** Traverse to FILE via SOURCE_FILE OUT edge. - */ - def _fileViaSourceFileOut: overflowdb.traversal.Traversal[File] = get()._fileViaSourceFileOut + /** The path of the source file this node was generated from, relative to the root path in the meta data node. This + * field must be set but may be set to the value `` to indicate that no source file can be associated with + * the node, e.g., because the node represents an entity known to exist because it is referenced, but for which the + * file that is is declared in is unknown. + */ + val Filename = flatgraph.SinglePropertyKey[String](kind = 21, name = "FILENAME", default = "") - def astIn: Iterator[File] = get().astIn - override def _astIn = get()._astIn + /** This is the fully-qualified name of an entity, e.g., the fully-qualified name of a method or type. The details + * of what constitutes a fully-qualified name are language specific. This field SHOULD be human readable. + */ + val FullName = flatgraph.SinglePropertyKey[String](kind = 22, name = "FULL_NAME", default = "") - /** Traverse to FILE via AST IN edge. - */ - def _fileViaAstIn: Option[File] = get()._fileViaAstIn + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - NamespaceBlock.Label + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } + object PropertyDefaults { + val Code = "" + val Filename = "" + val FullName = "" + val Name = "" + val Order = -1: Int } +} + +class NamespaceBlock(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 33.toShort, seq_4762) + with NamespaceBlockBase + with AstNode + with StaticType[NamespaceBlockEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "filename" - case 4 => "fullName" - case 5 => "lineNumber" - case 6 => "name" - case 7 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "filename" + case 3 => "fullName" + case 4 => "lineNumber" + case 5 => "name" + case 6 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => filename - case 4 => fullName - case 5 => lineNumber - case 6 => name - case 7 => order + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.filename + case 3 => this.fullName + case 4 => this.lineNumber + case 5 => this.name + case 6 => this.order + case _ => null } override def productPrefix = "NamespaceBlock" - override def productArity = 8 + override def productArity = 7 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NamespaceBlock] } -class NamespaceBlockDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with AstNode with NamespaceBlockBase { - - override def layoutInformation: NodeLayoutInformation = NamespaceBlock.layoutInformation - - private var _code: String = NamespaceBlock.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _filename: String = NamespaceBlock.PropertyDefaults.Filename - def filename: String = _filename - private var _fullName: String = NamespaceBlock.PropertyDefaults.FullName - def fullName: String = _fullName - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = NamespaceBlock.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = NamespaceBlock.PropertyDefaults.Order - def order: scala.Int = _order - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - properties.put("FILENAME", filename) - properties.put("FULL_NAME", fullName) - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - - properties - } +object NewNamespaceBlock { + def apply(): NewNamespaceBlock = new NewNamespaceBlock + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (!(("") == filename)) { properties.put("FILENAME", filename) } - if (!(("") == fullName)) { properties.put("FULL_NAME", fullName) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - - properties + object InsertionHelpers { + object NewNodeInserter_NamespaceBlock_code 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: NewNamespaceBlock => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_NamespaceBlock_columnNumber 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[Int]] + 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: NewNamespaceBlock => + generated.columnNumber 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_NamespaceBlock_filename 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: NewNamespaceBlock => + dstCast(offset) = generated.filename + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_NamespaceBlock_fullName 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: NewNamespaceBlock => + dstCast(offset) = generated.fullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_NamespaceBlock_lineNumber 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[Int]] + 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: NewNamespaceBlock => + generated.lineNumber 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_NamespaceBlock_name 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: NewNamespaceBlock => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_NamespaceBlock_order 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[Int]] + 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: NewNamespaceBlock => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - import overflowdb.traversal._ - def astOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](0) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _methodViaAstOut: overflowdb.traversal.Traversal[Method] = astOut.collectAll[Method] - def _typeDeclViaAstOut: overflowdb.traversal.Traversal[TypeDecl] = astOut.collectAll[TypeDecl] - - def refOut: Iterator[Namespace] = createAdjacentNodeScalaIteratorByOffSet[Namespace](1) - override def _refOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _namespaceViaRefOut: overflowdb.traversal.Traversal[Namespace] = refOut.collectAll[Namespace] +class NewNamespaceBlock extends NewNode(33.toShort) with NamespaceBlockBase with AstNodeNew { + override type StoredNodeType = NamespaceBlock + override def label: String = "NAMESPACE_BLOCK" - def sourceFileOut: Iterator[File] = createAdjacentNodeScalaIteratorByOffSet[File](2) - override def _sourceFileOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _fileViaSourceFileOut: overflowdb.traversal.Traversal[File] = sourceFileOut.collectAll[File] + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewNamespaceBlock.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewNamespaceBlock.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } - def astIn: Iterator[File] = createAdjacentNodeScalaIteratorByOffSet[File](3) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _fileViaAstIn: Option[File] = astIn.collectAll[File].nextOption() + var code: String = "": String + var columnNumber: Option[Int] = None + var filename: String = "": String + var fullName: String = "": String + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def filename(value: String): this.type = { this.filename = value; this } + def fullName(value: String): this.type = { this.fullName = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 21, 1) + interface.countProperty(this, 22, 1) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + } - override def label: String = { - NamespaceBlock.Label + override def copy: this.type = { + val newInstance = new NewNamespaceBlock + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.filename = this.filename + newInstance.fullName = this.fullName + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "filename" - case 4 => "fullName" - case 5 => "lineNumber" - case 6 => "name" - case 7 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "filename" + case 3 => "fullName" + case 4 => "lineNumber" + case 5 => "name" + case 6 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => filename - case 4 => fullName - case 5 => lineNumber - case 6 => name - case 7 => order - } - - override def productPrefix = "NamespaceBlock" - override def productArity = 8 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NamespaceBlockDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "FILENAME" => this._filename - case "FULL_NAME" => this._fullName - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.filename + case 3 => this.fullName + case 4 => this.lineNumber + case 5 => this.name + case 6 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "FILENAME" => this._filename = value.asInstanceOf[String] - case "FULL_NAME" => this._fullName = value.asInstanceOf[String] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewNamespaceBlock].code - this._columnNumber = newNode.asInstanceOf[NewNamespaceBlock].columnNumber match { - case None => null; case Some(value) => value - } - this._filename = newNode.asInstanceOf[NewNamespaceBlock].filename - this._fullName = newNode.asInstanceOf[NewNamespaceBlock].fullName - this._lineNumber = newNode.asInstanceOf[NewNamespaceBlock].lineNumber match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewNamespaceBlock].name - this._order = newNode.asInstanceOf[NewNamespaceBlock].order - - graph.indexManager.putIfIndexed("FULL_NAME", newNode.asInstanceOf[NewNamespaceBlock].fullName, this.ref) - } + override def productPrefix = "NewNamespaceBlock" + override def productArity = 7 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewNamespaceBlock] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewNodes.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewNodes.scala deleted file mode 100644 index 378c1edd6..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/NewNodes.scala +++ /dev/null @@ -1,46268 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.nodes - -/** base type for all nodes that can be added to a graph, e.g. the diffgraph */ -abstract class NewNode extends AbstractNode with overflowdb.DetachedNodeData with Product { - def properties: Map[String, Any] - def copy: this.type - type StoredType <: StoredNode - private var refOrId: Object = null - override def getRefOrId(): Object = refOrId - override def setRefOrId(r: Object): Unit = { this.refOrId = r } - def stored: Option[StoredType] = - if (refOrId != null && refOrId.isInstanceOf[StoredNode]) Some(refOrId).asInstanceOf[Option[StoredType]] else None - def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean - def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean -} - -object NewAnnotation { - def apply(): NewAnnotation = new NewAnnotation - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewAnnotation extends NewNode with AnnotationBase with ExpressionNew { - type StoredType = Annotation - - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var fullName: String = "" - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "ANNOTATION" - - override def copy: this.type = { - val newInstance = new NewAnnotation - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.fullName = this.fullName - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def fullName(value: String): this.type = { - this.fullName = value - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (!(("") == fullName)) { res += "FULL_NAME" -> fullName } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewAnnotation.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.name - case 2 => this.lineNumber - case 3 => this.fullName - case 4 => this.columnNumber - case 5 => this.code - case 6 => this.argumentName - case 7 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "name" - case 2 => "lineNumber" - case 3 => "fullName" - case 4 => "columnNumber" - case 5 => "code" - case 6 => "argumentName" - case 7 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewAnnotation" - override def productArity = 8 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewAnnotation] -} - -object NewAnnotationLiteral { - def apply(): NewAnnotationLiteral = new NewAnnotationLiteral - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewAnnotationLiteral extends NewNode with AnnotationLiteralBase with ExpressionNew { - type StoredType = AnnotationLiteral - - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "ANNOTATION_LITERAL" - - override def copy: this.type = { - val newInstance = new NewAnnotationLiteral - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewAnnotationLiteral.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.name - case 2 => this.lineNumber - case 3 => this.columnNumber - case 4 => this.code - case 5 => this.argumentName - case 6 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "name" - case 2 => "lineNumber" - case 3 => "columnNumber" - case 4 => "code" - case 5 => "argumentName" - case 6 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewAnnotationLiteral" - override def productArity = 7 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewAnnotationLiteral] -} - -object NewAnnotationParameter { - def apply(): NewAnnotationParameter = new NewAnnotationParameter - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewAnnotationParameter extends NewNode with AnnotationParameterBase with AstNodeNew { - type StoredType = AnnotationParameter - - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "ANNOTATION_PARAMETER" - - override def copy: this.type = { - val newInstance = new NewAnnotationParameter - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewAnnotationParameter.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.lineNumber - case 2 => this.columnNumber - case 3 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "lineNumber" - case 2 => "columnNumber" - case 3 => "code" - case _ => "" - } - - override def productPrefix = "NewAnnotationParameter" - override def productArity = 4 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewAnnotationParameter] -} - -object NewAnnotationParameterAssign { - def apply(): NewAnnotationParameterAssign = new NewAnnotationParameterAssign - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewAnnotationParameterAssign extends NewNode with AnnotationParameterAssignBase with AstNodeNew { - type StoredType = AnnotationParameterAssign - - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "ANNOTATION_PARAMETER_ASSIGN" - - override def copy: this.type = { - val newInstance = new NewAnnotationParameterAssign - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewAnnotationParameterAssign.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.lineNumber - case 2 => this.columnNumber - case 3 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "lineNumber" - case 2 => "columnNumber" - case 3 => "code" - case _ => "" - } - - override def productPrefix = "NewAnnotationParameterAssign" - override def productArity = 4 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewAnnotationParameterAssign] -} - -object NewArrayInitializer { - def apply(): NewArrayInitializer = new NewArrayInitializer - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewArrayInitializer extends NewNode with ArrayInitializerBase with AstNodeNew with ExpressionNew { - type StoredType = ArrayInitializer - - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "ARRAY_INITIALIZER" - - override def copy: this.type = { - val newInstance = new NewArrayInitializer - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewArrayInitializer.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.lineNumber - case 2 => this.columnNumber - case 3 => this.code - case 4 => this.argumentName - case 5 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "lineNumber" - case 2 => "columnNumber" - case 3 => "code" - case 4 => "argumentName" - case 5 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewArrayInitializer" - override def productArity = 6 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewArrayInitializer] -} - -object NewBinding { - def apply(): NewBinding = new NewBinding - - private val outNeighbors: Map[String, Set[String]] = Map("REF" -> Set("METHOD")) - private val inNeighbors: Map[String, Set[String]] = Map("BINDS" -> Set("TYPE_DECL")) - -} - -class NewBinding extends NewNode with BindingBase { - type StoredType = Binding - - var signature: String = "" - var name: String = "" - var methodFullName: String = "" - - override def label: String = "BINDING" - - override def copy: this.type = { - val newInstance = new NewBinding - newInstance.methodFullName = this.methodFullName - newInstance.name = this.name - newInstance.signature = this.signature - newInstance.asInstanceOf[this.type] - } - - def methodFullName(value: String): this.type = { - this.methodFullName = value - this - } - - def name(value: String): this.type = { - this.name = value - this - } - - def signature(value: String): this.type = { - this.signature = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == methodFullName)) { res += "METHOD_FULL_NAME" -> methodFullName } - if (!(("") == name)) { res += "NAME" -> name } - if (!(("") == signature)) { res += "SIGNATURE" -> signature } - res - } - - import NewBinding.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.signature - case 1 => this.name - case 2 => this.methodFullName - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "signature" - case 1 => "name" - case 2 => "methodFullName" - case _ => "" - } - - override def productPrefix = "NewBinding" - override def productArity = 3 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewBinding] -} - -object NewBlock { - def apply(): NewBlock = new NewBlock - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewBlock extends NewNode with BlockBase with ExpressionNew { - type StoredType = Block - - var typeFullName: String = "" - var possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "BLOCK" - - override def copy: this.type = { - val newInstance = new NewBlock - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.possibleTypes = this.possibleTypes - newInstance.typeFullName = this.typeFullName - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { - this.dynamicTypeHintFullName = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - def possibleTypes(value: IterableOnce[String]): this.type = { - this.possibleTypes = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def typeFullName(value: String): this.type = { - this.typeFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (dynamicTypeHintFullName != null && dynamicTypeHintFullName.nonEmpty) { - res += "DYNAMIC_TYPE_HINT_FULL_NAME" -> dynamicTypeHintFullName - } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (possibleTypes != null && possibleTypes.nonEmpty) { res += "POSSIBLE_TYPES" -> possibleTypes } - if (!(("") == typeFullName)) { res += "TYPE_FULL_NAME" -> typeFullName } - res - } - - import NewBlock.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeFullName - case 1 => this.possibleTypes - case 2 => this.order - case 3 => this.lineNumber - case 4 => this.dynamicTypeHintFullName - case 5 => this.columnNumber - case 6 => this.code - case 7 => this.argumentName - case 8 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeFullName" - case 1 => "possibleTypes" - case 2 => "order" - case 3 => "lineNumber" - case 4 => "dynamicTypeHintFullName" - case 5 => "columnNumber" - case 6 => "code" - case 7 => "argumentName" - case 8 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewBlock" - override def productArity = 9 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewBlock] -} - -object NewCall { - def apply(): NewCall = new NewCall - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewCall extends NewNode with CallBase with CallReprNew with ExpressionNew { - type StoredType = Call - - var typeFullName: String = "" - var signature: String = "" - var possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var order: scala.Int = -1: Int - var name: String = "" - var methodFullName: String = "" - var lineNumber: Option[scala.Int] = None - var dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var dispatchType: String = "" - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "CALL" - - override def copy: this.type = { - val newInstance = new NewCall - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.dispatchType = this.dispatchType - newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName - newInstance.lineNumber = this.lineNumber - newInstance.methodFullName = this.methodFullName - newInstance.name = this.name - newInstance.order = this.order - newInstance.possibleTypes = this.possibleTypes - newInstance.signature = this.signature - newInstance.typeFullName = this.typeFullName - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def dispatchType(value: String): this.type = { - this.dispatchType = value - this - } - - def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { - this.dynamicTypeHintFullName = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def methodFullName(value: String): this.type = { - this.methodFullName = value - this - } - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - def possibleTypes(value: IterableOnce[String]): this.type = { - this.possibleTypes = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def signature(value: String): this.type = { - this.signature = value - this - } - - def typeFullName(value: String): this.type = { - this.typeFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (!(("") == dispatchType)) { res += "DISPATCH_TYPE" -> dispatchType } - if (dynamicTypeHintFullName != null && dynamicTypeHintFullName.nonEmpty) { - res += "DYNAMIC_TYPE_HINT_FULL_NAME" -> dynamicTypeHintFullName - } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == methodFullName)) { res += "METHOD_FULL_NAME" -> methodFullName } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (possibleTypes != null && possibleTypes.nonEmpty) { res += "POSSIBLE_TYPES" -> possibleTypes } - if (!(("") == signature)) { res += "SIGNATURE" -> signature } - if (!(("") == typeFullName)) { res += "TYPE_FULL_NAME" -> typeFullName } - res - } - - import NewCall.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeFullName - case 1 => this.signature - case 2 => this.possibleTypes - case 3 => this.order - case 4 => this.name - case 5 => this.methodFullName - case 6 => this.lineNumber - case 7 => this.dynamicTypeHintFullName - case 8 => this.dispatchType - case 9 => this.columnNumber - case 10 => this.code - case 11 => this.argumentName - case 12 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeFullName" - case 1 => "signature" - case 2 => "possibleTypes" - case 3 => "order" - case 4 => "name" - case 5 => "methodFullName" - case 6 => "lineNumber" - case 7 => "dynamicTypeHintFullName" - case 8 => "dispatchType" - case 9 => "columnNumber" - case 10 => "code" - case 11 => "argumentName" - case 12 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewCall" - override def productArity = 13 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewCall] -} - -object NewClosureBinding { - def apply(): NewClosureBinding = new NewClosureBinding - - private val outNeighbors: Map[String, Set[String]] = Map("REF" -> Set("LOCAL", "METHOD_PARAMETER_IN")) - private val inNeighbors: Map[String, Set[String]] = - Map("CAPTURE" -> Set("METHOD_REF", "TYPE_REF"), "CAPTURED_BY" -> Set("LOCAL", "METHOD_PARAMETER_IN")) - -} - -class NewClosureBinding extends NewNode with ClosureBindingBase { - type StoredType = ClosureBinding - - var evaluationStrategy: String = "" - var closureOriginalName: Option[String] = None - var closureBindingId: Option[String] = None - - override def label: String = "CLOSURE_BINDING" - - override def copy: this.type = { - val newInstance = new NewClosureBinding - newInstance.closureBindingId = this.closureBindingId - newInstance.closureOriginalName = this.closureOriginalName - newInstance.evaluationStrategy = this.evaluationStrategy - newInstance.asInstanceOf[this.type] - } - - def closureBindingId(value: String): this.type = { - this.closureBindingId = Option(value).asInstanceOf[Option[String]] - this - } - - def closureBindingId(value: Option[String]): this.type = closureBindingId(value match { - case None => null; case Some(value) => value: String - }) - - def closureOriginalName(value: String): this.type = { - this.closureOriginalName = Option(value).asInstanceOf[Option[String]] - this - } - - def closureOriginalName(value: Option[String]): this.type = closureOriginalName(value match { - case None => null; case Some(value) => value: String - }) - - def evaluationStrategy(value: String): this.type = { - this.evaluationStrategy = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - closureBindingId.map { value => res += "CLOSURE_BINDING_ID" -> value } - closureOriginalName.map { value => res += "CLOSURE_ORIGINAL_NAME" -> value } - if (!(("") == evaluationStrategy)) { res += "EVALUATION_STRATEGY" -> evaluationStrategy } - res - } - - import NewClosureBinding.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.evaluationStrategy - case 1 => this.closureOriginalName - case 2 => this.closureBindingId - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "evaluationStrategy" - case 1 => "closureOriginalName" - case 2 => "closureBindingId" - case _ => "" - } - - override def productPrefix = "NewClosureBinding" - override def productArity = 3 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewClosureBinding] -} - -object NewComment { - def apply(): NewComment = new NewComment - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewComment extends NewNode with CommentBase with AstNodeNew { - type StoredType = Comment - - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var filename: String = "" - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "COMMENT" - - override def copy: this.type = { - val newInstance = new NewComment - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.filename = this.filename - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def filename(value: String): this.type = { - this.filename = value - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (!(("") == filename)) { res += "FILENAME" -> filename } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewComment.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.lineNumber - case 2 => this.filename - case 3 => this.columnNumber - case 4 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "lineNumber" - case 2 => "filename" - case 3 => "columnNumber" - case 4 => "code" - case _ => "" - } - - override def productPrefix = "NewComment" - override def productArity = 5 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewComment] -} - -object NewConfigFile { - def apply(): NewConfigFile = new NewConfigFile - - private val outNeighbors: Map[String, Set[String]] = Map() - private val inNeighbors: Map[String, Set[String]] = Map() - -} - -class NewConfigFile extends NewNode with ConfigFileBase { - type StoredType = ConfigFile - - var name: String = "" - var content: String = "" - - override def label: String = "CONFIG_FILE" - - override def copy: this.type = { - val newInstance = new NewConfigFile - newInstance.content = this.content - newInstance.name = this.name - newInstance.asInstanceOf[this.type] - } - - def content(value: String): this.type = { - this.content = value - this - } - - def name(value: String): this.type = { - this.name = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == content)) { res += "CONTENT" -> content } - if (!(("") == name)) { res += "NAME" -> name } - res - } - - import NewConfigFile.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.name - case 1 => this.content - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "name" - case 1 => "content" - case _ => "" - } - - override def productPrefix = "NewConfigFile" - override def productArity = 2 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewConfigFile] -} - -object NewControlStructure { - def apply(): NewControlStructure = new NewControlStructure - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewControlStructure extends NewNode with ControlStructureBase with ExpressionNew { - type StoredType = ControlStructure - - var parserTypeName: String = "" - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var controlStructureType: String = "" - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "CONTROL_STRUCTURE" - - override def copy: this.type = { - val newInstance = new NewControlStructure - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.controlStructureType = this.controlStructureType - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.parserTypeName = this.parserTypeName - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def controlStructureType(value: String): this.type = { - this.controlStructureType = value - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - def parserTypeName(value: String): this.type = { - this.parserTypeName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (!(("") == controlStructureType)) { res += "CONTROL_STRUCTURE_TYPE" -> controlStructureType } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (!(("") == parserTypeName)) { res += "PARSER_TYPE_NAME" -> parserTypeName } - res - } - - import NewControlStructure.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.parserTypeName - case 1 => this.order - case 2 => this.lineNumber - case 3 => this.controlStructureType - case 4 => this.columnNumber - case 5 => this.code - case 6 => this.argumentName - case 7 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "parserTypeName" - case 1 => "order" - case 2 => "lineNumber" - case 3 => "controlStructureType" - case 4 => "columnNumber" - case 5 => "code" - case 6 => "argumentName" - case 7 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewControlStructure" - override def productArity = 8 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewControlStructure] -} - -object NewDependency { - def apply(): NewDependency = new NewDependency - - private val outNeighbors: Map[String, Set[String]] = Map() - private val inNeighbors: Map[String, Set[String]] = Map("IMPORTS" -> Set("IMPORT")) - -} - -class NewDependency extends NewNode with DependencyBase { - type StoredType = Dependency - - var version: String = "" - var name: String = "" - var dependencyGroupId: Option[String] = None - - override def label: String = "DEPENDENCY" - - override def copy: this.type = { - val newInstance = new NewDependency - newInstance.dependencyGroupId = this.dependencyGroupId - newInstance.name = this.name - newInstance.version = this.version - newInstance.asInstanceOf[this.type] - } - - def dependencyGroupId(value: String): this.type = { - this.dependencyGroupId = Option(value).asInstanceOf[Option[String]] - this - } - - def dependencyGroupId(value: Option[String]): this.type = dependencyGroupId(value match { - case None => null; case Some(value) => value: String - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def version(value: String): this.type = { - this.version = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - dependencyGroupId.map { value => res += "DEPENDENCY_GROUP_ID" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!(("") == version)) { res += "VERSION" -> version } - res - } - - import NewDependency.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.version - case 1 => this.name - case 2 => this.dependencyGroupId - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "version" - case 1 => "name" - case 2 => "dependencyGroupId" - case _ => "" - } - - override def productPrefix = "NewDependency" - override def productArity = 3 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewDependency] -} - -object NewFieldIdentifier { - def apply(): NewFieldIdentifier = new NewFieldIdentifier - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewFieldIdentifier extends NewNode with FieldIdentifierBase with ExpressionNew { - type StoredType = FieldIdentifier - - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - var canonicalName: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "FIELD_IDENTIFIER" - - override def copy: this.type = { - val newInstance = new NewFieldIdentifier - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.canonicalName = this.canonicalName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def canonicalName(value: String): this.type = { - this.canonicalName = value - this - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == canonicalName)) { res += "CANONICAL_NAME" -> canonicalName } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewFieldIdentifier.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.lineNumber - case 2 => this.columnNumber - case 3 => this.code - case 4 => this.canonicalName - case 5 => this.argumentName - case 6 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "lineNumber" - case 2 => "columnNumber" - case 3 => "code" - case 4 => "canonicalName" - case 5 => "argumentName" - case 6 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewFieldIdentifier" - override def productArity = 7 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewFieldIdentifier] -} - -object NewFile { - def apply(): NewFile = new NewFile - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewFile extends NewNode with FileBase with AstNodeNew { - type StoredType = File - - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var hash: Option[String] = None - var content: String = "" - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "FILE" - - override def copy: this.type = { - val newInstance = new NewFile - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.content = this.content - newInstance.hash = this.hash - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def content(value: String): this.type = { - this.content = value - this - } - - def hash(value: String): this.type = { - this.hash = Option(value).asInstanceOf[Option[String]] - this - } - - def hash(value: Option[String]): this.type = hash(value match { - case None => null; case Some(value) => value: String - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (!(("") == content)) { res += "CONTENT" -> content } - hash.map { value => res += "HASH" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewFile.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.name - case 2 => this.lineNumber - case 3 => this.hash - case 4 => this.content - case 5 => this.columnNumber - case 6 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "name" - case 2 => "lineNumber" - case 3 => "hash" - case 4 => "content" - case 5 => "columnNumber" - case 6 => "code" - case _ => "" - } - - override def productPrefix = "NewFile" - override def productArity = 7 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewFile] -} - -object NewFinding { - def apply(): NewFinding = new NewFinding - - private val outNeighbors: Map[String, Set[String]] = Map() - private val inNeighbors: Map[String, Set[String]] = Map() - -} - -class NewFinding extends NewNode with FindingBase { - type StoredType = Finding - - var keyValuePairs: IndexedSeq[KeyValuePairBase] = collection.immutable.ArraySeq.empty - var evidence: IndexedSeq[AbstractNode] = collection.immutable.ArraySeq.empty - - override def label: String = "FINDING" - - override def copy: this.type = { - val newInstance = new NewFinding - newInstance.evidence = this.evidence - newInstance.keyValuePairs = this.keyValuePairs - newInstance.asInstanceOf[this.type] - } - - def evidence(value: IterableOnce[AbstractNode]): this.type = { - this.evidence = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def keyValuePairs(value: IterableOnce[KeyValuePairBase]): this.type = { - this.keyValuePairs = value.iterator.to(collection.immutable.ArraySeq) - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (evidence != null && evidence.nonEmpty) { res += "evidence" -> evidence } - if (keyValuePairs != null && keyValuePairs.nonEmpty) { res += "keyValuePairs" -> keyValuePairs } - res - } - - import NewFinding.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.keyValuePairs - case 1 => this.evidence - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "keyValuePairs" - case 1 => "evidence" - case _ => "" - } - - override def productPrefix = "NewFinding" - override def productArity = 2 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewFinding] -} - -object NewIdentifier { - def apply(): NewIdentifier = new NewIdentifier - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewIdentifier extends NewNode with IdentifierBase with ExpressionNew { - type StoredType = Identifier - - var typeFullName: String = "" - var possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "IDENTIFIER" - - override def copy: this.type = { - val newInstance = new NewIdentifier - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.possibleTypes = this.possibleTypes - newInstance.typeFullName = this.typeFullName - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { - this.dynamicTypeHintFullName = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - def possibleTypes(value: IterableOnce[String]): this.type = { - this.possibleTypes = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def typeFullName(value: String): this.type = { - this.typeFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (dynamicTypeHintFullName != null && dynamicTypeHintFullName.nonEmpty) { - res += "DYNAMIC_TYPE_HINT_FULL_NAME" -> dynamicTypeHintFullName - } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (possibleTypes != null && possibleTypes.nonEmpty) { res += "POSSIBLE_TYPES" -> possibleTypes } - if (!(("") == typeFullName)) { res += "TYPE_FULL_NAME" -> typeFullName } - res - } - - import NewIdentifier.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeFullName - case 1 => this.possibleTypes - case 2 => this.order - case 3 => this.name - case 4 => this.lineNumber - case 5 => this.dynamicTypeHintFullName - case 6 => this.columnNumber - case 7 => this.code - case 8 => this.argumentName - case 9 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeFullName" - case 1 => "possibleTypes" - case 2 => "order" - case 3 => "name" - case 4 => "lineNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "columnNumber" - case 7 => "code" - case 8 => "argumentName" - case 9 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewIdentifier" - override def productArity = 10 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewIdentifier] -} - -object NewImport { - def apply(): NewImport = new NewImport - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewImport extends NewNode with ImportBase with AstNodeNew { - type StoredType = Import - - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var isWildcard: Option[Boolean] = None - var isExplicit: Option[Boolean] = None - var importedEntity: Option[String] = None - var importedAs: Option[String] = None - var explicitAs: Option[Boolean] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "IMPORT" - - override def copy: this.type = { - val newInstance = new NewImport - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.explicitAs = this.explicitAs - newInstance.importedAs = this.importedAs - newInstance.importedEntity = this.importedEntity - newInstance.isExplicit = this.isExplicit - newInstance.isWildcard = this.isWildcard - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def explicitAs(value: java.lang.Boolean): this.type = { - this.explicitAs = Option(value).asInstanceOf[Option[Boolean]] - this - } - - def explicitAs(value: Option[Boolean]): this.type = explicitAs(value match { - case None => null; case Some(value) => value: java.lang.Boolean - }) - - def importedAs(value: String): this.type = { - this.importedAs = Option(value).asInstanceOf[Option[String]] - this - } - - def importedAs(value: Option[String]): this.type = importedAs(value match { - case None => null; case Some(value) => value: String - }) - - def importedEntity(value: String): this.type = { - this.importedEntity = Option(value).asInstanceOf[Option[String]] - this - } - - def importedEntity(value: Option[String]): this.type = importedEntity(value match { - case None => null; case Some(value) => value: String - }) - - def isExplicit(value: java.lang.Boolean): this.type = { - this.isExplicit = Option(value).asInstanceOf[Option[Boolean]] - this - } - - def isExplicit(value: Option[Boolean]): this.type = isExplicit(value match { - case None => null; case Some(value) => value: java.lang.Boolean - }) - - def isWildcard(value: java.lang.Boolean): this.type = { - this.isWildcard = Option(value).asInstanceOf[Option[Boolean]] - this - } - - def isWildcard(value: Option[Boolean]): this.type = isWildcard(value match { - case None => null; case Some(value) => value: java.lang.Boolean - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - explicitAs.map { value => res += "EXPLICIT_AS" -> value } - importedAs.map { value => res += "IMPORTED_AS" -> value } - importedEntity.map { value => res += "IMPORTED_ENTITY" -> value } - isExplicit.map { value => res += "IS_EXPLICIT" -> value } - isWildcard.map { value => res += "IS_WILDCARD" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewImport.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.lineNumber - case 2 => this.isWildcard - case 3 => this.isExplicit - case 4 => this.importedEntity - case 5 => this.importedAs - case 6 => this.explicitAs - case 7 => this.columnNumber - case 8 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "lineNumber" - case 2 => "isWildcard" - case 3 => "isExplicit" - case 4 => "importedEntity" - case 5 => "importedAs" - case 6 => "explicitAs" - case 7 => "columnNumber" - case 8 => "code" - case _ => "" - } - - override def productPrefix = "NewImport" - override def productArity = 9 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewImport] -} - -object NewJumpLabel { - def apply(): NewJumpLabel = new NewJumpLabel - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewJumpLabel extends NewNode with JumpLabelBase with AstNodeNew { - type StoredType = JumpLabel - - var parserTypeName: String = "" - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "JUMP_LABEL" - - override def copy: this.type = { - val newInstance = new NewJumpLabel - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.parserTypeName = this.parserTypeName - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - def parserTypeName(value: String): this.type = { - this.parserTypeName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (!(("") == parserTypeName)) { res += "PARSER_TYPE_NAME" -> parserTypeName } - res - } - - import NewJumpLabel.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.parserTypeName - case 1 => this.order - case 2 => this.name - case 3 => this.lineNumber - case 4 => this.columnNumber - case 5 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "parserTypeName" - case 1 => "order" - case 2 => "name" - case 3 => "lineNumber" - case 4 => "columnNumber" - case 5 => "code" - case _ => "" - } - - override def productPrefix = "NewJumpLabel" - override def productArity = 6 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewJumpLabel] -} - -object NewJumpTarget { - def apply(): NewJumpTarget = new NewJumpTarget - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewJumpTarget extends NewNode with JumpTargetBase with AstNodeNew with CfgNodeNew { - type StoredType = JumpTarget - - var parserTypeName: String = "" - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentIndex: scala.Int = -1: Int - - override def label: String = "JUMP_TARGET" - - override def copy: this.type = { - val newInstance = new NewJumpTarget - newInstance.argumentIndex = this.argumentIndex - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.parserTypeName = this.parserTypeName - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - def parserTypeName(value: String): this.type = { - this.parserTypeName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (!(("") == parserTypeName)) { res += "PARSER_TYPE_NAME" -> parserTypeName } - res - } - - import NewJumpTarget.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.parserTypeName - case 1 => this.order - case 2 => this.name - case 3 => this.lineNumber - case 4 => this.columnNumber - case 5 => this.code - case 6 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "parserTypeName" - case 1 => "order" - case 2 => "name" - case 3 => "lineNumber" - case 4 => "columnNumber" - case 5 => "code" - case 6 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewJumpTarget" - override def productArity = 7 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewJumpTarget] -} - -object NewKeyValuePair { - def apply(): NewKeyValuePair = new NewKeyValuePair - - private val outNeighbors: Map[String, Set[String]] = Map() - private val inNeighbors: Map[String, Set[String]] = Map() - -} - -class NewKeyValuePair extends NewNode with KeyValuePairBase { - type StoredType = KeyValuePair - - var value: String = "" - var key: String = "" - - override def label: String = "KEY_VALUE_PAIR" - - override def copy: this.type = { - val newInstance = new NewKeyValuePair - newInstance.key = this.key - newInstance.value = this.value - newInstance.asInstanceOf[this.type] - } - - def key(value: String): this.type = { - this.key = value - this - } - - def value(value: String): this.type = { - this.value = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == key)) { res += "KEY" -> key } - if (!(("") == value)) { res += "VALUE" -> value } - res - } - - import NewKeyValuePair.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.value - case 1 => this.key - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "value" - case 1 => "key" - case _ => "" - } - - override def productPrefix = "NewKeyValuePair" - override def productArity = 2 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewKeyValuePair] -} - -object NewLiteral { - def apply(): NewLiteral = new NewLiteral - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewLiteral extends NewNode with LiteralBase with ExpressionNew { - type StoredType = Literal - - var typeFullName: String = "" - var possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "LITERAL" - - override def copy: this.type = { - val newInstance = new NewLiteral - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.possibleTypes = this.possibleTypes - newInstance.typeFullName = this.typeFullName - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { - this.dynamicTypeHintFullName = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - def possibleTypes(value: IterableOnce[String]): this.type = { - this.possibleTypes = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def typeFullName(value: String): this.type = { - this.typeFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (dynamicTypeHintFullName != null && dynamicTypeHintFullName.nonEmpty) { - res += "DYNAMIC_TYPE_HINT_FULL_NAME" -> dynamicTypeHintFullName - } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (possibleTypes != null && possibleTypes.nonEmpty) { res += "POSSIBLE_TYPES" -> possibleTypes } - if (!(("") == typeFullName)) { res += "TYPE_FULL_NAME" -> typeFullName } - res - } - - import NewLiteral.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeFullName - case 1 => this.possibleTypes - case 2 => this.order - case 3 => this.lineNumber - case 4 => this.dynamicTypeHintFullName - case 5 => this.columnNumber - case 6 => this.code - case 7 => this.argumentName - case 8 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeFullName" - case 1 => "possibleTypes" - case 2 => "order" - case 3 => "lineNumber" - case 4 => "dynamicTypeHintFullName" - case 5 => "columnNumber" - case 6 => "code" - case 7 => "argumentName" - case 8 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewLiteral" - override def productArity = 9 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewLiteral] -} - -object NewLocal { - def apply(): NewLocal = new NewLocal - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewLocal extends NewNode with LocalBase with AstNodeNew with DeclarationNew { - type StoredType = Local - - var typeFullName: String = "" - var possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var columnNumber: Option[scala.Int] = None - var code: String = "" - var closureBindingId: Option[String] = None - - override def label: String = "LOCAL" - - override def copy: this.type = { - val newInstance = new NewLocal - newInstance.closureBindingId = this.closureBindingId - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.possibleTypes = this.possibleTypes - newInstance.typeFullName = this.typeFullName - newInstance.asInstanceOf[this.type] - } - - def closureBindingId(value: String): this.type = { - this.closureBindingId = Option(value).asInstanceOf[Option[String]] - this - } - - def closureBindingId(value: Option[String]): this.type = closureBindingId(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { - this.dynamicTypeHintFullName = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - def possibleTypes(value: IterableOnce[String]): this.type = { - this.possibleTypes = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def typeFullName(value: String): this.type = { - this.typeFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - closureBindingId.map { value => res += "CLOSURE_BINDING_ID" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (dynamicTypeHintFullName != null && dynamicTypeHintFullName.nonEmpty) { - res += "DYNAMIC_TYPE_HINT_FULL_NAME" -> dynamicTypeHintFullName - } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (possibleTypes != null && possibleTypes.nonEmpty) { res += "POSSIBLE_TYPES" -> possibleTypes } - if (!(("") == typeFullName)) { res += "TYPE_FULL_NAME" -> typeFullName } - res - } - - import NewLocal.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeFullName - case 1 => this.possibleTypes - case 2 => this.order - case 3 => this.name - case 4 => this.lineNumber - case 5 => this.dynamicTypeHintFullName - case 6 => this.columnNumber - case 7 => this.code - case 8 => this.closureBindingId - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeFullName" - case 1 => "possibleTypes" - case 2 => "order" - case 3 => "name" - case 4 => "lineNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "columnNumber" - case 7 => "code" - case 8 => "closureBindingId" - case _ => "" - } - - override def productPrefix = "NewLocal" - override def productArity = 9 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewLocal] -} - -object NewLocation { - def apply(): NewLocation = new NewLocation - - private val outNeighbors: Map[String, Set[String]] = Map() - private val inNeighbors: Map[String, Set[String]] = Map() - -} - -class NewLocation extends NewNode with LocationBase { - type StoredType = Location - - var node: Option[AbstractNode] = None - var symbol: String = "" - var packageName: String = "" - var nodeLabel: String = "" - var methodShortName: String = "" - var methodFullName: String = "" - var lineNumber: Option[scala.Int] = None - var filename: String = "" - var classShortName: String = "" - var className: String = "" - - override def label: String = "LOCATION" - - override def copy: this.type = { - val newInstance = new NewLocation - newInstance.className = this.className - newInstance.classShortName = this.classShortName - newInstance.filename = this.filename - newInstance.lineNumber = this.lineNumber - newInstance.methodFullName = this.methodFullName - newInstance.methodShortName = this.methodShortName - newInstance.nodeLabel = this.nodeLabel - newInstance.packageName = this.packageName - newInstance.symbol = this.symbol - newInstance.node = this.node - newInstance.asInstanceOf[this.type] - } - - def className(value: String): this.type = { - this.className = value - this - } - - def classShortName(value: String): this.type = { - this.classShortName = value - this - } - - def filename(value: String): this.type = { - this.filename = value - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def methodFullName(value: String): this.type = { - this.methodFullName = value - this - } - - def methodShortName(value: String): this.type = { - this.methodShortName = value - this - } - - def nodeLabel(value: String): this.type = { - this.nodeLabel = value - this - } - - def packageName(value: String): this.type = { - this.packageName = value - this - } - - def symbol(value: String): this.type = { - this.symbol = value - this - } - - def node(value: AbstractNode): this.type = { - this.node = Option(value).asInstanceOf[Option[AbstractNode]] - this - } - - def node(value: Option[AbstractNode]): this.type = node(value match { - case None => null; case Some(value) => value: AbstractNode - }) - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == className)) { res += "CLASS_NAME" -> className } - if (!(("") == classShortName)) { res += "CLASS_SHORT_NAME" -> classShortName } - if (!(("") == filename)) { res += "FILENAME" -> filename } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == methodFullName)) { res += "METHOD_FULL_NAME" -> methodFullName } - if (!(("") == methodShortName)) { res += "METHOD_SHORT_NAME" -> methodShortName } - if (!(("") == nodeLabel)) { res += "NODE_LABEL" -> nodeLabel } - if (!(("") == packageName)) { res += "PACKAGE_NAME" -> packageName } - if (!(("") == symbol)) { res += "SYMBOL" -> symbol } - node.map { value => res += "node" -> value } - res - } - - import NewLocation.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.node - case 1 => this.symbol - case 2 => this.packageName - case 3 => this.nodeLabel - case 4 => this.methodShortName - case 5 => this.methodFullName - case 6 => this.lineNumber - case 7 => this.filename - case 8 => this.classShortName - case 9 => this.className - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "node" - case 1 => "symbol" - case 2 => "packageName" - case 3 => "nodeLabel" - case 4 => "methodShortName" - case 5 => "methodFullName" - case 6 => "lineNumber" - case 7 => "filename" - case 8 => "classShortName" - case 9 => "className" - case _ => "" - } - - override def productPrefix = "NewLocation" - override def productArity = 10 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewLocation] -} - -object NewMember { - def apply(): NewMember = new NewMember - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewMember extends NewNode with MemberBase with AstNodeNew with DeclarationNew { - type StoredType = Member - - var typeFullName: String = "" - var possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var columnNumber: Option[scala.Int] = None - var code: String = "" - var astParentType: String = "" - var astParentFullName: String = "" - - override def label: String = "MEMBER" - - override def copy: this.type = { - val newInstance = new NewMember - newInstance.astParentFullName = this.astParentFullName - newInstance.astParentType = this.astParentType - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.possibleTypes = this.possibleTypes - newInstance.typeFullName = this.typeFullName - newInstance.asInstanceOf[this.type] - } - - def astParentFullName(value: String): this.type = { - this.astParentFullName = value - this - } - - def astParentType(value: String): this.type = { - this.astParentType = value - this - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { - this.dynamicTypeHintFullName = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - def possibleTypes(value: IterableOnce[String]): this.type = { - this.possibleTypes = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def typeFullName(value: String): this.type = { - this.typeFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == astParentFullName)) { res += "AST_PARENT_FULL_NAME" -> astParentFullName } - if (!(("") == astParentType)) { res += "AST_PARENT_TYPE" -> astParentType } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (dynamicTypeHintFullName != null && dynamicTypeHintFullName.nonEmpty) { - res += "DYNAMIC_TYPE_HINT_FULL_NAME" -> dynamicTypeHintFullName - } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (possibleTypes != null && possibleTypes.nonEmpty) { res += "POSSIBLE_TYPES" -> possibleTypes } - if (!(("") == typeFullName)) { res += "TYPE_FULL_NAME" -> typeFullName } - res - } - - import NewMember.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeFullName - case 1 => this.possibleTypes - case 2 => this.order - case 3 => this.name - case 4 => this.lineNumber - case 5 => this.dynamicTypeHintFullName - case 6 => this.columnNumber - case 7 => this.code - case 8 => this.astParentType - case 9 => this.astParentFullName - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeFullName" - case 1 => "possibleTypes" - case 2 => "order" - case 3 => "name" - case 4 => "lineNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "columnNumber" - case 7 => "code" - case 8 => "astParentType" - case 9 => "astParentFullName" - case _ => "" - } - - override def productPrefix = "NewMember" - override def productArity = 10 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMember] -} - -object NewMetaData { - def apply(): NewMetaData = new NewMetaData - - private val outNeighbors: Map[String, Set[String]] = Map() - private val inNeighbors: Map[String, Set[String]] = Map() - -} - -class NewMetaData extends NewNode with MetaDataBase { - type StoredType = MetaData - - var version: String = "" - var root: String = "" - var overlays: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var language: String = "" - var hash: Option[String] = None - - override def label: String = "META_DATA" - - override def copy: this.type = { - val newInstance = new NewMetaData - newInstance.hash = this.hash - newInstance.language = this.language - newInstance.overlays = this.overlays - newInstance.root = this.root - newInstance.version = this.version - newInstance.asInstanceOf[this.type] - } - - def hash(value: String): this.type = { - this.hash = Option(value).asInstanceOf[Option[String]] - this - } - - def hash(value: Option[String]): this.type = hash(value match { - case None => null; case Some(value) => value: String - }) - - def language(value: String): this.type = { - this.language = value - this - } - - def overlays(value: IterableOnce[String]): this.type = { - this.overlays = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def root(value: String): this.type = { - this.root = value - this - } - - def version(value: String): this.type = { - this.version = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - hash.map { value => res += "HASH" -> value } - if (!(("") == language)) { res += "LANGUAGE" -> language } - if (overlays != null && overlays.nonEmpty) { res += "OVERLAYS" -> overlays } - if (!(("") == root)) { res += "ROOT" -> root } - if (!(("") == version)) { res += "VERSION" -> version } - res - } - - import NewMetaData.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.version - case 1 => this.root - case 2 => this.overlays - case 3 => this.language - case 4 => this.hash - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "version" - case 1 => "root" - case 2 => "overlays" - case 3 => "language" - case 4 => "hash" - case _ => "" - } - - override def productPrefix = "NewMetaData" - override def productArity = 5 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMetaData] -} - -object NewMethod { - def apply(): NewMethod = new NewMethod - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewMethod extends NewNode with MethodBase with AstNodeNew with CfgNodeNew with DeclarationNew { - type StoredType = Method - - var signature: String = "" - var order: scala.Int = -1: Int - var offsetEnd: Option[scala.Int] = None - var offset: Option[scala.Int] = None - var name: String = "" - var lineNumberEnd: Option[scala.Int] = None - var lineNumber: Option[scala.Int] = None - var isExternal: Boolean = false - var hash: Option[String] = None - var fullName: String = "" - var filename: String = "" - var columnNumberEnd: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - var astParentType: String = "" - var astParentFullName: String = "" - - override def label: String = "METHOD" - - override def copy: this.type = { - val newInstance = new NewMethod - newInstance.astParentFullName = this.astParentFullName - newInstance.astParentType = this.astParentType - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.columnNumberEnd = this.columnNumberEnd - newInstance.filename = this.filename - newInstance.fullName = this.fullName - newInstance.hash = this.hash - newInstance.isExternal = this.isExternal - newInstance.lineNumber = this.lineNumber - newInstance.lineNumberEnd = this.lineNumberEnd - newInstance.name = this.name - newInstance.offset = this.offset - newInstance.offsetEnd = this.offsetEnd - newInstance.order = this.order - newInstance.signature = this.signature - newInstance.asInstanceOf[this.type] - } - - def astParentFullName(value: String): this.type = { - this.astParentFullName = value - this - } - - def astParentType(value: String): this.type = { - this.astParentType = value - this - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def columnNumberEnd(value: Integer): this.type = { - this.columnNumberEnd = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumberEnd(value: Option[scala.Int]): this.type = columnNumberEnd(value match { - case None => null; case Some(value) => value: Integer - }) - - def filename(value: String): this.type = { - this.filename = value - this - } - - def fullName(value: String): this.type = { - this.fullName = value - this - } - - def hash(value: String): this.type = { - this.hash = Option(value).asInstanceOf[Option[String]] - this - } - - def hash(value: Option[String]): this.type = hash(value match { - case None => null; case Some(value) => value: String - }) - - def isExternal(value: java.lang.Boolean): this.type = { - this.isExternal = value - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumberEnd(value: Integer): this.type = { - this.lineNumberEnd = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumberEnd(value: Option[scala.Int]): this.type = lineNumberEnd(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def offset(value: Integer): this.type = { - this.offset = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def offset(value: Option[scala.Int]): this.type = offset(value match { - case None => null; case Some(value) => value: Integer - }) - - def offsetEnd(value: Integer): this.type = { - this.offsetEnd = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def offsetEnd(value: Option[scala.Int]): this.type = offsetEnd(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - def signature(value: String): this.type = { - this.signature = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == astParentFullName)) { res += "AST_PARENT_FULL_NAME" -> astParentFullName } - if (!(("") == astParentType)) { res += "AST_PARENT_TYPE" -> astParentType } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - columnNumberEnd.map { value => res += "COLUMN_NUMBER_END" -> value } - if (!(("") == filename)) { res += "FILENAME" -> filename } - if (!(("") == fullName)) { res += "FULL_NAME" -> fullName } - hash.map { value => res += "HASH" -> value } - if (!((false) == isExternal)) { res += "IS_EXTERNAL" -> isExternal } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - lineNumberEnd.map { value => res += "LINE_NUMBER_END" -> value } - if (!(("") == name)) { res += "NAME" -> name } - offset.map { value => res += "OFFSET" -> value } - offsetEnd.map { value => res += "OFFSET_END" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (!(("") == signature)) { res += "SIGNATURE" -> signature } - res - } - - import NewMethod.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.signature - case 1 => this.order - case 2 => this.offsetEnd - case 3 => this.offset - case 4 => this.name - case 5 => this.lineNumberEnd - case 6 => this.lineNumber - case 7 => this.isExternal - case 8 => this.hash - case 9 => this.fullName - case 10 => this.filename - case 11 => this.columnNumberEnd - case 12 => this.columnNumber - case 13 => this.code - case 14 => this.astParentType - case 15 => this.astParentFullName - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "signature" - case 1 => "order" - case 2 => "offsetEnd" - case 3 => "offset" - case 4 => "name" - case 5 => "lineNumberEnd" - case 6 => "lineNumber" - case 7 => "isExternal" - case 8 => "hash" - case 9 => "fullName" - case 10 => "filename" - case 11 => "columnNumberEnd" - case 12 => "columnNumber" - case 13 => "code" - case 14 => "astParentType" - case 15 => "astParentFullName" - case _ => "" - } - - override def productPrefix = "NewMethod" - override def productArity = 16 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMethod] -} - -object NewMethodParameterIn { - def apply(): NewMethodParameterIn = new NewMethodParameterIn - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewMethodParameterIn - extends NewNode - with MethodParameterInBase - with AstNodeNew - with CfgNodeNew - with DeclarationNew { - type StoredType = MethodParameterIn - - var typeFullName: String = "" - var possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var isVariadic: Boolean = false - var index: scala.Int = -1: Int - var evaluationStrategy: String = "" - var dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var columnNumber: Option[scala.Int] = None - var code: String = "" - var closureBindingId: Option[String] = None - - override def label: String = "METHOD_PARAMETER_IN" - - override def copy: this.type = { - val newInstance = new NewMethodParameterIn - newInstance.closureBindingId = this.closureBindingId - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName - newInstance.evaluationStrategy = this.evaluationStrategy - newInstance.index = this.index - newInstance.isVariadic = this.isVariadic - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.possibleTypes = this.possibleTypes - newInstance.typeFullName = this.typeFullName - newInstance.asInstanceOf[this.type] - } - - def closureBindingId(value: String): this.type = { - this.closureBindingId = Option(value).asInstanceOf[Option[String]] - this - } - - def closureBindingId(value: Option[String]): this.type = closureBindingId(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { - this.dynamicTypeHintFullName = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def evaluationStrategy(value: String): this.type = { - this.evaluationStrategy = value - this - } - - def index(value: Integer): this.type = { - this.index = value - this - } - - def isVariadic(value: java.lang.Boolean): this.type = { - this.isVariadic = value - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - def possibleTypes(value: IterableOnce[String]): this.type = { - this.possibleTypes = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def typeFullName(value: String): this.type = { - this.typeFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - closureBindingId.map { value => res += "CLOSURE_BINDING_ID" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (dynamicTypeHintFullName != null && dynamicTypeHintFullName.nonEmpty) { - res += "DYNAMIC_TYPE_HINT_FULL_NAME" -> dynamicTypeHintFullName - } - if (!(("") == evaluationStrategy)) { res += "EVALUATION_STRATEGY" -> evaluationStrategy } - if (!((-1: Int) == index)) { res += "INDEX" -> index } - if (!((false) == isVariadic)) { res += "IS_VARIADIC" -> isVariadic } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (possibleTypes != null && possibleTypes.nonEmpty) { res += "POSSIBLE_TYPES" -> possibleTypes } - if (!(("") == typeFullName)) { res += "TYPE_FULL_NAME" -> typeFullName } - res - } - - import NewMethodParameterIn.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeFullName - case 1 => this.possibleTypes - case 2 => this.order - case 3 => this.name - case 4 => this.lineNumber - case 5 => this.isVariadic - case 6 => this.index - case 7 => this.evaluationStrategy - case 8 => this.dynamicTypeHintFullName - case 9 => this.columnNumber - case 10 => this.code - case 11 => this.closureBindingId - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeFullName" - case 1 => "possibleTypes" - case 2 => "order" - case 3 => "name" - case 4 => "lineNumber" - case 5 => "isVariadic" - case 6 => "index" - case 7 => "evaluationStrategy" - case 8 => "dynamicTypeHintFullName" - case 9 => "columnNumber" - case 10 => "code" - case 11 => "closureBindingId" - case _ => "" - } - - override def productPrefix = "NewMethodParameterIn" - override def productArity = 12 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMethodParameterIn] -} - -object NewMethodParameterOut { - def apply(): NewMethodParameterOut = new NewMethodParameterOut - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewMethodParameterOut - extends NewNode - with MethodParameterOutBase - with AstNodeNew - with CfgNodeNew - with DeclarationNew { - type StoredType = MethodParameterOut - - var typeFullName: String = "" - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var isVariadic: Boolean = false - var index: scala.Int = -1: Int - var evaluationStrategy: String = "" - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "METHOD_PARAMETER_OUT" - - override def copy: this.type = { - val newInstance = new NewMethodParameterOut - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.evaluationStrategy = this.evaluationStrategy - newInstance.index = this.index - newInstance.isVariadic = this.isVariadic - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.typeFullName = this.typeFullName - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def evaluationStrategy(value: String): this.type = { - this.evaluationStrategy = value - this - } - - def index(value: Integer): this.type = { - this.index = value - this - } - - def isVariadic(value: java.lang.Boolean): this.type = { - this.isVariadic = value - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - def typeFullName(value: String): this.type = { - this.typeFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (!(("") == evaluationStrategy)) { res += "EVALUATION_STRATEGY" -> evaluationStrategy } - if (!((-1: Int) == index)) { res += "INDEX" -> index } - if (!((false) == isVariadic)) { res += "IS_VARIADIC" -> isVariadic } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (!(("") == typeFullName)) { res += "TYPE_FULL_NAME" -> typeFullName } - res - } - - import NewMethodParameterOut.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeFullName - case 1 => this.order - case 2 => this.name - case 3 => this.lineNumber - case 4 => this.isVariadic - case 5 => this.index - case 6 => this.evaluationStrategy - case 7 => this.columnNumber - case 8 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeFullName" - case 1 => "order" - case 2 => "name" - case 3 => "lineNumber" - case 4 => "isVariadic" - case 5 => "index" - case 6 => "evaluationStrategy" - case 7 => "columnNumber" - case 8 => "code" - case _ => "" - } - - override def productPrefix = "NewMethodParameterOut" - override def productArity = 9 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMethodParameterOut] -} - -object NewMethodRef { - def apply(): NewMethodRef = new NewMethodRef - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewMethodRef extends NewNode with MethodRefBase with ExpressionNew { - type StoredType = MethodRef - - var typeFullName: String = "" - var possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var order: scala.Int = -1: Int - var methodFullName: String = "" - var lineNumber: Option[scala.Int] = None - var dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "METHOD_REF" - - override def copy: this.type = { - val newInstance = new NewMethodRef - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName - newInstance.lineNumber = this.lineNumber - newInstance.methodFullName = this.methodFullName - newInstance.order = this.order - newInstance.possibleTypes = this.possibleTypes - newInstance.typeFullName = this.typeFullName - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { - this.dynamicTypeHintFullName = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def methodFullName(value: String): this.type = { - this.methodFullName = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - def possibleTypes(value: IterableOnce[String]): this.type = { - this.possibleTypes = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def typeFullName(value: String): this.type = { - this.typeFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (dynamicTypeHintFullName != null && dynamicTypeHintFullName.nonEmpty) { - res += "DYNAMIC_TYPE_HINT_FULL_NAME" -> dynamicTypeHintFullName - } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == methodFullName)) { res += "METHOD_FULL_NAME" -> methodFullName } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (possibleTypes != null && possibleTypes.nonEmpty) { res += "POSSIBLE_TYPES" -> possibleTypes } - if (!(("") == typeFullName)) { res += "TYPE_FULL_NAME" -> typeFullName } - res - } - - import NewMethodRef.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeFullName - case 1 => this.possibleTypes - case 2 => this.order - case 3 => this.methodFullName - case 4 => this.lineNumber - case 5 => this.dynamicTypeHintFullName - case 6 => this.columnNumber - case 7 => this.code - case 8 => this.argumentName - case 9 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeFullName" - case 1 => "possibleTypes" - case 2 => "order" - case 3 => "methodFullName" - case 4 => "lineNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "columnNumber" - case 7 => "code" - case 8 => "argumentName" - case 9 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewMethodRef" - override def productArity = 10 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMethodRef] -} - -object NewMethodReturn { - def apply(): NewMethodReturn = new NewMethodReturn - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewMethodReturn extends NewNode with MethodReturnBase with CfgNodeNew { - type StoredType = MethodReturn - - var typeFullName: String = "" - var possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var evaluationStrategy: String = "" - var dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "METHOD_RETURN" - - override def copy: this.type = { - val newInstance = new NewMethodReturn - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName - newInstance.evaluationStrategy = this.evaluationStrategy - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.possibleTypes = this.possibleTypes - newInstance.typeFullName = this.typeFullName - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { - this.dynamicTypeHintFullName = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def evaluationStrategy(value: String): this.type = { - this.evaluationStrategy = value - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - def possibleTypes(value: IterableOnce[String]): this.type = { - this.possibleTypes = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def typeFullName(value: String): this.type = { - this.typeFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (dynamicTypeHintFullName != null && dynamicTypeHintFullName.nonEmpty) { - res += "DYNAMIC_TYPE_HINT_FULL_NAME" -> dynamicTypeHintFullName - } - if (!(("") == evaluationStrategy)) { res += "EVALUATION_STRATEGY" -> evaluationStrategy } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (possibleTypes != null && possibleTypes.nonEmpty) { res += "POSSIBLE_TYPES" -> possibleTypes } - if (!(("") == typeFullName)) { res += "TYPE_FULL_NAME" -> typeFullName } - res - } - - import NewMethodReturn.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeFullName - case 1 => this.possibleTypes - case 2 => this.order - case 3 => this.lineNumber - case 4 => this.evaluationStrategy - case 5 => this.dynamicTypeHintFullName - case 6 => this.columnNumber - case 7 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeFullName" - case 1 => "possibleTypes" - case 2 => "order" - case 3 => "lineNumber" - case 4 => "evaluationStrategy" - case 5 => "dynamicTypeHintFullName" - case 6 => "columnNumber" - case 7 => "code" - case _ => "" - } - - override def productPrefix = "NewMethodReturn" - override def productArity = 8 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewMethodReturn] -} - -object NewModifier { - def apply(): NewModifier = new NewModifier - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewModifier extends NewNode with ModifierBase with AstNodeNew { - type StoredType = Modifier - - var order: scala.Int = -1: Int - var modifierType: String = "" - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "MODIFIER" - - override def copy: this.type = { - val newInstance = new NewModifier - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.modifierType = this.modifierType - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def modifierType(value: String): this.type = { - this.modifierType = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == modifierType)) { res += "MODIFIER_TYPE" -> modifierType } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewModifier.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.modifierType - case 2 => this.lineNumber - case 3 => this.columnNumber - case 4 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "modifierType" - case 2 => "lineNumber" - case 3 => "columnNumber" - case 4 => "code" - case _ => "" - } - - override def productPrefix = "NewModifier" - override def productArity = 5 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewModifier] -} - -object NewNamespace { - def apply(): NewNamespace = new NewNamespace - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewNamespace extends NewNode with NamespaceBase with AstNodeNew { - type StoredType = Namespace - - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "NAMESPACE" - - override def copy: this.type = { - val newInstance = new NewNamespace - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewNamespace.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.name - case 2 => this.lineNumber - case 3 => this.columnNumber - case 4 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "name" - case 2 => "lineNumber" - case 3 => "columnNumber" - case 4 => "code" - case _ => "" - } - - override def productPrefix = "NewNamespace" - override def productArity = 5 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewNamespace] -} - -object NewNamespaceBlock { - def apply(): NewNamespaceBlock = new NewNamespaceBlock - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewNamespaceBlock extends NewNode with NamespaceBlockBase with AstNodeNew { - type StoredType = NamespaceBlock - - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var fullName: String = "" - var filename: String = "" - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "NAMESPACE_BLOCK" - - override def copy: this.type = { - val newInstance = new NewNamespaceBlock - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.filename = this.filename - newInstance.fullName = this.fullName - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def filename(value: String): this.type = { - this.filename = value - this - } - - def fullName(value: String): this.type = { - this.fullName = value - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (!(("") == filename)) { res += "FILENAME" -> filename } - if (!(("") == fullName)) { res += "FULL_NAME" -> fullName } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewNamespaceBlock.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.name - case 2 => this.lineNumber - case 3 => this.fullName - case 4 => this.filename - case 5 => this.columnNumber - case 6 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "name" - case 2 => "lineNumber" - case 3 => "fullName" - case 4 => "filename" - case 5 => "columnNumber" - case 6 => "code" - case _ => "" - } - - override def productPrefix = "NewNamespaceBlock" - override def productArity = 7 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewNamespaceBlock] -} - -object NewReturn { - def apply(): NewReturn = new NewReturn - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewReturn extends NewNode with ReturnBase with ExpressionNew { - type StoredType = Return - - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "RETURN" - - override def copy: this.type = { - val newInstance = new NewReturn - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewReturn.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.lineNumber - case 2 => this.columnNumber - case 3 => this.code - case 4 => this.argumentName - case 5 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "lineNumber" - case 2 => "columnNumber" - case 3 => "code" - case 4 => "argumentName" - case 5 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewReturn" - override def productArity = 6 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewReturn] -} - -object NewTag { - def apply(): NewTag = new NewTag - - private val outNeighbors: Map[String, Set[String]] = Map("TAGGED_BY" -> Set("TAG")) - private val inNeighbors: Map[String, Set[String]] = Map( - "TAGGED_BY" -> Set( - "BLOCK", - "CALL", - "CONTROL_STRUCTURE", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "RETURN", - "TAG", - "TEMPLATE_DOM", - "TYPE_DECL", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewTag extends NewNode with TagBase { - type StoredType = Tag - - var value: String = "" - var name: String = "" - - override def label: String = "TAG" - - override def copy: this.type = { - val newInstance = new NewTag - newInstance.name = this.name - newInstance.value = this.value - newInstance.asInstanceOf[this.type] - } - - def name(value: String): this.type = { - this.name = value - this - } - - def value(value: String): this.type = { - this.value = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == name)) { res += "NAME" -> name } - if (!(("") == value)) { res += "VALUE" -> value } - res - } - - import NewTag.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.value - case 1 => this.name - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "value" - case 1 => "name" - case _ => "" - } - - override def productPrefix = "NewTag" - override def productArity = 2 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTag] -} - -object NewTagNodePair { - def apply(): NewTagNodePair = new NewTagNodePair - - private val outNeighbors: Map[String, Set[String]] = Map() - private val inNeighbors: Map[String, Set[String]] = Map() - -} - -class NewTagNodePair extends NewNode with TagNodePairBase { - type StoredType = TagNodePair - - var tag: TagBase = null - var node: AbstractNode = null - - override def label: String = "TAG_NODE_PAIR" - - override def copy: this.type = { - val newInstance = new NewTagNodePair - newInstance.node = this.node - newInstance.tag = this.tag - newInstance.asInstanceOf[this.type] - } - - def node(value: AbstractNode): this.type = { - this.node = value - this - } - - def tag(value: TagBase): this.type = { - this.tag = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((null) == node)) { res += "node" -> node } - if (!((null) == tag)) { res += "tag" -> tag } - res - } - - import NewTagNodePair.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.tag - case 1 => this.node - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "tag" - case 1 => "node" - case _ => "" - } - - override def productPrefix = "NewTagNodePair" - override def productArity = 2 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTagNodePair] -} - -object NewTemplateDom { - def apply(): NewTemplateDom = new NewTemplateDom - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewTemplateDom extends NewNode with TemplateDomBase with ExpressionNew { - type StoredType = TemplateDom - - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "TEMPLATE_DOM" - - override def copy: this.type = { - val newInstance = new NewTemplateDom - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewTemplateDom.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.name - case 2 => this.lineNumber - case 3 => this.columnNumber - case 4 => this.code - case 5 => this.argumentName - case 6 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "name" - case 2 => "lineNumber" - case 3 => "columnNumber" - case 4 => "code" - case 5 => "argumentName" - case 6 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewTemplateDom" - override def productArity = 7 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTemplateDom] -} - -object NewType { - def apply(): NewType = new NewType - - private val outNeighbors: Map[String, Set[String]] = Map("AST" -> Set("TYPE_ARGUMENT"), "REF" -> Set("TYPE_DECL")) - private val inNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE_DECL"), - "EVAL_TYPE" -> Set( - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CONTROL_STRUCTURE", - "IDENTIFIER", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "TYPE_REF", - "UNKNOWN" - ), - "INHERITS_FROM" -> Set("TYPE_DECL"), - "REF" -> Set("TYPE_ARGUMENT") - ) - -} - -class NewType extends NewNode with TypeBase { - type StoredType = Type - - var typeDeclFullName: String = "" - var name: String = "" - var fullName: String = "" - - override def label: String = "TYPE" - - override def copy: this.type = { - val newInstance = new NewType - newInstance.fullName = this.fullName - newInstance.name = this.name - newInstance.typeDeclFullName = this.typeDeclFullName - newInstance.asInstanceOf[this.type] - } - - def fullName(value: String): this.type = { - this.fullName = value - this - } - - def name(value: String): this.type = { - this.name = value - this - } - - def typeDeclFullName(value: String): this.type = { - this.typeDeclFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == fullName)) { res += "FULL_NAME" -> fullName } - if (!(("") == name)) { res += "NAME" -> name } - if (!(("") == typeDeclFullName)) { res += "TYPE_DECL_FULL_NAME" -> typeDeclFullName } - res - } - - import NewType.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeDeclFullName - case 1 => this.name - case 2 => this.fullName - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeDeclFullName" - case 1 => "name" - case 2 => "fullName" - case _ => "" - } - - override def productPrefix = "NewType" - override def productArity = 3 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewType] -} - -object NewTypeArgument { - def apply(): NewTypeArgument = new NewTypeArgument - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewTypeArgument extends NewNode with TypeArgumentBase with AstNodeNew { - type StoredType = TypeArgument - - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "TYPE_ARGUMENT" - - override def copy: this.type = { - val newInstance = new NewTypeArgument - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewTypeArgument.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.lineNumber - case 2 => this.columnNumber - case 3 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "lineNumber" - case 2 => "columnNumber" - case 3 => "code" - case _ => "" - } - - override def productPrefix = "NewTypeArgument" - override def productArity = 4 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTypeArgument] -} - -object NewTypeDecl { - def apply(): NewTypeDecl = new NewTypeDecl - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewTypeDecl extends NewNode with TypeDeclBase with AstNodeNew { - type StoredType = TypeDecl - - var order: scala.Int = -1: Int - var offsetEnd: Option[scala.Int] = None - var offset: Option[scala.Int] = None - var name: String = "" - var lineNumber: Option[scala.Int] = None - var isExternal: Boolean = false - var inheritsFromTypeFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var fullName: String = "" - var filename: String = "" - var columnNumber: Option[scala.Int] = None - var code: String = "" - var astParentType: String = "" - var astParentFullName: String = "" - var aliasTypeFullName: Option[String] = None - - override def label: String = "TYPE_DECL" - - override def copy: this.type = { - val newInstance = new NewTypeDecl - newInstance.aliasTypeFullName = this.aliasTypeFullName - newInstance.astParentFullName = this.astParentFullName - newInstance.astParentType = this.astParentType - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.filename = this.filename - newInstance.fullName = this.fullName - newInstance.inheritsFromTypeFullName = this.inheritsFromTypeFullName - newInstance.isExternal = this.isExternal - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.offset = this.offset - newInstance.offsetEnd = this.offsetEnd - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def aliasTypeFullName(value: String): this.type = { - this.aliasTypeFullName = Option(value).asInstanceOf[Option[String]] - this - } - - def aliasTypeFullName(value: Option[String]): this.type = aliasTypeFullName(value match { - case None => null; case Some(value) => value: String - }) - - def astParentFullName(value: String): this.type = { - this.astParentFullName = value - this - } - - def astParentType(value: String): this.type = { - this.astParentType = value - this - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def filename(value: String): this.type = { - this.filename = value - this - } - - def fullName(value: String): this.type = { - this.fullName = value - this - } - - def inheritsFromTypeFullName(value: IterableOnce[String]): this.type = { - this.inheritsFromTypeFullName = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def isExternal(value: java.lang.Boolean): this.type = { - this.isExternal = value - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def offset(value: Integer): this.type = { - this.offset = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def offset(value: Option[scala.Int]): this.type = offset(value match { - case None => null; case Some(value) => value: Integer - }) - - def offsetEnd(value: Integer): this.type = { - this.offsetEnd = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def offsetEnd(value: Option[scala.Int]): this.type = offsetEnd(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - aliasTypeFullName.map { value => res += "ALIAS_TYPE_FULL_NAME" -> value } - if (!(("") == astParentFullName)) { res += "AST_PARENT_FULL_NAME" -> astParentFullName } - if (!(("") == astParentType)) { res += "AST_PARENT_TYPE" -> astParentType } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (!(("") == filename)) { res += "FILENAME" -> filename } - if (!(("") == fullName)) { res += "FULL_NAME" -> fullName } - if (inheritsFromTypeFullName != null && inheritsFromTypeFullName.nonEmpty) { - res += "INHERITS_FROM_TYPE_FULL_NAME" -> inheritsFromTypeFullName - } - if (!((false) == isExternal)) { res += "IS_EXTERNAL" -> isExternal } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - offset.map { value => res += "OFFSET" -> value } - offsetEnd.map { value => res += "OFFSET_END" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewTypeDecl.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.offsetEnd - case 2 => this.offset - case 3 => this.name - case 4 => this.lineNumber - case 5 => this.isExternal - case 6 => this.inheritsFromTypeFullName - case 7 => this.fullName - case 8 => this.filename - case 9 => this.columnNumber - case 10 => this.code - case 11 => this.astParentType - case 12 => this.astParentFullName - case 13 => this.aliasTypeFullName - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "offsetEnd" - case 2 => "offset" - case 3 => "name" - case 4 => "lineNumber" - case 5 => "isExternal" - case 6 => "inheritsFromTypeFullName" - case 7 => "fullName" - case 8 => "filename" - case 9 => "columnNumber" - case 10 => "code" - case 11 => "astParentType" - case 12 => "astParentFullName" - case 13 => "aliasTypeFullName" - case _ => "" - } - - override def productPrefix = "NewTypeDecl" - override def productArity = 14 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTypeDecl] -} - -object NewTypeParameter { - def apply(): NewTypeParameter = new NewTypeParameter - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewTypeParameter extends NewNode with TypeParameterBase with AstNodeNew { - type StoredType = TypeParameter - - var order: scala.Int = -1: Int - var name: String = "" - var lineNumber: Option[scala.Int] = None - var columnNumber: Option[scala.Int] = None - var code: String = "" - - override def label: String = "TYPE_PARAMETER" - - override def copy: this.type = { - val newInstance = new NewTypeParameter - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.lineNumber = this.lineNumber - newInstance.name = this.name - newInstance.order = this.order - newInstance.asInstanceOf[this.type] - } - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def name(value: String): this.type = { - this.name = value - this - } - - def order(value: Integer): this.type = { - this.order = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!(("") == name)) { res += "NAME" -> name } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - res - } - - import NewTypeParameter.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.order - case 1 => this.name - case 2 => this.lineNumber - case 3 => this.columnNumber - case 4 => this.code - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "order" - case 1 => "name" - case 2 => "lineNumber" - case 3 => "columnNumber" - case 4 => "code" - case _ => "" - } - - override def productPrefix = "NewTypeParameter" - override def productArity = 5 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTypeParameter] -} - -object NewTypeRef { - def apply(): NewTypeRef = new NewTypeRef - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewTypeRef extends NewNode with TypeRefBase with ExpressionNew { - type StoredType = TypeRef - - var typeFullName: String = "" - var possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "TYPE_REF" - - override def copy: this.type = { - val newInstance = new NewTypeRef - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.possibleTypes = this.possibleTypes - newInstance.typeFullName = this.typeFullName - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { - this.dynamicTypeHintFullName = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - def possibleTypes(value: IterableOnce[String]): this.type = { - this.possibleTypes = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def typeFullName(value: String): this.type = { - this.typeFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (dynamicTypeHintFullName != null && dynamicTypeHintFullName.nonEmpty) { - res += "DYNAMIC_TYPE_HINT_FULL_NAME" -> dynamicTypeHintFullName - } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (possibleTypes != null && possibleTypes.nonEmpty) { res += "POSSIBLE_TYPES" -> possibleTypes } - if (!(("") == typeFullName)) { res += "TYPE_FULL_NAME" -> typeFullName } - res - } - - import NewTypeRef.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeFullName - case 1 => this.possibleTypes - case 2 => this.order - case 3 => this.lineNumber - case 4 => this.dynamicTypeHintFullName - case 5 => this.columnNumber - case 6 => this.code - case 7 => this.argumentName - case 8 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeFullName" - case 1 => "possibleTypes" - case 2 => "order" - case 3 => "lineNumber" - case 4 => "dynamicTypeHintFullName" - case 5 => "columnNumber" - case 6 => "code" - case 7 => "argumentName" - case 8 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewTypeRef" - override def productArity = 9 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTypeRef] -} - -object NewUnknown { - def apply(): NewUnknown = new NewUnknown - - private val outNeighbors: Map[String, Set[String]] = Map( - "ALIAS_OF" -> Set("TYPE"), - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS" -> Set("BINDING"), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CAPTURE" -> Set("CLOSURE_BINDING"), - "CAPTURED_BY" -> Set("CLOSURE_BINDING"), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "EVAL_TYPE" -> Set("TYPE"), - "IMPORTS" -> Set("DEPENDENCY"), - "INHERITS_FROM" -> Set("TYPE"), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "TAGGED_BY" -> Set("TAG") - ) - private val inNeighbors: Map[String, Set[String]] = Map( - "ARGUMENT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "AST" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "BINDS_TO" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CALL" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CDG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CFG" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONDITION" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "CONTAINS" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "IS_CALL_FOR_IMPORT" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "PARAMETER_LINK" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "POST_DOMINATE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REACHING_DEF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "RECEIVER" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "REF" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BINDING", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "CLOSURE_BINDING", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ), - "SOURCE_FILE" -> Set( - "ANNOTATION", - "ANNOTATION_LITERAL", - "ANNOTATION_PARAMETER", - "ANNOTATION_PARAMETER_ASSIGN", - "ARRAY_INITIALIZER", - "BLOCK", - "CALL", - "CALL_REPR", - "CFG_NODE", - "COMMENT", - "CONTROL_STRUCTURE", - "EXPRESSION", - "FIELD_IDENTIFIER", - "FILE", - "IDENTIFIER", - "IMPORT", - "JUMP_LABEL", - "JUMP_TARGET", - "LITERAL", - "LOCAL", - "MEMBER", - "METHOD", - "METHOD_PARAMETER_IN", - "METHOD_PARAMETER_OUT", - "METHOD_REF", - "METHOD_RETURN", - "MODIFIER", - "NAMESPACE", - "NAMESPACE_BLOCK", - "RETURN", - "TEMPLATE_DOM", - "TYPE_ARGUMENT", - "TYPE_DECL", - "TYPE_PARAMETER", - "TYPE_REF", - "UNKNOWN" - ) - ) - -} - -class NewUnknown extends NewNode with UnknownBase with ExpressionNew { - type StoredType = Unknown - - var typeFullName: String = "" - var possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var parserTypeName: String = "" - var order: scala.Int = -1: Int - var lineNumber: Option[scala.Int] = None - var dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - var containedRef: String = "" - var columnNumber: Option[scala.Int] = None - var code: String = "" - var argumentName: Option[String] = None - var argumentIndex: scala.Int = -1: Int - - override def label: String = "UNKNOWN" - - override def copy: this.type = { - val newInstance = new NewUnknown - newInstance.argumentIndex = this.argumentIndex - newInstance.argumentName = this.argumentName - newInstance.code = this.code - newInstance.columnNumber = this.columnNumber - newInstance.containedRef = this.containedRef - newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName - newInstance.lineNumber = this.lineNumber - newInstance.order = this.order - newInstance.parserTypeName = this.parserTypeName - newInstance.possibleTypes = this.possibleTypes - newInstance.typeFullName = this.typeFullName - newInstance.asInstanceOf[this.type] - } - - def argumentIndex(value: Integer): this.type = { - this.argumentIndex = value - this - } - - def argumentName(value: String): this.type = { - this.argumentName = Option(value).asInstanceOf[Option[String]] - this - } - - def argumentName(value: Option[String]): this.type = argumentName(value match { - case None => null; case Some(value) => value: String - }) - - def code(value: String): this.type = { - this.code = value - this - } - - def columnNumber(value: Integer): this.type = { - this.columnNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def columnNumber(value: Option[scala.Int]): this.type = columnNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def containedRef(value: String): this.type = { - this.containedRef = value - this - } - - def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { - this.dynamicTypeHintFullName = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def lineNumber(value: Integer): this.type = { - this.lineNumber = Option(value).asInstanceOf[Option[scala.Int]] - this - } - - def lineNumber(value: Option[scala.Int]): this.type = lineNumber(value match { - case None => null; case Some(value) => value: Integer - }) - - def order(value: Integer): this.type = { - this.order = value - this - } - - def parserTypeName(value: String): this.type = { - this.parserTypeName = value - this - } - - def possibleTypes(value: IterableOnce[String]): this.type = { - this.possibleTypes = value.iterator.to(collection.immutable.ArraySeq) - this - } - - def typeFullName(value: String): this.type = { - this.typeFullName = value - this - } - - override def properties: Map[String, Any] = { - var res = Map[String, Any]() - if (!((-1: Int) == argumentIndex)) { res += "ARGUMENT_INDEX" -> argumentIndex } - argumentName.map { value => res += "ARGUMENT_NAME" -> value } - if (!(("") == code)) { res += "CODE" -> code } - columnNumber.map { value => res += "COLUMN_NUMBER" -> value } - if (!(("") == containedRef)) { res += "CONTAINED_REF" -> containedRef } - if (dynamicTypeHintFullName != null && dynamicTypeHintFullName.nonEmpty) { - res += "DYNAMIC_TYPE_HINT_FULL_NAME" -> dynamicTypeHintFullName - } - lineNumber.map { value => res += "LINE_NUMBER" -> value } - if (!((-1: Int) == order)) { res += "ORDER" -> order } - if (!(("") == parserTypeName)) { res += "PARSER_TYPE_NAME" -> parserTypeName } - if (possibleTypes != null && possibleTypes.nonEmpty) { res += "POSSIBLE_TYPES" -> possibleTypes } - if (!(("") == typeFullName)) { res += "TYPE_FULL_NAME" -> typeFullName } - res - } - - import NewUnknown.{outNeighbors, inNeighbors} - - override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = - outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = - inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) - - override def productElement(n: Int): Any = - n match { - case 0 => this.typeFullName - case 1 => this.possibleTypes - case 2 => this.parserTypeName - case 3 => this.order - case 4 => this.lineNumber - case 5 => this.dynamicTypeHintFullName - case 6 => this.containedRef - case 7 => this.columnNumber - case 8 => this.code - case 9 => this.argumentName - case 10 => this.argumentIndex - case _ => null - } - - override def productElementName(n: Int): String = - n match { - case 0 => "typeFullName" - case 1 => "possibleTypes" - case 2 => "parserTypeName" - case 3 => "order" - case 4 => "lineNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "containedRef" - case 7 => "columnNumber" - case 8 => "code" - case 9 => "argumentName" - case 10 => "argumentIndex" - case _ => "" - } - - override def productPrefix = "NewUnknown" - override def productArity = 11 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewUnknown] -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Return.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Return.scala index b85853009..ab4c29837 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Return.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Return.scala @@ -1,932 +1,1607 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Return { - def apply(graph: Graph, id: Long) = new Return(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait ReturnEMT extends AnyRef with ExpressionEMT - val Label = "RETURN" +trait ReturnBase extends AbstractNode with ExpressionBase with StaticType[ReturnEMT] { - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val all: Set[String] = Set(ArgumentIndex, ArgumentName, Code, ColumnNumber, LineNumber, Order) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +object Return { + val Label = "RETURN" + object PropertyNames { + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" } + object Properties { + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } object PropertyDefaults { val ArgumentIndex = -1: Int val Code = "" val Order = -1: Int } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Condition.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array("ARGUMENT", "AST", "CFG", "DOMINATE", "POST_DOMINATE", "REACHING_DEF", "TAGGED_BY") - val In: Array[String] = - Array("ARGUMENT", "AST", "CDG", "CFG", "CONDITION", "CONTAINS", "DOMINATE", "POST_DOMINATE", "REACHING_DEF") - } - - val factory = new NodeFactory[ReturnDb] { - override val forLabel = Return.Label - - override def createNode(ref: NodeRef[ReturnDb]) = - new ReturnDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = Return(graph, id) - } } -trait ReturnBase extends AbstractNode with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def order: scala.Int - -} - -class Return(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[ReturnDb](graph_4762, id_4762) +class Return(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 34.toShort, seq_4762) with ReturnBase - with StoredNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => Return.PropertyDefaults.ArgumentIndex - case "CODE" => Return.PropertyDefaults.Code - case "ORDER" => Return.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def argumentOut: Iterator[CfgNode] = get().argumentOut - override def _argumentOut = get()._argumentOut - - /** Traverse to BLOCK via ARGUMENT OUT edge. - */ - def _blockViaArgumentOut: Option[Block] = get()._blockViaArgumentOut - - /** Traverse to CALL via ARGUMENT OUT edge. - */ - def _callViaArgumentOut: Option[Call] = get()._callViaArgumentOut - - /** Traverse to CONTROL_STRUCTURE via ARGUMENT OUT edge. - */ - def _controlStructureViaArgumentOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaArgumentOut - - /** Traverse to IDENTIFIER via ARGUMENT OUT edge. - */ - def _identifierViaArgumentOut: Option[Identifier] = get()._identifierViaArgumentOut - - /** Traverse to JUMP_TARGET via ARGUMENT OUT edge. - */ - def _jumpTargetViaArgumentOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaArgumentOut - - /** Traverse to LITERAL via ARGUMENT OUT edge. - */ - def _literalViaArgumentOut: Option[Literal] = get()._literalViaArgumentOut - - /** Traverse to METHOD_REF via ARGUMENT OUT edge. - */ - def _methodRefViaArgumentOut: Option[MethodRef] = get()._methodRefViaArgumentOut - - /** Traverse to RETURN via ARGUMENT OUT edge. - */ - def _returnViaArgumentOut: Option[Return] = get()._returnViaArgumentOut - - /** Traverse to TYPE_REF via ARGUMENT OUT edge. - */ - def _typeRefViaArgumentOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaArgumentOut - - /** Traverse to UNKNOWN via ARGUMENT OUT edge. - */ - def _unknownViaArgumentOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaArgumentOut - - def astOut: Iterator[CfgNode] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to BLOCK via AST OUT edge. - */ - def _blockViaAstOut: overflowdb.traversal.Traversal[Block] = get()._blockViaAstOut - - /** Traverse to CALL via AST OUT edge. - */ - def _callViaAstOut: overflowdb.traversal.Traversal[Call] = get()._callViaAstOut - - /** Traverse to CONTROL_STRUCTURE via AST OUT edge. - */ - def _controlStructureViaAstOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaAstOut - - /** Traverse to IDENTIFIER via AST OUT edge. - */ - def _identifierViaAstOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaAstOut - - /** Traverse to JUMP_TARGET via AST OUT edge. - */ - def _jumpTargetViaAstOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaAstOut - - /** Traverse to LITERAL via AST OUT edge. - */ - def _literalViaAstOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaAstOut - - /** Traverse to METHOD_REF via AST OUT edge. - */ - def _methodRefViaAstOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaAstOut - - /** Traverse to RETURN via AST OUT edge. - */ - def _returnViaAstOut: overflowdb.traversal.Traversal[Return] = get()._returnViaAstOut - - /** Traverse to TYPE_REF via AST OUT edge. - */ - def _typeRefViaAstOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaAstOut - - /** Traverse to UNKNOWN via AST OUT edge. - */ - def _unknownViaAstOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstOut - - def cfgOut: Iterator[MethodReturn] = get().cfgOut - override def _cfgOut = get()._cfgOut - - /** Traverse to METHOD_RETURN via CFG OUT edge. - */ - def _methodReturnViaCfgOut: MethodReturn = get()._methodReturnViaCfgOut - - def dominateOut: Iterator[CfgNode] = get().dominateOut - override def _dominateOut = get()._dominateOut - - /** Traverse to BLOCK via DOMINATE OUT edge. - */ - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateOut - - /** Traverse to CALL via DOMINATE OUT edge. - */ - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaDominateOut - - /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. - */ - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateOut - - /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. - */ - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateOut - - /** Traverse to IDENTIFIER via DOMINATE OUT edge. - */ - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateOut - - /** Traverse to JUMP_TARGET via DOMINATE OUT edge. - */ - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateOut - - /** Traverse to LITERAL via DOMINATE OUT edge. - */ - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateOut - - /** Traverse to METHOD_REF via DOMINATE OUT edge. - */ - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateOut - - /** Traverse to METHOD_RETURN via DOMINATE OUT edge. - */ - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaDominateOut - - /** Traverse to RETURN via DOMINATE OUT edge. - */ - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateOut - - /** Traverse to TYPE_REF via DOMINATE OUT edge. - */ - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateOut - - /** Traverse to UNKNOWN via DOMINATE OUT edge. - */ - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateOut - - def postDominateOut: Iterator[CfgNode] = get().postDominateOut - override def _postDominateOut = get()._postDominateOut - - /** Traverse to BLOCK via POST_DOMINATE OUT edge. - */ - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateOut - - /** Traverse to CALL via POST_DOMINATE OUT edge. - */ - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateOut - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. - */ - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateOut - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateOut - - /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateOut - - /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. - */ - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateOut - - /** Traverse to LITERAL via POST_DOMINATE OUT edge. - */ - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateOut - - /** Traverse to METHOD via POST_DOMINATE OUT edge. - */ - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = get()._methodViaPostDominateOut - - /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. - */ - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateOut - - /** Traverse to RETURN via POST_DOMINATE OUT edge. - */ - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateOut - - /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. - */ - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateOut - - /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. - */ - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateOut - - def reachingDefOut: Iterator[CfgNode] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. - */ - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefOut - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. - */ - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefOut - - /** Traverse to METHOD_REF via REACHING_DEF OUT edge. - */ - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefOut - - /** Traverse to METHOD_RETURN via REACHING_DEF OUT edge. - */ - def _methodReturnViaReachingDefOut: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaReachingDefOut - - /** Traverse to TYPE_REF via REACHING_DEF OUT edge. - */ - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def argumentIn: Iterator[Return] = get().argumentIn - override def _argumentIn = get()._argumentIn - - /** Traverse to RETURN via ARGUMENT IN edge. - */ - def _returnViaArgumentIn: Option[Return] = get()._returnViaArgumentIn - - def astIn: Iterator[Expression] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to BLOCK via AST IN edge. - */ - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = get()._blockViaAstIn - - /** Traverse to CALL via AST IN edge. - */ - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = get()._callViaAstIn - - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: Option[ControlStructure] = get()._controlStructureViaAstIn - - /** Traverse to RETURN via AST IN edge. - */ - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = get()._returnViaAstIn - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - def cdgIn: Iterator[CfgNode] = get().cdgIn - override def _cdgIn = get()._cdgIn - - /** Traverse to BLOCK via CDG IN edge. - */ - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgIn - - /** Traverse to CALL via CDG IN edge. - */ - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = get()._callViaCdgIn - - /** Traverse to CONTROL_STRUCTURE via CDG IN edge. - */ - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgIn - - /** Traverse to FIELD_IDENTIFIER via CDG IN edge. - */ - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgIn - - /** Traverse to IDENTIFIER via CDG IN edge. - */ - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgIn - - /** Traverse to JUMP_TARGET via CDG IN edge. - */ - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgIn - - /** Traverse to LITERAL via CDG IN edge. - */ - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgIn - - /** Traverse to METHOD_REF via CDG IN edge. - */ - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgIn - - /** Traverse to TYPE_REF via CDG IN edge. - */ - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgIn - - /** Traverse to UNKNOWN via CDG IN edge. - */ - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def conditionIn: Iterator[ControlStructure] = get().conditionIn - override def _conditionIn = get()._conditionIn - - /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. - */ - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaConditionIn - - def containsIn: Iterator[Method] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to METHOD via CONTAINS IN edge. - */ - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsIn - - def dominateIn: Iterator[CfgNode] = get().dominateIn - override def _dominateIn = get()._dominateIn - - /** Traverse to BLOCK via DOMINATE IN edge. - */ - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateIn - - /** Traverse to CALL via DOMINATE IN edge. - */ - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaDominateIn - - /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. - */ - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateIn - - /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. - */ - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateIn - - /** Traverse to IDENTIFIER via DOMINATE IN edge. - */ - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateIn - - /** Traverse to JUMP_TARGET via DOMINATE IN edge. - */ - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateIn - - /** Traverse to LITERAL via DOMINATE IN edge. - */ - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateIn - - /** Traverse to METHOD via DOMINATE IN edge. - */ - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = get()._methodViaDominateIn - - /** Traverse to METHOD_REF via DOMINATE IN edge. - */ - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateIn - - /** Traverse to RETURN via DOMINATE IN edge. - */ - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateIn - - /** Traverse to TYPE_REF via DOMINATE IN edge. - */ - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateIn - - /** Traverse to UNKNOWN via DOMINATE IN edge. - */ - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateIn - - def postDominateIn: Iterator[CfgNode] = get().postDominateIn - override def _postDominateIn = get()._postDominateIn - - /** Traverse to BLOCK via POST_DOMINATE IN edge. - */ - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateIn - - /** Traverse to CALL via POST_DOMINATE IN edge. - */ - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateIn - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. - */ - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateIn - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. - */ - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateIn - - /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. - */ - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateIn - - /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. - */ - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateIn - - /** Traverse to LITERAL via POST_DOMINATE IN edge. - */ - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateIn - - /** Traverse to METHOD_REF via POST_DOMINATE IN edge. - */ - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateIn - - /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. - */ - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaPostDominateIn - - /** Traverse to RETURN via POST_DOMINATE IN edge. - */ - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateIn - - /** Traverse to TYPE_REF via POST_DOMINATE IN edge. - */ - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateIn - - /** Traverse to UNKNOWN via POST_DOMINATE IN edge. - */ - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateIn - - def reachingDefIn: Iterator[CfgNode] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - /** Traverse to BLOCK via REACHING_DEF IN edge. - */ - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = get()._blockViaReachingDefIn - - /** Traverse to CALL via REACHING_DEF IN edge. - */ - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefIn - - /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. - */ - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaReachingDefIn - - /** Traverse to IDENTIFIER via REACHING_DEF IN edge. - */ - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefIn - - /** Traverse to LITERAL via REACHING_DEF IN edge. - */ - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefIn - - /** Traverse to METHOD via REACHING_DEF IN edge. - */ - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = get()._methodViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. - */ - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - get()._methodParameterInViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. - */ - def _methodParameterOutViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefIn - - /** Traverse to METHOD_REF via REACHING_DEF IN edge. - */ - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefIn - - /** Traverse to TYPE_REF via REACHING_DEF IN edge. - */ - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefIn - - /** Traverse to UNKNOWN via REACHING_DEF IN edge. - */ - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaReachingDefIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Return.Label - } + with Expression + with StaticType[ReturnEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "lineNumber" - case 6 => "order" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "lineNumber" + case 5 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => lineNumber - case 6 => order + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.lineNumber + case 5 => this.order + case _ => null } override def productPrefix = "Return" - override def productArity = 7 -} - -class ReturnDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with Expression with ReturnBase { - - override def layoutInformation: NodeLayoutInformation = Return.layoutInformation + override def productArity = 6 - private var _argumentIndex: Integer = Return.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = Return.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = Return.PropertyDefaults.Order - def order: scala.Int = _order + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Return] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) +object NewReturn { + def apply(): NewReturn = new NewReturn + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_Return_argumentIndex 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[Int]] + 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: NewReturn => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Return_argumentName 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: NewReturn => + generated.argumentName 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_Return_code 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: NewReturn => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Return_columnNumber 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[Int]] + 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: NewReturn => + generated.columnNumber 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_Return_lineNumber 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[Int]] + 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: NewReturn => + generated.lineNumber 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_Return_order 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[Int]] + 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: NewReturn => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } +class NewReturn extends NewNode(34.toShort) with ReturnBase with ExpressionNew { + override type StoredNodeType = Return + override def label: String = "RETURN" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewReturn.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - - import overflowdb.traversal._ - def argumentOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _blockViaArgumentOut: Option[Block] = argumentOut.collectAll[Block].nextOption() - def _callViaArgumentOut: Option[Call] = argumentOut.collectAll[Call].nextOption() - def _controlStructureViaArgumentOut: overflowdb.traversal.Traversal[ControlStructure] = - argumentOut.collectAll[ControlStructure] - def _identifierViaArgumentOut: Option[Identifier] = argumentOut.collectAll[Identifier].nextOption() - def _jumpTargetViaArgumentOut: overflowdb.traversal.Traversal[JumpTarget] = argumentOut.collectAll[JumpTarget] - def _literalViaArgumentOut: Option[Literal] = argumentOut.collectAll[Literal].nextOption() - def _methodRefViaArgumentOut: Option[MethodRef] = argumentOut.collectAll[MethodRef].nextOption() - def _returnViaArgumentOut: Option[Return] = argumentOut.collectAll[Return].nextOption() - def _typeRefViaArgumentOut: overflowdb.traversal.Traversal[TypeRef] = argumentOut.collectAll[TypeRef] - def _unknownViaArgumentOut: overflowdb.traversal.Traversal[Unknown] = argumentOut.collectAll[Unknown] - - def astOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](1) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _blockViaAstOut: overflowdb.traversal.Traversal[Block] = astOut.collectAll[Block] - def _callViaAstOut: overflowdb.traversal.Traversal[Call] = astOut.collectAll[Call] - def _controlStructureViaAstOut: overflowdb.traversal.Traversal[ControlStructure] = astOut.collectAll[ControlStructure] - def _identifierViaAstOut: overflowdb.traversal.Traversal[Identifier] = astOut.collectAll[Identifier] - def _jumpTargetViaAstOut: overflowdb.traversal.Traversal[JumpTarget] = astOut.collectAll[JumpTarget] - def _literalViaAstOut: overflowdb.traversal.Traversal[Literal] = astOut.collectAll[Literal] - def _methodRefViaAstOut: overflowdb.traversal.Traversal[MethodRef] = astOut.collectAll[MethodRef] - def _returnViaAstOut: overflowdb.traversal.Traversal[Return] = astOut.collectAll[Return] - def _typeRefViaAstOut: overflowdb.traversal.Traversal[TypeRef] = astOut.collectAll[TypeRef] - def _unknownViaAstOut: overflowdb.traversal.Traversal[Unknown] = astOut.collectAll[Unknown] - - def cfgOut: Iterator[MethodReturn] = createAdjacentNodeScalaIteratorByOffSet[MethodReturn](2) - override def _cfgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _methodReturnViaCfgOut: MethodReturn = try { cfgOut.collectAll[MethodReturn].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "OUT edge with label CFG to an adjacent METHOD_RETURN is mandatory, but not defined for this RETURN node with id=" + id, - e - ) + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewReturn.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def dominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](3) - override def _dominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = dominateOut.collectAll[Block] - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = dominateOut.collectAll[Call] - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - dominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateOut.collectAll[FieldIdentifier] - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = dominateOut.collectAll[Identifier] - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = dominateOut.collectAll[JumpTarget] - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = dominateOut.collectAll[Literal] - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = dominateOut.collectAll[MethodRef] - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = dominateOut.collectAll[MethodReturn] - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = dominateOut.collectAll[Return] - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = dominateOut.collectAll[TypeRef] - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = dominateOut.collectAll[Unknown] - - def postDominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _postDominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = postDominateOut.collectAll[Block] - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = postDominateOut.collectAll[Call] - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - postDominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateOut.collectAll[FieldIdentifier] - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = postDominateOut.collectAll[Identifier] - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = postDominateOut.collectAll[JumpTarget] - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = postDominateOut.collectAll[Literal] - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = postDominateOut.collectAll[Method] - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = postDominateOut.collectAll[MethodRef] - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = postDominateOut.collectAll[Return] - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = postDominateOut.collectAll[TypeRef] - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = postDominateOut.collectAll[Unknown] - - def reachingDefOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](5) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = reachingDefOut.collectAll[Identifier] - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefOut.collectAll[MethodParameterOut] - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = reachingDefOut.collectAll[MethodRef] - def _methodReturnViaReachingDefOut: overflowdb.traversal.Traversal[MethodReturn] = - reachingDefOut.collectAll[MethodReturn] - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = reachingDefOut.collectAll[TypeRef] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](6) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def argumentIn: Iterator[Return] = createAdjacentNodeScalaIteratorByOffSet[Return](7) - override def _argumentIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _returnViaArgumentIn: Option[Return] = argumentIn.collectAll[Return].nextOption() - - def astIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](8) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = astIn.collectAll[Block] - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = astIn.collectAll[Call] - def _controlStructureViaAstIn: Option[ControlStructure] = astIn.collectAll[ControlStructure].nextOption() - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = astIn.collectAll[Return] - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - - def cdgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](9) - override def _cdgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = cdgIn.collectAll[Block] - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = cdgIn.collectAll[Call] - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = cdgIn.collectAll[ControlStructure] - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = cdgIn.collectAll[FieldIdentifier] - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = cdgIn.collectAll[Identifier] - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = cdgIn.collectAll[JumpTarget] - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = cdgIn.collectAll[Literal] - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = cdgIn.collectAll[MethodRef] - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = cdgIn.collectAll[TypeRef] - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = cdgIn.collectAll[Unknown] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](10) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](10) - - def conditionIn: Iterator[ControlStructure] = createAdjacentNodeScalaIteratorByOffSet[ControlStructure](11) - override def _conditionIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](11) - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - conditionIn.collectAll[ControlStructure] - - def containsIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](12) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = containsIn.collectAll[Method] - - def dominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](13) - override def _dominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](13) - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = dominateIn.collectAll[Block] - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = dominateIn.collectAll[Call] - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - dominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateIn.collectAll[FieldIdentifier] - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = dominateIn.collectAll[Identifier] - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = dominateIn.collectAll[JumpTarget] - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = dominateIn.collectAll[Literal] - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = dominateIn.collectAll[Method] - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = dominateIn.collectAll[MethodRef] - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = dominateIn.collectAll[Return] - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = dominateIn.collectAll[TypeRef] - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = dominateIn.collectAll[Unknown] - - def postDominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](14) - override def _postDominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](14) - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = postDominateIn.collectAll[Block] - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = postDominateIn.collectAll[Call] - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - postDominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateIn.collectAll[FieldIdentifier] - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = postDominateIn.collectAll[Identifier] - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = postDominateIn.collectAll[JumpTarget] - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = postDominateIn.collectAll[Literal] - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = postDominateIn.collectAll[MethodRef] - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - postDominateIn.collectAll[MethodReturn] - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = postDominateIn.collectAll[Return] - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = postDominateIn.collectAll[TypeRef] - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = postDominateIn.collectAll[Unknown] - - def reachingDefIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](15) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](15) - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = reachingDefIn.collectAll[Block] - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = reachingDefIn.collectAll[Call] - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - reachingDefIn.collectAll[ControlStructure] - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = reachingDefIn.collectAll[Identifier] - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = reachingDefIn.collectAll[Literal] - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = reachingDefIn.collectAll[Method] - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - reachingDefIn.collectAll[MethodParameterIn] - def _methodParameterOutViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefIn.collectAll[MethodParameterOut] - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = reachingDefIn.collectAll[MethodRef] - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = reachingDefIn.collectAll[TypeRef] - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = reachingDefIn.collectAll[Unknown] + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var order: Int = -1: Int + def argumentIndex(value: Int): this.type = { this.argumentIndex = value; this } + def argumentName(value: Option[String]): this.type = { this.argumentName = value; this } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + } - override def label: String = { - Return.Label + override def copy: this.type = { + val newInstance = new NewReturn + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "lineNumber" - case 6 => "order" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "lineNumber" + case 5 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => lineNumber - case 6 => order - } - - override def productPrefix = "Return" - override def productArity = 7 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[ReturnDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.lineNumber + case 5 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewReturn].argumentIndex - this._argumentName = newNode.asInstanceOf[NewReturn].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewReturn].code - this._columnNumber = newNode.asInstanceOf[NewReturn].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewReturn].lineNumber match { case None => null; case Some(value) => value } - this._order = newNode.asInstanceOf[NewReturn].order - - } + override def productPrefix = "NewReturn" + override def productArity = 6 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewReturn] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/RootTypes.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/RootTypes.scala index db4ae45ad..316b7359f 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/RootTypes.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/RootTypes.scala @@ -1,145 +1,150 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ - -object PropertyErrorRegister { - private var errorMap = Set[(Class[?], String)]() - private val logger = org.slf4j.LoggerFactory.getLogger(getClass) - - def logPropertyErrorIfFirst(clazz: Class[?], propertyName: String): Unit = { - if (!errorMap.contains((clazz, propertyName))) { - logger.warn("Property " + propertyName + " is deprecated for " + clazz.getName + ".") - errorMap += ((clazz, propertyName)) - } +trait StaticType[+T] + +trait AbstractNode extends flatgraph.DNodeOrNode with StaticType[AnyRef] with Product { + def label: String + + def properties: Map[String, Any] = { + scala.jdk.CollectionConverters.MapHasAsScala(propertiesMap).asScala.toMap } -} -object Misc { - val reChars = "[](){}*+&|?.,\\$" - def isRegex(pattern: String): Boolean = pattern.exists(reChars.contains(_)) + /** TODO deprecate and phase out */ + def propertiesMap: java.util.Map[String, Any] } -trait StaticType[+T] +abstract class StoredNode(graph_4762: flatgraph.Graph, kind_4762: Short, seq_4762: Int) + extends flatgraph.GNode(graph_4762, kind_4762, seq_4762) + with AbstractNode { -/** Abstract supertype for overflowdb.Node and NewNode */ -trait AbstractNode extends overflowdb.NodeOrDetachedNode with StaticType[AnyRef] { - def label: String -} + final def _aliasOfOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 0).asInstanceOf[Iterator[StoredNode]] + final def _aliasOfIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 0).asInstanceOf[Iterator[StoredNode]] -/* A node that is stored inside an Graph (rather than e.g. DiffGraph) */ -trait StoredNode extends Node with AbstractNode with Product { - /* underlying Node in the graph. - * since this is a StoredNode, this is always set */ - def underlying: Node = this - - /* all properties plus label and id */ - def toMap: Map[String, Any] = { - val map = propertiesMap() - map.put("_label", label) - map.put("_id", id: java.lang.Long) - map.asScala.toMap - } + final def _argumentOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 1).asInstanceOf[Iterator[StoredNode]] + final def _argumentIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 1).asInstanceOf[Iterator[StoredNode]] + + final def _astOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 2).asInstanceOf[Iterator[StoredNode]] + final def _astIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 2).asInstanceOf[Iterator[StoredNode]] + + final def _bindsOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 3).asInstanceOf[Iterator[StoredNode]] + final def _bindsIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 3).asInstanceOf[Iterator[StoredNode]] + + final def _bindsToOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 4).asInstanceOf[Iterator[StoredNode]] + final def _bindsToIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 4).asInstanceOf[Iterator[StoredNode]] + + final def _callOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 5).asInstanceOf[Iterator[StoredNode]] + final def _callIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 5).asInstanceOf[Iterator[StoredNode]] + + final def _captureOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 6).asInstanceOf[Iterator[StoredNode]] + final def _captureIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 6).asInstanceOf[Iterator[StoredNode]] + + final def _capturedByOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 7).asInstanceOf[Iterator[StoredNode]] + final def _capturedByIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 7).asInstanceOf[Iterator[StoredNode]] + + final def _cdgOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 8).asInstanceOf[Iterator[StoredNode]] + final def _cdgIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 8).asInstanceOf[Iterator[StoredNode]] + + final def _cfgOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 9).asInstanceOf[Iterator[StoredNode]] + final def _cfgIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 9).asInstanceOf[Iterator[StoredNode]] + + final def _conditionOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 10).asInstanceOf[Iterator[StoredNode]] + final def _conditionIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 10).asInstanceOf[Iterator[StoredNode]] + + final def _containsOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 11).asInstanceOf[Iterator[StoredNode]] + final def _containsIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 11).asInstanceOf[Iterator[StoredNode]] + + final def _dominateOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 12).asInstanceOf[Iterator[StoredNode]] + final def _dominateIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 12).asInstanceOf[Iterator[StoredNode]] + + final def _evalTypeOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 13).asInstanceOf[Iterator[StoredNode]] + final def _evalTypeIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 13).asInstanceOf[Iterator[StoredNode]] + + final def _importsOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 14).asInstanceOf[Iterator[StoredNode]] + final def _importsIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 14).asInstanceOf[Iterator[StoredNode]] + + final def _inheritsFromOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 15).asInstanceOf[Iterator[StoredNode]] + final def _inheritsFromIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 15).asInstanceOf[Iterator[StoredNode]] + + final def _isCallForImportOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 16).asInstanceOf[Iterator[StoredNode]] + final def _isCallForImportIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 16).asInstanceOf[Iterator[StoredNode]] + + final def _parameterLinkOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 17).asInstanceOf[Iterator[StoredNode]] + final def _parameterLinkIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 17).asInstanceOf[Iterator[StoredNode]] + + final def _postDominateOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 18).asInstanceOf[Iterator[StoredNode]] + final def _postDominateIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 18).asInstanceOf[Iterator[StoredNode]] + + final def _reachingDefOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 19).asInstanceOf[Iterator[StoredNode]] + final def _reachingDefIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 19).asInstanceOf[Iterator[StoredNode]] + + final def _receiverOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 20).asInstanceOf[Iterator[StoredNode]] + final def _receiverIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 20).asInstanceOf[Iterator[StoredNode]] + + final def _refOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 21).asInstanceOf[Iterator[StoredNode]] + final def _refIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 21).asInstanceOf[Iterator[StoredNode]] + + final def _sourceFileOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 22).asInstanceOf[Iterator[StoredNode]] + final def _sourceFileIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 22).asInstanceOf[Iterator[StoredNode]] + + final def _taggedByOut: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsOut(this.graph, this.nodeKind, this.seq, 23).asInstanceOf[Iterator[StoredNode]] + final def _taggedByIn: Iterator[StoredNode] = + flatgraph.Accessors.getNeighborsIn(this.graph, this.nodeKind, this.seq, 23).asInstanceOf[Iterator[StoredNode]] - /*Sets fields from newNode*/ - def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = ??? - - def _aliasOfIn: Iterator[StoredNode] = Iterator.empty - def _argumentIn: Iterator[StoredNode] = Iterator.empty - def _astIn: Iterator[StoredNode] = Iterator.empty - def _bindsIn: Iterator[StoredNode] = Iterator.empty - def _bindsToIn: Iterator[StoredNode] = Iterator.empty - def _callIn: Iterator[StoredNode] = Iterator.empty - def _captureIn: Iterator[StoredNode] = Iterator.empty - def _capturedByIn: Iterator[StoredNode] = Iterator.empty - def _cdgIn: Iterator[StoredNode] = Iterator.empty - def _cfgIn: Iterator[StoredNode] = Iterator.empty - def _conditionIn: Iterator[StoredNode] = Iterator.empty - def _containsIn: Iterator[StoredNode] = Iterator.empty - def _dominateIn: Iterator[StoredNode] = Iterator.empty - def _evalTypeIn: Iterator[StoredNode] = Iterator.empty - def _importsIn: Iterator[StoredNode] = Iterator.empty - def _inheritsFromIn: Iterator[StoredNode] = Iterator.empty - def _isCallForImportIn: Iterator[StoredNode] = Iterator.empty - def _parameterLinkIn: Iterator[StoredNode] = Iterator.empty - def _postDominateIn: Iterator[StoredNode] = Iterator.empty - def _reachingDefIn: Iterator[StoredNode] = Iterator.empty - def _receiverIn: Iterator[StoredNode] = Iterator.empty - def _refIn: Iterator[StoredNode] = Iterator.empty - def _sourceFileIn: Iterator[StoredNode] = Iterator.empty - def _taggedByIn: Iterator[StoredNode] = Iterator.empty - def _aliasOfOut: Iterator[StoredNode] = Iterator.empty - def _argumentOut: Iterator[StoredNode] = Iterator.empty - def _astOut: Iterator[StoredNode] = Iterator.empty - def _bindsOut: Iterator[StoredNode] = Iterator.empty - def _bindsToOut: Iterator[StoredNode] = Iterator.empty - def _callOut: Iterator[StoredNode] = Iterator.empty - def _captureOut: Iterator[StoredNode] = Iterator.empty - def _capturedByOut: Iterator[StoredNode] = Iterator.empty - def _cdgOut: Iterator[StoredNode] = Iterator.empty - def _cfgOut: Iterator[StoredNode] = Iterator.empty - def _conditionOut: Iterator[StoredNode] = Iterator.empty - def _containsOut: Iterator[StoredNode] = Iterator.empty - def _dominateOut: Iterator[StoredNode] = Iterator.empty - def _evalTypeOut: Iterator[StoredNode] = Iterator.empty - def _importsOut: Iterator[StoredNode] = Iterator.empty - def _inheritsFromOut: Iterator[StoredNode] = Iterator.empty - def _isCallForImportOut: Iterator[StoredNode] = Iterator.empty - def _parameterLinkOut: Iterator[StoredNode] = Iterator.empty - def _postDominateOut: Iterator[StoredNode] = Iterator.empty - def _reachingDefOut: Iterator[StoredNode] = Iterator.empty - def _receiverOut: Iterator[StoredNode] = Iterator.empty - def _refOut: Iterator[StoredNode] = Iterator.empty - def _sourceFileOut: Iterator[StoredNode] = Iterator.empty - def _taggedByOut: Iterator[StoredNode] = Iterator.empty } -object Factories { - lazy val all: Seq[NodeFactory[?]] = Seq( - Annotation.factory, - AnnotationLiteral.factory, - AnnotationParameter.factory, - AnnotationParameterAssign.factory, - ArrayInitializer.factory, - Binding.factory, - Block.factory, - Call.factory, - ClosureBinding.factory, - Comment.factory, - ConfigFile.factory, - ControlStructure.factory, - Dependency.factory, - FieldIdentifier.factory, - File.factory, - Finding.factory, - Identifier.factory, - Import.factory, - JumpLabel.factory, - JumpTarget.factory, - KeyValuePair.factory, - Literal.factory, - Local.factory, - Location.factory, - Member.factory, - MetaData.factory, - Method.factory, - MethodParameterIn.factory, - MethodParameterOut.factory, - MethodRef.factory, - MethodReturn.factory, - Modifier.factory, - Namespace.factory, - NamespaceBlock.factory, - Return.factory, - Tag.factory, - TagNodePair.factory, - TemplateDom.factory, - Type.factory, - TypeArgument.factory, - TypeDecl.factory, - TypeParameter.factory, - TypeRef.factory, - Unknown.factory - ) - lazy val allAsJava: java.util.List[NodeFactory[?]] = all.asJava +abstract class NewNode(val nodeKind: Short) extends AbstractNode with flatgraph.DNode { + private /* volatile? */ var _storedRef: StoredNodeType = null.asInstanceOf[StoredNodeType] + override def storedRef: Option[StoredNodeType] = Option(this._storedRef) + override def storedRef_=(stored: Option[flatgraph.GNode]): Unit = this._storedRef = + stored.orNull.asInstanceOf[StoredNodeType] + def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean + def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean + def copy: this.type } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/RootTypesTraversals.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/RootTypesTraversals.scala new file mode 100644 index 000000000..cdbbb455b --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/RootTypesTraversals.scala @@ -0,0 +1,77 @@ +package io.shiftleft.codepropertygraph.generated.nodes + +extension (iterator: Iterator[StoredNode]) { + + final def _aliasOfOut: Iterator[StoredNode] = iterator.flatMap(_._aliasOfOut) + final def _aliasOfIn: Iterator[StoredNode] = iterator.flatMap(_._aliasOfIn) + + final def _argumentOut: Iterator[StoredNode] = iterator.flatMap(_._argumentOut) + final def _argumentIn: Iterator[StoredNode] = iterator.flatMap(_._argumentIn) + + final def _astOut: Iterator[StoredNode] = iterator.flatMap(_._astOut) + final def _astIn: Iterator[StoredNode] = iterator.flatMap(_._astIn) + + final def _bindsOut: Iterator[StoredNode] = iterator.flatMap(_._bindsOut) + final def _bindsIn: Iterator[StoredNode] = iterator.flatMap(_._bindsIn) + + final def _bindsToOut: Iterator[StoredNode] = iterator.flatMap(_._bindsToOut) + final def _bindsToIn: Iterator[StoredNode] = iterator.flatMap(_._bindsToIn) + + final def _callOut: Iterator[StoredNode] = iterator.flatMap(_._callOut) + final def _callIn: Iterator[StoredNode] = iterator.flatMap(_._callIn) + + final def _captureOut: Iterator[StoredNode] = iterator.flatMap(_._captureOut) + final def _captureIn: Iterator[StoredNode] = iterator.flatMap(_._captureIn) + + final def _capturedByOut: Iterator[StoredNode] = iterator.flatMap(_._capturedByOut) + final def _capturedByIn: Iterator[StoredNode] = iterator.flatMap(_._capturedByIn) + + final def _cdgOut: Iterator[StoredNode] = iterator.flatMap(_._cdgOut) + final def _cdgIn: Iterator[StoredNode] = iterator.flatMap(_._cdgIn) + + final def _cfgOut: Iterator[StoredNode] = iterator.flatMap(_._cfgOut) + final def _cfgIn: Iterator[StoredNode] = iterator.flatMap(_._cfgIn) + + final def _conditionOut: Iterator[StoredNode] = iterator.flatMap(_._conditionOut) + final def _conditionIn: Iterator[StoredNode] = iterator.flatMap(_._conditionIn) + + final def _containsOut: Iterator[StoredNode] = iterator.flatMap(_._containsOut) + final def _containsIn: Iterator[StoredNode] = iterator.flatMap(_._containsIn) + + final def _dominateOut: Iterator[StoredNode] = iterator.flatMap(_._dominateOut) + final def _dominateIn: Iterator[StoredNode] = iterator.flatMap(_._dominateIn) + + final def _evalTypeOut: Iterator[StoredNode] = iterator.flatMap(_._evalTypeOut) + final def _evalTypeIn: Iterator[StoredNode] = iterator.flatMap(_._evalTypeIn) + + final def _importsOut: Iterator[StoredNode] = iterator.flatMap(_._importsOut) + final def _importsIn: Iterator[StoredNode] = iterator.flatMap(_._importsIn) + + final def _inheritsFromOut: Iterator[StoredNode] = iterator.flatMap(_._inheritsFromOut) + final def _inheritsFromIn: Iterator[StoredNode] = iterator.flatMap(_._inheritsFromIn) + + final def _isCallForImportOut: Iterator[StoredNode] = iterator.flatMap(_._isCallForImportOut) + final def _isCallForImportIn: Iterator[StoredNode] = iterator.flatMap(_._isCallForImportIn) + + final def _parameterLinkOut: Iterator[StoredNode] = iterator.flatMap(_._parameterLinkOut) + final def _parameterLinkIn: Iterator[StoredNode] = iterator.flatMap(_._parameterLinkIn) + + final def _postDominateOut: Iterator[StoredNode] = iterator.flatMap(_._postDominateOut) + final def _postDominateIn: Iterator[StoredNode] = iterator.flatMap(_._postDominateIn) + + final def _reachingDefOut: Iterator[StoredNode] = iterator.flatMap(_._reachingDefOut) + final def _reachingDefIn: Iterator[StoredNode] = iterator.flatMap(_._reachingDefIn) + + final def _receiverOut: Iterator[StoredNode] = iterator.flatMap(_._receiverOut) + final def _receiverIn: Iterator[StoredNode] = iterator.flatMap(_._receiverIn) + + final def _refOut: Iterator[StoredNode] = iterator.flatMap(_._refOut) + final def _refIn: Iterator[StoredNode] = iterator.flatMap(_._refIn) + + final def _sourceFileOut: Iterator[StoredNode] = iterator.flatMap(_._sourceFileOut) + final def _sourceFileIn: Iterator[StoredNode] = iterator.flatMap(_._sourceFileIn) + + final def _taggedByOut: Iterator[StoredNode] = iterator.flatMap(_._taggedByOut) + final def _taggedByIn: Iterator[StoredNode] = iterator.flatMap(_._taggedByIn) + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Tag.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Tag.scala index 358289e7a..57331aab2 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Tag.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Tag.scala @@ -1,326 +1,200 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Tag { - def apply(graph: Graph, id: Long) = new Tag(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait TagEMT extends AnyRef with HasNameEMT with HasValueEMT - val Label = "TAG" +trait TagBase extends AbstractNode with StaticType[TagEMT] { - object PropertyNames { - val Name = "NAME" - val Value = "VALUE" - val all: Set[String] = Set(Name, Value) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.name) res.put("NAME", this.name) + if (("": String) != this.value) res.put("VALUE", this.value) + res } +} - object Properties { - val Name = new overflowdb.PropertyKey[String]("NAME") - val Value = new overflowdb.PropertyKey[String]("VALUE") +object Tag { + val Label = "TAG" + object PropertyNames { - } + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - object PropertyDefaults { - val Name = "" - val Value = "" + /** This property denotes a string value as used in a key-value pair. */ + val Value = "VALUE" } + object Properties { - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List(io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation).asJava, - List(io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation).asJava - ) + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") - object Edges { - val Out: Array[String] = Array("TAGGED_BY") - val In: Array[String] = Array("TAGGED_BY") + /** This property denotes a string value as used in a key-value pair. */ + val Value = flatgraph.SinglePropertyKey[String](kind = 53, name = "VALUE", default = "") } - - val factory = new NodeFactory[TagDb] { - override val forLabel = Tag.Label - - override def createNode(ref: NodeRef[TagDb]) = - new TagDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = Tag(graph, id) + object PropertyDefaults { + val Name = "" + val Value = "" } } -trait TagBase extends AbstractNode { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def name: String - def value: String - -} - -class Tag(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[TagDb](graph_4762, id_4762) +class Tag(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 35.toShort, seq_4762) with TagBase - with StoredNode { - override def name: String = get().name - override def value: String = get().value - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "NAME" => Tag.PropertyDefaults.Name - case "VALUE" => Tag.PropertyDefaults.Value - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def taggedByIn: Iterator[StoredNode] = get().taggedByIn - override def _taggedByIn = get()._taggedByIn - - /** Traverse to BLOCK via TAGGED_BY IN edge. - */ - def _blockViaTaggedByIn: overflowdb.traversal.Traversal[Block] = get()._blockViaTaggedByIn - - /** Traverse to CALL via TAGGED_BY IN edge. - */ - def _callViaTaggedByIn: overflowdb.traversal.Traversal[Call] = get()._callViaTaggedByIn - - /** Traverse to CONTROL_STRUCTURE via TAGGED_BY IN edge. - */ - def _controlStructureViaTaggedByIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaTaggedByIn - - /** Traverse to FIELD_IDENTIFIER via TAGGED_BY IN edge. - */ - def _fieldIdentifierViaTaggedByIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaTaggedByIn - - /** Traverse to FILE via TAGGED_BY IN edge. - */ - def _fileViaTaggedByIn: overflowdb.traversal.Traversal[File] = get()._fileViaTaggedByIn - - /** Traverse to IDENTIFIER via TAGGED_BY IN edge. - */ - def _identifierViaTaggedByIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaTaggedByIn - - /** Traverse to IMPORT via TAGGED_BY IN edge. - */ - def _importViaTaggedByIn: overflowdb.traversal.Traversal[Import] = get()._importViaTaggedByIn - - /** Traverse to JUMP_TARGET via TAGGED_BY IN edge. - */ - def _jumpTargetViaTaggedByIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaTaggedByIn - - /** Traverse to LITERAL via TAGGED_BY IN edge. - */ - def _literalViaTaggedByIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaTaggedByIn - - /** Traverse to LOCAL via TAGGED_BY IN edge. - */ - def _localViaTaggedByIn: overflowdb.traversal.Traversal[Local] = get()._localViaTaggedByIn - - /** Traverse to MEMBER via TAGGED_BY IN edge. - */ - def _memberViaTaggedByIn: overflowdb.traversal.Traversal[Member] = get()._memberViaTaggedByIn - - /** Traverse to METHOD via TAGGED_BY IN edge. - */ - def _methodViaTaggedByIn: overflowdb.traversal.Traversal[Method] = get()._methodViaTaggedByIn - - /** Traverse to METHOD_PARAMETER_IN via TAGGED_BY IN edge. - */ - def _methodParameterInViaTaggedByIn: overflowdb.traversal.Traversal[MethodParameterIn] = - get()._methodParameterInViaTaggedByIn - - /** Traverse to METHOD_PARAMETER_OUT via TAGGED_BY IN edge. - */ - def _methodParameterOutViaTaggedByIn: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaTaggedByIn - - /** Traverse to METHOD_REF via TAGGED_BY IN edge. - */ - def _methodRefViaTaggedByIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaTaggedByIn - - /** Traverse to METHOD_RETURN via TAGGED_BY IN edge. - */ - def _methodReturnViaTaggedByIn: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaTaggedByIn - - /** Traverse to RETURN via TAGGED_BY IN edge. - */ - def _returnViaTaggedByIn: overflowdb.traversal.Traversal[Return] = get()._returnViaTaggedByIn - - /** Traverse to TAG via TAGGED_BY IN edge. - */ - def _tagViaTaggedByIn: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByIn - - /** Traverse to TEMPLATE_DOM via TAGGED_BY IN edge. - */ - def _templateDomViaTaggedByIn: overflowdb.traversal.Traversal[TemplateDom] = get()._templateDomViaTaggedByIn - - /** Traverse to TYPE_DECL via TAGGED_BY IN edge. - */ - def _typeDeclViaTaggedByIn: overflowdb.traversal.Traversal[TypeDecl] = get()._typeDeclViaTaggedByIn - - /** Traverse to TYPE_REF via TAGGED_BY IN edge. - */ - def _typeRefViaTaggedByIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaTaggedByIn - - /** Traverse to UNKNOWN via TAGGED_BY IN edge. - */ - def _unknownViaTaggedByIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaTaggedByIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Tag.Label - } + with StaticType[TagEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "name" - case 2 => "value" + case 0 => "name" + case 1 => "value" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => name - case 2 => value + case 0 => this.name + case 1 => this.value + case _ => null } override def productPrefix = "Tag" - override def productArity = 3 -} - -class TagDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with TagBase { + override def productArity = 2 - override def layoutInformation: NodeLayoutInformation = Tag.layoutInformation - - private var _name: String = Tag.PropertyDefaults.Name - def name: String = _name - private var _value: String = Tag.PropertyDefaults.Value - def value: String = _value + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Tag] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("NAME", name) - properties.put("VALUE", value) +object NewTag { + def apply(): NewTag = new NewTag + private val outNeighbors: Map[String, Set[String]] = Map("TAGGED_BY" -> Set("TAG")) + private val inNeighbors: Map[String, Set[String]] = Map( + "TAGGED_BY" -> Set( + "BLOCK", + "CALL", + "CONTROL_STRUCTURE", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "RETURN", + "TAG", + "TEMPLATE_DOM", + "TYPE_DECL", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_Tag_name 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: NewTag => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Tag_value 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: NewTag => + dstCast(offset) = generated.value + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == name)) { properties.put("NAME", name) } - if (!(("") == value)) { properties.put("VALUE", value) } +class NewTag extends NewNode(35.toShort) with TagBase { + override type StoredNodeType = Tag + override def label: String = "TAG" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTag.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTag.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](0) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def taggedByIn: Iterator[StoredNode] = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - override def _taggedByIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _blockViaTaggedByIn: overflowdb.traversal.Traversal[Block] = taggedByIn.collectAll[Block] - def _callViaTaggedByIn: overflowdb.traversal.Traversal[Call] = taggedByIn.collectAll[Call] - def _controlStructureViaTaggedByIn: overflowdb.traversal.Traversal[ControlStructure] = - taggedByIn.collectAll[ControlStructure] - def _fieldIdentifierViaTaggedByIn: overflowdb.traversal.Traversal[FieldIdentifier] = - taggedByIn.collectAll[FieldIdentifier] - def _fileViaTaggedByIn: overflowdb.traversal.Traversal[File] = taggedByIn.collectAll[File] - def _identifierViaTaggedByIn: overflowdb.traversal.Traversal[Identifier] = taggedByIn.collectAll[Identifier] - def _importViaTaggedByIn: overflowdb.traversal.Traversal[Import] = taggedByIn.collectAll[Import] - def _jumpTargetViaTaggedByIn: overflowdb.traversal.Traversal[JumpTarget] = taggedByIn.collectAll[JumpTarget] - def _literalViaTaggedByIn: overflowdb.traversal.Traversal[Literal] = taggedByIn.collectAll[Literal] - def _localViaTaggedByIn: overflowdb.traversal.Traversal[Local] = taggedByIn.collectAll[Local] - def _memberViaTaggedByIn: overflowdb.traversal.Traversal[Member] = taggedByIn.collectAll[Member] - def _methodViaTaggedByIn: overflowdb.traversal.Traversal[Method] = taggedByIn.collectAll[Method] - def _methodParameterInViaTaggedByIn: overflowdb.traversal.Traversal[MethodParameterIn] = - taggedByIn.collectAll[MethodParameterIn] - def _methodParameterOutViaTaggedByIn: overflowdb.traversal.Traversal[MethodParameterOut] = - taggedByIn.collectAll[MethodParameterOut] - def _methodRefViaTaggedByIn: overflowdb.traversal.Traversal[MethodRef] = taggedByIn.collectAll[MethodRef] - def _methodReturnViaTaggedByIn: overflowdb.traversal.Traversal[MethodReturn] = taggedByIn.collectAll[MethodReturn] - def _returnViaTaggedByIn: overflowdb.traversal.Traversal[Return] = taggedByIn.collectAll[Return] - def _tagViaTaggedByIn: overflowdb.traversal.Traversal[Tag] = taggedByIn.collectAll[Tag] - def _templateDomViaTaggedByIn: overflowdb.traversal.Traversal[TemplateDom] = taggedByIn.collectAll[TemplateDom] - def _typeDeclViaTaggedByIn: overflowdb.traversal.Traversal[TypeDecl] = taggedByIn.collectAll[TypeDecl] - def _typeRefViaTaggedByIn: overflowdb.traversal.Traversal[TypeRef] = taggedByIn.collectAll[TypeRef] - def _unknownViaTaggedByIn: overflowdb.traversal.Traversal[Unknown] = taggedByIn.collectAll[Unknown] + var name: String = "": String + var value: String = "": String + def name(value: String): this.type = { this.name = value; this } + def value(value: String): this.type = { this.value = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 39, 1) + interface.countProperty(this, 53, 1) + } - override def label: String = { - Tag.Label + override def copy: this.type = { + val newInstance = new NewTag + newInstance.name = this.name + newInstance.value = this.value + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "name" - case 2 => "value" + case 0 => "name" + case 1 => "value" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => name - case 2 => value - } - - override def productPrefix = "Tag" - override def productArity = 3 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TagDb] - - override def property(key: String): Any = { - key match { - case "NAME" => this._name - case "VALUE" => this._value - + case 0 => this.name + case 1 => this.value case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "NAME" => this._name = value.asInstanceOf[String] - case "VALUE" => this._value = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._name = newNode.asInstanceOf[NewTag].name - this._value = newNode.asInstanceOf[NewTag].value - - } + override def productPrefix = "NewTag" + override def productArity = 2 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTag] } 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 265813536..3809765c8 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 @@ -1,197 +1,170 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object TagNodePair { - def apply(graph: Graph, id: Long) = new TagNodePair(graph, id) - - val Label = "TAG_NODE_PAIR" +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait TagNodePairEMT extends AnyRef - object PropertyNames { - val Node = "node" - val Tag = "tag" - val all: Set[String] = Set(Node, Tag) - val allAsJava: java.util.Set[String] = all.asJava +trait TagNodePairBase extends AbstractNode with StaticType[TagNodePairEMT] { + def node: AbstractNode + def tag: TagBase + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + res.put("node", this.node) + res.put("tag", this.tag) + res } +} - object Properties { - - val Node = new overflowdb.PropertyKey[StoredNode]("node") - val Tag = new overflowdb.PropertyKey[Tag]("tag") +object TagNodePair { + val Label = "TAG_NODE_PAIR" + object PropertyNames { + val Node = "node" + val Tag = "tag" } - + object Properties {} object PropertyDefaults {} - - val layoutInformation = new NodeLayoutInformation(Label, PropertyNames.allAsJava, List().asJava, List().asJava) - - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array() - } - - val factory = new NodeFactory[TagNodePairDb] { - override val forLabel = TagNodePair.Label - - override def createNode(ref: NodeRef[TagNodePairDb]) = - new TagNodePairDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = TagNodePair(graph, id) - } -} - -trait TagNodePairBase extends AbstractNode { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def node: AbstractNode - def tag: TagBase } -class TagNodePair(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[TagNodePairDb](graph_4762, id_4762) +class TagNodePair(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 36.toShort, seq_4762) with TagNodePairBase - with StoredNode { - - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def node: StoredNode = get().node - - def tag: Tag = get().tag - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - TagNodePair.Label - } + with StaticType[TagNodePairEMT] { + def node: StoredNode = flatgraph.Accessors.getNodePropertySingle(graph, nodeKind, 57, seq, null: StoredNode) + def tag: Tag = flatgraph.Accessors.getNodePropertySingle(graph, nodeKind, 58, seq, null: Tag) override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "node" - case 2 => "tag" + case 0 => "node" + case 1 => "tag" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => node - case 2 => tag + case 0 => this.node + case 1 => this.tag + case _ => null } override def productPrefix = "TagNodePair" - override def productArity = 3 -} - -class TagNodePairDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with TagNodePairBase { - - override def layoutInformation: NodeLayoutInformation = TagNodePair.layoutInformation + override def productArity = 2 - private var _node: StoredNode = null - def node: StoredNode = this._node - - private var _tag: Tag = null - def tag: Tag = this._tag - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TagNodePair] +} - properties.put("node", this._node) - properties.put("tag", this._tag) - properties +object NewTagNodePair { + def apply(): NewTagNodePair = new NewTagNodePair + private val outNeighbors: Map[String, Set[String]] = Map() + private val inNeighbors: Map[String, Set[String]] = Map() + + object InsertionHelpers { + object NewNodeInserter_TagNodePair_node 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[flatgraph.GNode]] + 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: NewTagNodePair => + dstCast(offset) = generated.node match { + case newV: flatgraph.DNode => newV.storedRef.get; case oldV: flatgraph.GNode => oldV; case null => null + } + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TagNodePair_tag 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[flatgraph.GNode]] + 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: NewTagNodePair => + dstCast(offset) = generated.tag match { + case newV: flatgraph.DNode => newV.storedRef.get; case oldV: flatgraph.GNode => oldV; case null => null + } + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] +class NewTagNodePair extends NewNode(36.toShort) with TagNodePairBase { + override type StoredNodeType = TagNodePair + override def label: String = "TAG_NODE_PAIR" - if (!((null) == this._node)) { properties.put("node", this._node) } - if (!((null) == this._tag)) { properties.put("tag", this._tag) } - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTagNodePair.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTagNodePair.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ + var node: AbstractNode = null + var tag: TagBase = null + 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, 57, 1) + interface.visitContainedNode(node) + interface.countProperty(this, 58, 1) + interface.visitContainedNode(tag) + } - override def label: String = { - TagNodePair.Label + override def copy: this.type = { + val newInstance = new NewTagNodePair + newInstance.node = this.node + newInstance.tag = this.tag + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "node" - case 2 => "tag" + case 0 => "node" + case 1 => "tag" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => node - case 2 => tag - } - - override def productPrefix = "TagNodePair" - override def productArity = 3 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TagNodePairDb] - - override def property(key: String): Any = { - key match { - - case "node" => this._node - case "tag" => this._tag - case _ => null - } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - - case "node" => this._node = value.asInstanceOf[StoredNode] - case "tag" => this._tag = value.asInstanceOf[Tag] - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - - this._node = newNode.asInstanceOf[NewTagNodePair].node match { - case null => null - case newNode: NewNode => mapping(newNode).asInstanceOf[StoredNode] - case oldNode: StoredNode => oldNode.asInstanceOf[StoredNode] - case _ => throw new MatchError("unreachable") - } - this._tag = newNode.asInstanceOf[NewTagNodePair].tag match { - case null => null - case newNode: NewNode => mapping(newNode).asInstanceOf[Tag] - case oldNode: StoredNode => oldNode.asInstanceOf[Tag] - case _ => throw new MatchError("unreachable") + case 0 => this.node + case 1 => this.tag + case _ => null } - } - + override def productPrefix = "NewTagNodePair" + override def productArity = 2 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTagNodePair] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TemplateDom.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TemplateDom.scala index fdf6bcb54..d89616fa9 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TemplateDom.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TemplateDom.scala @@ -1,372 +1,1648 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object TemplateDom { - def apply(graph: Graph, id: Long) = new TemplateDom(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait TemplateDomEMT extends AnyRef with ExpressionEMT with HasNameEMT - val Label = "TEMPLATE_DOM" +trait TemplateDomBase extends AbstractNode with ExpressionBase with StaticType[TemplateDomEMT] { - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val all: Set[String] = Set(ArgumentIndex, ArgumentName, Code, ColumnNumber, LineNumber, Name, Order) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +object TemplateDom { + val Label = "TEMPLATE_DOM" + object PropertyNames { + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" } + object Properties { + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } object PropertyDefaults { val ArgumentIndex = -1: Int val Code = "" val Name = "" val Order = -1: Int } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array("ARGUMENT", "AST", "REACHING_DEF", "TAGGED_BY") - val In: Array[String] = Array("ARGUMENT", "AST", "CFG", "CONTAINS", "REACHING_DEF") - } - - val factory = new NodeFactory[TemplateDomDb] { - override val forLabel = TemplateDom.Label - - override def createNode(ref: NodeRef[TemplateDomDb]) = - new TemplateDomDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = TemplateDom(graph, id) - } -} - -trait TemplateDomBase extends AbstractNode with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int - } -class TemplateDom(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[TemplateDomDb](graph_4762, id_4762) +class TemplateDom(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 37.toShort, seq_4762) with TemplateDomBase - with StoredNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => TemplateDom.PropertyDefaults.ArgumentIndex - case "CODE" => TemplateDom.PropertyDefaults.Code - case "NAME" => TemplateDom.PropertyDefaults.Name - case "ORDER" => TemplateDom.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def argumentOut: Iterator[TemplateDom] = get().argumentOut - override def _argumentOut = get()._argumentOut - - def astOut: Iterator[Expression] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to EXPRESSION via AST OUT edge. - */ - def _expressionViaAstOut: overflowdb.traversal.Traversal[Expression] = get()._expressionViaAstOut - - def reachingDefOut: Iterator[Expression] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to EXPRESSION via REACHING_DEF OUT edge. - */ - def _expressionViaReachingDefOut: overflowdb.traversal.Traversal[Expression] = get()._expressionViaReachingDefOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def argumentIn: Iterator[Expression] = get().argumentIn - override def _argumentIn = get()._argumentIn - - /** Traverse to EXPRESSION via ARGUMENT IN edge. - */ - def _expressionViaArgumentIn: overflowdb.traversal.Traversal[Expression] = get()._expressionViaArgumentIn - - def astIn: Iterator[TemplateDom] = get().astIn - override def _astIn = get()._astIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def containsIn: Iterator[AstNode] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to FILE via CONTAINS IN edge. - */ - def _fileViaContainsIn: overflowdb.traversal.Traversal[File] = get()._fileViaContainsIn - - /** Traverse to METHOD via CONTAINS IN edge. - */ - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsIn - - def reachingDefIn: Iterator[TemplateDom] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - TemplateDom.Label - } + with Expression + with StaticType[TemplateDomEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "lineNumber" - case 6 => "name" - case 7 => "order" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "lineNumber" + case 5 => "name" + case 6 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => lineNumber - case 6 => name - case 7 => order + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.lineNumber + case 5 => this.name + case 6 => this.order + case _ => null } override def productPrefix = "TemplateDom" - override def productArity = 8 + override def productArity = 7 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TemplateDom] } -class TemplateDomDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with Expression with TemplateDomBase { - - override def layoutInformation: NodeLayoutInformation = TemplateDom.layoutInformation - - private var _argumentIndex: Integer = TemplateDom.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = TemplateDom.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = TemplateDom.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = TemplateDom.PropertyDefaults.Order - def order: scala.Int = _order - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) - - properties - } +object NewTemplateDom { + def apply(): NewTemplateDom = new NewTemplateDom + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - - properties + object InsertionHelpers { + object NewNodeInserter_TemplateDom_argumentIndex 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[Int]] + 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: NewTemplateDom => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TemplateDom_argumentName 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: NewTemplateDom => + generated.argumentName 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_TemplateDom_code 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: NewTemplateDom => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TemplateDom_columnNumber 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[Int]] + 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: NewTemplateDom => + generated.columnNumber 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_TemplateDom_lineNumber 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[Int]] + 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: NewTemplateDom => + generated.lineNumber 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_TemplateDom_name 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: NewTemplateDom => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TemplateDom_order 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[Int]] + 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: NewTemplateDom => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - import overflowdb.traversal._ - def argumentOut: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - - def astOut: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](1) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _expressionViaAstOut: overflowdb.traversal.Traversal[Expression] = astOut.collectAll[Expression] - - def reachingDefOut: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](2) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _expressionViaReachingDefOut: overflowdb.traversal.Traversal[Expression] = reachingDefOut.collectAll[Expression] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](3) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def argumentIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](4) - override def _argumentIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _expressionViaArgumentIn: overflowdb.traversal.Traversal[Expression] = argumentIn.collectAll[Expression] - - def astIn: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](5) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](6) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) +class NewTemplateDom extends NewNode(37.toShort) with TemplateDomBase with ExpressionNew { + override type StoredNodeType = TemplateDom + override def label: String = "TEMPLATE_DOM" - def containsIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](7) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _fileViaContainsIn: overflowdb.traversal.Traversal[File] = containsIn.collectAll[File] - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = containsIn.collectAll[Method] + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTemplateDom.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTemplateDom.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } - def reachingDefIn: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](8) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + def argumentIndex(value: Int): this.type = { this.argumentIndex = value; this } + def argumentName(value: Option[String]): this.type = { this.argumentName = value; this } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + } - override def label: String = { - TemplateDom.Label + override def copy: this.type = { + val newInstance = new NewTemplateDom + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "lineNumber" - case 6 => "name" - case 7 => "order" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "lineNumber" + case 5 => "name" + case 6 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => lineNumber - case 6 => name - case 7 => order - } - - override def productPrefix = "TemplateDom" - override def productArity = 8 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TemplateDomDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.lineNumber + case 5 => this.name + case 6 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewTemplateDom].argumentIndex - this._argumentName = newNode.asInstanceOf[NewTemplateDom].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewTemplateDom].code - this._columnNumber = newNode.asInstanceOf[NewTemplateDom].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewTemplateDom].lineNumber match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewTemplateDom].name - this._order = newNode.asInstanceOf[NewTemplateDom].order - - } + override def productPrefix = "NewTemplateDom" + override def productArity = 7 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTemplateDom] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Type.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Type.scala index 436f5c721..4a73c5700 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Type.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Type.scala @@ -1,360 +1,245 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object Type { - def apply(graph: Graph, id: Long) = new Type(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait TypeEMT extends AnyRef with HasFullNameEMT with HasNameEMT with HasTypeDeclFullNameEMT - val Label = "TYPE" +trait TypeBase extends AbstractNode with StaticType[TypeEMT] { - object PropertyNames { - val FullName = "FULL_NAME" - val Name = "NAME" - val TypeDeclFullName = "TYPE_DECL_FULL_NAME" - val all: Set[String] = Set(FullName, Name, TypeDeclFullName) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.fullName) res.put("FULL_NAME", this.fullName) + if (("": String) != this.name) res.put("NAME", this.name) + if (("": String) != this.typeDeclFullName) res.put("TYPE_DECL_FULL_NAME", this.typeDeclFullName) + res } +} - object Properties { - val FullName = new overflowdb.PropertyKey[String]("FULL_NAME") - val Name = new overflowdb.PropertyKey[String]("NAME") - val TypeDeclFullName = new overflowdb.PropertyKey[String]("TYPE_DECL_FULL_NAME") +object Type { + val Label = "TYPE" + object PropertyNames { - } + /** This is the fully-qualified name of an entity, e.g., the fully-qualified name of a method or type. The details + * of what constitutes a fully-qualified name are language specific. This field SHOULD be human readable. + */ + val FullName = "FULL_NAME" - object PropertyDefaults { - val FullName = "" - val Name = "" - val TypeDeclFullName = "" - } + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.AliasOf.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.InheritsFrom.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array("AST", "REF") - val In: Array[String] = Array("ALIAS_OF", "EVAL_TYPE", "INHERITS_FROM", "REF") + /** 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 = "TYPE_DECL_FULL_NAME" } + object Properties { - val factory = new NodeFactory[TypeDb] { - override val forLabel = Type.Label + /** This is the fully-qualified name of an entity, e.g., the fully-qualified name of a method or type. The details + * of what constitutes a fully-qualified name are language specific. This field SHOULD be human readable. + */ + val FullName = flatgraph.SinglePropertyKey[String](kind = 22, name = "FULL_NAME", default = "") - override def createNode(ref: NodeRef[TypeDb]) = - new TypeDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") - override def createNodeRef(graph: Graph, id: Long) = Type(graph, id) + /** 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 = 51, name = "TYPE_DECL_FULL_NAME", default = "") + } + object PropertyDefaults { + val FullName = "" + val Name = "" + val TypeDeclFullName = "" } } -trait TypeBase extends AbstractNode { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def fullName: String - def name: String - def typeDeclFullName: String - -} - -class Type(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[TypeDb](graph_4762, id_4762) +class Type(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 38.toShort, seq_4762) with TypeBase - with StoredNode { - override def fullName: String = get().fullName - override def name: String = get().name - override def typeDeclFullName: String = get().typeDeclFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "FULL_NAME" => Type.PropertyDefaults.FullName - case "NAME" => Type.PropertyDefaults.Name - case "TYPE_DECL_FULL_NAME" => Type.PropertyDefaults.TypeDeclFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def astOut: Iterator[TypeArgument] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to TYPE_ARGUMENT via AST OUT edge. - */ - def _typeArgumentViaAstOut: overflowdb.traversal.Traversal[TypeArgument] = get()._typeArgumentViaAstOut - - def refOut: Iterator[TypeDecl] = get().refOut - override def _refOut = get()._refOut - - /** Type declaration which is referenced by this type. Traverse to TYPE_DECL via REF OUT edge. - */ - /** Type declaration which is referenced by this type. */ - @overflowdb.traversal.help.Doc(info = """Type declaration which is referenced by this type.""") - def referencedTypeDecl: overflowdb.traversal.Traversal[TypeDecl] = get().referencedTypeDecl - - def aliasOfIn: Iterator[TypeDecl] = get().aliasOfIn - override def _aliasOfIn = get()._aliasOfIn - - /** Direct alias type declarations. Traverse to TYPE_DECL via ALIAS_OF IN edge. - */ - /** Direct alias type declarations. */ - @overflowdb.traversal.help.Doc(info = """Direct alias type declarations.""") - def aliasTypeDecl: overflowdb.traversal.Traversal[TypeDecl] = get().aliasTypeDecl - - def evalTypeIn: Iterator[AstNode] = get().evalTypeIn - override def _evalTypeIn = get()._evalTypeIn - - /** Traverse to ARRAY_INITIALIZER via EVAL_TYPE IN edge. - */ - def _arrayInitializerViaEvalTypeIn: overflowdb.traversal.Traversal[ArrayInitializer] = - get()._arrayInitializerViaEvalTypeIn - - /** Traverse to BLOCK via EVAL_TYPE IN edge. - */ - def _blockViaEvalTypeIn: overflowdb.traversal.Traversal[Block] = get()._blockViaEvalTypeIn - - /** Traverse to CALL via EVAL_TYPE IN edge. - */ - def _callViaEvalTypeIn: overflowdb.traversal.Traversal[Call] = get()._callViaEvalTypeIn - - /** Traverse to CONTROL_STRUCTURE via EVAL_TYPE IN edge. - */ - def _controlStructureViaEvalTypeIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaEvalTypeIn - - /** Traverse to IDENTIFIER via EVAL_TYPE IN edge. - */ - def _identifierViaEvalTypeIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaEvalTypeIn - - /** Traverse to LITERAL via EVAL_TYPE IN edge. - */ - def _literalViaEvalTypeIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaEvalTypeIn - - /** Traverse to LOCAL via EVAL_TYPE IN edge. - */ - def _localViaEvalTypeIn: overflowdb.traversal.Traversal[Local] = get()._localViaEvalTypeIn - - /** Traverse to MEMBER via EVAL_TYPE IN edge. - */ - def _memberViaEvalTypeIn: overflowdb.traversal.Traversal[Member] = get()._memberViaEvalTypeIn - - /** Traverse to METHOD_PARAMETER_IN via EVAL_TYPE IN edge. - */ - def _methodParameterInViaEvalTypeIn: overflowdb.traversal.Traversal[MethodParameterIn] = - get()._methodParameterInViaEvalTypeIn - - /** Traverse to METHOD_PARAMETER_OUT via EVAL_TYPE IN edge. - */ - def _methodParameterOutViaEvalTypeIn: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaEvalTypeIn - - /** Traverse to METHOD_REF via EVAL_TYPE IN edge. - */ - def _methodRefViaEvalTypeIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaEvalTypeIn - - /** Traverse to METHOD_RETURN via EVAL_TYPE IN edge. - */ - def _methodReturnViaEvalTypeIn: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaEvalTypeIn - - /** Traverse to TYPE_REF via EVAL_TYPE IN edge. - */ - def _typeRefViaEvalTypeIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaEvalTypeIn - - /** Traverse to UNKNOWN via EVAL_TYPE IN edge. - */ - def _unknownViaEvalTypeIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaEvalTypeIn - - def inheritsFromIn: Iterator[TypeDecl] = get().inheritsFromIn - override def _inheritsFromIn = get()._inheritsFromIn - - /** Traverse to TYPE_DECL via INHERITS_FROM IN edge. - */ - def _typeDeclViaInheritsFromIn: overflowdb.traversal.Traversal[TypeDecl] = get()._typeDeclViaInheritsFromIn - - def refIn: Iterator[TypeArgument] = get().refIn - override def _refIn = get()._refIn - - /** Traverse to TYPE_ARGUMENT via REF IN edge. - */ - def _typeArgumentViaRefIn: overflowdb.traversal.Traversal[TypeArgument] = get()._typeArgumentViaRefIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Type.Label - } + with StaticType[TypeEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "fullName" - case 2 => "name" - case 3 => "typeDeclFullName" + case 0 => "fullName" + case 1 => "name" + case 2 => "typeDeclFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => fullName - case 2 => name - case 3 => typeDeclFullName + case 0 => this.fullName + case 1 => this.name + case 2 => this.typeDeclFullName + case _ => null } override def productPrefix = "Type" - override def productArity = 4 -} - -class TypeDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with TypeBase { - - override def layoutInformation: NodeLayoutInformation = Type.layoutInformation + override def productArity = 3 - private var _fullName: String = Type.PropertyDefaults.FullName - def fullName: String = _fullName - private var _name: String = Type.PropertyDefaults.Name - def name: String = _name - private var _typeDeclFullName: String = Type.PropertyDefaults.TypeDeclFullName - def typeDeclFullName: String = _typeDeclFullName + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Type] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("FULL_NAME", fullName) - properties.put("NAME", name) - properties.put("TYPE_DECL_FULL_NAME", typeDeclFullName) +object NewType { + def apply(): NewType = new NewType + private val outNeighbors: Map[String, Set[String]] = Map("AST" -> Set("TYPE_ARGUMENT"), "REF" -> Set("TYPE_DECL")) + private val inNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE_DECL"), + "EVAL_TYPE" -> Set( + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CONTROL_STRUCTURE", + "IDENTIFIER", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "TYPE_REF", + "UNKNOWN" + ), + "INHERITS_FROM" -> Set("TYPE_DECL"), + "REF" -> Set("TYPE_ARGUMENT") + ) - properties + object InsertionHelpers { + object NewNodeInserter_Type_fullName 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: NewType => + dstCast(offset) = generated.fullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Type_name 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: NewType => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Type_typeDeclFullName 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: NewType => + dstCast(offset) = generated.typeDeclFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == fullName)) { properties.put("FULL_NAME", fullName) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!(("") == typeDeclFullName)) { properties.put("TYPE_DECL_FULL_NAME", typeDeclFullName) } +class NewType extends NewNode(38.toShort) with TypeBase { + override type StoredNodeType = Type + override def label: String = "TYPE" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewType.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewType.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def astOut: Iterator[TypeArgument] = createAdjacentNodeScalaIteratorByOffSet[TypeArgument](0) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _typeArgumentViaAstOut: overflowdb.traversal.Traversal[TypeArgument] = astOut.collectAll[TypeArgument] - - def refOut: Iterator[TypeDecl] = createAdjacentNodeScalaIteratorByOffSet[TypeDecl](1) - override def _refOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def referencedTypeDecl: overflowdb.traversal.Traversal[TypeDecl] = refOut.collectAll[TypeDecl] - - def aliasOfIn: Iterator[TypeDecl] = createAdjacentNodeScalaIteratorByOffSet[TypeDecl](2) - override def _aliasOfIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def aliasTypeDecl: overflowdb.traversal.Traversal[TypeDecl] = aliasOfIn.collectAll[TypeDecl] - - def evalTypeIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](3) - override def _evalTypeIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _arrayInitializerViaEvalTypeIn: overflowdb.traversal.Traversal[ArrayInitializer] = - evalTypeIn.collectAll[ArrayInitializer] - def _blockViaEvalTypeIn: overflowdb.traversal.Traversal[Block] = evalTypeIn.collectAll[Block] - def _callViaEvalTypeIn: overflowdb.traversal.Traversal[Call] = evalTypeIn.collectAll[Call] - def _controlStructureViaEvalTypeIn: overflowdb.traversal.Traversal[ControlStructure] = - evalTypeIn.collectAll[ControlStructure] - def _identifierViaEvalTypeIn: overflowdb.traversal.Traversal[Identifier] = evalTypeIn.collectAll[Identifier] - def _literalViaEvalTypeIn: overflowdb.traversal.Traversal[Literal] = evalTypeIn.collectAll[Literal] - def _localViaEvalTypeIn: overflowdb.traversal.Traversal[Local] = evalTypeIn.collectAll[Local] - def _memberViaEvalTypeIn: overflowdb.traversal.Traversal[Member] = evalTypeIn.collectAll[Member] - def _methodParameterInViaEvalTypeIn: overflowdb.traversal.Traversal[MethodParameterIn] = - evalTypeIn.collectAll[MethodParameterIn] - def _methodParameterOutViaEvalTypeIn: overflowdb.traversal.Traversal[MethodParameterOut] = - evalTypeIn.collectAll[MethodParameterOut] - def _methodRefViaEvalTypeIn: overflowdb.traversal.Traversal[MethodRef] = evalTypeIn.collectAll[MethodRef] - def _methodReturnViaEvalTypeIn: overflowdb.traversal.Traversal[MethodReturn] = evalTypeIn.collectAll[MethodReturn] - def _typeRefViaEvalTypeIn: overflowdb.traversal.Traversal[TypeRef] = evalTypeIn.collectAll[TypeRef] - def _unknownViaEvalTypeIn: overflowdb.traversal.Traversal[Unknown] = evalTypeIn.collectAll[Unknown] - - def inheritsFromIn: Iterator[TypeDecl] = createAdjacentNodeScalaIteratorByOffSet[TypeDecl](4) - override def _inheritsFromIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _typeDeclViaInheritsFromIn: overflowdb.traversal.Traversal[TypeDecl] = inheritsFromIn.collectAll[TypeDecl] - - def refIn: Iterator[TypeArgument] = createAdjacentNodeScalaIteratorByOffSet[TypeArgument](5) - override def _refIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _typeArgumentViaRefIn: overflowdb.traversal.Traversal[TypeArgument] = refIn.collectAll[TypeArgument] + var fullName: String = "": String + var name: String = "": String + var typeDeclFullName: String = "": String + def fullName(value: String): this.type = { this.fullName = value; this } + def name(value: String): this.type = { this.name = value; this } + def typeDeclFullName(value: String): this.type = { this.typeDeclFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 22, 1) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 51, 1) + } - override def label: String = { - Type.Label + override def copy: this.type = { + val newInstance = new NewType + newInstance.fullName = this.fullName + newInstance.name = this.name + newInstance.typeDeclFullName = this.typeDeclFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "fullName" - case 2 => "name" - case 3 => "typeDeclFullName" + case 0 => "fullName" + case 1 => "name" + case 2 => "typeDeclFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => fullName - case 2 => name - case 3 => typeDeclFullName - } - - override def productPrefix = "Type" - override def productArity = 4 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TypeDb] - - override def property(key: String): Any = { - key match { - case "FULL_NAME" => this._fullName - case "NAME" => this._name - case "TYPE_DECL_FULL_NAME" => this._typeDeclFullName - + case 0 => this.fullName + case 1 => this.name + case 2 => this.typeDeclFullName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "FULL_NAME" => this._fullName = value.asInstanceOf[String] - case "NAME" => this._name = value.asInstanceOf[String] - case "TYPE_DECL_FULL_NAME" => this._typeDeclFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._fullName = newNode.asInstanceOf[NewType].fullName - this._name = newNode.asInstanceOf[NewType].name - this._typeDeclFullName = newNode.asInstanceOf[NewType].typeDeclFullName - - graph.indexManager.putIfIndexed("FULL_NAME", newNode.asInstanceOf[NewType].fullName, this.ref) - } + override def productPrefix = "NewType" + override def productArity = 3 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewType] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeArgument.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeArgument.scala index 87d716d52..3563673c5 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeArgument.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeArgument.scala @@ -1,262 +1,1505 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object TypeArgument { - def apply(graph: Graph, id: Long) = new TypeArgument(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait TypeArgumentEMT extends AnyRef with AstNodeEMT - val Label = "TYPE_ARGUMENT" +trait TypeArgumentBase extends AbstractNode with AstNodeBase with StaticType[TypeArgumentEMT] { - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val all: Set[String] = Set(Code, ColumnNumber, LineNumber, Order) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +object TypeArgument { + val Label = "TYPE_ARGUMENT" + object PropertyNames { - } + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - object PropertyDefaults { - val Code = "" - val Order = -1: Int - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.BindsTo.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation - ).asJava, - List(io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation).asJava - ) + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - object Edges { - val Out: Array[String] = Array("BINDS_TO", "REF") - val In: Array[String] = Array("AST") + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" } + object Properties { - val factory = new NodeFactory[TypeArgumentDb] { - override val forLabel = TypeArgument.Label - - override def createNode(ref: NodeRef[TypeArgumentDb]) = - new TypeArgumentDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = TypeArgument(graph, id) - } -} + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") -trait TypeArgumentBase extends AbstractNode with AstNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def order: scala.Int + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } + object PropertyDefaults { + val Code = "" + val Order = -1: Int + } } -class TypeArgument(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[TypeArgumentDb](graph_4762, id_4762) +class TypeArgument(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 39.toShort, seq_4762) with TypeArgumentBase - with StoredNode - with AstNode { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => TypeArgument.PropertyDefaults.Code - case "ORDER" => TypeArgument.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def bindsToOut: Iterator[TypeParameter] = get().bindsToOut - override def _bindsToOut = get()._bindsToOut - - /** Traverse to TYPE_PARAMETER via BINDS_TO OUT edge. - */ - def _typeParameterViaBindsToOut: overflowdb.traversal.Traversal[TypeParameter] = get()._typeParameterViaBindsToOut - - def refOut: Iterator[Type] = get().refOut - override def _refOut = get()._refOut - - /** Traverse to TYPE via REF OUT edge. - */ - def _typeViaRefOut: overflowdb.traversal.Traversal[Type] = get()._typeViaRefOut - - def astIn: Iterator[Type] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to TYPE via AST IN edge. - */ - def _typeViaAstIn: overflowdb.traversal.Traversal[Type] = get()._typeViaAstIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - TypeArgument.Label - } + with AstNode + with StaticType[TypeArgumentEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => order + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.order + case _ => null } override def productPrefix = "TypeArgument" - override def productArity = 5 -} - -class TypeArgumentDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with AstNode with TypeArgumentBase { + override def productArity = 4 - override def layoutInformation: NodeLayoutInformation = TypeArgument.layoutInformation - - private var _code: String = TypeArgument.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = TypeArgument.PropertyDefaults.Order - def order: scala.Int = _order + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TypeArgument] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) +object NewTypeArgument { + def apply(): NewTypeArgument = new NewTypeArgument + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_TypeArgument_code 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: NewTypeArgument => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeArgument_columnNumber 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[Int]] + 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: NewTypeArgument => + generated.columnNumber 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_TypeArgument_lineNumber 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[Int]] + 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: NewTypeArgument => + generated.lineNumber 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_TypeArgument_order 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[Int]] + 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: NewTypeArgument => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } +class NewTypeArgument extends NewNode(39.toShort) with TypeArgumentBase with AstNodeNew { + override type StoredNodeType = TypeArgument + override def label: String = "TYPE_ARGUMENT" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTypeArgument.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTypeArgument.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def bindsToOut: Iterator[TypeParameter] = createAdjacentNodeScalaIteratorByOffSet[TypeParameter](0) - override def _bindsToOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _typeParameterViaBindsToOut: overflowdb.traversal.Traversal[TypeParameter] = bindsToOut.collectAll[TypeParameter] - - def refOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](1) - override def _refOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _typeViaRefOut: overflowdb.traversal.Traversal[Type] = refOut.collectAll[Type] - - def astIn: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](2) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _typeViaAstIn: overflowdb.traversal.Traversal[Type] = astIn.collectAll[Type] + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var order: Int = -1: Int + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + } - override def label: String = { - TypeArgument.Label + override def copy: this.type = { + val newInstance = new NewTypeArgument + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => order - } - - override def productPrefix = "TypeArgument" - override def productArity = 5 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TypeArgumentDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewTypeArgument].code - this._columnNumber = newNode.asInstanceOf[NewTypeArgument].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewTypeArgument].lineNumber match { - case None => null; case Some(value) => value - } - this._order = newNode.asInstanceOf[NewTypeArgument].order - - } + override def productPrefix = "NewTypeArgument" + override def productArity = 4 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTypeArgument] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeDecl.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeDecl.scala index e1c5c9ef8..b7b2cd014 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeDecl.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeDecl.scala @@ -1,65 +1,191 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait TypeDeclEMT + extends AnyRef + with AstNodeEMT + with HasAliasTypeFullNameEMT + with HasAstParentFullNameEMT + with HasAstParentTypeEMT + with HasFilenameEMT + with HasFullNameEMT + with HasInheritsFromTypeFullNameEMT + with HasIsExternalEMT + with HasNameEMT + with HasOffsetEMT + with HasOffsetEndEMT + +trait TypeDeclBase extends AbstractNode with AstNodeBase with StaticType[TypeDeclEMT] { -object TypeDecl { - def apply(graph: Graph, id: Long) = new TypeDecl(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + this.aliasTypeFullName.foreach { p => res.put("ALIAS_TYPE_FULL_NAME", p) } + if (("": String) != this.astParentFullName) res.put("AST_PARENT_FULL_NAME", this.astParentFullName) + if (("": String) != this.astParentType) res.put("AST_PARENT_TYPE", this.astParentType) + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + if (("": String) != this.filename) res.put("FILENAME", this.filename) + if (("": String) != this.fullName) res.put("FULL_NAME", this.fullName) + val tmpInheritsFromTypeFullName = this.inheritsFromTypeFullName; + if (tmpInheritsFromTypeFullName.nonEmpty) res.put("INHERITS_FROM_TYPE_FULL_NAME", tmpInheritsFromTypeFullName) + if ((false: Boolean) != this.isExternal) res.put("IS_EXTERNAL", this.isExternal) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + this.offset.foreach { p => res.put("OFFSET", p) } + this.offsetEnd.foreach { p => res.put("OFFSET_END", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res + } +} +object TypeDecl { val Label = "TYPE_DECL" - object PropertyNames { - val AliasTypeFullName = "ALIAS_TYPE_FULL_NAME" - val AstParentFullName = "AST_PARENT_FULL_NAME" - val AstParentType = "AST_PARENT_TYPE" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val Filename = "FILENAME" - val FullName = "FULL_NAME" + + /** This property holds the fully qualified name of the type that the node is a type alias of. + */ + val AliasTypeFullName = "ALIAS_TYPE_FULL_NAME" + + /** This field holds the FULL_NAME of the AST parent of an entity. */ + val AstParentFullName = "AST_PARENT_FULL_NAME" + + /** The type of the AST parent. Since this is only used in some parts of the graph, the list does not include all + * possible parents by intention. Possible parents: METHOD, TYPE_DECL, NAMESPACE_BLOCK. + */ + val AstParentType = "AST_PARENT_TYPE" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** The path of the source file this node was generated from, relative to the root path in the meta data node. This + * field must be set but may be set to the value `` to indicate that no source file can be associated with + * the node, e.g., because the node represents an entity known to exist because it is referenced, but for which the + * file that is is declared in is unknown. + */ + val Filename = "FILENAME" + + /** This is the fully-qualified name of an entity, e.g., the fully-qualified name of a method or type. The details + * of what constitutes a fully-qualified name are language specific. This field SHOULD be human readable. + */ + val FullName = "FULL_NAME" + + /** The static types a TYPE_DECL inherits from. This property is matched against the FULL_NAME of TYPE nodes and + * thus it is required to have at least one TYPE node for each TYPE_FULL_NAME + */ val InheritsFromTypeFullName = "INHERITS_FROM_TYPE_FULL_NAME" - val IsExternal = "IS_EXTERNAL" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Offset = "OFFSET" - val OffsetEnd = "OFFSET_END" - val Order = "ORDER" - val all: Set[String] = Set( - AliasTypeFullName, - AstParentFullName, - AstParentType, - Code, - ColumnNumber, - Filename, - FullName, - InheritsFromTypeFullName, - IsExternal, - LineNumber, - Name, - Offset, - OffsetEnd, - Order - ) - val allAsJava: java.util.Set[String] = all.asJava - } + /** Indicates that the construct (METHOD or TYPE_DECL) is external, that is, it is referenced but not defined in the + * code (applies both to insular parsing and to library functions where we have header files only) + */ + val IsExternal = "IS_EXTERNAL" + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" + + /** Start offset into the CONTENT property of the corresponding FILE node. The offset is such that parts of the + * content can easily be accessed via `content.substring(offset, offsetEnd)`. This means that the offset must be + * measured in utf16 encoding (i.e. neither in characters/codeunits nor in byte-offsets into a utf8 encoding). E.g. + * for METHOD nodes this start offset points to the start of the methods source code in the string holding the + * source code of the entire file. + */ + val Offset = "OFFSET" + + /** End offset (exclusive) into the CONTENT property of the corresponding FILE node. See OFFSET documentation for + * finer details. E.g. for METHOD nodes this end offset points to the first code position which is not part of the + * method. + */ + val OffsetEnd = "OFFSET_END" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + } object Properties { - val AliasTypeFullName = new overflowdb.PropertyKey[String]("ALIAS_TYPE_FULL_NAME") - val AstParentFullName = new overflowdb.PropertyKey[String]("AST_PARENT_FULL_NAME") - val AstParentType = new overflowdb.PropertyKey[String]("AST_PARENT_TYPE") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val Filename = new overflowdb.PropertyKey[String]("FILENAME") - val FullName = new overflowdb.PropertyKey[String]("FULL_NAME") - val InheritsFromTypeFullName = new overflowdb.PropertyKey[IndexedSeq[String]]("INHERITS_FROM_TYPE_FULL_NAME") - val IsExternal = new overflowdb.PropertyKey[Boolean]("IS_EXTERNAL") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Offset = new overflowdb.PropertyKey[scala.Int]("OFFSET") - val OffsetEnd = new overflowdb.PropertyKey[scala.Int]("OFFSET_END") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") + /** This property holds the fully qualified name of the type that the node is a type alias of. + */ + val AliasTypeFullName = flatgraph.OptionalPropertyKey[String](kind = 0, name = "ALIAS_TYPE_FULL_NAME") + + /** This field holds the FULL_NAME of the AST parent of an entity. */ + val AstParentFullName = + flatgraph.SinglePropertyKey[String](kind = 3, name = "AST_PARENT_FULL_NAME", default = "") + + /** The type of the AST parent. Since this is only used in some parts of the graph, the list does not include all + * possible parents by intention. Possible parents: METHOD, TYPE_DECL, NAMESPACE_BLOCK. + */ + val AstParentType = flatgraph.SinglePropertyKey[String](kind = 4, name = "AST_PARENT_TYPE", default = "") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** The path of the source file this node was generated from, relative to the root path in the meta data node. This + * field must be set but may be set to the value `` to indicate that no source file can be associated with + * the node, e.g., because the node represents an entity known to exist because it is referenced, but for which the + * file that is is declared in is unknown. + */ + val Filename = flatgraph.SinglePropertyKey[String](kind = 21, name = "FILENAME", default = "") + + /** This is the fully-qualified name of an entity, e.g., the fully-qualified name of a method or type. The details + * of what constitutes a fully-qualified name are language specific. This field SHOULD be human readable. + */ + val FullName = flatgraph.SinglePropertyKey[String](kind = 22, name = "FULL_NAME", default = "") + + /** The static types a TYPE_DECL inherits from. This property is matched against the FULL_NAME of TYPE nodes and + * thus it is required to have at least one TYPE node for each TYPE_FULL_NAME + */ + val InheritsFromTypeFullName = flatgraph.MultiPropertyKey[String](kind = 27, name = "INHERITS_FROM_TYPE_FULL_NAME") + + /** Indicates that the construct (METHOD or TYPE_DECL) is external, that is, it is referenced but not defined in the + * code (applies both to insular parsing and to library functions where we have header files only) + */ + val IsExternal = flatgraph.SinglePropertyKey[Boolean](kind = 29, name = "IS_EXTERNAL", default = false) + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") + + /** Start offset into the CONTENT property of the corresponding FILE node. The offset is such that parts of the + * content can easily be accessed via `content.substring(offset, offsetEnd)`. This means that the offset must be + * measured in utf16 encoding (i.e. neither in characters/codeunits nor in byte-offsets into a utf8 encoding). E.g. + * for METHOD nodes this start offset points to the start of the methods source code in the string holding the + * source code of the entire file. + */ + val Offset = flatgraph.OptionalPropertyKey[Int](kind = 41, name = "OFFSET") + + /** End offset (exclusive) into the CONTENT property of the corresponding FILE node. See OFFSET documentation for + * finer details. E.g. for METHOD nodes this end offset points to the first code position which is not part of the + * method. + */ + val OffsetEnd = flatgraph.OptionalPropertyKey[Int](kind = 42, name = "OFFSET_END") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) } - object PropertyDefaults { val AstParentFullName = "" val AstParentType = "" @@ -70,523 +196,1791 @@ object TypeDecl { val Name = "" val Order = -1: Int } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.AliasOf.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Binds.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.InheritsFrom.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.SourceFile.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ref.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = Array("ALIAS_OF", "AST", "BINDS", "CONTAINS", "INHERITS_FROM", "SOURCE_FILE", "TAGGED_BY") - val In: Array[String] = Array("AST", "CONTAINS", "REF") - } - - val factory = new NodeFactory[TypeDeclDb] { - override val forLabel = TypeDecl.Label - - override def createNode(ref: NodeRef[TypeDeclDb]) = - new TypeDeclDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = TypeDecl(graph, id) - } } -trait TypeDeclBase extends AbstractNode with AstNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def aliasTypeFullName: Option[String] - def astParentFullName: String - def astParentType: String - def code: String - def columnNumber: Option[scala.Int] - def filename: String - def fullName: String - def inheritsFromTypeFullName: IndexedSeq[String] - def isExternal: Boolean - def lineNumber: Option[scala.Int] - def name: String - def offset: Option[scala.Int] - def offsetEnd: Option[scala.Int] - def order: scala.Int - -} - -class TypeDecl(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[TypeDeclDb](graph_4762, id_4762) +class TypeDecl(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 40.toShort, seq_4762) with TypeDeclBase - with StoredNode - with AstNode { - override def aliasTypeFullName: Option[String] = get().aliasTypeFullName - override def astParentFullName: String = get().astParentFullName - override def astParentType: String = get().astParentType - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def filename: String = get().filename - override def fullName: String = get().fullName - override def inheritsFromTypeFullName: IndexedSeq[String] = get().inheritsFromTypeFullName - override def isExternal: Boolean = get().isExternal - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def offset: Option[scala.Int] = get().offset - override def offsetEnd: Option[scala.Int] = get().offsetEnd - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "AST_PARENT_FULL_NAME" => TypeDecl.PropertyDefaults.AstParentFullName - case "AST_PARENT_TYPE" => TypeDecl.PropertyDefaults.AstParentType - case "CODE" => TypeDecl.PropertyDefaults.Code - case "FILENAME" => TypeDecl.PropertyDefaults.Filename - case "FULL_NAME" => TypeDecl.PropertyDefaults.FullName - case "IS_EXTERNAL" => TypeDecl.PropertyDefaults.IsExternal - case "NAME" => TypeDecl.PropertyDefaults.Name - case "ORDER" => TypeDecl.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def aliasOfOut: Iterator[Type] = get().aliasOfOut - override def _aliasOfOut = get()._aliasOfOut - - /** Traverse to TYPE via ALIAS_OF OUT edge. - */ - def aliasedType: overflowdb.traversal.Traversal[Type] = get().aliasedType - - def astOut: Iterator[AstNode] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to ANNOTATION via AST OUT edge. - */ - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = get()._annotationViaAstOut - - /** Traverse to IMPORT via AST OUT edge. - */ - def _importViaAstOut: overflowdb.traversal.Traversal[Import] = get()._importViaAstOut - - /** Traverse to MEMBER via AST OUT edge. - */ - def _memberViaAstOut: overflowdb.traversal.Traversal[Member] = get()._memberViaAstOut - - /** Traverse to METHOD via AST OUT edge. - */ - def _methodViaAstOut: overflowdb.traversal.Traversal[Method] = get()._methodViaAstOut - - /** Traverse to MODIFIER via AST OUT edge. - */ - def _modifierViaAstOut: overflowdb.traversal.Traversal[Modifier] = get()._modifierViaAstOut - - /** Traverse to TYPE_DECL via AST OUT edge. - */ - def _typeDeclViaAstOut: overflowdb.traversal.Traversal[TypeDecl] = get()._typeDeclViaAstOut - - /** Traverse to TYPE_PARAMETER via AST OUT edge. - */ - def _typeParameterViaAstOut: overflowdb.traversal.Traversal[TypeParameter] = get()._typeParameterViaAstOut - - def bindsOut: Iterator[Binding] = get().bindsOut - override def _bindsOut = get()._bindsOut - - /** Traverse to BINDING via BINDS OUT edge. - */ - def _bindingViaBindsOut: overflowdb.traversal.Traversal[Binding] = get()._bindingViaBindsOut - - def containsOut: Iterator[Method] = get().containsOut - override def _containsOut = get()._containsOut - - /** Traverse to METHOD via CONTAINS OUT edge. - */ - def _methodViaContainsOut: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsOut - - def inheritsFromOut: Iterator[Type] = get().inheritsFromOut - override def _inheritsFromOut = get()._inheritsFromOut - - /** Traverse to TYPE via INHERITS_FROM OUT edge. - */ - def _typeViaInheritsFromOut: overflowdb.traversal.Traversal[Type] = get()._typeViaInheritsFromOut - - def sourceFileOut: Iterator[File] = get().sourceFileOut - override def _sourceFileOut = get()._sourceFileOut - - /** Traverse to FILE via SOURCE_FILE OUT edge. - */ - def _fileViaSourceFileOut: overflowdb.traversal.Traversal[File] = get()._fileViaSourceFileOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def astIn: Iterator[AstNode] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to METHOD via AST IN edge. - */ - def _methodViaAstIn: Option[Method] = get()._methodViaAstIn - - /** Traverse to NAMESPACE_BLOCK via AST IN edge. - */ - def namespaceBlock: Option[NamespaceBlock] = get().namespaceBlock - - /** Traverse to TYPE_DECL via AST IN edge. - */ - def _typeDeclViaAstIn: Option[TypeDecl] = get()._typeDeclViaAstIn - - def containsIn: Iterator[File] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to FILE via CONTAINS IN edge. - */ - def _fileViaContainsIn: overflowdb.traversal.Traversal[File] = get()._fileViaContainsIn - - def refIn: Iterator[Type] = get().refIn - override def _refIn = get()._refIn - - /** Traverse to TYPE via REF IN edge. - */ - def _typeViaRefIn: overflowdb.traversal.Traversal[Type] = get()._typeViaRefIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - TypeDecl.Label - } + with AstNode + with StaticType[TypeDeclEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "aliasTypeFullName" - case 2 => "astParentFullName" - case 3 => "astParentType" - case 4 => "code" - case 5 => "columnNumber" - case 6 => "filename" - case 7 => "fullName" - case 8 => "inheritsFromTypeFullName" - case 9 => "isExternal" - case 10 => "lineNumber" - case 11 => "name" - case 12 => "offset" - case 13 => "offsetEnd" - case 14 => "order" + case 0 => "aliasTypeFullName" + case 1 => "astParentFullName" + case 2 => "astParentType" + case 3 => "code" + case 4 => "columnNumber" + case 5 => "filename" + case 6 => "fullName" + case 7 => "inheritsFromTypeFullName" + case 8 => "isExternal" + case 9 => "lineNumber" + case 10 => "name" + case 11 => "offset" + case 12 => "offsetEnd" + case 13 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => aliasTypeFullName - case 2 => astParentFullName - case 3 => astParentType - case 4 => code - case 5 => columnNumber - case 6 => filename - case 7 => fullName - case 8 => inheritsFromTypeFullName - case 9 => isExternal - case 10 => lineNumber - case 11 => name - case 12 => offset - case 13 => offsetEnd - case 14 => order + case 0 => this.aliasTypeFullName + case 1 => this.astParentFullName + case 2 => this.astParentType + case 3 => this.code + case 4 => this.columnNumber + case 5 => this.filename + case 6 => this.fullName + case 7 => this.inheritsFromTypeFullName + case 8 => this.isExternal + case 9 => this.lineNumber + case 10 => this.name + case 11 => this.offset + case 12 => this.offsetEnd + case 13 => this.order + case _ => null } override def productPrefix = "TypeDecl" - override def productArity = 15 + override def productArity = 14 + + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TypeDecl] } -class TypeDeclDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with AstNode with TypeDeclBase { - - override def layoutInformation: NodeLayoutInformation = TypeDecl.layoutInformation - - private var _aliasTypeFullName: String = null - def aliasTypeFullName: Option[String] = Option(_aliasTypeFullName).asInstanceOf[Option[String]] - private var _astParentFullName: String = TypeDecl.PropertyDefaults.AstParentFullName - def astParentFullName: String = _astParentFullName - private var _astParentType: String = TypeDecl.PropertyDefaults.AstParentType - def astParentType: String = _astParentType - private var _code: String = TypeDecl.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _filename: String = TypeDecl.PropertyDefaults.Filename - def filename: String = _filename - private var _fullName: String = TypeDecl.PropertyDefaults.FullName - def fullName: String = _fullName - private var _inheritsFromTypeFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def inheritsFromTypeFullName: IndexedSeq[String] = _inheritsFromTypeFullName - private var _isExternal: java.lang.Boolean = TypeDecl.PropertyDefaults.IsExternal - def isExternal: Boolean = _isExternal - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = TypeDecl.PropertyDefaults.Name - def name: String = _name - private var _offset: Integer = null - def offset: Option[scala.Int] = Option(_offset).asInstanceOf[Option[scala.Int]] - private var _offsetEnd: Integer = null - def offsetEnd: Option[scala.Int] = Option(_offsetEnd).asInstanceOf[Option[scala.Int]] - private var _order: Integer = TypeDecl.PropertyDefaults.Order - def order: scala.Int = _order - - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - aliasTypeFullName.map { value => properties.put("ALIAS_TYPE_FULL_NAME", value) } - properties.put("AST_PARENT_FULL_NAME", astParentFullName) - properties.put("AST_PARENT_TYPE", astParentType) - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - properties.put("FILENAME", filename) - properties.put("FULL_NAME", fullName) - if (this._inheritsFromTypeFullName != null && this._inheritsFromTypeFullName.nonEmpty) { - properties.put("INHERITS_FROM_TYPE_FULL_NAME", inheritsFromTypeFullName) +object NewTypeDecl { + def apply(): NewTypeDecl = new NewTypeDecl + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) + + object InsertionHelpers { + object NewNodeInserter_TypeDecl_aliasTypeFullName 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: NewTypeDecl => + generated.aliasTypeFullName 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_TypeDecl_astParentFullName 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: NewTypeDecl => + dstCast(offset) = generated.astParentFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeDecl_astParentType 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: NewTypeDecl => + dstCast(offset) = generated.astParentType + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeDecl_code 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: NewTypeDecl => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeDecl_columnNumber 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[Int]] + 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: NewTypeDecl => + generated.columnNumber 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_TypeDecl_filename 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: NewTypeDecl => + dstCast(offset) = generated.filename + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeDecl_fullName 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: NewTypeDecl => + dstCast(offset) = generated.fullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeDecl_inheritsFromTypeFullName 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: NewTypeDecl => + for (item <- generated.inheritsFromTypeFullName) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeDecl_isExternal 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[Boolean]] + 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: NewTypeDecl => + dstCast(offset) = generated.isExternal + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeDecl_lineNumber 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[Int]] + 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: NewTypeDecl => + generated.lineNumber 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_TypeDecl_name 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: NewTypeDecl => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeDecl_offset 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[Int]] + 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: NewTypeDecl => + generated.offset 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_TypeDecl_offsetEnd 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[Int]] + 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: NewTypeDecl => + generated.offsetEnd 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_TypeDecl_order 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[Int]] + 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: NewTypeDecl => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - properties.put("IS_EXTERNAL", isExternal) - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - offset.map { value => properties.put("OFFSET", value) } - offsetEnd.map { value => properties.put("OFFSET_END", value) } - properties.put("ORDER", order) - - properties } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - aliasTypeFullName.map { value => properties.put("ALIAS_TYPE_FULL_NAME", value) } - if (!(("") == astParentFullName)) { properties.put("AST_PARENT_FULL_NAME", astParentFullName) } - if (!(("") == astParentType)) { properties.put("AST_PARENT_TYPE", astParentType) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (!(("") == filename)) { properties.put("FILENAME", filename) } - if (!(("") == fullName)) { properties.put("FULL_NAME", fullName) } - if (this._inheritsFromTypeFullName != null && this._inheritsFromTypeFullName.nonEmpty) { - properties.put("INHERITS_FROM_TYPE_FULL_NAME", inheritsFromTypeFullName) - } - if (!((false) == isExternal)) { properties.put("IS_EXTERNAL", isExternal) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - offset.map { value => properties.put("OFFSET", value) } - offsetEnd.map { value => properties.put("OFFSET_END", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - - properties +class NewTypeDecl extends NewNode(40.toShort) with TypeDeclBase with AstNodeNew { + override type StoredNodeType = TypeDecl + override def label: String = "TYPE_DECL" + + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTypeDecl.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTypeDecl.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - import overflowdb.traversal._ - def aliasOfOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](0) - override def _aliasOfOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def aliasedType: overflowdb.traversal.Traversal[Type] = aliasOfOut.collectAll[Type] - - def astOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](1) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = astOut.collectAll[Annotation] - def _importViaAstOut: overflowdb.traversal.Traversal[Import] = astOut.collectAll[Import] - def _memberViaAstOut: overflowdb.traversal.Traversal[Member] = astOut.collectAll[Member] - def _methodViaAstOut: overflowdb.traversal.Traversal[Method] = astOut.collectAll[Method] - def _modifierViaAstOut: overflowdb.traversal.Traversal[Modifier] = astOut.collectAll[Modifier] - def _typeDeclViaAstOut: overflowdb.traversal.Traversal[TypeDecl] = astOut.collectAll[TypeDecl] - def _typeParameterViaAstOut: overflowdb.traversal.Traversal[TypeParameter] = astOut.collectAll[TypeParameter] - - def bindsOut: Iterator[Binding] = createAdjacentNodeScalaIteratorByOffSet[Binding](2) - override def _bindsOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _bindingViaBindsOut: overflowdb.traversal.Traversal[Binding] = bindsOut.collectAll[Binding] - - def containsOut: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](3) - override def _containsOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _methodViaContainsOut: overflowdb.traversal.Traversal[Method] = containsOut.collectAll[Method] - - def inheritsFromOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](4) - override def _inheritsFromOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _typeViaInheritsFromOut: overflowdb.traversal.Traversal[Type] = inheritsFromOut.collectAll[Type] - - def sourceFileOut: Iterator[File] = createAdjacentNodeScalaIteratorByOffSet[File](5) - override def _sourceFileOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _fileViaSourceFileOut: overflowdb.traversal.Traversal[File] = sourceFileOut.collectAll[File] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](6) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def astIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](7) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _methodViaAstIn: Option[Method] = astIn.collectAll[Method].nextOption() - def namespaceBlock: Option[NamespaceBlock] = astIn.collectAll[NamespaceBlock].nextOption() - def _typeDeclViaAstIn: Option[TypeDecl] = astIn.collectAll[TypeDecl].nextOption() - - def containsIn: Iterator[File] = createAdjacentNodeScalaIteratorByOffSet[File](8) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _fileViaContainsIn: overflowdb.traversal.Traversal[File] = containsIn.collectAll[File] - - def refIn: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](9) - override def _refIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - def _typeViaRefIn: overflowdb.traversal.Traversal[Type] = refIn.collectAll[Type] - - override def label: String = { - TypeDecl.Label + var aliasTypeFullName: Option[String] = None + var astParentFullName: String = "": String + var astParentType: String = "": String + var code: String = "": String + var columnNumber: Option[Int] = None + var filename: String = "": String + var fullName: String = "": String + var inheritsFromTypeFullName: IndexedSeq[String] = ArraySeq.empty + var isExternal: Boolean = false: Boolean + var lineNumber: Option[Int] = None + var name: String = "": String + var offset: Option[Int] = None + var offsetEnd: Option[Int] = None + var order: Int = -1: Int + def aliasTypeFullName(value: Option[String]): this.type = { this.aliasTypeFullName = value; this } + def aliasTypeFullName(value: String): this.type = { this.aliasTypeFullName = Option(value); this } + def astParentFullName(value: String): this.type = { this.astParentFullName = value; this } + def astParentType(value: String): this.type = { this.astParentType = value; this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def filename(value: String): this.type = { this.filename = value; this } + def fullName(value: String): this.type = { this.fullName = value; this } + def inheritsFromTypeFullName(value: IterableOnce[String]): this.type = { + this.inheritsFromTypeFullName = value.iterator.to(ArraySeq); this + } + def isExternal(value: Boolean): this.type = { this.isExternal = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + def offset(value: Int): this.type = { this.offset = Option(value); this } + def offset(value: Option[Int]): this.type = { this.offset = value; this } + def offsetEnd(value: Int): this.type = { this.offsetEnd = Option(value); this } + def offsetEnd(value: Option[Int]): this.type = { this.offsetEnd = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 0, aliasTypeFullName.size) + interface.countProperty(this, 3, 1) + interface.countProperty(this, 4, 1) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 21, 1) + interface.countProperty(this, 22, 1) + interface.countProperty(this, 27, inheritsFromTypeFullName.size) + interface.countProperty(this, 29, 1) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 41, offset.size) + interface.countProperty(this, 42, offsetEnd.size) + interface.countProperty(this, 43, 1) + } + + override def copy: this.type = { + val newInstance = new NewTypeDecl + newInstance.aliasTypeFullName = this.aliasTypeFullName + newInstance.astParentFullName = this.astParentFullName + newInstance.astParentType = this.astParentType + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.filename = this.filename + newInstance.fullName = this.fullName + newInstance.inheritsFromTypeFullName = this.inheritsFromTypeFullName + newInstance.isExternal = this.isExternal + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.offset = this.offset + newInstance.offsetEnd = this.offsetEnd + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "aliasTypeFullName" - case 2 => "astParentFullName" - case 3 => "astParentType" - case 4 => "code" - case 5 => "columnNumber" - case 6 => "filename" - case 7 => "fullName" - case 8 => "inheritsFromTypeFullName" - case 9 => "isExternal" - case 10 => "lineNumber" - case 11 => "name" - case 12 => "offset" - case 13 => "offsetEnd" - case 14 => "order" + case 0 => "aliasTypeFullName" + case 1 => "astParentFullName" + case 2 => "astParentType" + case 3 => "code" + case 4 => "columnNumber" + case 5 => "filename" + case 6 => "fullName" + case 7 => "inheritsFromTypeFullName" + case 8 => "isExternal" + case 9 => "lineNumber" + case 10 => "name" + case 11 => "offset" + case 12 => "offsetEnd" + case 13 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => aliasTypeFullName - case 2 => astParentFullName - case 3 => astParentType - case 4 => code - case 5 => columnNumber - case 6 => filename - case 7 => fullName - case 8 => inheritsFromTypeFullName - case 9 => isExternal - case 10 => lineNumber - case 11 => name - case 12 => offset - case 13 => offsetEnd - case 14 => order + case 0 => this.aliasTypeFullName + case 1 => this.astParentFullName + case 2 => this.astParentType + case 3 => this.code + case 4 => this.columnNumber + case 5 => this.filename + case 6 => this.fullName + case 7 => this.inheritsFromTypeFullName + case 8 => this.isExternal + case 9 => this.lineNumber + case 10 => this.name + case 11 => this.offset + case 12 => this.offsetEnd + case 13 => this.order + case _ => null } - override def productPrefix = "TypeDecl" - override def productArity = 15 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TypeDeclDb] - - override def property(key: String): Any = { - key match { - case "ALIAS_TYPE_FULL_NAME" => this._aliasTypeFullName - case "AST_PARENT_FULL_NAME" => this._astParentFullName - case "AST_PARENT_TYPE" => this._astParentType - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "FILENAME" => this._filename - case "FULL_NAME" => this._fullName - case "INHERITS_FROM_TYPE_FULL_NAME" => this._inheritsFromTypeFullName - case "IS_EXTERNAL" => this._isExternal - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "OFFSET" => this._offset - case "OFFSET_END" => this._offsetEnd - case "ORDER" => this._order - - case _ => null - } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ALIAS_TYPE_FULL_NAME" => this._aliasTypeFullName = value.asInstanceOf[String] - case "AST_PARENT_FULL_NAME" => this._astParentFullName = value.asInstanceOf[String] - case "AST_PARENT_TYPE" => this._astParentType = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "FILENAME" => this._filename = value.asInstanceOf[String] - case "FULL_NAME" => this._fullName = value.asInstanceOf[String] - case "INHERITS_FROM_TYPE_FULL_NAME" => - this._inheritsFromTypeFullName = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "IS_EXTERNAL" => this._isExternal = value.asInstanceOf[Boolean] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "OFFSET" => this._offset = value.asInstanceOf[scala.Int] - case "OFFSET_END" => this._offsetEnd = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._aliasTypeFullName = newNode.asInstanceOf[NewTypeDecl].aliasTypeFullName match { - case None => null; case Some(value) => value - } - this._astParentFullName = newNode.asInstanceOf[NewTypeDecl].astParentFullName - this._astParentType = newNode.asInstanceOf[NewTypeDecl].astParentType - this._code = newNode.asInstanceOf[NewTypeDecl].code - this._columnNumber = newNode.asInstanceOf[NewTypeDecl].columnNumber match { - case None => null; case Some(value) => value - } - this._filename = newNode.asInstanceOf[NewTypeDecl].filename - this._fullName = newNode.asInstanceOf[NewTypeDecl].fullName - this._inheritsFromTypeFullName = - if (newNode.asInstanceOf[NewTypeDecl].inheritsFromTypeFullName != null) - newNode.asInstanceOf[NewTypeDecl].inheritsFromTypeFullName - else collection.immutable.ArraySeq.empty - this._isExternal = newNode.asInstanceOf[NewTypeDecl].isExternal - this._lineNumber = newNode.asInstanceOf[NewTypeDecl].lineNumber match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewTypeDecl].name - this._offset = newNode.asInstanceOf[NewTypeDecl].offset match { case None => null; case Some(value) => value } - this._offsetEnd = newNode.asInstanceOf[NewTypeDecl].offsetEnd match { case None => null; case Some(value) => value } - this._order = newNode.asInstanceOf[NewTypeDecl].order - - graph.indexManager.putIfIndexed("FULL_NAME", newNode.asInstanceOf[NewTypeDecl].fullName, this.ref) - } - + override def productPrefix = "NewTypeDecl" + override def productArity = 14 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTypeDecl] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeParameter.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeParameter.scala index 4f55bcf82..4f0702736 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeParameter.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeParameter.scala @@ -1,280 +1,1546 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable -object TypeParameter { - def apply(graph: Graph, id: Long) = new TypeParameter(graph, id) +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait TypeParameterEMT extends AnyRef with AstNodeEMT with HasNameEMT - val Label = "TYPE_PARAMETER" +trait TypeParameterBase extends AbstractNode with AstNodeBase with StaticType[TypeParameterEMT] { - object PropertyNames { - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val LineNumber = "LINE_NUMBER" - val Name = "NAME" - val Order = "ORDER" - val all: Set[String] = Set(Code, ColumnNumber, LineNumber, Name, Order) - val allAsJava: java.util.Set[String] = all.asJava + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if (("": String) != this.name) res.put("NAME", this.name) + if ((-1: Int) != this.order) res.put("ORDER", this.order) + res } +} - object Properties { - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Name = new overflowdb.PropertyKey[String]("NAME") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") +object TypeParameter { + val Label = "TYPE_PARAMETER" + object PropertyNames { - } + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" - object PropertyDefaults { - val Code = "" - val Name = "" - val Order = -1: Int - } + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List().asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.BindsTo.layoutInformation - ).asJava - ) + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" - object Edges { - val Out: Array[String] = Array() - val In: Array[String] = Array("AST", "BINDS_TO") - } + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = "NAME" - val factory = new NodeFactory[TypeParameterDb] { - override val forLabel = TypeParameter.Label + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + } + object Properties { - override def createNode(ref: NodeRef[TypeParameterDb]) = - new TypeParameterDb(ref.asInstanceOf[NodeRef[NodeDb]]) + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") - override def createNodeRef(graph: Graph, id: Long) = TypeParameter(graph, id) - } -} + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") -trait TypeParameterBase extends AbstractNode with AstNodeBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") - def code: String - def columnNumber: Option[scala.Int] - def lineNumber: Option[scala.Int] - def name: String - def order: scala.Int + /** Name of represented object, e.g., method name (e.g. "run") */ + val Name = flatgraph.SinglePropertyKey[String](kind = 39, name = "NAME", default = "") + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + } + object PropertyDefaults { + val Code = "" + val Name = "" + val Order = -1: Int + } } -class TypeParameter(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[TypeParameterDb](graph_4762, id_4762) +class TypeParameter(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 41.toShort, seq_4762) with TypeParameterBase - with StoredNode - with AstNode { - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def lineNumber: Option[scala.Int] = get().lineNumber - override def name: String = get().name - override def order: scala.Int = get().order - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "CODE" => TypeParameter.PropertyDefaults.Code - case "NAME" => TypeParameter.PropertyDefaults.Name - case "ORDER" => TypeParameter.PropertyDefaults.Order - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def astIn: Iterator[AstNode] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to METHOD via AST IN edge. - */ - def _methodViaAstIn: Method = get()._methodViaAstIn - - /** Traverse to TYPE_DECL via AST IN edge. - */ - def _typeDeclViaAstIn: overflowdb.traversal.Traversal[TypeDecl] = get()._typeDeclViaAstIn - - def bindsToIn: Iterator[TypeArgument] = get().bindsToIn - override def _bindsToIn = get()._bindsToIn - - /** Traverse to TYPE_ARGUMENT via BINDS_TO IN edge. - */ - def _typeArgumentViaBindsToIn: overflowdb.traversal.Traversal[TypeArgument] = get()._typeArgumentViaBindsToIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - TypeParameter.Label - } + with AstNode + with StaticType[TypeParameterEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "name" - case 5 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "name" + case 4 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => name - case 5 => order + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.name + case 4 => this.order + case _ => null } override def productPrefix = "TypeParameter" - override def productArity = 6 -} - -class TypeParameterDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with AstNode with TypeParameterBase { - - override def layoutInformation: NodeLayoutInformation = TypeParameter.layoutInformation + override def productArity = 5 - private var _code: String = TypeParameter.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _name: String = TypeParameter.PropertyDefaults.Name - def name: String = _name - private var _order: Integer = TypeParameter.PropertyDefaults.Order - def order: scala.Int = _order + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TypeParameter] +} - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("NAME", name) - properties.put("ORDER", order) +object NewTypeParameter { + def apply(): NewTypeParameter = new NewTypeParameter + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - properties + object InsertionHelpers { + object NewNodeInserter_TypeParameter_code 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: NewTypeParameter => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeParameter_columnNumber 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[Int]] + 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: NewTypeParameter => + generated.columnNumber 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_TypeParameter_lineNumber 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[Int]] + 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: NewTypeParameter => + generated.lineNumber 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_TypeParameter_name 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: NewTypeParameter => + dstCast(offset) = generated.name + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeParameter_order 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[Int]] + 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: NewTypeParameter => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } } +} - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!(("") == name)) { properties.put("NAME", name) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } +class NewTypeParameter extends NewNode(41.toShort) with TypeParameterBase with AstNodeNew { + override type StoredNodeType = TypeParameter + override def label: String = "TYPE_PARAMETER" - properties + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTypeParameter.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - - import overflowdb.traversal._ - def astIn: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](0) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - def _methodViaAstIn: Method = try { astIn.collectAll[Method].next() } - catch { - case e: java.util.NoSuchElementException => - throw new overflowdb.SchemaViolationException( - "IN edge with label AST to an adjacent METHOD is mandatory, but not defined for this TYPE_PARAMETER node with id=" + id, - e - ) + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTypeParameter.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) } - def _typeDeclViaAstIn: overflowdb.traversal.Traversal[TypeDecl] = astIn.collectAll[TypeDecl] - def bindsToIn: Iterator[TypeArgument] = createAdjacentNodeScalaIteratorByOffSet[TypeArgument](1) - override def _bindsToIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _typeArgumentViaBindsToIn: overflowdb.traversal.Traversal[TypeArgument] = bindsToIn.collectAll[TypeArgument] + var code: String = "": String + var columnNumber: Option[Int] = None + var lineNumber: Option[Int] = None + var name: String = "": String + var order: Int = -1: Int + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def name(value: String): this.type = { this.name = value; this } + def order(value: Int): this.type = { this.order = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 39, 1) + interface.countProperty(this, 43, 1) + } - override def label: String = { - TypeParameter.Label + override def copy: this.type = { + val newInstance = new NewTypeParameter + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.lineNumber = this.lineNumber + newInstance.name = this.name + newInstance.order = this.order + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "code" - case 2 => "columnNumber" - case 3 => "lineNumber" - case 4 => "name" - case 5 => "order" + case 0 => "code" + case 1 => "columnNumber" + case 2 => "lineNumber" + case 3 => "name" + case 4 => "order" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => code - case 2 => columnNumber - case 3 => lineNumber - case 4 => name - case 5 => order - } - - override def productPrefix = "TypeParameter" - override def productArity = 6 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TypeParameterDb] - - override def property(key: String): Any = { - key match { - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "LINE_NUMBER" => this._lineNumber - case "NAME" => this._name - case "ORDER" => this._order - + case 0 => this.code + case 1 => this.columnNumber + case 2 => this.lineNumber + case 3 => this.name + case 4 => this.order case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "NAME" => this._name = value.asInstanceOf[String] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._code = newNode.asInstanceOf[NewTypeParameter].code - this._columnNumber = newNode.asInstanceOf[NewTypeParameter].columnNumber match { - case None => null; case Some(value) => value - } - this._lineNumber = newNode.asInstanceOf[NewTypeParameter].lineNumber match { - case None => null; case Some(value) => value - } - this._name = newNode.asInstanceOf[NewTypeParameter].name - this._order = newNode.asInstanceOf[NewTypeParameter].order - - } + override def productPrefix = "NewTypeParameter" + override def productArity = 5 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTypeParameter] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeRef.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeRef.scala index 3db794123..f73ad2b67 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeRef.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/TypeRef.scala @@ -1,1051 +1,1751 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait TypeRefEMT + extends AnyRef + with ExpressionEMT + with HasDynamicTypeHintFullNameEMT + with HasPossibleTypesEMT + with HasTypeFullNameEMT + +trait TypeRefBase extends AbstractNode with ExpressionBase with StaticType[TypeRefEMT] { -object TypeRef { - def apply(graph: Graph, id: Long) = new TypeRef(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + val tmpDynamicTypeHintFullName = this.dynamicTypeHintFullName; + if (tmpDynamicTypeHintFullName.nonEmpty) res.put("DYNAMIC_TYPE_HINT_FULL_NAME", tmpDynamicTypeHintFullName) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + val tmpPossibleTypes = this.possibleTypes; + if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) + if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) + res + } +} +object TypeRef { val Label = "TYPE_REF" - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" + + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ val DynamicTypeHintFullName = "DYNAMIC_TYPE_HINT_FULL_NAME" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val PossibleTypes = "POSSIBLE_TYPES" - val TypeFullName = "TYPE_FULL_NAME" - val all: Set[String] = Set( - ArgumentIndex, - ArgumentName, - Code, - ColumnNumber, - DynamicTypeHintFullName, - LineNumber, - Order, - PossibleTypes, - TypeFullName - ) - val allAsJava: java.util.Set[String] = all.asJava - } + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = "POSSIBLE_TYPES" + + /** 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 = "TYPE_FULL_NAME" + } object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val DynamicTypeHintFullName = new overflowdb.PropertyKey[IndexedSeq[String]]("DYNAMIC_TYPE_HINT_FULL_NAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val PossibleTypes = new overflowdb.PropertyKey[IndexedSeq[String]]("POSSIBLE_TYPES") - val TypeFullName = new overflowdb.PropertyKey[String]("TYPE_FULL_NAME") + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ + val DynamicTypeHintFullName = flatgraph.MultiPropertyKey[String](kind = 18, name = "DYNAMIC_TYPE_HINT_FULL_NAME") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = flatgraph.MultiPropertyKey[String](kind = 47, name = "POSSIBLE_TYPES") + + /** 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 = 52, name = "TYPE_FULL_NAME", default = "") } - object PropertyDefaults { val ArgumentIndex = -1: Int val Code = "" val Order = -1: Int val TypeFullName = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Capture.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Condition.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Receiver.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = - Array("ARGUMENT", "CAPTURE", "CDG", "CFG", "DOMINATE", "EVAL_TYPE", "POST_DOMINATE", "REACHING_DEF", "TAGGED_BY") - val In: Array[String] = Array( - "ARGUMENT", - "AST", - "CDG", - "CFG", - "CONDITION", - "CONTAINS", - "DOMINATE", - "POST_DOMINATE", - "REACHING_DEF", - "RECEIVER" - ) - } - - val factory = new NodeFactory[TypeRefDb] { - override val forLabel = TypeRef.Label - - override def createNode(ref: NodeRef[TypeRefDb]) = - new TypeRefDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = TypeRef(graph, id) - } } -trait TypeRefBase extends AbstractNode with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def dynamicTypeHintFullName: IndexedSeq[String] - def lineNumber: Option[scala.Int] - def order: scala.Int - def possibleTypes: IndexedSeq[String] - def typeFullName: String - -} - -class TypeRef(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[TypeRefDb](graph_4762, id_4762) +class TypeRef(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 42.toShort, seq_4762) with TypeRefBase - with StoredNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def dynamicTypeHintFullName: IndexedSeq[String] = get().dynamicTypeHintFullName - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def possibleTypes: IndexedSeq[String] = get().possibleTypes - override def typeFullName: String = get().typeFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => TypeRef.PropertyDefaults.ArgumentIndex - case "CODE" => TypeRef.PropertyDefaults.Code - case "ORDER" => TypeRef.PropertyDefaults.Order - case "TYPE_FULL_NAME" => TypeRef.PropertyDefaults.TypeFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def argumentOut: Iterator[TemplateDom] = get().argumentOut - override def _argumentOut = get()._argumentOut - - def captureOut: Iterator[ClosureBinding] = get().captureOut - override def _captureOut = get()._captureOut - - /** Traverse to CLOSURE_BINDING via CAPTURE OUT edge. - */ - def _closureBindingViaCaptureOut: overflowdb.traversal.Traversal[ClosureBinding] = get()._closureBindingViaCaptureOut - - def cdgOut: Iterator[CfgNode] = get().cdgOut - override def _cdgOut = get()._cdgOut - - /** Traverse to BLOCK via CDG OUT edge. - */ - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgOut - - /** Traverse to CALL via CDG OUT edge. - */ - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = get()._callViaCdgOut - - /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. - */ - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgOut - - /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. - */ - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgOut - - /** Traverse to IDENTIFIER via CDG OUT edge. - */ - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgOut - - /** Traverse to JUMP_TARGET via CDG OUT edge. - */ - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgOut - - /** Traverse to LITERAL via CDG OUT edge. - */ - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgOut - - /** Traverse to METHOD_REF via CDG OUT edge. - */ - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgOut - - /** Traverse to METHOD_RETURN via CDG OUT edge. - */ - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaCdgOut - - /** Traverse to RETURN via CDG OUT edge. - */ - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = get()._returnViaCdgOut - - /** Traverse to TYPE_REF via CDG OUT edge. - */ - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgOut - - /** Traverse to UNKNOWN via CDG OUT edge. - */ - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgOut - - def cfgOut: Iterator[AstNode] = get().cfgOut - override def _cfgOut = get()._cfgOut - - /** Traverse to CFG_NODE via CFG OUT edge. - */ - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = get()._cfgNodeViaCfgOut - - /** Traverse to METHOD_RETURN via CFG OUT edge. - */ - def _methodReturnViaCfgOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaCfgOut - - def dominateOut: Iterator[CfgNode] = get().dominateOut - override def _dominateOut = get()._dominateOut - - /** Traverse to BLOCK via DOMINATE OUT edge. - */ - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateOut - - /** Traverse to CALL via DOMINATE OUT edge. - */ - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaDominateOut - - /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. - */ - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateOut - - /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. - */ - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateOut - - /** Traverse to IDENTIFIER via DOMINATE OUT edge. - */ - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateOut - - /** Traverse to JUMP_TARGET via DOMINATE OUT edge. - */ - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateOut - - /** Traverse to LITERAL via DOMINATE OUT edge. - */ - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateOut - - /** Traverse to METHOD_REF via DOMINATE OUT edge. - */ - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateOut - - /** Traverse to METHOD_RETURN via DOMINATE OUT edge. - */ - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaDominateOut - - /** Traverse to RETURN via DOMINATE OUT edge. - */ - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateOut - - /** Traverse to TYPE_REF via DOMINATE OUT edge. - */ - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateOut - - /** Traverse to UNKNOWN via DOMINATE OUT edge. - */ - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateOut - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** Traverse to TYPE via EVAL_TYPE OUT edge. - */ - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = get()._typeViaEvalTypeOut - - def postDominateOut: Iterator[CfgNode] = get().postDominateOut - override def _postDominateOut = get()._postDominateOut - - /** Traverse to BLOCK via POST_DOMINATE OUT edge. - */ - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateOut - - /** Traverse to CALL via POST_DOMINATE OUT edge. - */ - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateOut - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. - */ - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateOut - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateOut - - /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateOut - - /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. - */ - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateOut - - /** Traverse to LITERAL via POST_DOMINATE OUT edge. - */ - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateOut - - /** Traverse to METHOD via POST_DOMINATE OUT edge. - */ - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = get()._methodViaPostDominateOut - - /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. - */ - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateOut - - /** Traverse to RETURN via POST_DOMINATE OUT edge. - */ - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateOut - - /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. - */ - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateOut - - /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. - */ - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateOut - - def reachingDefOut: Iterator[CfgNode] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to CALL via REACHING_DEF OUT edge. - */ - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefOut - - /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. - */ - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefOut - - /** Traverse to LITERAL via REACHING_DEF OUT edge. - */ - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefOut - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. - */ - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefOut - - /** Traverse to METHOD_REF via REACHING_DEF OUT edge. - */ - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefOut - - /** Traverse to RETURN via REACHING_DEF OUT edge. - */ - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefOut - - /** Traverse to TYPE_REF via REACHING_DEF OUT edge. - */ - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def argumentIn: Iterator[Expression] = get().argumentIn - override def _argumentIn = get()._argumentIn - - /** Traverse to CALL via ARGUMENT IN edge. - */ - def _callViaArgumentIn: overflowdb.traversal.Traversal[Call] = get()._callViaArgumentIn - - /** Traverse to RETURN via ARGUMENT IN edge. - */ - def _returnViaArgumentIn: overflowdb.traversal.Traversal[Return] = get()._returnViaArgumentIn - - def astIn: Iterator[Expression] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to BLOCK via AST IN edge. - */ - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = get()._blockViaAstIn - - /** Traverse to CALL via AST IN edge. - */ - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = get()._callViaAstIn - - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaAstIn - - /** Traverse to RETURN via AST IN edge. - */ - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = get()._returnViaAstIn - - def cdgIn: Iterator[CfgNode] = get().cdgIn - override def _cdgIn = get()._cdgIn - - /** Traverse to BLOCK via CDG IN edge. - */ - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgIn - - /** Traverse to CALL via CDG IN edge. - */ - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = get()._callViaCdgIn - - /** Traverse to CONTROL_STRUCTURE via CDG IN edge. - */ - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgIn - - /** Traverse to FIELD_IDENTIFIER via CDG IN edge. - */ - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgIn - - /** Traverse to IDENTIFIER via CDG IN edge. - */ - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgIn - - /** Traverse to JUMP_TARGET via CDG IN edge. - */ - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgIn - - /** Traverse to LITERAL via CDG IN edge. - */ - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgIn - - /** Traverse to METHOD_REF via CDG IN edge. - */ - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgIn - - /** Traverse to TYPE_REF via CDG IN edge. - */ - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgIn - - /** Traverse to UNKNOWN via CDG IN edge. - */ - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def conditionIn: Iterator[ControlStructure] = get().conditionIn - override def _conditionIn = get()._conditionIn - - /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. - */ - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaConditionIn - - def containsIn: Iterator[Method] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to METHOD via CONTAINS IN edge. - */ - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsIn - - def dominateIn: Iterator[CfgNode] = get().dominateIn - override def _dominateIn = get()._dominateIn - - /** Traverse to BLOCK via DOMINATE IN edge. - */ - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateIn - - /** Traverse to CALL via DOMINATE IN edge. - */ - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaDominateIn - - /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. - */ - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateIn - - /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. - */ - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateIn - - /** Traverse to IDENTIFIER via DOMINATE IN edge. - */ - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateIn - - /** Traverse to JUMP_TARGET via DOMINATE IN edge. - */ - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateIn - - /** Traverse to LITERAL via DOMINATE IN edge. - */ - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateIn - - /** Traverse to METHOD via DOMINATE IN edge. - */ - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = get()._methodViaDominateIn - - /** Traverse to METHOD_REF via DOMINATE IN edge. - */ - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateIn - - /** Traverse to RETURN via DOMINATE IN edge. - */ - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateIn - - /** Traverse to TYPE_REF via DOMINATE IN edge. - */ - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateIn - - /** Traverse to UNKNOWN via DOMINATE IN edge. - */ - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateIn - - def postDominateIn: Iterator[CfgNode] = get().postDominateIn - override def _postDominateIn = get()._postDominateIn - - /** Traverse to BLOCK via POST_DOMINATE IN edge. - */ - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateIn - - /** Traverse to CALL via POST_DOMINATE IN edge. - */ - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateIn - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. - */ - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateIn - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. - */ - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateIn - - /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. - */ - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateIn - - /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. - */ - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateIn - - /** Traverse to LITERAL via POST_DOMINATE IN edge. - */ - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateIn - - /** Traverse to METHOD_REF via POST_DOMINATE IN edge. - */ - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateIn - - /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. - */ - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaPostDominateIn - - /** Traverse to RETURN via POST_DOMINATE IN edge. - */ - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateIn - - /** Traverse to TYPE_REF via POST_DOMINATE IN edge. - */ - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateIn - - /** Traverse to UNKNOWN via POST_DOMINATE IN edge. - */ - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateIn - - def reachingDefIn: Iterator[CfgNode] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - /** Traverse to BLOCK via REACHING_DEF IN edge. - */ - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = get()._blockViaReachingDefIn - - /** Traverse to CALL via REACHING_DEF IN edge. - */ - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefIn - - /** Traverse to CONTROL_STRUCTURE via REACHING_DEF IN edge. - */ - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaReachingDefIn - - /** Traverse to IDENTIFIER via REACHING_DEF IN edge. - */ - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefIn - - /** Traverse to LITERAL via REACHING_DEF IN edge. - */ - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefIn - - /** Traverse to METHOD via REACHING_DEF IN edge. - */ - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = get()._methodViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_IN via REACHING_DEF IN edge. - */ - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - get()._methodParameterInViaReachingDefIn - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF IN edge. - */ - def _methodParameterOutViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefIn - - /** Traverse to METHOD_REF via REACHING_DEF IN edge. - */ - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefIn - - /** Traverse to RETURN via REACHING_DEF IN edge. - */ - def _returnViaReachingDefIn: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefIn - - /** Traverse to TYPE_REF via REACHING_DEF IN edge. - */ - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefIn - - /** Traverse to UNKNOWN via REACHING_DEF IN edge. - */ - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaReachingDefIn - - def receiverIn: Iterator[Call] = get().receiverIn - override def _receiverIn = get()._receiverIn - - /** Traverse to CALL via RECEIVER IN edge. - */ - def _callViaReceiverIn: overflowdb.traversal.Traversal[Call] = get()._callViaReceiverIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - TypeRef.Label - } + with Expression + with StaticType[TypeRefEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "lineNumber" - case 7 => "order" - case 8 => "possibleTypes" - case 9 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dynamicTypeHintFullName" + case 5 => "lineNumber" + case 6 => "order" + case 7 => "possibleTypes" + case 8 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => dynamicTypeHintFullName - case 6 => lineNumber - case 7 => order - case 8 => possibleTypes - case 9 => typeFullName + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dynamicTypeHintFullName + case 5 => this.lineNumber + case 6 => this.order + case 7 => this.possibleTypes + case 8 => this.typeFullName + case _ => null } override def productPrefix = "TypeRef" - override def productArity = 10 -} + override def productArity = 9 -class TypeRefDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with Expression with TypeRefBase { - - override def layoutInformation: NodeLayoutInformation = TypeRef.layoutInformation + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TypeRef] +} - private var _argumentIndex: Integer = TypeRef.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = TypeRef.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def dynamicTypeHintFullName: IndexedSeq[String] = _dynamicTypeHintFullName - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = TypeRef.PropertyDefaults.Order - def order: scala.Int = _order - private var _possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def possibleTypes: IndexedSeq[String] = _possibleTypes - private var _typeFullName: String = TypeRef.PropertyDefaults.TypeFullName - def typeFullName: String = _typeFullName +object NewTypeRef { + def apply(): NewTypeRef = new NewTypeRef + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object InsertionHelpers { + object NewNodeInserter_TypeRef_argumentIndex 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[Int]] + 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: NewTypeRef => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - properties.put("TYPE_FULL_NAME", typeFullName) - - properties - } - - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object NewNodeInserter_TypeRef_argumentName 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: NewTypeRef => + generated.argumentName 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_TypeRef_code 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: NewTypeRef => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeRef_columnNumber 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[Int]] + 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: NewTypeRef => + generated.columnNumber 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_TypeRef_dynamicTypeHintFullName 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: NewTypeRef => + for (item <- generated.dynamicTypeHintFullName) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeRef_lineNumber 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[Int]] + 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: NewTypeRef => + generated.lineNumber 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_TypeRef_order 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[Int]] + 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: NewTypeRef => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeRef_possibleTypes 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: NewTypeRef => + for (item <- generated.possibleTypes) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_TypeRef_typeFullName 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: NewTypeRef => + dstCast(offset) = generated.typeFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - if (!(("") == typeFullName)) { properties.put("TYPE_FULL_NAME", typeFullName) } - - properties } +} - import overflowdb.traversal._ - def argumentOut: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - - def captureOut: Iterator[ClosureBinding] = createAdjacentNodeScalaIteratorByOffSet[ClosureBinding](1) - override def _captureOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _closureBindingViaCaptureOut: overflowdb.traversal.Traversal[ClosureBinding] = - captureOut.collectAll[ClosureBinding] - - def cdgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](2) - override def _cdgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = cdgOut.collectAll[Block] - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = cdgOut.collectAll[Call] - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = cdgOut.collectAll[ControlStructure] - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = cdgOut.collectAll[FieldIdentifier] - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = cdgOut.collectAll[Identifier] - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = cdgOut.collectAll[JumpTarget] - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = cdgOut.collectAll[Literal] - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = cdgOut.collectAll[MethodRef] - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = cdgOut.collectAll[MethodReturn] - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = cdgOut.collectAll[Return] - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = cdgOut.collectAll[TypeRef] - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = cdgOut.collectAll[Unknown] - - def cfgOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](3) - override def _cfgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = cfgOut.collectAll[CfgNode] - def _methodReturnViaCfgOut: overflowdb.traversal.Traversal[MethodReturn] = cfgOut.collectAll[MethodReturn] - - def dominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _dominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = dominateOut.collectAll[Block] - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = dominateOut.collectAll[Call] - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - dominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateOut.collectAll[FieldIdentifier] - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = dominateOut.collectAll[Identifier] - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = dominateOut.collectAll[JumpTarget] - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = dominateOut.collectAll[Literal] - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = dominateOut.collectAll[MethodRef] - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = dominateOut.collectAll[MethodReturn] - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = dominateOut.collectAll[Return] - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = dominateOut.collectAll[TypeRef] - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = dominateOut.collectAll[Unknown] - - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](5) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def postDominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](6) - override def _postDominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = postDominateOut.collectAll[Block] - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = postDominateOut.collectAll[Call] - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - postDominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateOut.collectAll[FieldIdentifier] - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = postDominateOut.collectAll[Identifier] - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = postDominateOut.collectAll[JumpTarget] - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = postDominateOut.collectAll[Literal] - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = postDominateOut.collectAll[Method] - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = postDominateOut.collectAll[MethodRef] - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = postDominateOut.collectAll[Return] - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = postDominateOut.collectAll[TypeRef] - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = postDominateOut.collectAll[Unknown] - - def reachingDefOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](7) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = reachingDefOut.collectAll[Call] - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = reachingDefOut.collectAll[Identifier] - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = reachingDefOut.collectAll[Literal] - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefOut.collectAll[MethodParameterOut] - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = reachingDefOut.collectAll[MethodRef] - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = reachingDefOut.collectAll[Return] - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = reachingDefOut.collectAll[TypeRef] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](8) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def argumentIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](9) - override def _argumentIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - def _callViaArgumentIn: overflowdb.traversal.Traversal[Call] = argumentIn.collectAll[Call] - def _returnViaArgumentIn: overflowdb.traversal.Traversal[Return] = argumentIn.collectAll[Return] - - def astIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](10) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](10) - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = astIn.collectAll[Block] - def _callViaAstIn: overflowdb.traversal.Traversal[Call] = astIn.collectAll[Call] - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = astIn.collectAll[ControlStructure] - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = astIn.collectAll[Return] - - def cdgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](11) - override def _cdgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](11) - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = cdgIn.collectAll[Block] - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = cdgIn.collectAll[Call] - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = cdgIn.collectAll[ControlStructure] - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = cdgIn.collectAll[FieldIdentifier] - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = cdgIn.collectAll[Identifier] - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = cdgIn.collectAll[JumpTarget] - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = cdgIn.collectAll[Literal] - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = cdgIn.collectAll[MethodRef] - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = cdgIn.collectAll[TypeRef] - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = cdgIn.collectAll[Unknown] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](12) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - - def conditionIn: Iterator[ControlStructure] = createAdjacentNodeScalaIteratorByOffSet[ControlStructure](13) - override def _conditionIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](13) - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - conditionIn.collectAll[ControlStructure] - - def containsIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](14) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](14) - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = containsIn.collectAll[Method] - - def dominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](15) - override def _dominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](15) - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = dominateIn.collectAll[Block] - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = dominateIn.collectAll[Call] - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - dominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateIn.collectAll[FieldIdentifier] - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = dominateIn.collectAll[Identifier] - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = dominateIn.collectAll[JumpTarget] - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = dominateIn.collectAll[Literal] - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = dominateIn.collectAll[Method] - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = dominateIn.collectAll[MethodRef] - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = dominateIn.collectAll[Return] - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = dominateIn.collectAll[TypeRef] - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = dominateIn.collectAll[Unknown] - - def postDominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](16) - override def _postDominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](16) - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = postDominateIn.collectAll[Block] - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = postDominateIn.collectAll[Call] - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - postDominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateIn.collectAll[FieldIdentifier] - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = postDominateIn.collectAll[Identifier] - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = postDominateIn.collectAll[JumpTarget] - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = postDominateIn.collectAll[Literal] - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = postDominateIn.collectAll[MethodRef] - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - postDominateIn.collectAll[MethodReturn] - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = postDominateIn.collectAll[Return] - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = postDominateIn.collectAll[TypeRef] - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = postDominateIn.collectAll[Unknown] +class NewTypeRef extends NewNode(42.toShort) with TypeRefBase with ExpressionNew { + override type StoredNodeType = TypeRef + override def label: String = "TYPE_REF" - def reachingDefIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](17) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](17) - def _blockViaReachingDefIn: overflowdb.traversal.Traversal[Block] = reachingDefIn.collectAll[Block] - def _callViaReachingDefIn: overflowdb.traversal.Traversal[Call] = reachingDefIn.collectAll[Call] - def _controlStructureViaReachingDefIn: overflowdb.traversal.Traversal[ControlStructure] = - reachingDefIn.collectAll[ControlStructure] - def _identifierViaReachingDefIn: overflowdb.traversal.Traversal[Identifier] = reachingDefIn.collectAll[Identifier] - def _literalViaReachingDefIn: overflowdb.traversal.Traversal[Literal] = reachingDefIn.collectAll[Literal] - def _methodViaReachingDefIn: overflowdb.traversal.Traversal[Method] = reachingDefIn.collectAll[Method] - def _methodParameterInViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterIn] = - reachingDefIn.collectAll[MethodParameterIn] - def _methodParameterOutViaReachingDefIn: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefIn.collectAll[MethodParameterOut] - def _methodRefViaReachingDefIn: overflowdb.traversal.Traversal[MethodRef] = reachingDefIn.collectAll[MethodRef] - def _returnViaReachingDefIn: overflowdb.traversal.Traversal[Return] = reachingDefIn.collectAll[Return] - def _typeRefViaReachingDefIn: overflowdb.traversal.Traversal[TypeRef] = reachingDefIn.collectAll[TypeRef] - def _unknownViaReachingDefIn: overflowdb.traversal.Traversal[Unknown] = reachingDefIn.collectAll[Unknown] + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTypeRef.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewTypeRef.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } - def receiverIn: Iterator[Call] = createAdjacentNodeScalaIteratorByOffSet[Call](18) - override def _receiverIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](18) - def _callViaReceiverIn: overflowdb.traversal.Traversal[Call] = receiverIn.collectAll[Call] + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var dynamicTypeHintFullName: IndexedSeq[String] = ArraySeq.empty + var lineNumber: Option[Int] = None + var order: Int = -1: Int + var possibleTypes: IndexedSeq[String] = ArraySeq.empty + 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 } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { + this.dynamicTypeHintFullName = value.iterator.to(ArraySeq); this + } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + 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 typeFullName(value: String): this.type = { this.typeFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 18, dynamicTypeHintFullName.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 47, possibleTypes.size) + interface.countProperty(this, 52, 1) + } - override def label: String = { - TypeRef.Label + override def copy: this.type = { + val newInstance = new NewTypeRef + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.possibleTypes = this.possibleTypes + newInstance.typeFullName = this.typeFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "dynamicTypeHintFullName" - case 6 => "lineNumber" - case 7 => "order" - case 8 => "possibleTypes" - case 9 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "dynamicTypeHintFullName" + case 5 => "lineNumber" + case 6 => "order" + case 7 => "possibleTypes" + case 8 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => dynamicTypeHintFullName - case 6 => lineNumber - case 7 => order - case 8 => possibleTypes - case 9 => typeFullName - } - - override def productPrefix = "TypeRef" - override def productArity = 10 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[TypeRefDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "DYNAMIC_TYPE_HINT_FULL_NAME" => this._dynamicTypeHintFullName - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - case "POSSIBLE_TYPES" => this._possibleTypes - case "TYPE_FULL_NAME" => this._typeFullName - + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.dynamicTypeHintFullName + case 5 => this.lineNumber + case 6 => this.order + case 7 => this.possibleTypes + case 8 => this.typeFullName case _ => null } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "DYNAMIC_TYPE_HINT_FULL_NAME" => - this._dynamicTypeHintFullName = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "POSSIBLE_TYPES" => - this._possibleTypes = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "TYPE_FULL_NAME" => this._typeFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewTypeRef].argumentIndex - this._argumentName = newNode.asInstanceOf[NewTypeRef].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewTypeRef].code - this._columnNumber = newNode.asInstanceOf[NewTypeRef].columnNumber match { - case None => null; case Some(value) => value - } - this._dynamicTypeHintFullName = - if (newNode.asInstanceOf[NewTypeRef].dynamicTypeHintFullName != null) - newNode.asInstanceOf[NewTypeRef].dynamicTypeHintFullName - else collection.immutable.ArraySeq.empty - this._lineNumber = newNode.asInstanceOf[NewTypeRef].lineNumber match { - case None => null; case Some(value) => value - } - this._order = newNode.asInstanceOf[NewTypeRef].order - this._possibleTypes = - if (newNode.asInstanceOf[NewTypeRef].possibleTypes != null) newNode.asInstanceOf[NewTypeRef].possibleTypes - else collection.immutable.ArraySeq.empty - this._typeFullName = newNode.asInstanceOf[NewTypeRef].typeFullName - - } + override def productPrefix = "NewTypeRef" + override def productArity = 9 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewTypeRef] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Unknown.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Unknown.scala index ff61ce2ec..7640c633f 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Unknown.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/Unknown.scala @@ -1,56 +1,153 @@ package io.shiftleft.codepropertygraph.generated.nodes -import overflowdb._ -import scala.jdk.CollectionConverters._ +import io.shiftleft.codepropertygraph.generated.language.* +import scala.collection.immutable.{IndexedSeq, ArraySeq} +import scala.collection.mutable + +/** Node base type for compiletime-only checks to improve type safety. EMT stands for: "erased marker trait", i.e. it is + * erased at runtime + */ +trait UnknownEMT + extends AnyRef + with ExpressionEMT + with HasContainedRefEMT + with HasDynamicTypeHintFullNameEMT + with HasParserTypeNameEMT + with HasPossibleTypesEMT + with HasTypeFullNameEMT + +trait UnknownBase extends AbstractNode with ExpressionBase with StaticType[UnknownEMT] { -object Unknown { - def apply(graph: Graph, id: Long) = new Unknown(graph, id) + override def propertiesMap: java.util.Map[String, Any] = { + import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + val res = new java.util.HashMap[String, Any]() + if ((-1: Int) != this.argumentIndex) res.put("ARGUMENT_INDEX", this.argumentIndex) + this.argumentName.foreach { p => res.put("ARGUMENT_NAME", p) } + if (("": String) != this.code) res.put("CODE", this.code) + this.columnNumber.foreach { p => res.put("COLUMN_NUMBER", p) } + if (("": String) != this.containedRef) res.put("CONTAINED_REF", this.containedRef) + val tmpDynamicTypeHintFullName = this.dynamicTypeHintFullName; + if (tmpDynamicTypeHintFullName.nonEmpty) res.put("DYNAMIC_TYPE_HINT_FULL_NAME", tmpDynamicTypeHintFullName) + this.lineNumber.foreach { p => res.put("LINE_NUMBER", p) } + if ((-1: Int) != this.order) res.put("ORDER", this.order) + if (("": String) != this.parserTypeName) res.put("PARSER_TYPE_NAME", this.parserTypeName) + val tmpPossibleTypes = this.possibleTypes; + if (tmpPossibleTypes.nonEmpty) res.put("POSSIBLE_TYPES", tmpPossibleTypes) + if (("": String) != this.typeFullName) res.put("TYPE_FULL_NAME", this.typeFullName) + res + } +} +object Unknown { val Label = "UNKNOWN" - object PropertyNames { - val ArgumentIndex = "ARGUMENT_INDEX" - val ArgumentName = "ARGUMENT_NAME" - val Code = "CODE" - val ColumnNumber = "COLUMN_NUMBER" - val ContainedRef = "CONTAINED_REF" + + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = "ARGUMENT_INDEX" + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = "ARGUMENT_NAME" + + /** This field holds the code snippet that the node represents. */ + val Code = "CODE" + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = "COLUMN_NUMBER" + + /** References to other nodes. This is not a real property; it exists here for the sake of proto serialization only. + * valueType and cardinality are meaningless. + */ + val ContainedRef = "CONTAINED_REF" + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ val DynamicTypeHintFullName = "DYNAMIC_TYPE_HINT_FULL_NAME" - val LineNumber = "LINE_NUMBER" - val Order = "ORDER" - val ParserTypeName = "PARSER_TYPE_NAME" - val PossibleTypes = "POSSIBLE_TYPES" - val TypeFullName = "TYPE_FULL_NAME" - val all: Set[String] = Set( - ArgumentIndex, - ArgumentName, - Code, - ColumnNumber, - ContainedRef, - DynamicTypeHintFullName, - LineNumber, - Order, - ParserTypeName, - PossibleTypes, - TypeFullName - ) - val allAsJava: java.util.Set[String] = all.asJava - } - object Properties { - val ArgumentIndex = new overflowdb.PropertyKey[scala.Int]("ARGUMENT_INDEX") - val ArgumentName = new overflowdb.PropertyKey[String]("ARGUMENT_NAME") - val Code = new overflowdb.PropertyKey[String]("CODE") - val ColumnNumber = new overflowdb.PropertyKey[scala.Int]("COLUMN_NUMBER") - val ContainedRef = new overflowdb.PropertyKey[String]("CONTAINED_REF") - val DynamicTypeHintFullName = new overflowdb.PropertyKey[IndexedSeq[String]]("DYNAMIC_TYPE_HINT_FULL_NAME") - val LineNumber = new overflowdb.PropertyKey[scala.Int]("LINE_NUMBER") - val Order = new overflowdb.PropertyKey[scala.Int]("ORDER") - val ParserTypeName = new overflowdb.PropertyKey[String]("PARSER_TYPE_NAME") - val PossibleTypes = new overflowdb.PropertyKey[IndexedSeq[String]]("POSSIBLE_TYPES") - val TypeFullName = new overflowdb.PropertyKey[String]("TYPE_FULL_NAME") + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = "LINE_NUMBER" + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = "ORDER" + + /** AST node type name emitted by parser. */ + val ParserTypeName = "PARSER_TYPE_NAME" + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = "POSSIBLE_TYPES" + + /** 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 = "TYPE_FULL_NAME" } + object Properties { + /** AST-children of CALL nodes have an argument index, that is used to match call-site arguments with callee + * parameters. Explicit parameters are numbered from 1 to N, while index 0 is reserved for implicit self / this + * parameter. CALLs without implicit parameter therefore have arguments starting with index 1. AST-children of + * BLOCK nodes may have an argument index as well; in this case, the last argument index determines the return + * expression of a BLOCK expression. If the `PARAMETER_NAME` field is set, then the `ARGUMENT_INDEX` field is + * ignored. It is suggested to set it to -1. + */ + val ArgumentIndex = flatgraph.SinglePropertyKey[Int](kind = 1, name = "ARGUMENT_INDEX", default = -1: Int) + + /** For calls involving named parameters, the `ARGUMENT_NAME` field holds the name of the parameter initialized by + * the expression. For all other calls, this field is unset. + */ + val ArgumentName = flatgraph.OptionalPropertyKey[String](kind = 2, name = "ARGUMENT_NAME") + + /** This field holds the code snippet that the node represents. */ + val Code = flatgraph.SinglePropertyKey[String](kind = 10, name = "CODE", default = "") + + /** This optional fields provides the column number of the program construct represented by the node. + */ + val ColumnNumber = flatgraph.OptionalPropertyKey[Int](kind = 11, name = "COLUMN_NUMBER") + + /** References to other nodes. This is not a real property; it exists here for the sake of proto serialization only. + * valueType and cardinality are meaningless. + */ + val ContainedRef = flatgraph.SinglePropertyKey[String](kind = 13, name = "CONTAINED_REF", default = "") + + /** Type hint for the dynamic type. These are observed to be verifiable at runtime. */ + val DynamicTypeHintFullName = flatgraph.MultiPropertyKey[String](kind = 18, name = "DYNAMIC_TYPE_HINT_FULL_NAME") + + /** This optional field provides the line number of the program construct represented by the node. + */ + val LineNumber = flatgraph.OptionalPropertyKey[Int](kind = 34, name = "LINE_NUMBER") + + /** This integer indicates the position of the node among its siblings in the AST. The left-most child has an order + * of 0. + */ + val Order = flatgraph.SinglePropertyKey[Int](kind = 43, name = "ORDER", default = -1: Int) + + /** AST node type name emitted by parser. */ + val ParserTypeName = flatgraph.SinglePropertyKey[String](kind = 46, name = "PARSER_TYPE_NAME", default = "") + + /** Similar to `DYNAMIC_TYPE_HINT_FULL_NAME`, but that this makes no guarantee that types within this property are + * correct. This property is used to capture observations between node interactions during a 'may-analysis'. + */ + val PossibleTypes = flatgraph.MultiPropertyKey[String](kind = 47, name = "POSSIBLE_TYPES") + + /** 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 = 52, name = "TYPE_FULL_NAME", default = "") + } object PropertyDefaults { val ArgumentIndex = -1: Int val Code = "" @@ -59,1023 +156,1684 @@ object Unknown { val ParserTypeName = "" val TypeFullName = "" } - - val layoutInformation = new NodeLayoutInformation( - Label, - PropertyNames.allAsJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.EvalType.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.TaggedBy.layoutInformation - ).asJava, - List( - io.shiftleft.codepropertygraph.generated.edges.Argument.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Ast.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cdg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Cfg.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Condition.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Contains.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Dominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.PostDominate.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.ReachingDef.layoutInformation, - io.shiftleft.codepropertygraph.generated.edges.Receiver.layoutInformation - ).asJava - ) - - object Edges { - val Out: Array[String] = - Array("ARGUMENT", "AST", "CDG", "CFG", "DOMINATE", "EVAL_TYPE", "POST_DOMINATE", "REACHING_DEF", "TAGGED_BY") - val In: Array[String] = Array( - "ARGUMENT", - "AST", - "CDG", - "CFG", - "CONDITION", - "CONTAINS", - "DOMINATE", - "POST_DOMINATE", - "REACHING_DEF", - "RECEIVER" - ) - } - - val factory = new NodeFactory[UnknownDb] { - override val forLabel = Unknown.Label - - override def createNode(ref: NodeRef[UnknownDb]) = - new UnknownDb(ref.asInstanceOf[NodeRef[NodeDb]]) - - override def createNodeRef(graph: Graph, id: Long) = Unknown(graph, id) - } } -trait UnknownBase extends AbstractNode with ExpressionBase { - def asStored: StoredNode = this.asInstanceOf[StoredNode] - - def argumentIndex: scala.Int - def argumentName: Option[String] - def code: String - def columnNumber: Option[scala.Int] - def containedRef: String - def dynamicTypeHintFullName: IndexedSeq[String] - def lineNumber: Option[scala.Int] - def order: scala.Int - def parserTypeName: String - def possibleTypes: IndexedSeq[String] - def typeFullName: String - -} - -class Unknown(graph_4762: Graph, id_4762: Long /*cf https://github.com/scala/bug/issues/4762 */ ) - extends NodeRef[UnknownDb](graph_4762, id_4762) +class Unknown(graph_4762: flatgraph.Graph, seq_4762: Int) + extends StoredNode(graph_4762, 43.toShort, seq_4762) with UnknownBase - with StoredNode - with Expression { - override def argumentIndex: scala.Int = get().argumentIndex - override def argumentName: Option[String] = get().argumentName - override def code: String = get().code - override def columnNumber: Option[scala.Int] = get().columnNumber - override def containedRef: String = get().containedRef - override def dynamicTypeHintFullName: IndexedSeq[String] = get().dynamicTypeHintFullName - override def lineNumber: Option[scala.Int] = get().lineNumber - override def order: scala.Int = get().order - override def parserTypeName: String = get().parserTypeName - override def possibleTypes: IndexedSeq[String] = get().possibleTypes - override def typeFullName: String = get().typeFullName - override def propertyDefaultValue(propertyKey: String) = { - propertyKey match { - case "ARGUMENT_INDEX" => Unknown.PropertyDefaults.ArgumentIndex - case "CODE" => Unknown.PropertyDefaults.Code - case "CONTAINED_REF" => Unknown.PropertyDefaults.ContainedRef - case "ORDER" => Unknown.PropertyDefaults.Order - case "PARSER_TYPE_NAME" => Unknown.PropertyDefaults.ParserTypeName - case "TYPE_FULL_NAME" => Unknown.PropertyDefaults.TypeFullName - case _ => super.propertyDefaultValue(propertyKey) - } - } - - def argumentOut: Iterator[TemplateDom] = get().argumentOut - override def _argumentOut = get()._argumentOut - - def astOut: Iterator[AstNode] = get().astOut - override def _astOut = get()._astOut - - /** Traverse to ANNOTATION via AST OUT edge. - */ - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = get()._annotationViaAstOut - - /** Traverse to BLOCK via AST OUT edge. - */ - def _blockViaAstOut: overflowdb.traversal.Traversal[Block] = get()._blockViaAstOut - - /** Traverse to CALL via AST OUT edge. - */ - def _callViaAstOut: overflowdb.traversal.Traversal[Call] = get()._callViaAstOut - - /** Traverse to CONTROL_STRUCTURE via AST OUT edge. - */ - def _controlStructureViaAstOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaAstOut - - /** Traverse to FIELD_IDENTIFIER via AST OUT edge. - */ - def _fieldIdentifierViaAstOut: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaAstOut - - /** Traverse to IDENTIFIER via AST OUT edge. - */ - def _identifierViaAstOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaAstOut - - /** Traverse to JUMP_TARGET via AST OUT edge. - */ - def _jumpTargetViaAstOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaAstOut - - /** Traverse to LITERAL via AST OUT edge. - */ - def _literalViaAstOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaAstOut - - /** Traverse to LOCAL via AST OUT edge. - */ - def _localViaAstOut: overflowdb.traversal.Traversal[Local] = get()._localViaAstOut - - /** Traverse to MEMBER via AST OUT edge. - */ - def _memberViaAstOut: overflowdb.traversal.Traversal[Member] = get()._memberViaAstOut - - /** Traverse to MODIFIER via AST OUT edge. - */ - def _modifierViaAstOut: overflowdb.traversal.Traversal[Modifier] = get()._modifierViaAstOut - - /** Traverse to RETURN via AST OUT edge. - */ - def _returnViaAstOut: overflowdb.traversal.Traversal[Return] = get()._returnViaAstOut - - /** Traverse to UNKNOWN via AST OUT edge. - */ - def _unknownViaAstOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstOut - - def cdgOut: Iterator[CfgNode] = get().cdgOut - override def _cdgOut = get()._cdgOut - - /** Traverse to BLOCK via CDG OUT edge. - */ - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgOut - - /** Traverse to CALL via CDG OUT edge. - */ - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = get()._callViaCdgOut - - /** Traverse to CONTROL_STRUCTURE via CDG OUT edge. - */ - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgOut - - /** Traverse to FIELD_IDENTIFIER via CDG OUT edge. - */ - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgOut - - /** Traverse to IDENTIFIER via CDG OUT edge. - */ - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgOut - - /** Traverse to JUMP_TARGET via CDG OUT edge. - */ - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgOut - - /** Traverse to LITERAL via CDG OUT edge. - */ - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgOut - - /** Traverse to METHOD_REF via CDG OUT edge. - */ - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgOut - - /** Traverse to METHOD_RETURN via CDG OUT edge. - */ - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaCdgOut - - /** Traverse to RETURN via CDG OUT edge. - */ - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = get()._returnViaCdgOut - - /** Traverse to TYPE_REF via CDG OUT edge. - */ - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgOut - - /** Traverse to UNKNOWN via CDG OUT edge. - */ - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgOut - - def cfgOut: Iterator[CfgNode] = get().cfgOut - override def _cfgOut = get()._cfgOut - - /** Traverse to CFG_NODE via CFG OUT edge. - */ - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = get()._cfgNodeViaCfgOut - - def dominateOut: Iterator[CfgNode] = get().dominateOut - override def _dominateOut = get()._dominateOut - - /** Traverse to BLOCK via DOMINATE OUT edge. - */ - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateOut - - /** Traverse to CALL via DOMINATE OUT edge. - */ - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaDominateOut - - /** Traverse to CONTROL_STRUCTURE via DOMINATE OUT edge. - */ - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateOut - - /** Traverse to FIELD_IDENTIFIER via DOMINATE OUT edge. - */ - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateOut - - /** Traverse to IDENTIFIER via DOMINATE OUT edge. - */ - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateOut - - /** Traverse to JUMP_TARGET via DOMINATE OUT edge. - */ - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateOut - - /** Traverse to LITERAL via DOMINATE OUT edge. - */ - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateOut - - /** Traverse to METHOD_REF via DOMINATE OUT edge. - */ - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateOut - - /** Traverse to METHOD_RETURN via DOMINATE OUT edge. - */ - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = get()._methodReturnViaDominateOut - - /** Traverse to RETURN via DOMINATE OUT edge. - */ - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateOut - - /** Traverse to TYPE_REF via DOMINATE OUT edge. - */ - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateOut - - /** Traverse to UNKNOWN via DOMINATE OUT edge. - */ - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateOut - - def evalTypeOut: Iterator[Type] = get().evalTypeOut - override def _evalTypeOut = get()._evalTypeOut - - /** Traverse to TYPE via EVAL_TYPE OUT edge. - */ - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = get()._typeViaEvalTypeOut - - def postDominateOut: Iterator[CfgNode] = get().postDominateOut - override def _postDominateOut = get()._postDominateOut - - /** Traverse to BLOCK via POST_DOMINATE OUT edge. - */ - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateOut - - /** Traverse to CALL via POST_DOMINATE OUT edge. - */ - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateOut - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE OUT edge. - */ - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateOut - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateOut - - /** Traverse to IDENTIFIER via POST_DOMINATE OUT edge. - */ - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateOut - - /** Traverse to JUMP_TARGET via POST_DOMINATE OUT edge. - */ - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateOut - - /** Traverse to LITERAL via POST_DOMINATE OUT edge. - */ - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateOut - - /** Traverse to METHOD via POST_DOMINATE OUT edge. - */ - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = get()._methodViaPostDominateOut - - /** Traverse to METHOD_REF via POST_DOMINATE OUT edge. - */ - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateOut - - /** Traverse to RETURN via POST_DOMINATE OUT edge. - */ - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateOut - - /** Traverse to TYPE_REF via POST_DOMINATE OUT edge. - */ - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateOut - - /** Traverse to UNKNOWN via POST_DOMINATE OUT edge. - */ - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateOut - - def reachingDefOut: Iterator[CfgNode] = get().reachingDefOut - override def _reachingDefOut = get()._reachingDefOut - - /** Traverse to CALL via REACHING_DEF OUT edge. - */ - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = get()._callViaReachingDefOut - - /** Traverse to IDENTIFIER via REACHING_DEF OUT edge. - */ - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaReachingDefOut - - /** Traverse to LITERAL via REACHING_DEF OUT edge. - */ - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = get()._literalViaReachingDefOut - - /** Traverse to METHOD_PARAMETER_OUT via REACHING_DEF OUT edge. - */ - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - get()._methodParameterOutViaReachingDefOut - - /** Traverse to METHOD_REF via REACHING_DEF OUT edge. - */ - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaReachingDefOut - - /** Traverse to RETURN via REACHING_DEF OUT edge. - */ - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = get()._returnViaReachingDefOut - - /** Traverse to TYPE_REF via REACHING_DEF OUT edge. - */ - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaReachingDefOut - - def taggedByOut: Iterator[Tag] = get().taggedByOut - override def _taggedByOut = get()._taggedByOut - - /** Traverse to TAG via TAGGED_BY OUT edge. - */ - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = get()._tagViaTaggedByOut - - def argumentIn: Iterator[Expression] = get().argumentIn - override def _argumentIn = get()._argumentIn - - /** Traverse to CALL via ARGUMENT IN edge. - */ - def _callViaArgumentIn: overflowdb.traversal.Traversal[Call] = get()._callViaArgumentIn - - /** Traverse to RETURN via ARGUMENT IN edge. - */ - def _returnViaArgumentIn: overflowdb.traversal.Traversal[Return] = get()._returnViaArgumentIn - - def astIn: Iterator[CfgNode] = get().astIn - override def _astIn = get()._astIn - - /** Traverse to BLOCK via AST IN edge. - */ - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = get()._blockViaAstIn - - /** Traverse to CONTROL_STRUCTURE via AST IN edge. - */ - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaAstIn - - /** Traverse to METHOD_PARAMETER_IN via AST IN edge. - */ - def _methodParameterInViaAstIn: overflowdb.traversal.Traversal[MethodParameterIn] = get()._methodParameterInViaAstIn - - /** Traverse to RETURN via AST IN edge. - */ - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = get()._returnViaAstIn - - /** Traverse to UNKNOWN via AST IN edge. - */ - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaAstIn - - def cdgIn: Iterator[CfgNode] = get().cdgIn - override def _cdgIn = get()._cdgIn - - /** Traverse to BLOCK via CDG IN edge. - */ - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = get()._blockViaCdgIn - - /** Traverse to CALL via CDG IN edge. - */ - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = get()._callViaCdgIn - - /** Traverse to CONTROL_STRUCTURE via CDG IN edge. - */ - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = get()._controlStructureViaCdgIn - - /** Traverse to FIELD_IDENTIFIER via CDG IN edge. - */ - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = get()._fieldIdentifierViaCdgIn - - /** Traverse to IDENTIFIER via CDG IN edge. - */ - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaCdgIn - - /** Traverse to JUMP_TARGET via CDG IN edge. - */ - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaCdgIn - - /** Traverse to LITERAL via CDG IN edge. - */ - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaCdgIn - - /** Traverse to METHOD_REF via CDG IN edge. - */ - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaCdgIn - - /** Traverse to TYPE_REF via CDG IN edge. - */ - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaCdgIn - - /** Traverse to UNKNOWN via CDG IN edge. - */ - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaCdgIn - - def cfgIn: Iterator[CfgNode] = get().cfgIn - override def _cfgIn = get()._cfgIn - - def conditionIn: Iterator[ControlStructure] = get().conditionIn - override def _conditionIn = get()._conditionIn - - /** Traverse to CONTROL_STRUCTURE via CONDITION IN edge. - */ - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaConditionIn - - def containsIn: Iterator[Method] = get().containsIn - override def _containsIn = get()._containsIn - - /** Traverse to METHOD via CONTAINS IN edge. - */ - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = get()._methodViaContainsIn - - def dominateIn: Iterator[CfgNode] = get().dominateIn - override def _dominateIn = get()._dominateIn - - /** Traverse to BLOCK via DOMINATE IN edge. - */ - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaDominateIn - - /** Traverse to CALL via DOMINATE IN edge. - */ - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaDominateIn - - /** Traverse to CONTROL_STRUCTURE via DOMINATE IN edge. - */ - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaDominateIn - - /** Traverse to FIELD_IDENTIFIER via DOMINATE IN edge. - */ - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaDominateIn - - /** Traverse to IDENTIFIER via DOMINATE IN edge. - */ - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaDominateIn - - /** Traverse to JUMP_TARGET via DOMINATE IN edge. - */ - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaDominateIn - - /** Traverse to LITERAL via DOMINATE IN edge. - */ - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaDominateIn - - /** Traverse to METHOD via DOMINATE IN edge. - */ - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = get()._methodViaDominateIn - - /** Traverse to METHOD_REF via DOMINATE IN edge. - */ - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaDominateIn - - /** Traverse to RETURN via DOMINATE IN edge. - */ - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaDominateIn - - /** Traverse to TYPE_REF via DOMINATE IN edge. - */ - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaDominateIn - - /** Traverse to UNKNOWN via DOMINATE IN edge. - */ - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaDominateIn - - def postDominateIn: Iterator[CfgNode] = get().postDominateIn - override def _postDominateIn = get()._postDominateIn - - /** Traverse to BLOCK via POST_DOMINATE IN edge. - */ - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = get()._blockViaPostDominateIn - - /** Traverse to CALL via POST_DOMINATE IN edge. - */ - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = get()._callViaPostDominateIn - - /** Traverse to CONTROL_STRUCTURE via POST_DOMINATE IN edge. - */ - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - get()._controlStructureViaPostDominateIn - - /** Traverse to FIELD_IDENTIFIER via POST_DOMINATE IN edge. - */ - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - get()._fieldIdentifierViaPostDominateIn - - /** Traverse to IDENTIFIER via POST_DOMINATE IN edge. - */ - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = get()._identifierViaPostDominateIn - - /** Traverse to JUMP_TARGET via POST_DOMINATE IN edge. - */ - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = get()._jumpTargetViaPostDominateIn - - /** Traverse to LITERAL via POST_DOMINATE IN edge. - */ - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = get()._literalViaPostDominateIn - - /** Traverse to METHOD_REF via POST_DOMINATE IN edge. - */ - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = get()._methodRefViaPostDominateIn - - /** Traverse to METHOD_RETURN via POST_DOMINATE IN edge. - */ - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - get()._methodReturnViaPostDominateIn - - /** Traverse to RETURN via POST_DOMINATE IN edge. - */ - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = get()._returnViaPostDominateIn - - /** Traverse to TYPE_REF via POST_DOMINATE IN edge. - */ - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = get()._typeRefViaPostDominateIn - - /** Traverse to UNKNOWN via POST_DOMINATE IN edge. - */ - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = get()._unknownViaPostDominateIn - - def reachingDefIn: Iterator[TemplateDom] = get().reachingDefIn - override def _reachingDefIn = get()._reachingDefIn - - def receiverIn: Iterator[Call] = get().receiverIn - override def _receiverIn = get()._receiverIn - - /** Traverse to CALL via RECEIVER IN edge. - */ - def _callViaReceiverIn: overflowdb.traversal.Traversal[Call] = get()._callViaReceiverIn - - // In view of https://github.com/scala/bug/issues/4762 it is advisable to use different variable names in - // patterns like `class Base(x:Int)` and `class Derived(x:Int) extends Base(x)`. - // This must become `class Derived(x_4762:Int) extends Base(x_4762)`. - // Otherwise, it is very hard to figure out whether uses of the identifier `x` refer to the base class x - // or the derived class x. - // When using that pattern, the class parameter `x_47672` should only be used in the `extends Base(x_4762)` - // clause and nowhere else. Otherwise, the compiler may well decide that this is not just a constructor - // parameter but also a field of the class, and we end up with two `x` fields. At best, this wastes memory; - // at worst both fields go out-of-sync for hard-to-debug correctness bugs. - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = get().fromNewNode(newNode, mapping) - override def canEqual(that: Any): Boolean = get.canEqual(that) - override def label: String = { - Unknown.Label - } + with Expression + with StaticType[UnknownEMT] { override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "containedRef" - case 6 => "dynamicTypeHintFullName" - case 7 => "lineNumber" - case 8 => "order" - case 9 => "parserTypeName" - case 10 => "possibleTypes" - case 11 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "containedRef" + case 5 => "dynamicTypeHintFullName" + case 6 => "lineNumber" + case 7 => "order" + case 8 => "parserTypeName" + case 9 => "possibleTypes" + case 10 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => containedRef - case 6 => dynamicTypeHintFullName - case 7 => lineNumber - case 8 => order - case 9 => parserTypeName - case 10 => possibleTypes - case 11 => typeFullName + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.containedRef + case 5 => this.dynamicTypeHintFullName + case 6 => this.lineNumber + case 7 => this.order + case 8 => this.parserTypeName + case 9 => this.possibleTypes + case 10 => this.typeFullName + case _ => null } override def productPrefix = "Unknown" - override def productArity = 12 -} - -class UnknownDb(ref: NodeRef[NodeDb]) extends NodeDb(ref) with StoredNode with Expression with UnknownBase { + override def productArity = 11 - override def layoutInformation: NodeLayoutInformation = Unknown.layoutInformation + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[Unknown] +} - private var _argumentIndex: Integer = Unknown.PropertyDefaults.ArgumentIndex - def argumentIndex: scala.Int = _argumentIndex - private var _argumentName: String = null - def argumentName: Option[String] = Option(_argumentName).asInstanceOf[Option[String]] - private var _code: String = Unknown.PropertyDefaults.Code - def code: String = _code - private var _columnNumber: Integer = null - def columnNumber: Option[scala.Int] = Option(_columnNumber).asInstanceOf[Option[scala.Int]] - private var _containedRef: String = Unknown.PropertyDefaults.ContainedRef - def containedRef: String = _containedRef - private var _dynamicTypeHintFullName: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def dynamicTypeHintFullName: IndexedSeq[String] = _dynamicTypeHintFullName - private var _lineNumber: Integer = null - def lineNumber: Option[scala.Int] = Option(_lineNumber).asInstanceOf[Option[scala.Int]] - private var _order: Integer = Unknown.PropertyDefaults.Order - def order: scala.Int = _order - private var _parserTypeName: String = Unknown.PropertyDefaults.ParserTypeName - def parserTypeName: String = _parserTypeName - private var _possibleTypes: IndexedSeq[String] = collection.immutable.ArraySeq.empty - def possibleTypes: IndexedSeq[String] = _possibleTypes - private var _typeFullName: String = Unknown.PropertyDefaults.TypeFullName - def typeFullName: String = _typeFullName +object NewUnknown { + def apply(): NewUnknown = new NewUnknown + private val outNeighbors: Map[String, Set[String]] = Map( + "ALIAS_OF" -> Set("TYPE"), + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS" -> Set("BINDING"), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CAPTURE" -> Set("CLOSURE_BINDING"), + "CAPTURED_BY" -> Set("CLOSURE_BINDING"), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "EVAL_TYPE" -> Set("TYPE"), + "IMPORTS" -> Set("DEPENDENCY"), + "INHERITS_FROM" -> Set("TYPE"), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "TAGGED_BY" -> Set("TAG") + ) + private val inNeighbors: Map[String, Set[String]] = Map( + "ARGUMENT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "AST" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "BINDS_TO" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CALL" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CDG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CFG" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONDITION" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "CONTAINS" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "IS_CALL_FOR_IMPORT" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "PARAMETER_LINK" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "POST_DOMINATE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REACHING_DEF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "RECEIVER" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "REF" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BINDING", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "CLOSURE_BINDING", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ), + "SOURCE_FILE" -> Set( + "ANNOTATION", + "ANNOTATION_LITERAL", + "ANNOTATION_PARAMETER", + "ANNOTATION_PARAMETER_ASSIGN", + "ARRAY_INITIALIZER", + "BLOCK", + "CALL", + "CALL_REPR", + "CFG_NODE", + "COMMENT", + "CONTROL_STRUCTURE", + "EXPRESSION", + "FIELD_IDENTIFIER", + "FILE", + "IDENTIFIER", + "IMPORT", + "JUMP_LABEL", + "JUMP_TARGET", + "LITERAL", + "LOCAL", + "MEMBER", + "METHOD", + "METHOD_PARAMETER_IN", + "METHOD_PARAMETER_OUT", + "METHOD_REF", + "METHOD_RETURN", + "MODIFIER", + "NAMESPACE", + "NAMESPACE_BLOCK", + "RETURN", + "TEMPLATE_DOM", + "TYPE_ARGUMENT", + "TYPE_DECL", + "TYPE_PARAMETER", + "TYPE_REF", + "UNKNOWN" + ) + ) - /** faster than the default implementation */ - override def propertiesMap: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - properties.put("ARGUMENT_INDEX", argumentIndex) - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - properties.put("CODE", code) - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - properties.put("CONTAINED_REF", containedRef) - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object InsertionHelpers { + object NewNodeInserter_Unknown_argumentIndex 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[Int]] + 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: NewUnknown => + dstCast(offset) = generated.argumentIndex + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - properties.put("ORDER", order) - properties.put("PARSER_TYPE_NAME", parserTypeName) - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - properties.put("TYPE_FULL_NAME", typeFullName) - - properties - } - - /** faster than the default implementation */ - override def propertiesMapForStorage: java.util.Map[String, Any] = { - val properties = new java.util.HashMap[String, Any] - if (!((-1: Int) == argumentIndex)) { properties.put("ARGUMENT_INDEX", argumentIndex) } - argumentName.map { value => properties.put("ARGUMENT_NAME", value) } - if (!(("") == code)) { properties.put("CODE", code) } - columnNumber.map { value => properties.put("COLUMN_NUMBER", value) } - if (!(("") == containedRef)) { properties.put("CONTAINED_REF", containedRef) } - if (this._dynamicTypeHintFullName != null && this._dynamicTypeHintFullName.nonEmpty) { - properties.put("DYNAMIC_TYPE_HINT_FULL_NAME", dynamicTypeHintFullName) + object NewNodeInserter_Unknown_argumentName 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: NewUnknown => + generated.argumentName 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_Unknown_code 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: NewUnknown => + dstCast(offset) = generated.code + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Unknown_columnNumber 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[Int]] + 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: NewUnknown => + generated.columnNumber 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_Unknown_containedRef 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: NewUnknown => + dstCast(offset) = generated.containedRef + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Unknown_dynamicTypeHintFullName 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: NewUnknown => + for (item <- generated.dynamicTypeHintFullName) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Unknown_lineNumber 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[Int]] + 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: NewUnknown => + generated.lineNumber 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_Unknown_order 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[Int]] + 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: NewUnknown => + dstCast(offset) = generated.order + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Unknown_parserTypeName 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: NewUnknown => + dstCast(offset) = generated.parserTypeName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Unknown_possibleTypes 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: NewUnknown => + for (item <- generated.possibleTypes) { + dstCast(offset) = item + offset += 1 + } + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } + } + object NewNodeInserter_Unknown_typeFullName 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: NewUnknown => + dstCast(offset) = generated.typeFullName + offset += 1 + case _ => + } + assert(seq + idx == nn.storedRef.get.seq(), "internal consistency check") + idx += 1 + offsets(idx + seq) = offset + } + } } - lineNumber.map { value => properties.put("LINE_NUMBER", value) } - if (!((-1: Int) == order)) { properties.put("ORDER", order) } - if (!(("") == parserTypeName)) { properties.put("PARSER_TYPE_NAME", parserTypeName) } - if (this._possibleTypes != null && this._possibleTypes.nonEmpty) { properties.put("POSSIBLE_TYPES", possibleTypes) } - if (!(("") == typeFullName)) { properties.put("TYPE_FULL_NAME", typeFullName) } - - properties } +} - import overflowdb.traversal._ - def argumentOut: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](0) - override def _argumentOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](0) - - def astOut: Iterator[AstNode] = createAdjacentNodeScalaIteratorByOffSet[AstNode](1) - override def _astOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](1) - def _annotationViaAstOut: overflowdb.traversal.Traversal[Annotation] = astOut.collectAll[Annotation] - def _blockViaAstOut: overflowdb.traversal.Traversal[Block] = astOut.collectAll[Block] - def _callViaAstOut: overflowdb.traversal.Traversal[Call] = astOut.collectAll[Call] - def _controlStructureViaAstOut: overflowdb.traversal.Traversal[ControlStructure] = astOut.collectAll[ControlStructure] - def _fieldIdentifierViaAstOut: overflowdb.traversal.Traversal[FieldIdentifier] = astOut.collectAll[FieldIdentifier] - def _identifierViaAstOut: overflowdb.traversal.Traversal[Identifier] = astOut.collectAll[Identifier] - def _jumpTargetViaAstOut: overflowdb.traversal.Traversal[JumpTarget] = astOut.collectAll[JumpTarget] - def _literalViaAstOut: overflowdb.traversal.Traversal[Literal] = astOut.collectAll[Literal] - def _localViaAstOut: overflowdb.traversal.Traversal[Local] = astOut.collectAll[Local] - def _memberViaAstOut: overflowdb.traversal.Traversal[Member] = astOut.collectAll[Member] - def _modifierViaAstOut: overflowdb.traversal.Traversal[Modifier] = astOut.collectAll[Modifier] - def _returnViaAstOut: overflowdb.traversal.Traversal[Return] = astOut.collectAll[Return] - def _unknownViaAstOut: overflowdb.traversal.Traversal[Unknown] = astOut.collectAll[Unknown] - - def cdgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](2) - override def _cdgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](2) - def _blockViaCdgOut: overflowdb.traversal.Traversal[Block] = cdgOut.collectAll[Block] - def _callViaCdgOut: overflowdb.traversal.Traversal[Call] = cdgOut.collectAll[Call] - def _controlStructureViaCdgOut: overflowdb.traversal.Traversal[ControlStructure] = cdgOut.collectAll[ControlStructure] - def _fieldIdentifierViaCdgOut: overflowdb.traversal.Traversal[FieldIdentifier] = cdgOut.collectAll[FieldIdentifier] - def _identifierViaCdgOut: overflowdb.traversal.Traversal[Identifier] = cdgOut.collectAll[Identifier] - def _jumpTargetViaCdgOut: overflowdb.traversal.Traversal[JumpTarget] = cdgOut.collectAll[JumpTarget] - def _literalViaCdgOut: overflowdb.traversal.Traversal[Literal] = cdgOut.collectAll[Literal] - def _methodRefViaCdgOut: overflowdb.traversal.Traversal[MethodRef] = cdgOut.collectAll[MethodRef] - def _methodReturnViaCdgOut: overflowdb.traversal.Traversal[MethodReturn] = cdgOut.collectAll[MethodReturn] - def _returnViaCdgOut: overflowdb.traversal.Traversal[Return] = cdgOut.collectAll[Return] - def _typeRefViaCdgOut: overflowdb.traversal.Traversal[TypeRef] = cdgOut.collectAll[TypeRef] - def _unknownViaCdgOut: overflowdb.traversal.Traversal[Unknown] = cdgOut.collectAll[Unknown] - - def cfgOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](3) - override def _cfgOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](3) - def _cfgNodeViaCfgOut: overflowdb.traversal.Traversal[CfgNode] = cfgOut.collectAll[CfgNode] - - def dominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](4) - override def _dominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](4) - def _blockViaDominateOut: overflowdb.traversal.Traversal[Block] = dominateOut.collectAll[Block] - def _callViaDominateOut: overflowdb.traversal.Traversal[Call] = dominateOut.collectAll[Call] - def _controlStructureViaDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - dominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateOut.collectAll[FieldIdentifier] - def _identifierViaDominateOut: overflowdb.traversal.Traversal[Identifier] = dominateOut.collectAll[Identifier] - def _jumpTargetViaDominateOut: overflowdb.traversal.Traversal[JumpTarget] = dominateOut.collectAll[JumpTarget] - def _literalViaDominateOut: overflowdb.traversal.Traversal[Literal] = dominateOut.collectAll[Literal] - def _methodRefViaDominateOut: overflowdb.traversal.Traversal[MethodRef] = dominateOut.collectAll[MethodRef] - def _methodReturnViaDominateOut: overflowdb.traversal.Traversal[MethodReturn] = dominateOut.collectAll[MethodReturn] - def _returnViaDominateOut: overflowdb.traversal.Traversal[Return] = dominateOut.collectAll[Return] - def _typeRefViaDominateOut: overflowdb.traversal.Traversal[TypeRef] = dominateOut.collectAll[TypeRef] - def _unknownViaDominateOut: overflowdb.traversal.Traversal[Unknown] = dominateOut.collectAll[Unknown] - - def evalTypeOut: Iterator[Type] = createAdjacentNodeScalaIteratorByOffSet[Type](5) - override def _evalTypeOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](5) - def _typeViaEvalTypeOut: overflowdb.traversal.Traversal[Type] = evalTypeOut.collectAll[Type] - - def postDominateOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](6) - override def _postDominateOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](6) - def _blockViaPostDominateOut: overflowdb.traversal.Traversal[Block] = postDominateOut.collectAll[Block] - def _callViaPostDominateOut: overflowdb.traversal.Traversal[Call] = postDominateOut.collectAll[Call] - def _controlStructureViaPostDominateOut: overflowdb.traversal.Traversal[ControlStructure] = - postDominateOut.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateOut: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateOut.collectAll[FieldIdentifier] - def _identifierViaPostDominateOut: overflowdb.traversal.Traversal[Identifier] = postDominateOut.collectAll[Identifier] - def _jumpTargetViaPostDominateOut: overflowdb.traversal.Traversal[JumpTarget] = postDominateOut.collectAll[JumpTarget] - def _literalViaPostDominateOut: overflowdb.traversal.Traversal[Literal] = postDominateOut.collectAll[Literal] - def _methodViaPostDominateOut: overflowdb.traversal.Traversal[Method] = postDominateOut.collectAll[Method] - def _methodRefViaPostDominateOut: overflowdb.traversal.Traversal[MethodRef] = postDominateOut.collectAll[MethodRef] - def _returnViaPostDominateOut: overflowdb.traversal.Traversal[Return] = postDominateOut.collectAll[Return] - def _typeRefViaPostDominateOut: overflowdb.traversal.Traversal[TypeRef] = postDominateOut.collectAll[TypeRef] - def _unknownViaPostDominateOut: overflowdb.traversal.Traversal[Unknown] = postDominateOut.collectAll[Unknown] - - def reachingDefOut: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](7) - override def _reachingDefOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](7) - def _callViaReachingDefOut: overflowdb.traversal.Traversal[Call] = reachingDefOut.collectAll[Call] - def _identifierViaReachingDefOut: overflowdb.traversal.Traversal[Identifier] = reachingDefOut.collectAll[Identifier] - def _literalViaReachingDefOut: overflowdb.traversal.Traversal[Literal] = reachingDefOut.collectAll[Literal] - def _methodParameterOutViaReachingDefOut: overflowdb.traversal.Traversal[MethodParameterOut] = - reachingDefOut.collectAll[MethodParameterOut] - def _methodRefViaReachingDefOut: overflowdb.traversal.Traversal[MethodRef] = reachingDefOut.collectAll[MethodRef] - def _returnViaReachingDefOut: overflowdb.traversal.Traversal[Return] = reachingDefOut.collectAll[Return] - def _typeRefViaReachingDefOut: overflowdb.traversal.Traversal[TypeRef] = reachingDefOut.collectAll[TypeRef] - - def taggedByOut: Iterator[Tag] = createAdjacentNodeScalaIteratorByOffSet[Tag](8) - override def _taggedByOut = createAdjacentNodeScalaIteratorByOffSet[StoredNode](8) - def _tagViaTaggedByOut: overflowdb.traversal.Traversal[Tag] = taggedByOut.collectAll[Tag] - - def argumentIn: Iterator[Expression] = createAdjacentNodeScalaIteratorByOffSet[Expression](9) - override def _argumentIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](9) - def _callViaArgumentIn: overflowdb.traversal.Traversal[Call] = argumentIn.collectAll[Call] - def _returnViaArgumentIn: overflowdb.traversal.Traversal[Return] = argumentIn.collectAll[Return] - - def astIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](10) - override def _astIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](10) - def _blockViaAstIn: overflowdb.traversal.Traversal[Block] = astIn.collectAll[Block] - def _controlStructureViaAstIn: overflowdb.traversal.Traversal[ControlStructure] = astIn.collectAll[ControlStructure] - def _methodParameterInViaAstIn: overflowdb.traversal.Traversal[MethodParameterIn] = - astIn.collectAll[MethodParameterIn] - def _returnViaAstIn: overflowdb.traversal.Traversal[Return] = astIn.collectAll[Return] - def _unknownViaAstIn: overflowdb.traversal.Traversal[Unknown] = astIn.collectAll[Unknown] - - def cdgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](11) - override def _cdgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](11) - def _blockViaCdgIn: overflowdb.traversal.Traversal[Block] = cdgIn.collectAll[Block] - def _callViaCdgIn: overflowdb.traversal.Traversal[Call] = cdgIn.collectAll[Call] - def _controlStructureViaCdgIn: overflowdb.traversal.Traversal[ControlStructure] = cdgIn.collectAll[ControlStructure] - def _fieldIdentifierViaCdgIn: overflowdb.traversal.Traversal[FieldIdentifier] = cdgIn.collectAll[FieldIdentifier] - def _identifierViaCdgIn: overflowdb.traversal.Traversal[Identifier] = cdgIn.collectAll[Identifier] - def _jumpTargetViaCdgIn: overflowdb.traversal.Traversal[JumpTarget] = cdgIn.collectAll[JumpTarget] - def _literalViaCdgIn: overflowdb.traversal.Traversal[Literal] = cdgIn.collectAll[Literal] - def _methodRefViaCdgIn: overflowdb.traversal.Traversal[MethodRef] = cdgIn.collectAll[MethodRef] - def _typeRefViaCdgIn: overflowdb.traversal.Traversal[TypeRef] = cdgIn.collectAll[TypeRef] - def _unknownViaCdgIn: overflowdb.traversal.Traversal[Unknown] = cdgIn.collectAll[Unknown] - - def cfgIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](12) - override def _cfgIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](12) - - def conditionIn: Iterator[ControlStructure] = createAdjacentNodeScalaIteratorByOffSet[ControlStructure](13) - override def _conditionIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](13) - def _controlStructureViaConditionIn: overflowdb.traversal.Traversal[ControlStructure] = - conditionIn.collectAll[ControlStructure] - - def containsIn: Iterator[Method] = createAdjacentNodeScalaIteratorByOffSet[Method](14) - override def _containsIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](14) - def _methodViaContainsIn: overflowdb.traversal.Traversal[Method] = containsIn.collectAll[Method] - - def dominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](15) - override def _dominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](15) - def _blockViaDominateIn: overflowdb.traversal.Traversal[Block] = dominateIn.collectAll[Block] - def _callViaDominateIn: overflowdb.traversal.Traversal[Call] = dominateIn.collectAll[Call] - def _controlStructureViaDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - dominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - dominateIn.collectAll[FieldIdentifier] - def _identifierViaDominateIn: overflowdb.traversal.Traversal[Identifier] = dominateIn.collectAll[Identifier] - def _jumpTargetViaDominateIn: overflowdb.traversal.Traversal[JumpTarget] = dominateIn.collectAll[JumpTarget] - def _literalViaDominateIn: overflowdb.traversal.Traversal[Literal] = dominateIn.collectAll[Literal] - def _methodViaDominateIn: overflowdb.traversal.Traversal[Method] = dominateIn.collectAll[Method] - def _methodRefViaDominateIn: overflowdb.traversal.Traversal[MethodRef] = dominateIn.collectAll[MethodRef] - def _returnViaDominateIn: overflowdb.traversal.Traversal[Return] = dominateIn.collectAll[Return] - def _typeRefViaDominateIn: overflowdb.traversal.Traversal[TypeRef] = dominateIn.collectAll[TypeRef] - def _unknownViaDominateIn: overflowdb.traversal.Traversal[Unknown] = dominateIn.collectAll[Unknown] - - def postDominateIn: Iterator[CfgNode] = createAdjacentNodeScalaIteratorByOffSet[CfgNode](16) - override def _postDominateIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](16) - def _blockViaPostDominateIn: overflowdb.traversal.Traversal[Block] = postDominateIn.collectAll[Block] - def _callViaPostDominateIn: overflowdb.traversal.Traversal[Call] = postDominateIn.collectAll[Call] - def _controlStructureViaPostDominateIn: overflowdb.traversal.Traversal[ControlStructure] = - postDominateIn.collectAll[ControlStructure] - def _fieldIdentifierViaPostDominateIn: overflowdb.traversal.Traversal[FieldIdentifier] = - postDominateIn.collectAll[FieldIdentifier] - def _identifierViaPostDominateIn: overflowdb.traversal.Traversal[Identifier] = postDominateIn.collectAll[Identifier] - def _jumpTargetViaPostDominateIn: overflowdb.traversal.Traversal[JumpTarget] = postDominateIn.collectAll[JumpTarget] - def _literalViaPostDominateIn: overflowdb.traversal.Traversal[Literal] = postDominateIn.collectAll[Literal] - def _methodRefViaPostDominateIn: overflowdb.traversal.Traversal[MethodRef] = postDominateIn.collectAll[MethodRef] - def _methodReturnViaPostDominateIn: overflowdb.traversal.Traversal[MethodReturn] = - postDominateIn.collectAll[MethodReturn] - def _returnViaPostDominateIn: overflowdb.traversal.Traversal[Return] = postDominateIn.collectAll[Return] - def _typeRefViaPostDominateIn: overflowdb.traversal.Traversal[TypeRef] = postDominateIn.collectAll[TypeRef] - def _unknownViaPostDominateIn: overflowdb.traversal.Traversal[Unknown] = postDominateIn.collectAll[Unknown] +class NewUnknown extends NewNode(43.toShort) with UnknownBase with ExpressionNew { + override type StoredNodeType = Unknown + override def label: String = "UNKNOWN" - def reachingDefIn: Iterator[TemplateDom] = createAdjacentNodeScalaIteratorByOffSet[TemplateDom](17) - override def _reachingDefIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](17) + override def isValidOutNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewUnknown.outNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } + override def isValidInNeighbor(edgeLabel: String, n: NewNode): Boolean = { + NewUnknown.inNeighbors.getOrElse(edgeLabel, Set.empty).contains(n.label) + } - def receiverIn: Iterator[Call] = createAdjacentNodeScalaIteratorByOffSet[Call](18) - override def _receiverIn = createAdjacentNodeScalaIteratorByOffSet[StoredNode](18) - def _callViaReceiverIn: overflowdb.traversal.Traversal[Call] = receiverIn.collectAll[Call] + var argumentIndex: Int = -1: Int + var argumentName: Option[String] = None + var code: String = "": String + var columnNumber: Option[Int] = None + var containedRef: String = "": String + var dynamicTypeHintFullName: IndexedSeq[String] = ArraySeq.empty + var lineNumber: Option[Int] = None + var order: Int = -1: Int + var parserTypeName: String = "": String + var possibleTypes: IndexedSeq[String] = ArraySeq.empty + 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 } + def argumentName(value: String): this.type = { this.argumentName = Option(value); this } + def code(value: String): this.type = { this.code = value; this } + def columnNumber(value: Int): this.type = { this.columnNumber = Option(value); this } + def columnNumber(value: Option[Int]): this.type = { this.columnNumber = value; this } + def containedRef(value: String): this.type = { this.containedRef = value; this } + def dynamicTypeHintFullName(value: IterableOnce[String]): this.type = { + this.dynamicTypeHintFullName = value.iterator.to(ArraySeq); this + } + def lineNumber(value: Int): this.type = { this.lineNumber = Option(value); this } + def lineNumber(value: Option[Int]): this.type = { this.lineNumber = value; this } + def order(value: Int): this.type = { this.order = value; this } + def parserTypeName(value: String): this.type = { this.parserTypeName = value; this } + def possibleTypes(value: IterableOnce[String]): this.type = { this.possibleTypes = value.iterator.to(ArraySeq); this } + def typeFullName(value: String): this.type = { this.typeFullName = value; this } + override def countAndVisitProperties(interface: flatgraph.BatchedUpdateInterface): Unit = { + interface.countProperty(this, 1, 1) + interface.countProperty(this, 2, argumentName.size) + interface.countProperty(this, 10, 1) + interface.countProperty(this, 11, columnNumber.size) + interface.countProperty(this, 13, 1) + interface.countProperty(this, 18, dynamicTypeHintFullName.size) + interface.countProperty(this, 34, lineNumber.size) + interface.countProperty(this, 43, 1) + interface.countProperty(this, 46, 1) + interface.countProperty(this, 47, possibleTypes.size) + interface.countProperty(this, 52, 1) + } - override def label: String = { - Unknown.Label + override def copy: this.type = { + val newInstance = new NewUnknown + newInstance.argumentIndex = this.argumentIndex + newInstance.argumentName = this.argumentName + newInstance.code = this.code + newInstance.columnNumber = this.columnNumber + newInstance.containedRef = this.containedRef + newInstance.dynamicTypeHintFullName = this.dynamicTypeHintFullName + newInstance.lineNumber = this.lineNumber + newInstance.order = this.order + newInstance.parserTypeName = this.parserTypeName + newInstance.possibleTypes = this.possibleTypes + newInstance.typeFullName = this.typeFullName + newInstance.asInstanceOf[this.type] } override def productElementName(n: Int): String = n match { - case 0 => "id" - case 1 => "argumentIndex" - case 2 => "argumentName" - case 3 => "code" - case 4 => "columnNumber" - case 5 => "containedRef" - case 6 => "dynamicTypeHintFullName" - case 7 => "lineNumber" - case 8 => "order" - case 9 => "parserTypeName" - case 10 => "possibleTypes" - case 11 => "typeFullName" + case 0 => "argumentIndex" + case 1 => "argumentName" + case 2 => "code" + case 3 => "columnNumber" + case 4 => "containedRef" + case 5 => "dynamicTypeHintFullName" + case 6 => "lineNumber" + case 7 => "order" + case 8 => "parserTypeName" + case 9 => "possibleTypes" + case 10 => "typeFullName" + case _ => "" } override def productElement(n: Int): Any = n match { - case 0 => id - case 1 => argumentIndex - case 2 => argumentName - case 3 => code - case 4 => columnNumber - case 5 => containedRef - case 6 => dynamicTypeHintFullName - case 7 => lineNumber - case 8 => order - case 9 => parserTypeName - case 10 => possibleTypes - case 11 => typeFullName - } - - override def productPrefix = "Unknown" - override def productArity = 12 - - override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[UnknownDb] - - override def property(key: String): Any = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex - case "ARGUMENT_NAME" => this._argumentName - case "CODE" => this._code - case "COLUMN_NUMBER" => this._columnNumber - case "CONTAINED_REF" => this._containedRef - case "DYNAMIC_TYPE_HINT_FULL_NAME" => this._dynamicTypeHintFullName - case "LINE_NUMBER" => this._lineNumber - case "ORDER" => this._order - case "PARSER_TYPE_NAME" => this._parserTypeName - case "POSSIBLE_TYPES" => this._possibleTypes - case "TYPE_FULL_NAME" => this._typeFullName - - case _ => null - } - } - - override protected def updateSpecificProperty(key: String, value: Object): Unit = { - key match { - case "ARGUMENT_INDEX" => this._argumentIndex = value.asInstanceOf[scala.Int] - case "ARGUMENT_NAME" => this._argumentName = value.asInstanceOf[String] - case "CODE" => this._code = value.asInstanceOf[String] - case "COLUMN_NUMBER" => this._columnNumber = value.asInstanceOf[scala.Int] - case "CONTAINED_REF" => this._containedRef = value.asInstanceOf[String] - case "DYNAMIC_TYPE_HINT_FULL_NAME" => - this._dynamicTypeHintFullName = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "LINE_NUMBER" => this._lineNumber = value.asInstanceOf[scala.Int] - case "ORDER" => this._order = value.asInstanceOf[scala.Int] - case "PARSER_TYPE_NAME" => this._parserTypeName = value.asInstanceOf[String] - case "POSSIBLE_TYPES" => - this._possibleTypes = value match { - case null => collection.immutable.ArraySeq.empty - case singleValue: String => collection.immutable.ArraySeq(singleValue) - case coll: IterableOnce[Any] if coll.iterator.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] if arr.isEmpty => collection.immutable.ArraySeq.empty - case arr: Array[_] => collection.immutable.ArraySeq.unsafeWrapArray(arr).asInstanceOf[IndexedSeq[String]] - case jCollection: java.lang.Iterable[_] => - if (jCollection.iterator.hasNext) { - collection.immutable.ArraySeq.unsafeWrapArray( - jCollection.asInstanceOf[java.util.Collection[String]].iterator.asScala.toArray - ) - } else collection.immutable.ArraySeq.empty - case iter: Iterable[_] => - if (iter.nonEmpty) { - collection.immutable.ArraySeq.unsafeWrapArray(iter.asInstanceOf[Iterable[String]].toArray) - } else collection.immutable.ArraySeq.empty - } - case "TYPE_FULL_NAME" => this._typeFullName = value.asInstanceOf[String] - - case _ => PropertyErrorRegister.logPropertyErrorIfFirst(getClass, key) - } - } - - override def removeSpecificProperty(key: String): Unit = - this.updateSpecificProperty(key, null) - - override def _initializeFromDetached( - data: overflowdb.DetachedNodeData, - mapper: java.util.function.Function[overflowdb.DetachedNodeData, Node] - ) = - fromNewNode(data.asInstanceOf[NewNode], nn => mapper.apply(nn).asInstanceOf[StoredNode]) - - override def fromNewNode(newNode: NewNode, mapping: NewNode => StoredNode): Unit = { - this._argumentIndex = newNode.asInstanceOf[NewUnknown].argumentIndex - this._argumentName = newNode.asInstanceOf[NewUnknown].argumentName match { - case None => null; case Some(value) => value - } - this._code = newNode.asInstanceOf[NewUnknown].code - this._columnNumber = newNode.asInstanceOf[NewUnknown].columnNumber match { - case None => null; case Some(value) => value + case 0 => this.argumentIndex + case 1 => this.argumentName + case 2 => this.code + case 3 => this.columnNumber + case 4 => this.containedRef + case 5 => this.dynamicTypeHintFullName + case 6 => this.lineNumber + case 7 => this.order + case 8 => this.parserTypeName + case 9 => this.possibleTypes + case 10 => this.typeFullName + case _ => null } - this._containedRef = newNode.asInstanceOf[NewUnknown].containedRef - this._dynamicTypeHintFullName = - if (newNode.asInstanceOf[NewUnknown].dynamicTypeHintFullName != null) - newNode.asInstanceOf[NewUnknown].dynamicTypeHintFullName - else collection.immutable.ArraySeq.empty - this._lineNumber = newNode.asInstanceOf[NewUnknown].lineNumber match { - case None => null; case Some(value) => value - } - this._order = newNode.asInstanceOf[NewUnknown].order - this._parserTypeName = newNode.asInstanceOf[NewUnknown].parserTypeName - this._possibleTypes = - if (newNode.asInstanceOf[NewUnknown].possibleTypes != null) newNode.asInstanceOf[NewUnknown].possibleTypes - else collection.immutable.ArraySeq.empty - this._typeFullName = newNode.asInstanceOf[NewUnknown].typeFullName - - } + override def productPrefix = "NewUnknown" + override def productArity = 11 + override def canEqual(that: Any): Boolean = that != null && that.isInstanceOf[NewUnknown] } diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/package.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/package.scala deleted file mode 100644 index d26f72ded..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/nodes/package.scala +++ /dev/null @@ -1,11 +0,0 @@ -package io.shiftleft.codepropertygraph - -package object generated { - // some type aliases so that the domain-specific code can avoid referencing the `overflowdb` namespace - - object help { - type Doc = _root_.overflowdb.traversal.help.Doc - type Traversal = _root_.overflowdb.traversal.help.Traversal - type TraversalSource = _root_.overflowdb.traversal.help.TraversalSource - } -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/package.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/package.scala new file mode 100644 index 000000000..aca3eb809 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/package.scala @@ -0,0 +1,12 @@ +package io.shiftleft.codepropertygraph + +package object generated { + // some type aliases so that the domain-specific code can avoid referencing the `flatgraph` namespace + type DiffGraphBuilder = _root_.flatgraph.DiffGraphBuilder + + object help { + type Doc = _root_.flatgraph.help.Doc + type Traversal = _root_.flatgraph.help.Traversal + type TraversalSource = _root_.flatgraph.help.TraversalSource + } +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Annotation.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Annotation.scala deleted file mode 100644 index 2cfbb4f8a..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Annotation.scala +++ /dev/null @@ -1,424 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Annotation */ -class AnnotationTraversalExtGen[NodeType <: Annotation](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to fullName property */ - def fullName: Iterator[String] = - traversal.map(_.fullName) - - /** Traverse to nodes where the fullName matches the regular expression `value` - */ - def fullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - fullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.fullName, pattern) - } - } - - /** Traverse to nodes where the fullName matches at least one of the regular expressions in `values` - */ - def fullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.fullName, patterns) - - /** Traverse to nodes where fullName matches `value` exactly. - */ - def fullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.fullName == value } - } - - /** Traverse to nodes where fullName matches one of the elements in `values` exactly. - */ - def fullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - fullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.fullName), values, "FULL_NAME") - } - - /** Traverse to nodes where fullName does not match the regular expression `value`. - */ - def fullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.fullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.fullName, pattern) - } - } - - /** Traverse to nodes where fullName does not match any of the regular expressions in `values`. - */ - def fullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.fullName, patterns) - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AnnotationLiteral.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AnnotationLiteral.scala deleted file mode 100644 index 347fe9101..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AnnotationLiteral.scala +++ /dev/null @@ -1,369 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for AnnotationLiteral */ -class AnnotationLiteralTraversalExtGen[NodeType <: AnnotationLiteral](val traversal: Iterator[NodeType]) - extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AnnotationParameter.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AnnotationParameter.scala deleted file mode 100644 index 93b3721ed..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AnnotationParameter.scala +++ /dev/null @@ -1,210 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for AnnotationParameter */ -class AnnotationParameterTraversalExtGen[NodeType <: AnnotationParameter](val traversal: Iterator[NodeType]) - extends AnyVal { - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AnnotationParameterAssign.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AnnotationParameterAssign.scala deleted file mode 100644 index 50c4dd93f..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AnnotationParameterAssign.scala +++ /dev/null @@ -1,210 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for AnnotationParameterAssign */ -class AnnotationParameterAssignTraversalExtGen[NodeType <: AnnotationParameterAssign](val traversal: Iterator[NodeType]) - extends AnyVal { - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ArrayInitializer.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ArrayInitializer.scala deleted file mode 100644 index 2540d1710..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ArrayInitializer.scala +++ /dev/null @@ -1,312 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for ArrayInitializer */ -class ArrayInitializerTraversalExtGen[NodeType <: ArrayInitializer](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AstNode.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AstNode.scala deleted file mode 100644 index 29f9b7737..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/AstNode.scala +++ /dev/null @@ -1,209 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for AstNode */ -class AstNodeTraversalExtGen[NodeType <: AstNode](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Binding.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Binding.scala deleted file mode 100644 index 07629072f..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Binding.scala +++ /dev/null @@ -1,188 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Binding */ -class BindingTraversalExtGen[NodeType <: Binding](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to TYPE_DECL via BINDS IN edge. - */ - def bindingTypeDecl: Iterator[TypeDecl] = - traversal.map(_.bindingTypeDecl) - - /** Traverse to METHOD via REF OUT edge. - */ - def boundMethod: Iterator[Method] = - traversal.map(_.boundMethod) - - /** Traverse to methodFullName property */ - def methodFullName: Iterator[String] = - traversal.map(_.methodFullName) - - /** Traverse to nodes where the methodFullName matches the regular expression `value` - */ - def methodFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - methodFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.methodFullName, pattern) - } - } - - /** Traverse to nodes where the methodFullName matches at least one of the regular expressions in `values` - */ - def methodFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.methodFullName, patterns) - - /** Traverse to nodes where methodFullName matches `value` exactly. - */ - def methodFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("METHOD_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.methodFullName == value } - } - - /** Traverse to nodes where methodFullName matches one of the elements in `values` exactly. - */ - def methodFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - methodFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.methodFullName), values, "METHOD_FULL_NAME") - } - - /** Traverse to nodes where methodFullName does not match the regular expression `value`. - */ - def methodFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.methodFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.methodFullName, pattern) - } - } - - /** Traverse to nodes where methodFullName does not match any of the regular expressions in `values`. - */ - def methodFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.methodFullName, patterns) - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to signature property */ - def signature: Iterator[String] = - traversal.map(_.signature) - - /** Traverse to nodes where the signature matches the regular expression `value` - */ - def signature(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - signatureExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.signature, pattern) - } - } - - /** Traverse to nodes where the signature matches at least one of the regular expressions in `values` - */ - def signature(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.signature, patterns) - - /** Traverse to nodes where signature matches `value` exactly. - */ - def signatureExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("SIGNATURE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.signature == value } - } - - /** Traverse to nodes where signature matches one of the elements in `values` exactly. - */ - def signatureExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - signatureExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.signature), values, "SIGNATURE") - } - - /** Traverse to nodes where signature does not match the regular expression `value`. - */ - def signatureNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.signature != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.signature, pattern) - } - } - - /** Traverse to nodes where signature does not match any of the regular expressions in `values`. - */ - def signatureNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.signature, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Block.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Block.scala deleted file mode 100644 index 2effd04f0..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Block.scala +++ /dev/null @@ -1,384 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Block */ -class BlockTraversalExtGen[NodeType <: Block](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to locals of this block. Traverse to LOCAL via AST OUT edge. - */ - /** Traverse to locals of this block. */ - @overflowdb.traversal.help.Doc(info = """Traverse to locals of this block.""") - def local: Iterator[Local] = - traversal.flatMap(_.local) - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to dynamicTypeHintFullName property */ - def dynamicTypeHintFullName: Iterator[String] = - traversal.flatMap(_.dynamicTypeHintFullName) - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to possibleTypes property */ - def possibleTypes: Iterator[String] = - traversal.flatMap(_.possibleTypes) - - /** Traverse to typeFullName property */ - def typeFullName: Iterator[String] = - traversal.map(_.typeFullName) - - /** Traverse to nodes where the typeFullName matches the regular expression `value` - */ - def typeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` - */ - def typeFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeFullName, patterns) - - /** Traverse to nodes where typeFullName matches `value` exactly. - */ - def typeFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeFullName == value } - } - - /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. - */ - def typeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeFullName), values, "TYPE_FULL_NAME") - } - - /** Traverse to nodes where typeFullName does not match the regular expression `value`. - */ - def typeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. - */ - def typeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Call.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Call.scala deleted file mode 100644 index 1d010bc30..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Call.scala +++ /dev/null @@ -1,610 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Call */ -class CallTraversalExtGen[NodeType <: Call](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to referenced members Traverse to MEMBER via REF OUT edge. - */ - /** Traverse to referenced members */ - @overflowdb.traversal.help.Doc(info = """Traverse to referenced members""") - def referencedMember: Iterator[Member] = - traversal.flatMap(_.referencedMember) - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to dispatchType property */ - def dispatchType: Iterator[String] = - traversal.map(_.dispatchType) - - /** Traverse to nodes where the dispatchType matches the regular expression `value` - */ - def dispatchType(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - dispatchTypeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.dispatchType, pattern) - } - } - - /** Traverse to nodes where the dispatchType matches at least one of the regular expressions in `values` - */ - def dispatchType(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.dispatchType, patterns) - - /** Traverse to nodes where dispatchType matches `value` exactly. - */ - def dispatchTypeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("DISPATCH_TYPE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.dispatchType == value } - } - - /** Traverse to nodes where dispatchType matches one of the elements in `values` exactly. - */ - def dispatchTypeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - dispatchTypeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.dispatchType), values, "DISPATCH_TYPE") - } - - /** Traverse to nodes where dispatchType does not match the regular expression `value`. - */ - def dispatchTypeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.dispatchType != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.dispatchType, pattern) - } - } - - /** Traverse to nodes where dispatchType does not match any of the regular expressions in `values`. - */ - def dispatchTypeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.dispatchType, patterns) - } - - /** Traverse to dynamicTypeHintFullName property */ - def dynamicTypeHintFullName: Iterator[String] = - traversal.flatMap(_.dynamicTypeHintFullName) - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to methodFullName property */ - def methodFullName: Iterator[String] = - traversal.map(_.methodFullName) - - /** Traverse to nodes where the methodFullName matches the regular expression `value` - */ - def methodFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - methodFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.methodFullName, pattern) - } - } - - /** Traverse to nodes where the methodFullName matches at least one of the regular expressions in `values` - */ - def methodFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.methodFullName, patterns) - - /** Traverse to nodes where methodFullName matches `value` exactly. - */ - def methodFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("METHOD_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.methodFullName == value } - } - - /** Traverse to nodes where methodFullName matches one of the elements in `values` exactly. - */ - def methodFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - methodFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.methodFullName), values, "METHOD_FULL_NAME") - } - - /** Traverse to nodes where methodFullName does not match the regular expression `value`. - */ - def methodFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.methodFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.methodFullName, pattern) - } - } - - /** Traverse to nodes where methodFullName does not match any of the regular expressions in `values`. - */ - def methodFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.methodFullName, patterns) - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to possibleTypes property */ - def possibleTypes: Iterator[String] = - traversal.flatMap(_.possibleTypes) - - /** Traverse to signature property */ - def signature: Iterator[String] = - traversal.map(_.signature) - - /** Traverse to nodes where the signature matches the regular expression `value` - */ - def signature(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - signatureExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.signature, pattern) - } - } - - /** Traverse to nodes where the signature matches at least one of the regular expressions in `values` - */ - def signature(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.signature, patterns) - - /** Traverse to nodes where signature matches `value` exactly. - */ - def signatureExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("SIGNATURE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.signature == value } - } - - /** Traverse to nodes where signature matches one of the elements in `values` exactly. - */ - def signatureExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - signatureExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.signature), values, "SIGNATURE") - } - - /** Traverse to nodes where signature does not match the regular expression `value`. - */ - def signatureNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.signature != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.signature, pattern) - } - } - - /** Traverse to nodes where signature does not match any of the regular expressions in `values`. - */ - def signatureNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.signature, patterns) - } - - /** Traverse to typeFullName property */ - def typeFullName: Iterator[String] = - traversal.map(_.typeFullName) - - /** Traverse to nodes where the typeFullName matches the regular expression `value` - */ - def typeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` - */ - def typeFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeFullName, patterns) - - /** Traverse to nodes where typeFullName matches `value` exactly. - */ - def typeFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeFullName == value } - } - - /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. - */ - def typeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeFullName), values, "TYPE_FULL_NAME") - } - - /** Traverse to nodes where typeFullName does not match the regular expression `value`. - */ - def typeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. - */ - def typeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/CallRepr.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/CallRepr.scala deleted file mode 100644 index c1e780a3e..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/CallRepr.scala +++ /dev/null @@ -1,321 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for CallRepr */ -class CallReprTraversalExtGen[NodeType <: CallRepr](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to signature property */ - def signature: Iterator[String] = - traversal.map(_.signature) - - /** Traverse to nodes where the signature matches the regular expression `value` - */ - def signature(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - signatureExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.signature, pattern) - } - } - - /** Traverse to nodes where the signature matches at least one of the regular expressions in `values` - */ - def signature(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.signature, patterns) - - /** Traverse to nodes where signature matches `value` exactly. - */ - def signatureExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("SIGNATURE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.signature == value } - } - - /** Traverse to nodes where signature matches one of the elements in `values` exactly. - */ - def signatureExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - signatureExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.signature), values, "SIGNATURE") - } - - /** Traverse to nodes where signature does not match the regular expression `value`. - */ - def signatureNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.signature != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.signature, pattern) - } - } - - /** Traverse to nodes where signature does not match any of the regular expressions in `values`. - */ - def signatureNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.signature, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/CfgNode.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/CfgNode.scala deleted file mode 100644 index dc74cb677..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/CfgNode.scala +++ /dev/null @@ -1,209 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for CfgNode */ -class CfgNodeTraversalExtGen[NodeType <: CfgNode](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ClosureBinding.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ClosureBinding.scala deleted file mode 100644 index 5f7471a3d..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ClosureBinding.scala +++ /dev/null @@ -1,180 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for ClosureBinding */ -class ClosureBindingTraversalExtGen[NodeType <: ClosureBinding](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to closureBindingId property */ - def closureBindingId: Iterator[String] = - traversal.flatMap(_.closureBindingId) - - /** Traverse to nodes where the closureBindingId matches the regular expression `value` - */ - def closureBindingId(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.closureBindingId.isDefined && node.closureBindingId.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.closureBindingId.isDefined))(_.closureBindingId.get, pattern) - } - } - - /** Traverse to nodes where the closureBindingId matches at least one of the regular expressions in `values` - */ - def closureBindingId(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.closureBindingId.isDefined))(_.closureBindingId.get, patterns) - } - - /** Traverse to nodes where closureBindingId matches `value` exactly. - */ - def closureBindingIdExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.closureBindingId.contains(value) } - - /** Traverse to nodes where closureBindingId matches one of the elements in `values` exactly. - */ - def closureBindingIdExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - closureBindingIdExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.closureBindingId, values, "CLOSURE_BINDING_ID") - } - - /** Traverse to nodes where closureBindingId does not match the regular expression `value`. - */ - def closureBindingIdNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.closureBindingId.isEmpty || node.closureBindingId.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.closureBindingId.isDefined))(_.closureBindingId.get, pattern) - } - } - - /** Traverse to nodes where closureBindingId does not match any of the regular expressions in `values`. - */ - def closureBindingIdNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.closureBindingId.isDefined))(_.closureBindingId.get, patterns) - } - - /** Traverse to closureOriginalName property */ - def closureOriginalName: Iterator[String] = - traversal.flatMap(_.closureOriginalName) - - /** Traverse to nodes where the closureOriginalName matches the regular expression `value` - */ - def closureOriginalName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.closureOriginalName.isDefined && node.closureOriginalName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.closureOriginalName.isDefined))(_.closureOriginalName.get, pattern) - } - } - - /** Traverse to nodes where the closureOriginalName matches at least one of the regular expressions in `values` - */ - def closureOriginalName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.closureOriginalName.isDefined))(_.closureOriginalName.get, patterns) - } - - /** Traverse to nodes where closureOriginalName matches `value` exactly. - */ - def closureOriginalNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.closureOriginalName.contains(value) } - - /** Traverse to nodes where closureOriginalName matches one of the elements in `values` exactly. - */ - def closureOriginalNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - closureOriginalNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.closureOriginalName, values, "CLOSURE_ORIGINAL_NAME") - } - - /** Traverse to nodes where closureOriginalName does not match the regular expression `value`. - */ - def closureOriginalNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.closureOriginalName.isEmpty || node.closureOriginalName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.closureOriginalName.isDefined))(_.closureOriginalName.get, pattern) - } - } - - /** Traverse to nodes where closureOriginalName does not match any of the regular expressions in `values`. - */ - def closureOriginalNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.closureOriginalName.isDefined))(_.closureOriginalName.get, patterns) - } - - /** Traverse to evaluationStrategy property */ - def evaluationStrategy: Iterator[String] = - traversal.map(_.evaluationStrategy) - - /** Traverse to nodes where the evaluationStrategy matches the regular expression `value` - */ - def evaluationStrategy(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - evaluationStrategyExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.evaluationStrategy, pattern) - } - } - - /** Traverse to nodes where the evaluationStrategy matches at least one of the regular expressions in `values` - */ - def evaluationStrategy(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.evaluationStrategy, patterns) - - /** Traverse to nodes where evaluationStrategy matches `value` exactly. - */ - def evaluationStrategyExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("EVALUATION_STRATEGY", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.evaluationStrategy == value } - } - - /** Traverse to nodes where evaluationStrategy matches one of the elements in `values` exactly. - */ - def evaluationStrategyExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - evaluationStrategyExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter.exactMultiple[NodeType, String]( - traversal, - node => Some(node.evaluationStrategy), - values, - "EVALUATION_STRATEGY" - ) - } - - /** Traverse to nodes where evaluationStrategy does not match the regular expression `value`. - */ - def evaluationStrategyNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.evaluationStrategy != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.evaluationStrategy, pattern) - } - } - - /** Traverse to nodes where evaluationStrategy does not match any of the regular expressions in `values`. - */ - def evaluationStrategyNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.evaluationStrategy, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Comment.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Comment.scala deleted file mode 100644 index 2a96ead7f..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Comment.scala +++ /dev/null @@ -1,270 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Comment */ -class CommentTraversalExtGen[NodeType <: Comment](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to COMMENT via SOURCE_FILE OUT edge. - */ - def file: Iterator[Comment] = - traversal.flatMap(_.file) - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to filename property */ - def filename: Iterator[String] = - traversal.map(_.filename) - - /** Traverse to nodes where the filename matches the regular expression `value` - */ - def filename(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - filenameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.filename, pattern) - } - } - - /** Traverse to nodes where the filename matches at least one of the regular expressions in `values` - */ - def filename(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.filename, patterns) - - /** Traverse to nodes where filename matches `value` exactly. - */ - def filenameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("FILENAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.filename == value } - } - - /** Traverse to nodes where filename matches one of the elements in `values` exactly. - */ - def filenameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - filenameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.filename), values, "FILENAME") - } - - /** Traverse to nodes where filename does not match the regular expression `value`. - */ - def filenameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.filename != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.filename, pattern) - } - } - - /** Traverse to nodes where filename does not match any of the regular expressions in `values`. - */ - def filenameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.filename, patterns) - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ConfigFile.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ConfigFile.scala deleted file mode 100644 index 5604d5c22..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ConfigFile.scala +++ /dev/null @@ -1,121 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for ConfigFile */ -class ConfigFileTraversalExtGen[NodeType <: ConfigFile](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to content property */ - def content: Iterator[String] = - traversal.map(_.content) - - /** Traverse to nodes where the content matches the regular expression `value` - */ - def content(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - contentExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.content, pattern) - } - } - - /** Traverse to nodes where the content matches at least one of the regular expressions in `values` - */ - def content(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.content, patterns) - - /** Traverse to nodes where content matches `value` exactly. - */ - def contentExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CONTENT", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.content == value } - } - - /** Traverse to nodes where content matches one of the elements in `values` exactly. - */ - def contentExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - contentExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.content), values, "CONTENT") - } - - /** Traverse to nodes where content does not match the regular expression `value`. - */ - def contentNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.content != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.content, pattern) - } - } - - /** Traverse to nodes where content does not match any of the regular expressions in `values`. - */ - def contentNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.content, patterns) - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ControlStructure.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ControlStructure.scala deleted file mode 100644 index 645029fda..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/ControlStructure.scala +++ /dev/null @@ -1,430 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for ControlStructure */ -class ControlStructureTraversalExtGen[NodeType <: ControlStructure](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to controlStructureType property */ - def controlStructureType: Iterator[String] = - traversal.map(_.controlStructureType) - - /** Traverse to nodes where the controlStructureType matches the regular expression `value` - */ - def controlStructureType(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - controlStructureTypeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.controlStructureType, pattern) - } - } - - /** Traverse to nodes where the controlStructureType matches at least one of the regular expressions in `values` - */ - def controlStructureType(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.controlStructureType, patterns) - - /** Traverse to nodes where controlStructureType matches `value` exactly. - */ - def controlStructureTypeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("CONTROL_STRUCTURE_TYPE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.controlStructureType == value } - } - - /** Traverse to nodes where controlStructureType matches one of the elements in `values` exactly. - */ - def controlStructureTypeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - controlStructureTypeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter.exactMultiple[NodeType, String]( - traversal, - node => Some(node.controlStructureType), - values, - "CONTROL_STRUCTURE_TYPE" - ) - } - - /** Traverse to nodes where controlStructureType does not match the regular expression `value`. - */ - def controlStructureTypeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.controlStructureType != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.controlStructureType, pattern) - } - } - - /** Traverse to nodes where controlStructureType does not match any of the regular expressions in `values`. - */ - def controlStructureTypeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.controlStructureType, patterns) - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to parserTypeName property */ - def parserTypeName: Iterator[String] = - traversal.map(_.parserTypeName) - - /** Traverse to nodes where the parserTypeName matches the regular expression `value` - */ - def parserTypeName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - parserTypeNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.parserTypeName, pattern) - } - } - - /** Traverse to nodes where the parserTypeName matches at least one of the regular expressions in `values` - */ - def parserTypeName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.parserTypeName, patterns) - - /** Traverse to nodes where parserTypeName matches `value` exactly. - */ - def parserTypeNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("PARSER_TYPE_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.parserTypeName == value } - } - - /** Traverse to nodes where parserTypeName matches one of the elements in `values` exactly. - */ - def parserTypeNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - parserTypeNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.parserTypeName), values, "PARSER_TYPE_NAME") - } - - /** Traverse to nodes where parserTypeName does not match the regular expression `value`. - */ - def parserTypeNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.parserTypeName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.parserTypeName, pattern) - } - } - - /** Traverse to nodes where parserTypeName does not match any of the regular expressions in `values`. - */ - def parserTypeNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.parserTypeName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Declaration.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Declaration.scala deleted file mode 100644 index a2991617f..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Declaration.scala +++ /dev/null @@ -1,65 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Declaration */ -class DeclarationTraversalExtGen[NodeType <: Declaration](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Dependency.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Dependency.scala deleted file mode 100644 index 49f642975..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Dependency.scala +++ /dev/null @@ -1,176 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Dependency */ -class DependencyTraversalExtGen[NodeType <: Dependency](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to dependencyGroupId property */ - def dependencyGroupId: Iterator[String] = - traversal.flatMap(_.dependencyGroupId) - - /** Traverse to nodes where the dependencyGroupId matches the regular expression `value` - */ - def dependencyGroupId(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.dependencyGroupId.isDefined && node.dependencyGroupId.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.dependencyGroupId.isDefined))(_.dependencyGroupId.get, pattern) - } - } - - /** Traverse to nodes where the dependencyGroupId matches at least one of the regular expressions in `values` - */ - def dependencyGroupId(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.dependencyGroupId.isDefined))(_.dependencyGroupId.get, patterns) - } - - /** Traverse to nodes where dependencyGroupId matches `value` exactly. - */ - def dependencyGroupIdExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.dependencyGroupId.contains(value) } - - /** Traverse to nodes where dependencyGroupId matches one of the elements in `values` exactly. - */ - def dependencyGroupIdExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - dependencyGroupIdExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.dependencyGroupId, values, "DEPENDENCY_GROUP_ID") - } - - /** Traverse to nodes where dependencyGroupId does not match the regular expression `value`. - */ - def dependencyGroupIdNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.dependencyGroupId.isEmpty || node.dependencyGroupId.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.dependencyGroupId.isDefined))(_.dependencyGroupId.get, pattern) - } - } - - /** Traverse to nodes where dependencyGroupId does not match any of the regular expressions in `values`. - */ - def dependencyGroupIdNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.dependencyGroupId.isDefined))(_.dependencyGroupId.get, patterns) - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to version property */ - def version: Iterator[String] = - traversal.map(_.version) - - /** Traverse to nodes where the version matches the regular expression `value` - */ - def version(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - versionExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.version, pattern) - } - } - - /** Traverse to nodes where the version matches at least one of the regular expressions in `values` - */ - def version(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.version, patterns) - - /** Traverse to nodes where version matches `value` exactly. - */ - def versionExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("VERSION", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.version == value } - } - - /** Traverse to nodes where version matches one of the elements in `values` exactly. - */ - def versionExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - versionExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.version), values, "VERSION") - } - - /** Traverse to nodes where version does not match the regular expression `value`. - */ - def versionNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.version != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.version, pattern) - } - } - - /** Traverse to nodes where version does not match any of the regular expressions in `values`. - */ - def versionNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.version, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Expression.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Expression.scala deleted file mode 100644 index d1590e601..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Expression.scala +++ /dev/null @@ -1,312 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Expression */ -class ExpressionTraversalExtGen[NodeType <: Expression](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/FieldIdentifier.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/FieldIdentifier.scala deleted file mode 100644 index 067ca5628..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/FieldIdentifier.scala +++ /dev/null @@ -1,369 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for FieldIdentifier */ -class FieldIdentifierTraversalExtGen[NodeType <: FieldIdentifier](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to canonicalName property */ - def canonicalName: Iterator[String] = - traversal.map(_.canonicalName) - - /** Traverse to nodes where the canonicalName matches the regular expression `value` - */ - def canonicalName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - canonicalNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.canonicalName, pattern) - } - } - - /** Traverse to nodes where the canonicalName matches at least one of the regular expressions in `values` - */ - def canonicalName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.canonicalName, patterns) - - /** Traverse to nodes where canonicalName matches `value` exactly. - */ - def canonicalNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("CANONICAL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.canonicalName == value } - } - - /** Traverse to nodes where canonicalName matches one of the elements in `values` exactly. - */ - def canonicalNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - canonicalNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.canonicalName), values, "CANONICAL_NAME") - } - - /** Traverse to nodes where canonicalName does not match the regular expression `value`. - */ - def canonicalNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.canonicalName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.canonicalName, pattern) - } - } - - /** Traverse to nodes where canonicalName does not match any of the regular expressions in `values`. - */ - def canonicalNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.canonicalName, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/File.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/File.scala deleted file mode 100644 index 8127170e7..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/File.scala +++ /dev/null @@ -1,395 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for File */ -class FileTraversalExtGen[NodeType <: File](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to METHOD via SOURCE_FILE IN edge. - */ - def method: Iterator[Method] = - traversal.flatMap(_.method) - - /** Traverse to NAMESPACE_BLOCK via SOURCE_FILE IN edge. - */ - def namespaceBlock: Iterator[NamespaceBlock] = - traversal.flatMap(_.namespaceBlock) - - /** Traverse to TYPE_DECL via SOURCE_FILE IN edge. - */ - def typeDecl: Iterator[TypeDecl] = - traversal.flatMap(_.typeDecl) - - /** Traverse to COMMENT via AST OUT edge. - */ - def comment: Iterator[Comment] = - traversal.flatMap(_.comment) - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to content property */ - def content: Iterator[String] = - traversal.map(_.content) - - /** Traverse to nodes where the content matches the regular expression `value` - */ - def content(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - contentExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.content, pattern) - } - } - - /** Traverse to nodes where the content matches at least one of the regular expressions in `values` - */ - def content(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.content, patterns) - - /** Traverse to nodes where content matches `value` exactly. - */ - def contentExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CONTENT", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.content == value } - } - - /** Traverse to nodes where content matches one of the elements in `values` exactly. - */ - def contentExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - contentExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.content), values, "CONTENT") - } - - /** Traverse to nodes where content does not match the regular expression `value`. - */ - def contentNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.content != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.content, pattern) - } - } - - /** Traverse to nodes where content does not match any of the regular expressions in `values`. - */ - def contentNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.content, patterns) - } - - /** Traverse to hash property */ - def hash: Iterator[String] = - traversal.flatMap(_.hash) - - /** Traverse to nodes where the hash matches the regular expression `value` - */ - def hash(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.hash.isDefined && node.hash.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal.filter(_.hash.isDefined))(_.hash.get, pattern) - } - } - - /** Traverse to nodes where the hash matches at least one of the regular expressions in `values` - */ - def hash(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.hash.isDefined))(_.hash.get, patterns) - } - - /** Traverse to nodes where hash matches `value` exactly. - */ - def hashExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.hash.contains(value) } - - /** Traverse to nodes where hash matches one of the elements in `values` exactly. - */ - def hashExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - hashExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.hash, values, "HASH") - } - - /** Traverse to nodes where hash does not match the regular expression `value`. - */ - def hashNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.hash.isEmpty || node.hash.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.hash.isDefined))(_.hash.get, pattern) - } - } - - /** Traverse to nodes where hash does not match any of the regular expressions in `values`. - */ - def hashNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.hash.isDefined))(_.hash.get, patterns) - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Finding.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Finding.scala deleted file mode 100644 index 367e6fe3a..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Finding.scala +++ /dev/null @@ -1,7 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Finding */ -class FindingTraversalExtGen[NodeType <: Finding](val traversal: Iterator[NodeType]) extends AnyVal {} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Identifier.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Identifier.scala deleted file mode 100644 index 0a251f6f8..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Identifier.scala +++ /dev/null @@ -1,433 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Identifier */ -class IdentifierTraversalExtGen[NodeType <: Identifier](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to dynamicTypeHintFullName property */ - def dynamicTypeHintFullName: Iterator[String] = - traversal.flatMap(_.dynamicTypeHintFullName) - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to possibleTypes property */ - def possibleTypes: Iterator[String] = - traversal.flatMap(_.possibleTypes) - - /** Traverse to typeFullName property */ - def typeFullName: Iterator[String] = - traversal.map(_.typeFullName) - - /** Traverse to nodes where the typeFullName matches the regular expression `value` - */ - def typeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` - */ - def typeFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeFullName, patterns) - - /** Traverse to nodes where typeFullName matches `value` exactly. - */ - def typeFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeFullName == value } - } - - /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. - */ - def typeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeFullName), values, "TYPE_FULL_NAME") - } - - /** Traverse to nodes where typeFullName does not match the regular expression `value`. - */ - def typeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. - */ - def typeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Import.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Import.scala deleted file mode 100644 index 7b0cb936b..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Import.scala +++ /dev/null @@ -1,361 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Import */ -class ImportTraversalExtGen[NodeType <: Import](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to explicitAs property */ - def explicitAs: Iterator[Boolean] = - traversal.flatMap(_.explicitAs) - - /** Traverse to nodes where the explicitAs equals the given `value` - */ - def explicitAs(value: Boolean): Iterator[NodeType] = - traversal.filter { node => node.explicitAs.isDefined && node.explicitAs.get == value } - - /** Traverse to nodes where explicitAs is not equal to the given `value`. - */ - def explicitAsNot(value: Boolean): Iterator[NodeType] = - traversal.filter { node => !node.explicitAs.isDefined || node.explicitAs.get == value } - - /** Traverse to importedAs property */ - def importedAs: Iterator[String] = - traversal.flatMap(_.importedAs) - - /** Traverse to nodes where the importedAs matches the regular expression `value` - */ - def importedAs(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.importedAs.isDefined && node.importedAs.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.importedAs.isDefined))(_.importedAs.get, pattern) - } - } - - /** Traverse to nodes where the importedAs matches at least one of the regular expressions in `values` - */ - def importedAs(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.importedAs.isDefined))(_.importedAs.get, patterns) - } - - /** Traverse to nodes where importedAs matches `value` exactly. - */ - def importedAsExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.importedAs.contains(value) } - - /** Traverse to nodes where importedAs matches one of the elements in `values` exactly. - */ - def importedAsExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - importedAsExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.importedAs, values, "IMPORTED_AS") - } - - /** Traverse to nodes where importedAs does not match the regular expression `value`. - */ - def importedAsNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.importedAs.isEmpty || node.importedAs.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.importedAs.isDefined))(_.importedAs.get, pattern) - } - } - - /** Traverse to nodes where importedAs does not match any of the regular expressions in `values`. - */ - def importedAsNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.importedAs.isDefined))(_.importedAs.get, patterns) - } - - /** Traverse to importedEntity property */ - def importedEntity: Iterator[String] = - traversal.flatMap(_.importedEntity) - - /** Traverse to nodes where the importedEntity matches the regular expression `value` - */ - def importedEntity(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.importedEntity.isDefined && node.importedEntity.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.importedEntity.isDefined))(_.importedEntity.get, pattern) - } - } - - /** Traverse to nodes where the importedEntity matches at least one of the regular expressions in `values` - */ - def importedEntity(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.importedEntity.isDefined))(_.importedEntity.get, patterns) - } - - /** Traverse to nodes where importedEntity matches `value` exactly. - */ - def importedEntityExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.importedEntity.contains(value) } - - /** Traverse to nodes where importedEntity matches one of the elements in `values` exactly. - */ - def importedEntityExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - importedEntityExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.importedEntity, values, "IMPORTED_ENTITY") - } - - /** Traverse to nodes where importedEntity does not match the regular expression `value`. - */ - def importedEntityNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.importedEntity.isEmpty || node.importedEntity.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.importedEntity.isDefined))(_.importedEntity.get, pattern) - } - } - - /** Traverse to nodes where importedEntity does not match any of the regular expressions in `values`. - */ - def importedEntityNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.importedEntity.isDefined))(_.importedEntity.get, patterns) - } - - /** Traverse to isExplicit property */ - def isExplicit: Iterator[Boolean] = - traversal.flatMap(_.isExplicit) - - /** Traverse to nodes where the isExplicit equals the given `value` - */ - def isExplicit(value: Boolean): Iterator[NodeType] = - traversal.filter { node => node.isExplicit.isDefined && node.isExplicit.get == value } - - /** Traverse to nodes where isExplicit is not equal to the given `value`. - */ - def isExplicitNot(value: Boolean): Iterator[NodeType] = - traversal.filter { node => !node.isExplicit.isDefined || node.isExplicit.get == value } - - /** Traverse to isWildcard property */ - def isWildcard: Iterator[Boolean] = - traversal.flatMap(_.isWildcard) - - /** Traverse to nodes where the isWildcard equals the given `value` - */ - def isWildcard(value: Boolean): Iterator[NodeType] = - traversal.filter { node => node.isWildcard.isDefined && node.isWildcard.get == value } - - /** Traverse to nodes where isWildcard is not equal to the given `value`. - */ - def isWildcardNot(value: Boolean): Iterator[NodeType] = - traversal.filter { node => !node.isWildcard.isDefined || node.isWildcard.get == value } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/JumpLabel.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/JumpLabel.scala deleted file mode 100644 index 3521961cf..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/JumpLabel.scala +++ /dev/null @@ -1,322 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for JumpLabel */ -class JumpLabelTraversalExtGen[NodeType <: JumpLabel](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to parserTypeName property */ - def parserTypeName: Iterator[String] = - traversal.map(_.parserTypeName) - - /** Traverse to nodes where the parserTypeName matches the regular expression `value` - */ - def parserTypeName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - parserTypeNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.parserTypeName, pattern) - } - } - - /** Traverse to nodes where the parserTypeName matches at least one of the regular expressions in `values` - */ - def parserTypeName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.parserTypeName, patterns) - - /** Traverse to nodes where parserTypeName matches `value` exactly. - */ - def parserTypeNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("PARSER_TYPE_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.parserTypeName == value } - } - - /** Traverse to nodes where parserTypeName matches one of the elements in `values` exactly. - */ - def parserTypeNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - parserTypeNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.parserTypeName), values, "PARSER_TYPE_NAME") - } - - /** Traverse to nodes where parserTypeName does not match the regular expression `value`. - */ - def parserTypeNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.parserTypeName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.parserTypeName, pattern) - } - } - - /** Traverse to nodes where parserTypeName does not match any of the regular expressions in `values`. - */ - def parserTypeNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.parserTypeName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/JumpTarget.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/JumpTarget.scala deleted file mode 100644 index 275ecc314..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/JumpTarget.scala +++ /dev/null @@ -1,370 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for JumpTarget */ -class JumpTargetTraversalExtGen[NodeType <: JumpTarget](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to parserTypeName property */ - def parserTypeName: Iterator[String] = - traversal.map(_.parserTypeName) - - /** Traverse to nodes where the parserTypeName matches the regular expression `value` - */ - def parserTypeName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - parserTypeNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.parserTypeName, pattern) - } - } - - /** Traverse to nodes where the parserTypeName matches at least one of the regular expressions in `values` - */ - def parserTypeName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.parserTypeName, patterns) - - /** Traverse to nodes where parserTypeName matches `value` exactly. - */ - def parserTypeNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("PARSER_TYPE_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.parserTypeName == value } - } - - /** Traverse to nodes where parserTypeName matches one of the elements in `values` exactly. - */ - def parserTypeNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - parserTypeNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.parserTypeName), values, "PARSER_TYPE_NAME") - } - - /** Traverse to nodes where parserTypeName does not match the regular expression `value`. - */ - def parserTypeNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.parserTypeName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.parserTypeName, pattern) - } - } - - /** Traverse to nodes where parserTypeName does not match any of the regular expressions in `values`. - */ - def parserTypeNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.parserTypeName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/KeyValuePair.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/KeyValuePair.scala deleted file mode 100644 index c82f3dd0c..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/KeyValuePair.scala +++ /dev/null @@ -1,121 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for KeyValuePair */ -class KeyValuePairTraversalExtGen[NodeType <: KeyValuePair](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to key property */ - def key: Iterator[String] = - traversal.map(_.key) - - /** Traverse to nodes where the key matches the regular expression `value` - */ - def key(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - keyExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.key, pattern) - } - } - - /** Traverse to nodes where the key matches at least one of the regular expressions in `values` - */ - def key(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.key, patterns) - - /** Traverse to nodes where key matches `value` exactly. - */ - def keyExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("KEY", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.key == value } - } - - /** Traverse to nodes where key matches one of the elements in `values` exactly. - */ - def keyExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - keyExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.key), values, "KEY") - } - - /** Traverse to nodes where key does not match the regular expression `value`. - */ - def keyNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.key != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.key, pattern) - } - } - - /** Traverse to nodes where key does not match any of the regular expressions in `values`. - */ - def keyNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.key, patterns) - } - - /** Traverse to value property */ - def value: Iterator[String] = - traversal.map(_.value) - - /** Traverse to nodes where the value matches the regular expression `value` - */ - def value(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - valueExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.value, pattern) - } - } - - /** Traverse to nodes where the value matches at least one of the regular expressions in `values` - */ - def value(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.value, patterns) - - /** Traverse to nodes where value matches `value` exactly. - */ - def valueExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("VALUE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.value == value } - } - - /** Traverse to nodes where value matches one of the elements in `values` exactly. - */ - def valueExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - valueExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.value), values, "VALUE") - } - - /** Traverse to nodes where value does not match the regular expression `value`. - */ - def valueNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.value != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.value, pattern) - } - } - - /** Traverse to nodes where value does not match any of the regular expressions in `values`. - */ - def valueNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.value, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Literal.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Literal.scala deleted file mode 100644 index ebe981051..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Literal.scala +++ /dev/null @@ -1,377 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Literal */ -class LiteralTraversalExtGen[NodeType <: Literal](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to dynamicTypeHintFullName property */ - def dynamicTypeHintFullName: Iterator[String] = - traversal.flatMap(_.dynamicTypeHintFullName) - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to possibleTypes property */ - def possibleTypes: Iterator[String] = - traversal.flatMap(_.possibleTypes) - - /** Traverse to typeFullName property */ - def typeFullName: Iterator[String] = - traversal.map(_.typeFullName) - - /** Traverse to nodes where the typeFullName matches the regular expression `value` - */ - def typeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` - */ - def typeFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeFullName, patterns) - - /** Traverse to nodes where typeFullName matches `value` exactly. - */ - def typeFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeFullName == value } - } - - /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. - */ - def typeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeFullName), values, "TYPE_FULL_NAME") - } - - /** Traverse to nodes where typeFullName does not match the regular expression `value`. - */ - def typeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. - */ - def typeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Local.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Local.scala deleted file mode 100644 index f1ff83b1d..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Local.scala +++ /dev/null @@ -1,406 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Local */ -class LocalTraversalExtGen[NodeType <: Local](val traversal: Iterator[NodeType]) extends AnyVal { - - /** The block in which local is declared. Traverse to BLOCK via AST IN edge. - */ - /** The block in which local is declared. */ - @overflowdb.traversal.help.Doc(info = """The block in which local is declared.""") - def definingBlock: Iterator[Block] = - traversal.flatMap(_.definingBlock) - - /** Places (identifier) where this local is being referenced Traverse to IDENTIFIER via REF IN edge. - */ - /** Places (identifier) where this local is being referenced */ - @overflowdb.traversal.help.Doc(info = """Places (identifier) where this local is being referenced""") - def referencingIdentifiers: Iterator[Identifier] = - traversal.flatMap(_.referencingIdentifiers) - - /** The type of the local. Traverse to TYPE via EVAL_TYPE OUT edge. - */ - /** The type of the local. */ - @overflowdb.traversal.help.Doc(info = """The type of the local.""") - def typ: Iterator[Type] = - traversal.flatMap(_.typ) - - /** Traverse to closureBindingId property */ - def closureBindingId: Iterator[String] = - traversal.flatMap(_.closureBindingId) - - /** Traverse to nodes where the closureBindingId matches the regular expression `value` - */ - def closureBindingId(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.closureBindingId.isDefined && node.closureBindingId.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.closureBindingId.isDefined))(_.closureBindingId.get, pattern) - } - } - - /** Traverse to nodes where the closureBindingId matches at least one of the regular expressions in `values` - */ - def closureBindingId(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.closureBindingId.isDefined))(_.closureBindingId.get, patterns) - } - - /** Traverse to nodes where closureBindingId matches `value` exactly. - */ - def closureBindingIdExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.closureBindingId.contains(value) } - - /** Traverse to nodes where closureBindingId matches one of the elements in `values` exactly. - */ - def closureBindingIdExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - closureBindingIdExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.closureBindingId, values, "CLOSURE_BINDING_ID") - } - - /** Traverse to nodes where closureBindingId does not match the regular expression `value`. - */ - def closureBindingIdNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.closureBindingId.isEmpty || node.closureBindingId.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.closureBindingId.isDefined))(_.closureBindingId.get, pattern) - } - } - - /** Traverse to nodes where closureBindingId does not match any of the regular expressions in `values`. - */ - def closureBindingIdNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.closureBindingId.isDefined))(_.closureBindingId.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to dynamicTypeHintFullName property */ - def dynamicTypeHintFullName: Iterator[String] = - traversal.flatMap(_.dynamicTypeHintFullName) - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to possibleTypes property */ - def possibleTypes: Iterator[String] = - traversal.flatMap(_.possibleTypes) - - /** Traverse to typeFullName property */ - def typeFullName: Iterator[String] = - traversal.map(_.typeFullName) - - /** Traverse to nodes where the typeFullName matches the regular expression `value` - */ - def typeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` - */ - def typeFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeFullName, patterns) - - /** Traverse to nodes where typeFullName matches `value` exactly. - */ - def typeFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeFullName == value } - } - - /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. - */ - def typeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeFullName), values, "TYPE_FULL_NAME") - } - - /** Traverse to nodes where typeFullName does not match the regular expression `value`. - */ - def typeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. - */ - def typeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Location.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Location.scala deleted file mode 100644 index 2be96d293..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Location.scala +++ /dev/null @@ -1,509 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Location */ -class LocationTraversalExtGen[NodeType <: Location](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to className property */ - def className: Iterator[String] = - traversal.map(_.className) - - /** Traverse to nodes where the className matches the regular expression `value` - */ - def className(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - classNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.className, pattern) - } - } - - /** Traverse to nodes where the className matches at least one of the regular expressions in `values` - */ - def className(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.className, patterns) - - /** Traverse to nodes where className matches `value` exactly. - */ - def classNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CLASS_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.className == value } - } - - /** Traverse to nodes where className matches one of the elements in `values` exactly. - */ - def classNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - classNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.className), values, "CLASS_NAME") - } - - /** Traverse to nodes where className does not match the regular expression `value`. - */ - def classNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.className != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.className, pattern) - } - } - - /** Traverse to nodes where className does not match any of the regular expressions in `values`. - */ - def classNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.className, patterns) - } - - /** Traverse to classShortName property */ - def classShortName: Iterator[String] = - traversal.map(_.classShortName) - - /** Traverse to nodes where the classShortName matches the regular expression `value` - */ - def classShortName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - classShortNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.classShortName, pattern) - } - } - - /** Traverse to nodes where the classShortName matches at least one of the regular expressions in `values` - */ - def classShortName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.classShortName, patterns) - - /** Traverse to nodes where classShortName matches `value` exactly. - */ - def classShortNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("CLASS_SHORT_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.classShortName == value } - } - - /** Traverse to nodes where classShortName matches one of the elements in `values` exactly. - */ - def classShortNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - classShortNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.classShortName), values, "CLASS_SHORT_NAME") - } - - /** Traverse to nodes where classShortName does not match the regular expression `value`. - */ - def classShortNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.classShortName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.classShortName, pattern) - } - } - - /** Traverse to nodes where classShortName does not match any of the regular expressions in `values`. - */ - def classShortNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.classShortName, patterns) - } - - /** Traverse to filename property */ - def filename: Iterator[String] = - traversal.map(_.filename) - - /** Traverse to nodes where the filename matches the regular expression `value` - */ - def filename(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - filenameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.filename, pattern) - } - } - - /** Traverse to nodes where the filename matches at least one of the regular expressions in `values` - */ - def filename(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.filename, patterns) - - /** Traverse to nodes where filename matches `value` exactly. - */ - def filenameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("FILENAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.filename == value } - } - - /** Traverse to nodes where filename matches one of the elements in `values` exactly. - */ - def filenameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - filenameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.filename), values, "FILENAME") - } - - /** Traverse to nodes where filename does not match the regular expression `value`. - */ - def filenameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.filename != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.filename, pattern) - } - } - - /** Traverse to nodes where filename does not match any of the regular expressions in `values`. - */ - def filenameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.filename, patterns) - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to methodFullName property */ - def methodFullName: Iterator[String] = - traversal.map(_.methodFullName) - - /** Traverse to nodes where the methodFullName matches the regular expression `value` - */ - def methodFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - methodFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.methodFullName, pattern) - } - } - - /** Traverse to nodes where the methodFullName matches at least one of the regular expressions in `values` - */ - def methodFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.methodFullName, patterns) - - /** Traverse to nodes where methodFullName matches `value` exactly. - */ - def methodFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("METHOD_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.methodFullName == value } - } - - /** Traverse to nodes where methodFullName matches one of the elements in `values` exactly. - */ - def methodFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - methodFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.methodFullName), values, "METHOD_FULL_NAME") - } - - /** Traverse to nodes where methodFullName does not match the regular expression `value`. - */ - def methodFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.methodFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.methodFullName, pattern) - } - } - - /** Traverse to nodes where methodFullName does not match any of the regular expressions in `values`. - */ - def methodFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.methodFullName, patterns) - } - - /** Traverse to methodShortName property */ - def methodShortName: Iterator[String] = - traversal.map(_.methodShortName) - - /** Traverse to nodes where the methodShortName matches the regular expression `value` - */ - def methodShortName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - methodShortNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.methodShortName, pattern) - } - } - - /** Traverse to nodes where the methodShortName matches at least one of the regular expressions in `values` - */ - def methodShortName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.methodShortName, patterns) - - /** Traverse to nodes where methodShortName matches `value` exactly. - */ - def methodShortNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("METHOD_SHORT_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.methodShortName == value } - } - - /** Traverse to nodes where methodShortName matches one of the elements in `values` exactly. - */ - def methodShortNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - methodShortNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.methodShortName), values, "METHOD_SHORT_NAME") - } - - /** Traverse to nodes where methodShortName does not match the regular expression `value`. - */ - def methodShortNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.methodShortName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.methodShortName, pattern) - } - } - - /** Traverse to nodes where methodShortName does not match any of the regular expressions in `values`. - */ - def methodShortNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.methodShortName, patterns) - } - - /** Traverse to nodeLabel property */ - def nodeLabel: Iterator[String] = - traversal.map(_.nodeLabel) - - /** Traverse to nodes where the nodeLabel matches the regular expression `value` - */ - def nodeLabel(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nodeLabelExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.nodeLabel, pattern) - } - } - - /** Traverse to nodes where the nodeLabel matches at least one of the regular expressions in `values` - */ - def nodeLabel(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.nodeLabel, patterns) - - /** Traverse to nodes where nodeLabel matches `value` exactly. - */ - def nodeLabelExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NODE_LABEL", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.nodeLabel == value } - } - - /** Traverse to nodes where nodeLabel matches one of the elements in `values` exactly. - */ - def nodeLabelExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nodeLabelExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.nodeLabel), values, "NODE_LABEL") - } - - /** Traverse to nodes where nodeLabel does not match the regular expression `value`. - */ - def nodeLabelNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.nodeLabel != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.nodeLabel, pattern) - } - } - - /** Traverse to nodes where nodeLabel does not match any of the regular expressions in `values`. - */ - def nodeLabelNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.nodeLabel, patterns) - } - - /** Traverse to packageName property */ - def packageName: Iterator[String] = - traversal.map(_.packageName) - - /** Traverse to nodes where the packageName matches the regular expression `value` - */ - def packageName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - packageNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.packageName, pattern) - } - } - - /** Traverse to nodes where the packageName matches at least one of the regular expressions in `values` - */ - def packageName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.packageName, patterns) - - /** Traverse to nodes where packageName matches `value` exactly. - */ - def packageNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("PACKAGE_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.packageName == value } - } - - /** Traverse to nodes where packageName matches one of the elements in `values` exactly. - */ - def packageNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - packageNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.packageName), values, "PACKAGE_NAME") - } - - /** Traverse to nodes where packageName does not match the regular expression `value`. - */ - def packageNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.packageName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.packageName, pattern) - } - } - - /** Traverse to nodes where packageName does not match any of the regular expressions in `values`. - */ - def packageNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.packageName, patterns) - } - - /** Traverse to symbol property */ - def symbol: Iterator[String] = - traversal.map(_.symbol) - - /** Traverse to nodes where the symbol matches the regular expression `value` - */ - def symbol(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - symbolExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.symbol, pattern) - } - } - - /** Traverse to nodes where the symbol matches at least one of the regular expressions in `values` - */ - def symbol(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.symbol, patterns) - - /** Traverse to nodes where symbol matches `value` exactly. - */ - def symbolExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("SYMBOL", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.symbol == value } - } - - /** Traverse to nodes where symbol matches one of the elements in `values` exactly. - */ - def symbolExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - symbolExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.symbol), values, "SYMBOL") - } - - /** Traverse to nodes where symbol does not match the regular expression `value`. - */ - def symbolNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.symbol != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.symbol, pattern) - } - } - - /** Traverse to nodes where symbol does not match any of the regular expressions in `values`. - */ - def symbolNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.symbol, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Member.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Member.scala deleted file mode 100644 index 8ac4cc801..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Member.scala +++ /dev/null @@ -1,462 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Member */ -class MemberTraversalExtGen[NodeType <: Member](val traversal: Iterator[NodeType]) extends AnyVal { - - /** The type declaration this member is defined in Traverse to TYPE_DECL via AST IN edge. - */ - /** The type declaration this member is defined in */ - @overflowdb.traversal.help.Doc(info = """The type declaration this member is defined in""") - def typeDecl: Iterator[TypeDecl] = - traversal.map(_.typeDecl) - - /** Traverse to member type Traverse to TYPE via EVAL_TYPE OUT edge. - */ - /** Traverse to member type */ - @overflowdb.traversal.help.Doc(info = """Traverse to member type""") - def typ: Iterator[Type] = - traversal.flatMap(_.typ) - - /** Traverse to astParentFullName property */ - def astParentFullName: Iterator[String] = - traversal.map(_.astParentFullName) - - /** Traverse to nodes where the astParentFullName matches the regular expression `value` - */ - def astParentFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - astParentFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.astParentFullName, pattern) - } - } - - /** Traverse to nodes where the astParentFullName matches at least one of the regular expressions in `values` - */ - def astParentFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.astParentFullName, patterns) - - /** Traverse to nodes where astParentFullName matches `value` exactly. - */ - def astParentFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("AST_PARENT_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.astParentFullName == value } - } - - /** Traverse to nodes where astParentFullName matches one of the elements in `values` exactly. - */ - def astParentFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - astParentFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter.exactMultiple[NodeType, String]( - traversal, - node => Some(node.astParentFullName), - values, - "AST_PARENT_FULL_NAME" - ) - } - - /** Traverse to nodes where astParentFullName does not match the regular expression `value`. - */ - def astParentFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.astParentFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.astParentFullName, pattern) - } - } - - /** Traverse to nodes where astParentFullName does not match any of the regular expressions in `values`. - */ - def astParentFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.astParentFullName, patterns) - } - - /** Traverse to astParentType property */ - def astParentType: Iterator[String] = - traversal.map(_.astParentType) - - /** Traverse to nodes where the astParentType matches the regular expression `value` - */ - def astParentType(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - astParentTypeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.astParentType, pattern) - } - } - - /** Traverse to nodes where the astParentType matches at least one of the regular expressions in `values` - */ - def astParentType(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.astParentType, patterns) - - /** Traverse to nodes where astParentType matches `value` exactly. - */ - def astParentTypeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("AST_PARENT_TYPE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.astParentType == value } - } - - /** Traverse to nodes where astParentType matches one of the elements in `values` exactly. - */ - def astParentTypeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - astParentTypeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.astParentType), values, "AST_PARENT_TYPE") - } - - /** Traverse to nodes where astParentType does not match the regular expression `value`. - */ - def astParentTypeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.astParentType != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.astParentType, pattern) - } - } - - /** Traverse to nodes where astParentType does not match any of the regular expressions in `values`. - */ - def astParentTypeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.astParentType, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to dynamicTypeHintFullName property */ - def dynamicTypeHintFullName: Iterator[String] = - traversal.flatMap(_.dynamicTypeHintFullName) - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to possibleTypes property */ - def possibleTypes: Iterator[String] = - traversal.flatMap(_.possibleTypes) - - /** Traverse to typeFullName property */ - def typeFullName: Iterator[String] = - traversal.map(_.typeFullName) - - /** Traverse to nodes where the typeFullName matches the regular expression `value` - */ - def typeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` - */ - def typeFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeFullName, patterns) - - /** Traverse to nodes where typeFullName matches `value` exactly. - */ - def typeFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeFullName == value } - } - - /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. - */ - def typeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeFullName), values, "TYPE_FULL_NAME") - } - - /** Traverse to nodes where typeFullName does not match the regular expression `value`. - */ - def typeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. - */ - def typeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MetaData.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MetaData.scala deleted file mode 100644 index 31f2414c9..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MetaData.scala +++ /dev/null @@ -1,235 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for MetaData */ -class MetaDataTraversalExtGen[NodeType <: MetaData](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to hash property */ - def hash: Iterator[String] = - traversal.flatMap(_.hash) - - /** Traverse to nodes where the hash matches the regular expression `value` - */ - def hash(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.hash.isDefined && node.hash.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal.filter(_.hash.isDefined))(_.hash.get, pattern) - } - } - - /** Traverse to nodes where the hash matches at least one of the regular expressions in `values` - */ - def hash(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.hash.isDefined))(_.hash.get, patterns) - } - - /** Traverse to nodes where hash matches `value` exactly. - */ - def hashExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.hash.contains(value) } - - /** Traverse to nodes where hash matches one of the elements in `values` exactly. - */ - def hashExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - hashExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.hash, values, "HASH") - } - - /** Traverse to nodes where hash does not match the regular expression `value`. - */ - def hashNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.hash.isEmpty || node.hash.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.hash.isDefined))(_.hash.get, pattern) - } - } - - /** Traverse to nodes where hash does not match any of the regular expressions in `values`. - */ - def hashNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.hash.isDefined))(_.hash.get, patterns) - } - - /** Traverse to language property */ - def language: Iterator[String] = - traversal.map(_.language) - - /** Traverse to nodes where the language matches the regular expression `value` - */ - def language(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - languageExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.language, pattern) - } - } - - /** Traverse to nodes where the language matches at least one of the regular expressions in `values` - */ - def language(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.language, patterns) - - /** Traverse to nodes where language matches `value` exactly. - */ - def languageExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("LANGUAGE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.language == value } - } - - /** Traverse to nodes where language matches one of the elements in `values` exactly. - */ - def languageExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - languageExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.language), values, "LANGUAGE") - } - - /** Traverse to nodes where language does not match the regular expression `value`. - */ - def languageNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.language != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.language, pattern) - } - } - - /** Traverse to nodes where language does not match any of the regular expressions in `values`. - */ - def languageNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.language, patterns) - } - - /** Traverse to overlays property */ - def overlays: Iterator[String] = - traversal.flatMap(_.overlays) - - /** Traverse to root property */ - def root: Iterator[String] = - traversal.map(_.root) - - /** Traverse to nodes where the root matches the regular expression `value` - */ - def root(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - rootExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.root, pattern) - } - } - - /** Traverse to nodes where the root matches at least one of the regular expressions in `values` - */ - def root(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.root, patterns) - - /** Traverse to nodes where root matches `value` exactly. - */ - def rootExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("ROOT", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.root == value } - } - - /** Traverse to nodes where root matches one of the elements in `values` exactly. - */ - def rootExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - rootExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.root), values, "ROOT") - } - - /** Traverse to nodes where root does not match the regular expression `value`. - */ - def rootNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.root != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.root, pattern) - } - } - - /** Traverse to nodes where root does not match any of the regular expressions in `values`. - */ - def rootNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.root, patterns) - } - - /** Traverse to version property */ - def version: Iterator[String] = - traversal.map(_.version) - - /** Traverse to nodes where the version matches the regular expression `value` - */ - def version(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - versionExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.version, pattern) - } - } - - /** Traverse to nodes where the version matches at least one of the regular expressions in `values` - */ - def version(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.version, patterns) - - /** Traverse to nodes where version matches `value` exactly. - */ - def versionExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("VERSION", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.version == value } - } - - /** Traverse to nodes where version matches one of the elements in `values` exactly. - */ - def versionExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - versionExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.version), values, "VERSION") - } - - /** Traverse to nodes where version does not match the regular expression `value`. - */ - def versionNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.version != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.version, pattern) - } - } - - /** Traverse to nodes where version does not match any of the regular expressions in `values`. - */ - def versionNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.version, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Method.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Method.scala deleted file mode 100644 index cffc8d5e0..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Method.scala +++ /dev/null @@ -1,846 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Method */ -class MethodTraversalExtGen[NodeType <: Method](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Root of the abstract syntax tree Traverse to BLOCK via AST OUT edge. - */ - /** Root of the abstract syntax tree */ - @overflowdb.traversal.help.Doc(info = """Root of the abstract syntax tree""") - def block: Iterator[Block] = - traversal.map(_.block) - - /** First control flow graph node Traverse to CFG_NODE via CFG OUT edge. - */ - /** First control flow graph node */ - @overflowdb.traversal.help.Doc(info = """First control flow graph node""") - def cfgFirst: Iterator[CfgNode] = - traversal.flatMap(_.cfgFirst) - - /** Literals used in the method Traverse to LITERAL via CONTAINS OUT edge. - */ - /** Literals used in the method */ - @overflowdb.traversal.help.Doc(info = """Literals used in the method""") - def literal: Iterator[Literal] = - traversal.flatMap(_.literal) - - /** Formal return parameters Traverse to METHOD_RETURN via AST OUT edge. - */ - /** Formal return parameters */ - @overflowdb.traversal.help.Doc(info = """Formal return parameters""") - def methodReturn: Iterator[MethodReturn] = - traversal.map(_.methodReturn) - - /** Parameters of the method Traverse to METHOD_PARAMETER_IN via AST OUT edge. - */ - /** Parameters of the method */ - @overflowdb.traversal.help.Doc(info = """Parameters of the method""") - def parameter: Iterator[MethodParameterIn] = - traversal.flatMap(_.parameter) - - /** Traverse to astParentFullName property */ - def astParentFullName: Iterator[String] = - traversal.map(_.astParentFullName) - - /** Traverse to nodes where the astParentFullName matches the regular expression `value` - */ - def astParentFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - astParentFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.astParentFullName, pattern) - } - } - - /** Traverse to nodes where the astParentFullName matches at least one of the regular expressions in `values` - */ - def astParentFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.astParentFullName, patterns) - - /** Traverse to nodes where astParentFullName matches `value` exactly. - */ - def astParentFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("AST_PARENT_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.astParentFullName == value } - } - - /** Traverse to nodes where astParentFullName matches one of the elements in `values` exactly. - */ - def astParentFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - astParentFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter.exactMultiple[NodeType, String]( - traversal, - node => Some(node.astParentFullName), - values, - "AST_PARENT_FULL_NAME" - ) - } - - /** Traverse to nodes where astParentFullName does not match the regular expression `value`. - */ - def astParentFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.astParentFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.astParentFullName, pattern) - } - } - - /** Traverse to nodes where astParentFullName does not match any of the regular expressions in `values`. - */ - def astParentFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.astParentFullName, patterns) - } - - /** Traverse to astParentType property */ - def astParentType: Iterator[String] = - traversal.map(_.astParentType) - - /** Traverse to nodes where the astParentType matches the regular expression `value` - */ - def astParentType(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - astParentTypeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.astParentType, pattern) - } - } - - /** Traverse to nodes where the astParentType matches at least one of the regular expressions in `values` - */ - def astParentType(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.astParentType, patterns) - - /** Traverse to nodes where astParentType matches `value` exactly. - */ - def astParentTypeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("AST_PARENT_TYPE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.astParentType == value } - } - - /** Traverse to nodes where astParentType matches one of the elements in `values` exactly. - */ - def astParentTypeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - astParentTypeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.astParentType), values, "AST_PARENT_TYPE") - } - - /** Traverse to nodes where astParentType does not match the regular expression `value`. - */ - def astParentTypeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.astParentType != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.astParentType, pattern) - } - } - - /** Traverse to nodes where astParentType does not match any of the regular expressions in `values`. - */ - def astParentTypeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.astParentType, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to columnNumberEnd property */ - def columnNumberEnd: Iterator[scala.Int] = - traversal.flatMap(_.columnNumberEnd) - - /** Traverse to nodes where the columnNumberEnd equals the given `value` - */ - def columnNumberEnd(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumberEnd.isDefined && node.columnNumberEnd.get == value } - - /** Traverse to nodes where the columnNumberEnd equals at least one of the given `values` - */ - def columnNumberEnd(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumberEnd.isDefined && vset.contains(node.columnNumberEnd.get) } - } - - /** Traverse to nodes where the columnNumberEnd is greater than the given `value` - */ - def columnNumberEndGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumberEnd.isDefined && node.columnNumberEnd.get > value } - - /** Traverse to nodes where the columnNumberEnd is greater than or equal the given `value` - */ - def columnNumberEndGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumberEnd.isDefined && node.columnNumberEnd.get >= value } - - /** Traverse to nodes where the columnNumberEnd is less than the given `value` - */ - def columnNumberEndLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumberEnd.isDefined && node.columnNumberEnd.get < value } - - /** Traverse to nodes where the columnNumberEnd is less than or equal the given `value` - */ - def columnNumberEndLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumberEnd.isDefined && node.columnNumberEnd.get <= value } - - /** Traverse to nodes where columnNumberEnd is not equal to the given `value`. - */ - def columnNumberEndNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumberEnd.isDefined || node.columnNumberEnd.get != value } - - /** Traverse to nodes where columnNumberEnd is not equal to any of the given `values`. - */ - def columnNumberEndNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumberEnd.isDefined || !vset.contains(node.columnNumberEnd.get) } - } - - /** Traverse to filename property */ - def filename: Iterator[String] = - traversal.map(_.filename) - - /** Traverse to nodes where the filename matches the regular expression `value` - */ - def filename(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - filenameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.filename, pattern) - } - } - - /** Traverse to nodes where the filename matches at least one of the regular expressions in `values` - */ - def filename(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.filename, patterns) - - /** Traverse to nodes where filename matches `value` exactly. - */ - def filenameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("FILENAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.filename == value } - } - - /** Traverse to nodes where filename matches one of the elements in `values` exactly. - */ - def filenameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - filenameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.filename), values, "FILENAME") - } - - /** Traverse to nodes where filename does not match the regular expression `value`. - */ - def filenameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.filename != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.filename, pattern) - } - } - - /** Traverse to nodes where filename does not match any of the regular expressions in `values`. - */ - def filenameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.filename, patterns) - } - - /** Traverse to fullName property */ - def fullName: Iterator[String] = - traversal.map(_.fullName) - - /** Traverse to nodes where the fullName matches the regular expression `value` - */ - def fullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - fullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.fullName, pattern) - } - } - - /** Traverse to nodes where the fullName matches at least one of the regular expressions in `values` - */ - def fullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.fullName, patterns) - - /** Traverse to nodes where fullName matches `value` exactly. - */ - def fullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.fullName == value } - } - - /** Traverse to nodes where fullName matches one of the elements in `values` exactly. - */ - def fullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - fullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.fullName), values, "FULL_NAME") - } - - /** Traverse to nodes where fullName does not match the regular expression `value`. - */ - def fullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.fullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.fullName, pattern) - } - } - - /** Traverse to nodes where fullName does not match any of the regular expressions in `values`. - */ - def fullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.fullName, patterns) - } - - /** Traverse to hash property */ - def hash: Iterator[String] = - traversal.flatMap(_.hash) - - /** Traverse to nodes where the hash matches the regular expression `value` - */ - def hash(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.hash.isDefined && node.hash.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal.filter(_.hash.isDefined))(_.hash.get, pattern) - } - } - - /** Traverse to nodes where the hash matches at least one of the regular expressions in `values` - */ - def hash(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.hash.isDefined))(_.hash.get, patterns) - } - - /** Traverse to nodes where hash matches `value` exactly. - */ - def hashExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.hash.contains(value) } - - /** Traverse to nodes where hash matches one of the elements in `values` exactly. - */ - def hashExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - hashExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.hash, values, "HASH") - } - - /** Traverse to nodes where hash does not match the regular expression `value`. - */ - def hashNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.hash.isEmpty || node.hash.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.hash.isDefined))(_.hash.get, pattern) - } - } - - /** Traverse to nodes where hash does not match any of the regular expressions in `values`. - */ - def hashNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.hash.isDefined))(_.hash.get, patterns) - } - - /** Traverse to isExternal property */ - def isExternal: Iterator[Boolean] = - traversal.map(_.isExternal) - - /** Traverse to nodes where the isExternal equals the given `value` - */ - def isExternal(value: Boolean): Iterator[NodeType] = - traversal.filter { _.isExternal == value } - - /** Traverse to nodes where isExternal is not equal to the given `value`. - */ - def isExternalNot(value: Boolean): Iterator[NodeType] = - traversal.filter { _.isExternal != value } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to lineNumberEnd property */ - def lineNumberEnd: Iterator[scala.Int] = - traversal.flatMap(_.lineNumberEnd) - - /** Traverse to nodes where the lineNumberEnd equals the given `value` - */ - def lineNumberEnd(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumberEnd.isDefined && node.lineNumberEnd.get == value } - - /** Traverse to nodes where the lineNumberEnd equals at least one of the given `values` - */ - def lineNumberEnd(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumberEnd.isDefined && vset.contains(node.lineNumberEnd.get) } - } - - /** Traverse to nodes where the lineNumberEnd is greater than the given `value` - */ - def lineNumberEndGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumberEnd.isDefined && node.lineNumberEnd.get > value } - - /** Traverse to nodes where the lineNumberEnd is greater than or equal the given `value` - */ - def lineNumberEndGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumberEnd.isDefined && node.lineNumberEnd.get >= value } - - /** Traverse to nodes where the lineNumberEnd is less than the given `value` - */ - def lineNumberEndLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumberEnd.isDefined && node.lineNumberEnd.get < value } - - /** Traverse to nodes where the lineNumberEnd is less than or equal the given `value` - */ - def lineNumberEndLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumberEnd.isDefined && node.lineNumberEnd.get <= value } - - /** Traverse to nodes where lineNumberEnd is not equal to the given `value`. - */ - def lineNumberEndNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumberEnd.isDefined || node.lineNumberEnd.get != value } - - /** Traverse to nodes where lineNumberEnd is not equal to any of the given `values`. - */ - def lineNumberEndNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumberEnd.isDefined || !vset.contains(node.lineNumberEnd.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to offset property */ - def offset: Iterator[scala.Int] = - traversal.flatMap(_.offset) - - /** Traverse to nodes where the offset equals the given `value` - */ - def offset(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offset.isDefined && node.offset.get == value } - - /** Traverse to nodes where the offset equals at least one of the given `values` - */ - def offset(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.offset.isDefined && vset.contains(node.offset.get) } - } - - /** Traverse to nodes where the offset is greater than the given `value` - */ - def offsetGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offset.isDefined && node.offset.get > value } - - /** Traverse to nodes where the offset is greater than or equal the given `value` - */ - def offsetGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offset.isDefined && node.offset.get >= value } - - /** Traverse to nodes where the offset is less than the given `value` - */ - def offsetLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offset.isDefined && node.offset.get < value } - - /** Traverse to nodes where the offset is less than or equal the given `value` - */ - def offsetLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offset.isDefined && node.offset.get <= value } - - /** Traverse to nodes where offset is not equal to the given `value`. - */ - def offsetNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.offset.isDefined || node.offset.get != value } - - /** Traverse to nodes where offset is not equal to any of the given `values`. - */ - def offsetNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.offset.isDefined || !vset.contains(node.offset.get) } - } - - /** Traverse to offsetEnd property */ - def offsetEnd: Iterator[scala.Int] = - traversal.flatMap(_.offsetEnd) - - /** Traverse to nodes where the offsetEnd equals the given `value` - */ - def offsetEnd(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offsetEnd.isDefined && node.offsetEnd.get == value } - - /** Traverse to nodes where the offsetEnd equals at least one of the given `values` - */ - def offsetEnd(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.offsetEnd.isDefined && vset.contains(node.offsetEnd.get) } - } - - /** Traverse to nodes where the offsetEnd is greater than the given `value` - */ - def offsetEndGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offsetEnd.isDefined && node.offsetEnd.get > value } - - /** Traverse to nodes where the offsetEnd is greater than or equal the given `value` - */ - def offsetEndGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offsetEnd.isDefined && node.offsetEnd.get >= value } - - /** Traverse to nodes where the offsetEnd is less than the given `value` - */ - def offsetEndLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offsetEnd.isDefined && node.offsetEnd.get < value } - - /** Traverse to nodes where the offsetEnd is less than or equal the given `value` - */ - def offsetEndLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offsetEnd.isDefined && node.offsetEnd.get <= value } - - /** Traverse to nodes where offsetEnd is not equal to the given `value`. - */ - def offsetEndNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.offsetEnd.isDefined || node.offsetEnd.get != value } - - /** Traverse to nodes where offsetEnd is not equal to any of the given `values`. - */ - def offsetEndNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.offsetEnd.isDefined || !vset.contains(node.offsetEnd.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to signature property */ - def signature: Iterator[String] = - traversal.map(_.signature) - - /** Traverse to nodes where the signature matches the regular expression `value` - */ - def signature(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - signatureExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.signature, pattern) - } - } - - /** Traverse to nodes where the signature matches at least one of the regular expressions in `values` - */ - def signature(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.signature, patterns) - - /** Traverse to nodes where signature matches `value` exactly. - */ - def signatureExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("SIGNATURE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.signature == value } - } - - /** Traverse to nodes where signature matches one of the elements in `values` exactly. - */ - def signatureExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - signatureExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.signature), values, "SIGNATURE") - } - - /** Traverse to nodes where signature does not match the regular expression `value`. - */ - def signatureNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.signature != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.signature, pattern) - } - } - - /** Traverse to nodes where signature does not match any of the regular expressions in `values`. - */ - def signatureNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.signature, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodParameterIn.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodParameterIn.scala deleted file mode 100644 index d208f7ebd..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodParameterIn.scala +++ /dev/null @@ -1,537 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for MethodParameterIn */ -class MethodParameterInTraversalExtGen[NodeType <: MethodParameterIn](val traversal: Iterator[NodeType]) - extends AnyVal { - - /** Traverse to method associated with this formal parameter Traverse to METHOD via AST IN edge. - */ - /** Traverse to method associated with this formal parameter */ - @overflowdb.traversal.help.Doc(info = """Traverse to method associated with this formal parameter""") - def method: Iterator[Method] = - traversal.map(_.method) - - /** Places (identifier) where this parameter is being referenced Traverse to IDENTIFIER via REF IN edge. - */ - /** Places (identifier) where this parameter is being referenced */ - @overflowdb.traversal.help.Doc(info = """Places (identifier) where this parameter is being referenced""") - def referencingIdentifiers: Iterator[Identifier] = - traversal.flatMap(_.referencingIdentifiers) - - /** Traverse to corresponding formal output parameter Traverse to METHOD_PARAMETER_OUT via PARAMETER_LINK OUT edge. - */ - /** Traverse to corresponding formal output parameter */ - @overflowdb.traversal.help.Doc(info = """Traverse to corresponding formal output parameter""") - def asOutput: Iterator[MethodParameterOut] = - traversal.flatMap(_.asOutput) - - /** Traverse to parameter type Traverse to TYPE via EVAL_TYPE OUT edge. - */ - /** Traverse to parameter type */ - @overflowdb.traversal.help.Doc(info = """Traverse to parameter type""") - def typ: Iterator[Type] = - traversal.map(_.typ) - - /** Traverse to closureBindingId property */ - def closureBindingId: Iterator[String] = - traversal.flatMap(_.closureBindingId) - - /** Traverse to nodes where the closureBindingId matches the regular expression `value` - */ - def closureBindingId(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.closureBindingId.isDefined && node.closureBindingId.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.closureBindingId.isDefined))(_.closureBindingId.get, pattern) - } - } - - /** Traverse to nodes where the closureBindingId matches at least one of the regular expressions in `values` - */ - def closureBindingId(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.closureBindingId.isDefined))(_.closureBindingId.get, patterns) - } - - /** Traverse to nodes where closureBindingId matches `value` exactly. - */ - def closureBindingIdExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.closureBindingId.contains(value) } - - /** Traverse to nodes where closureBindingId matches one of the elements in `values` exactly. - */ - def closureBindingIdExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - closureBindingIdExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.closureBindingId, values, "CLOSURE_BINDING_ID") - } - - /** Traverse to nodes where closureBindingId does not match the regular expression `value`. - */ - def closureBindingIdNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.closureBindingId.isEmpty || node.closureBindingId.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.closureBindingId.isDefined))(_.closureBindingId.get, pattern) - } - } - - /** Traverse to nodes where closureBindingId does not match any of the regular expressions in `values`. - */ - def closureBindingIdNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.closureBindingId.isDefined))(_.closureBindingId.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to dynamicTypeHintFullName property */ - def dynamicTypeHintFullName: Iterator[String] = - traversal.flatMap(_.dynamicTypeHintFullName) - - /** Traverse to evaluationStrategy property */ - def evaluationStrategy: Iterator[String] = - traversal.map(_.evaluationStrategy) - - /** Traverse to nodes where the evaluationStrategy matches the regular expression `value` - */ - def evaluationStrategy(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - evaluationStrategyExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.evaluationStrategy, pattern) - } - } - - /** Traverse to nodes where the evaluationStrategy matches at least one of the regular expressions in `values` - */ - def evaluationStrategy(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.evaluationStrategy, patterns) - - /** Traverse to nodes where evaluationStrategy matches `value` exactly. - */ - def evaluationStrategyExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("EVALUATION_STRATEGY", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.evaluationStrategy == value } - } - - /** Traverse to nodes where evaluationStrategy matches one of the elements in `values` exactly. - */ - def evaluationStrategyExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - evaluationStrategyExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter.exactMultiple[NodeType, String]( - traversal, - node => Some(node.evaluationStrategy), - values, - "EVALUATION_STRATEGY" - ) - } - - /** Traverse to nodes where evaluationStrategy does not match the regular expression `value`. - */ - def evaluationStrategyNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.evaluationStrategy != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.evaluationStrategy, pattern) - } - } - - /** Traverse to nodes where evaluationStrategy does not match any of the regular expressions in `values`. - */ - def evaluationStrategyNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.evaluationStrategy, patterns) - } - - /** Traverse to index property */ - def index: Iterator[scala.Int] = - traversal.map(_.index) - - /** Traverse to nodes where the index equals the given `value` - */ - def index(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.index == value } - - /** Traverse to nodes where the index equals at least one of the given `values` - */ - def index(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.index) } - } - - /** Traverse to nodes where the index is greater than the given `value` - */ - def indexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.index > value } - - /** Traverse to nodes where the index is greater than or equal the given `value` - */ - def indexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.index >= value } - - /** Traverse to nodes where the index is less than the given `value` - */ - def indexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.index < value } - - /** Traverse to nodes where the index is less than or equal the given `value` - */ - def indexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.index <= value } - - /** Traverse to nodes where index is not equal to the given `value`. - */ - def indexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.index != value } - - /** Traverse to nodes where index is not equal to any of the given `values`. - */ - def indexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.index) } - } - - /** Traverse to isVariadic property */ - def isVariadic: Iterator[Boolean] = - traversal.map(_.isVariadic) - - /** Traverse to nodes where the isVariadic equals the given `value` - */ - def isVariadic(value: Boolean): Iterator[NodeType] = - traversal.filter { _.isVariadic == value } - - /** Traverse to nodes where isVariadic is not equal to the given `value`. - */ - def isVariadicNot(value: Boolean): Iterator[NodeType] = - traversal.filter { _.isVariadic != value } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to possibleTypes property */ - def possibleTypes: Iterator[String] = - traversal.flatMap(_.possibleTypes) - - /** Traverse to typeFullName property */ - def typeFullName: Iterator[String] = - traversal.map(_.typeFullName) - - /** Traverse to nodes where the typeFullName matches the regular expression `value` - */ - def typeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` - */ - def typeFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeFullName, patterns) - - /** Traverse to nodes where typeFullName matches `value` exactly. - */ - def typeFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeFullName == value } - } - - /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. - */ - def typeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeFullName), values, "TYPE_FULL_NAME") - } - - /** Traverse to nodes where typeFullName does not match the regular expression `value`. - */ - def typeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. - */ - def typeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodParameterOut.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodParameterOut.scala deleted file mode 100644 index 3cfe1180b..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodParameterOut.scala +++ /dev/null @@ -1,463 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for MethodParameterOut */ -class MethodParameterOutTraversalExtGen[NodeType <: MethodParameterOut](val traversal: Iterator[NodeType]) - extends AnyVal { - - /** Traverse to METHOD_PARAMETER_IN via PARAMETER_LINK IN edge. - */ - def asInput: Iterator[MethodParameterIn] = - traversal.flatMap(_.asInput) - - /** Traverse to METHOD via AST IN edge. - */ - def method: Iterator[Method] = - traversal.map(_.method) - - /** Traverse to parameter type Traverse to TYPE via EVAL_TYPE OUT edge. - */ - /** Traverse to parameter type */ - @overflowdb.traversal.help.Doc(info = """Traverse to parameter type""") - def typ: Iterator[Type] = - traversal.flatMap(_.typ) - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to evaluationStrategy property */ - def evaluationStrategy: Iterator[String] = - traversal.map(_.evaluationStrategy) - - /** Traverse to nodes where the evaluationStrategy matches the regular expression `value` - */ - def evaluationStrategy(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - evaluationStrategyExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.evaluationStrategy, pattern) - } - } - - /** Traverse to nodes where the evaluationStrategy matches at least one of the regular expressions in `values` - */ - def evaluationStrategy(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.evaluationStrategy, patterns) - - /** Traverse to nodes where evaluationStrategy matches `value` exactly. - */ - def evaluationStrategyExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("EVALUATION_STRATEGY", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.evaluationStrategy == value } - } - - /** Traverse to nodes where evaluationStrategy matches one of the elements in `values` exactly. - */ - def evaluationStrategyExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - evaluationStrategyExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter.exactMultiple[NodeType, String]( - traversal, - node => Some(node.evaluationStrategy), - values, - "EVALUATION_STRATEGY" - ) - } - - /** Traverse to nodes where evaluationStrategy does not match the regular expression `value`. - */ - def evaluationStrategyNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.evaluationStrategy != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.evaluationStrategy, pattern) - } - } - - /** Traverse to nodes where evaluationStrategy does not match any of the regular expressions in `values`. - */ - def evaluationStrategyNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.evaluationStrategy, patterns) - } - - /** Traverse to index property */ - def index: Iterator[scala.Int] = - traversal.map(_.index) - - /** Traverse to nodes where the index equals the given `value` - */ - def index(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.index == value } - - /** Traverse to nodes where the index equals at least one of the given `values` - */ - def index(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.index) } - } - - /** Traverse to nodes where the index is greater than the given `value` - */ - def indexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.index > value } - - /** Traverse to nodes where the index is greater than or equal the given `value` - */ - def indexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.index >= value } - - /** Traverse to nodes where the index is less than the given `value` - */ - def indexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.index < value } - - /** Traverse to nodes where the index is less than or equal the given `value` - */ - def indexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.index <= value } - - /** Traverse to nodes where index is not equal to the given `value`. - */ - def indexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.index != value } - - /** Traverse to nodes where index is not equal to any of the given `values`. - */ - def indexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.index) } - } - - /** Traverse to isVariadic property */ - def isVariadic: Iterator[Boolean] = - traversal.map(_.isVariadic) - - /** Traverse to nodes where the isVariadic equals the given `value` - */ - def isVariadic(value: Boolean): Iterator[NodeType] = - traversal.filter { _.isVariadic == value } - - /** Traverse to nodes where isVariadic is not equal to the given `value`. - */ - def isVariadicNot(value: Boolean): Iterator[NodeType] = - traversal.filter { _.isVariadic != value } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to typeFullName property */ - def typeFullName: Iterator[String] = - traversal.map(_.typeFullName) - - /** Traverse to nodes where the typeFullName matches the regular expression `value` - */ - def typeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` - */ - def typeFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeFullName, patterns) - - /** Traverse to nodes where typeFullName matches `value` exactly. - */ - def typeFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeFullName == value } - } - - /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. - */ - def typeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeFullName), values, "TYPE_FULL_NAME") - } - - /** Traverse to nodes where typeFullName does not match the regular expression `value`. - */ - def typeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. - */ - def typeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodRef.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodRef.scala deleted file mode 100644 index d4a4503d2..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodRef.scala +++ /dev/null @@ -1,441 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for MethodRef */ -class MethodRefTraversalExtGen[NodeType <: MethodRef](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to referenced method. Traverse to METHOD via REF OUT edge. - */ - /** Traverse to referenced method. */ - @overflowdb.traversal.help.Doc(info = """Traverse to referenced method.""") - def referencedMethod: Iterator[Method] = - traversal.map(_.referencedMethod) - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to dynamicTypeHintFullName property */ - def dynamicTypeHintFullName: Iterator[String] = - traversal.flatMap(_.dynamicTypeHintFullName) - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to methodFullName property */ - def methodFullName: Iterator[String] = - traversal.map(_.methodFullName) - - /** Traverse to nodes where the methodFullName matches the regular expression `value` - */ - def methodFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - methodFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.methodFullName, pattern) - } - } - - /** Traverse to nodes where the methodFullName matches at least one of the regular expressions in `values` - */ - def methodFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.methodFullName, patterns) - - /** Traverse to nodes where methodFullName matches `value` exactly. - */ - def methodFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("METHOD_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.methodFullName == value } - } - - /** Traverse to nodes where methodFullName matches one of the elements in `values` exactly. - */ - def methodFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - methodFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.methodFullName), values, "METHOD_FULL_NAME") - } - - /** Traverse to nodes where methodFullName does not match the regular expression `value`. - */ - def methodFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.methodFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.methodFullName, pattern) - } - } - - /** Traverse to nodes where methodFullName does not match any of the regular expressions in `values`. - */ - def methodFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.methodFullName, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to possibleTypes property */ - def possibleTypes: Iterator[String] = - traversal.flatMap(_.possibleTypes) - - /** Traverse to typeFullName property */ - def typeFullName: Iterator[String] = - traversal.map(_.typeFullName) - - /** Traverse to nodes where the typeFullName matches the regular expression `value` - */ - def typeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` - */ - def typeFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeFullName, patterns) - - /** Traverse to nodes where typeFullName matches `value` exactly. - */ - def typeFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeFullName == value } - } - - /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. - */ - def typeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeFullName), values, "TYPE_FULL_NAME") - } - - /** Traverse to nodes where typeFullName does not match the regular expression `value`. - */ - def typeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. - */ - def typeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodReturn.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodReturn.scala deleted file mode 100644 index a9ac1efb7..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/MethodReturn.scala +++ /dev/null @@ -1,340 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for MethodReturn */ -class MethodReturnTraversalExtGen[NodeType <: MethodReturn](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to RETURN via CFG IN edge. - */ - def toReturn: Iterator[Return] = - traversal.flatMap(_.toReturn) - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to dynamicTypeHintFullName property */ - def dynamicTypeHintFullName: Iterator[String] = - traversal.flatMap(_.dynamicTypeHintFullName) - - /** Traverse to evaluationStrategy property */ - def evaluationStrategy: Iterator[String] = - traversal.map(_.evaluationStrategy) - - /** Traverse to nodes where the evaluationStrategy matches the regular expression `value` - */ - def evaluationStrategy(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - evaluationStrategyExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.evaluationStrategy, pattern) - } - } - - /** Traverse to nodes where the evaluationStrategy matches at least one of the regular expressions in `values` - */ - def evaluationStrategy(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.evaluationStrategy, patterns) - - /** Traverse to nodes where evaluationStrategy matches `value` exactly. - */ - def evaluationStrategyExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("EVALUATION_STRATEGY", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.evaluationStrategy == value } - } - - /** Traverse to nodes where evaluationStrategy matches one of the elements in `values` exactly. - */ - def evaluationStrategyExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - evaluationStrategyExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter.exactMultiple[NodeType, String]( - traversal, - node => Some(node.evaluationStrategy), - values, - "EVALUATION_STRATEGY" - ) - } - - /** Traverse to nodes where evaluationStrategy does not match the regular expression `value`. - */ - def evaluationStrategyNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.evaluationStrategy != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.evaluationStrategy, pattern) - } - } - - /** Traverse to nodes where evaluationStrategy does not match any of the regular expressions in `values`. - */ - def evaluationStrategyNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.evaluationStrategy, patterns) - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to possibleTypes property */ - def possibleTypes: Iterator[String] = - traversal.flatMap(_.possibleTypes) - - /** Traverse to typeFullName property */ - def typeFullName: Iterator[String] = - traversal.map(_.typeFullName) - - /** Traverse to nodes where the typeFullName matches the regular expression `value` - */ - def typeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` - */ - def typeFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeFullName, patterns) - - /** Traverse to nodes where typeFullName matches `value` exactly. - */ - def typeFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeFullName == value } - } - - /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. - */ - def typeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeFullName), values, "TYPE_FULL_NAME") - } - - /** Traverse to nodes where typeFullName does not match the regular expression `value`. - */ - def typeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. - */ - def typeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Modifier.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Modifier.scala deleted file mode 100644 index dd078e944..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Modifier.scala +++ /dev/null @@ -1,266 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Modifier */ -class ModifierTraversalExtGen[NodeType <: Modifier](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to modifierType property */ - def modifierType: Iterator[String] = - traversal.map(_.modifierType) - - /** Traverse to nodes where the modifierType matches the regular expression `value` - */ - def modifierType(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - modifierTypeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.modifierType, pattern) - } - } - - /** Traverse to nodes where the modifierType matches at least one of the regular expressions in `values` - */ - def modifierType(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.modifierType, patterns) - - /** Traverse to nodes where modifierType matches `value` exactly. - */ - def modifierTypeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("MODIFIER_TYPE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.modifierType == value } - } - - /** Traverse to nodes where modifierType matches one of the elements in `values` exactly. - */ - def modifierTypeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - modifierTypeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.modifierType), values, "MODIFIER_TYPE") - } - - /** Traverse to nodes where modifierType does not match the regular expression `value`. - */ - def modifierTypeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.modifierType != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.modifierType, pattern) - } - } - - /** Traverse to nodes where modifierType does not match any of the regular expressions in `values`. - */ - def modifierTypeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.modifierType, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Namespace.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Namespace.scala deleted file mode 100644 index 0fabc52a6..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Namespace.scala +++ /dev/null @@ -1,265 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Namespace */ -class NamespaceTraversalExtGen[NodeType <: Namespace](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/NamespaceBlock.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/NamespaceBlock.scala deleted file mode 100644 index 879e330ae..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/NamespaceBlock.scala +++ /dev/null @@ -1,377 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for NamespaceBlock */ -class NamespaceBlockTraversalExtGen[NodeType <: NamespaceBlock](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to filename property */ - def filename: Iterator[String] = - traversal.map(_.filename) - - /** Traverse to nodes where the filename matches the regular expression `value` - */ - def filename(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - filenameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.filename, pattern) - } - } - - /** Traverse to nodes where the filename matches at least one of the regular expressions in `values` - */ - def filename(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.filename, patterns) - - /** Traverse to nodes where filename matches `value` exactly. - */ - def filenameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("FILENAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.filename == value } - } - - /** Traverse to nodes where filename matches one of the elements in `values` exactly. - */ - def filenameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - filenameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.filename), values, "FILENAME") - } - - /** Traverse to nodes where filename does not match the regular expression `value`. - */ - def filenameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.filename != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.filename, pattern) - } - } - - /** Traverse to nodes where filename does not match any of the regular expressions in `values`. - */ - def filenameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.filename, patterns) - } - - /** Traverse to fullName property */ - def fullName: Iterator[String] = - traversal.map(_.fullName) - - /** Traverse to nodes where the fullName matches the regular expression `value` - */ - def fullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - fullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.fullName, pattern) - } - } - - /** Traverse to nodes where the fullName matches at least one of the regular expressions in `values` - */ - def fullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.fullName, patterns) - - /** Traverse to nodes where fullName matches `value` exactly. - */ - def fullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.fullName == value } - } - - /** Traverse to nodes where fullName matches one of the elements in `values` exactly. - */ - def fullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - fullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.fullName), values, "FULL_NAME") - } - - /** Traverse to nodes where fullName does not match the regular expression `value`. - */ - def fullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.fullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.fullName, pattern) - } - } - - /** Traverse to nodes where fullName does not match any of the regular expressions in `values`. - */ - def fullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.fullName, patterns) - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/NodeTraversalImplicits.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/NodeTraversalImplicits.scala deleted file mode 100644 index 78e434303..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/NodeTraversalImplicits.scala +++ /dev/null @@ -1,206 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import io.shiftleft.codepropertygraph.generated.nodes._ - -trait NodeTraversalImplicits extends NodeBaseTypeTraversalImplicits { - implicit def toStoredNodeTraversalExtGen[NodeType <: StoredNode]( - trav: IterableOnce[NodeType] - ): StoredNodeTraversalExtGen[NodeType] = new StoredNodeTraversalExtGen(trav.iterator) - - implicit def toAnnotationTraversalExtGen[NodeType <: Annotation]( - trav: IterableOnce[NodeType] - ): AnnotationTraversalExtGen[NodeType] = new AnnotationTraversalExtGen(trav.iterator) - implicit def toAnnotationLiteralTraversalExtGen[NodeType <: AnnotationLiteral]( - trav: IterableOnce[NodeType] - ): AnnotationLiteralTraversalExtGen[NodeType] = new AnnotationLiteralTraversalExtGen(trav.iterator) - implicit def toAnnotationParameterTraversalExtGen[NodeType <: AnnotationParameter]( - trav: IterableOnce[NodeType] - ): AnnotationParameterTraversalExtGen[NodeType] = new AnnotationParameterTraversalExtGen(trav.iterator) - implicit def toAnnotationParameterAssignTraversalExtGen[NodeType <: AnnotationParameterAssign]( - trav: IterableOnce[NodeType] - ): AnnotationParameterAssignTraversalExtGen[NodeType] = new AnnotationParameterAssignTraversalExtGen(trav.iterator) - implicit def toArrayInitializerTraversalExtGen[NodeType <: ArrayInitializer]( - trav: IterableOnce[NodeType] - ): ArrayInitializerTraversalExtGen[NodeType] = new ArrayInitializerTraversalExtGen(trav.iterator) - implicit def toBindingTraversalExtGen[NodeType <: Binding]( - trav: IterableOnce[NodeType] - ): BindingTraversalExtGen[NodeType] = new BindingTraversalExtGen(trav.iterator) - implicit def toBlockTraversalExtGen[NodeType <: Block](trav: IterableOnce[NodeType]): BlockTraversalExtGen[NodeType] = - new BlockTraversalExtGen(trav.iterator) - implicit def toCallTraversalExtGen[NodeType <: Call](trav: IterableOnce[NodeType]): CallTraversalExtGen[NodeType] = - new CallTraversalExtGen(trav.iterator) - implicit def toClosureBindingTraversalExtGen[NodeType <: ClosureBinding]( - trav: IterableOnce[NodeType] - ): ClosureBindingTraversalExtGen[NodeType] = new ClosureBindingTraversalExtGen(trav.iterator) - implicit def toCommentTraversalExtGen[NodeType <: Comment]( - trav: IterableOnce[NodeType] - ): CommentTraversalExtGen[NodeType] = new CommentTraversalExtGen(trav.iterator) - implicit def toConfigFileTraversalExtGen[NodeType <: ConfigFile]( - trav: IterableOnce[NodeType] - ): ConfigFileTraversalExtGen[NodeType] = new ConfigFileTraversalExtGen(trav.iterator) - implicit def toControlStructureTraversalExtGen[NodeType <: ControlStructure]( - trav: IterableOnce[NodeType] - ): ControlStructureTraversalExtGen[NodeType] = new ControlStructureTraversalExtGen(trav.iterator) - implicit def toDependencyTraversalExtGen[NodeType <: Dependency]( - trav: IterableOnce[NodeType] - ): DependencyTraversalExtGen[NodeType] = new DependencyTraversalExtGen(trav.iterator) - implicit def toFieldIdentifierTraversalExtGen[NodeType <: FieldIdentifier]( - trav: IterableOnce[NodeType] - ): FieldIdentifierTraversalExtGen[NodeType] = new FieldIdentifierTraversalExtGen(trav.iterator) - implicit def toFileTraversalExtGen[NodeType <: File](trav: IterableOnce[NodeType]): FileTraversalExtGen[NodeType] = - new FileTraversalExtGen(trav.iterator) - implicit def toFindingTraversalExtGen[NodeType <: Finding]( - trav: IterableOnce[NodeType] - ): FindingTraversalExtGen[NodeType] = new FindingTraversalExtGen(trav.iterator) - implicit def toIdentifierTraversalExtGen[NodeType <: Identifier]( - trav: IterableOnce[NodeType] - ): IdentifierTraversalExtGen[NodeType] = new IdentifierTraversalExtGen(trav.iterator) - implicit def toImportTraversalExtGen[NodeType <: Import]( - trav: IterableOnce[NodeType] - ): ImportTraversalExtGen[NodeType] = new ImportTraversalExtGen(trav.iterator) - implicit def toJumpLabelTraversalExtGen[NodeType <: JumpLabel]( - trav: IterableOnce[NodeType] - ): JumpLabelTraversalExtGen[NodeType] = new JumpLabelTraversalExtGen(trav.iterator) - implicit def toJumpTargetTraversalExtGen[NodeType <: JumpTarget]( - trav: IterableOnce[NodeType] - ): JumpTargetTraversalExtGen[NodeType] = new JumpTargetTraversalExtGen(trav.iterator) - implicit def toKeyValuePairTraversalExtGen[NodeType <: KeyValuePair]( - trav: IterableOnce[NodeType] - ): KeyValuePairTraversalExtGen[NodeType] = new KeyValuePairTraversalExtGen(trav.iterator) - implicit def toLiteralTraversalExtGen[NodeType <: Literal]( - trav: IterableOnce[NodeType] - ): LiteralTraversalExtGen[NodeType] = new LiteralTraversalExtGen(trav.iterator) - implicit def toLocalTraversalExtGen[NodeType <: Local](trav: IterableOnce[NodeType]): LocalTraversalExtGen[NodeType] = - new LocalTraversalExtGen(trav.iterator) - implicit def toLocationTraversalExtGen[NodeType <: Location]( - trav: IterableOnce[NodeType] - ): LocationTraversalExtGen[NodeType] = new LocationTraversalExtGen(trav.iterator) - implicit def toMemberTraversalExtGen[NodeType <: Member]( - trav: IterableOnce[NodeType] - ): MemberTraversalExtGen[NodeType] = new MemberTraversalExtGen(trav.iterator) - implicit def toMetaDataTraversalExtGen[NodeType <: MetaData]( - trav: IterableOnce[NodeType] - ): MetaDataTraversalExtGen[NodeType] = new MetaDataTraversalExtGen(trav.iterator) - implicit def toMethodTraversalExtGen[NodeType <: Method]( - trav: IterableOnce[NodeType] - ): MethodTraversalExtGen[NodeType] = new MethodTraversalExtGen(trav.iterator) - implicit def toMethodParameterInTraversalExtGen[NodeType <: MethodParameterIn]( - trav: IterableOnce[NodeType] - ): MethodParameterInTraversalExtGen[NodeType] = new MethodParameterInTraversalExtGen(trav.iterator) - implicit def toMethodParameterOutTraversalExtGen[NodeType <: MethodParameterOut]( - trav: IterableOnce[NodeType] - ): MethodParameterOutTraversalExtGen[NodeType] = new MethodParameterOutTraversalExtGen(trav.iterator) - implicit def toMethodRefTraversalExtGen[NodeType <: MethodRef]( - trav: IterableOnce[NodeType] - ): MethodRefTraversalExtGen[NodeType] = new MethodRefTraversalExtGen(trav.iterator) - implicit def toMethodReturnTraversalExtGen[NodeType <: MethodReturn]( - trav: IterableOnce[NodeType] - ): MethodReturnTraversalExtGen[NodeType] = new MethodReturnTraversalExtGen(trav.iterator) - implicit def toModifierTraversalExtGen[NodeType <: Modifier]( - trav: IterableOnce[NodeType] - ): ModifierTraversalExtGen[NodeType] = new ModifierTraversalExtGen(trav.iterator) - implicit def toNamespaceTraversalExtGen[NodeType <: Namespace]( - trav: IterableOnce[NodeType] - ): NamespaceTraversalExtGen[NodeType] = new NamespaceTraversalExtGen(trav.iterator) - implicit def toNamespaceBlockTraversalExtGen[NodeType <: NamespaceBlock]( - trav: IterableOnce[NodeType] - ): NamespaceBlockTraversalExtGen[NodeType] = new NamespaceBlockTraversalExtGen(trav.iterator) - implicit def toReturnTraversalExtGen[NodeType <: Return]( - trav: IterableOnce[NodeType] - ): ReturnTraversalExtGen[NodeType] = new ReturnTraversalExtGen(trav.iterator) - implicit def toTagTraversalExtGen[NodeType <: Tag](trav: IterableOnce[NodeType]): TagTraversalExtGen[NodeType] = - new TagTraversalExtGen(trav.iterator) - implicit def toTagNodePairTraversalExtGen[NodeType <: TagNodePair]( - trav: IterableOnce[NodeType] - ): TagNodePairTraversalExtGen[NodeType] = new TagNodePairTraversalExtGen(trav.iterator) - implicit def toTemplateDomTraversalExtGen[NodeType <: TemplateDom]( - trav: IterableOnce[NodeType] - ): TemplateDomTraversalExtGen[NodeType] = new TemplateDomTraversalExtGen(trav.iterator) - implicit def toTypeTraversalExtGen[NodeType <: Type](trav: IterableOnce[NodeType]): TypeTraversalExtGen[NodeType] = - new TypeTraversalExtGen(trav.iterator) - implicit def toTypeArgumentTraversalExtGen[NodeType <: TypeArgument]( - trav: IterableOnce[NodeType] - ): TypeArgumentTraversalExtGen[NodeType] = new TypeArgumentTraversalExtGen(trav.iterator) - implicit def toTypeDeclTraversalExtGen[NodeType <: TypeDecl]( - trav: IterableOnce[NodeType] - ): TypeDeclTraversalExtGen[NodeType] = new TypeDeclTraversalExtGen(trav.iterator) - implicit def toTypeParameterTraversalExtGen[NodeType <: TypeParameter]( - trav: IterableOnce[NodeType] - ): TypeParameterTraversalExtGen[NodeType] = new TypeParameterTraversalExtGen(trav.iterator) - implicit def toTypeRefTraversalExtGen[NodeType <: TypeRef]( - trav: IterableOnce[NodeType] - ): TypeRefTraversalExtGen[NodeType] = new TypeRefTraversalExtGen(trav.iterator) - implicit def toUnknownTraversalExtGen[NodeType <: Unknown]( - trav: IterableOnce[NodeType] - ): UnknownTraversalExtGen[NodeType] = new UnknownTraversalExtGen(trav.iterator) -} - -// lower priority implicits for base types -trait NodeBaseTypeTraversalImplicits extends overflowdb.traversal.Implicits { - implicit def toAstNodeTraversalExtGen[NodeType <: AstNode]( - trav: IterableOnce[NodeType] - ): AstNodeTraversalExtGen[NodeType] = new AstNodeTraversalExtGen(trav.iterator) - implicit def toCallReprTraversalExtGen[NodeType <: CallRepr]( - trav: IterableOnce[NodeType] - ): CallReprTraversalExtGen[NodeType] = new CallReprTraversalExtGen(trav.iterator) - implicit def toCfgNodeTraversalExtGen[NodeType <: CfgNode]( - trav: IterableOnce[NodeType] - ): CfgNodeTraversalExtGen[NodeType] = new CfgNodeTraversalExtGen(trav.iterator) - implicit def toDeclarationTraversalExtGen[NodeType <: Declaration]( - trav: IterableOnce[NodeType] - ): DeclarationTraversalExtGen[NodeType] = new DeclarationTraversalExtGen(trav.iterator) - implicit def toExpressionTraversalExtGen[NodeType <: Expression]( - trav: IterableOnce[NodeType] - ): ExpressionTraversalExtGen[NodeType] = new ExpressionTraversalExtGen(trav.iterator) -} - -class StoredNodeTraversalExtGen[NodeType <: StoredNode](val traversal: Iterator[NodeType]) extends AnyVal { - def _aliasOfOut: Iterator[StoredNode] = traversal.flatMap { _._aliasOfOut } - def _aliasOfIn: Iterator[StoredNode] = traversal.flatMap { _._aliasOfIn } - def _argumentOut: Iterator[StoredNode] = traversal.flatMap { _._argumentOut } - def _argumentIn: Iterator[StoredNode] = traversal.flatMap { _._argumentIn } - def _astOut: Iterator[StoredNode] = traversal.flatMap { _._astOut } - def _astIn: Iterator[StoredNode] = traversal.flatMap { _._astIn } - def _bindsOut: Iterator[StoredNode] = traversal.flatMap { _._bindsOut } - def _bindsIn: Iterator[StoredNode] = traversal.flatMap { _._bindsIn } - def _bindsToOut: Iterator[StoredNode] = traversal.flatMap { _._bindsToOut } - def _bindsToIn: Iterator[StoredNode] = traversal.flatMap { _._bindsToIn } - def _callOut: Iterator[StoredNode] = traversal.flatMap { _._callOut } - def _callIn: Iterator[StoredNode] = traversal.flatMap { _._callIn } - def _captureOut: Iterator[StoredNode] = traversal.flatMap { _._captureOut } - def _captureIn: Iterator[StoredNode] = traversal.flatMap { _._captureIn } - def _capturedByOut: Iterator[StoredNode] = traversal.flatMap { _._capturedByOut } - def _capturedByIn: Iterator[StoredNode] = traversal.flatMap { _._capturedByIn } - def _cdgOut: Iterator[StoredNode] = traversal.flatMap { _._cdgOut } - def _cdgIn: Iterator[StoredNode] = traversal.flatMap { _._cdgIn } - def _cfgOut: Iterator[StoredNode] = traversal.flatMap { _._cfgOut } - def _cfgIn: Iterator[StoredNode] = traversal.flatMap { _._cfgIn } - def _conditionOut: Iterator[StoredNode] = traversal.flatMap { _._conditionOut } - def _conditionIn: Iterator[StoredNode] = traversal.flatMap { _._conditionIn } - def _containsOut: Iterator[StoredNode] = traversal.flatMap { _._containsOut } - def _containsIn: Iterator[StoredNode] = traversal.flatMap { _._containsIn } - def _dominateOut: Iterator[StoredNode] = traversal.flatMap { _._dominateOut } - def _dominateIn: Iterator[StoredNode] = traversal.flatMap { _._dominateIn } - def _evalTypeOut: Iterator[StoredNode] = traversal.flatMap { _._evalTypeOut } - def _evalTypeIn: Iterator[StoredNode] = traversal.flatMap { _._evalTypeIn } - def _importsOut: Iterator[StoredNode] = traversal.flatMap { _._importsOut } - def _importsIn: Iterator[StoredNode] = traversal.flatMap { _._importsIn } - def _inheritsFromOut: Iterator[StoredNode] = traversal.flatMap { _._inheritsFromOut } - def _inheritsFromIn: Iterator[StoredNode] = traversal.flatMap { _._inheritsFromIn } - def _isCallForImportOut: Iterator[StoredNode] = traversal.flatMap { _._isCallForImportOut } - def _isCallForImportIn: Iterator[StoredNode] = traversal.flatMap { _._isCallForImportIn } - def _parameterLinkOut: Iterator[StoredNode] = traversal.flatMap { _._parameterLinkOut } - def _parameterLinkIn: Iterator[StoredNode] = traversal.flatMap { _._parameterLinkIn } - def _postDominateOut: Iterator[StoredNode] = traversal.flatMap { _._postDominateOut } - def _postDominateIn: Iterator[StoredNode] = traversal.flatMap { _._postDominateIn } - def _reachingDefOut: Iterator[StoredNode] = traversal.flatMap { _._reachingDefOut } - def _reachingDefIn: Iterator[StoredNode] = traversal.flatMap { _._reachingDefIn } - def _receiverOut: Iterator[StoredNode] = traversal.flatMap { _._receiverOut } - def _receiverIn: Iterator[StoredNode] = traversal.flatMap { _._receiverIn } - def _refOut: Iterator[StoredNode] = traversal.flatMap { _._refOut } - def _refIn: Iterator[StoredNode] = traversal.flatMap { _._refIn } - def _sourceFileOut: Iterator[StoredNode] = traversal.flatMap { _._sourceFileOut } - def _sourceFileIn: Iterator[StoredNode] = traversal.flatMap { _._sourceFileIn } - def _taggedByOut: Iterator[StoredNode] = traversal.flatMap { _._taggedByOut } - def _taggedByIn: Iterator[StoredNode] = traversal.flatMap { _._taggedByIn } -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Return.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Return.scala deleted file mode 100644 index 9b78b0f81..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Return.scala +++ /dev/null @@ -1,312 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Return */ -class ReturnTraversalExtGen[NodeType <: Return](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Tag.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Tag.scala deleted file mode 100644 index 978b3c77c..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Tag.scala +++ /dev/null @@ -1,121 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Tag */ -class TagTraversalExtGen[NodeType <: Tag](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to value property */ - def value: Iterator[String] = - traversal.map(_.value) - - /** Traverse to nodes where the value matches the regular expression `value` - */ - def value(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - valueExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.value, pattern) - } - } - - /** Traverse to nodes where the value matches at least one of the regular expressions in `values` - */ - def value(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.value, patterns) - - /** Traverse to nodes where value matches `value` exactly. - */ - def valueExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("VALUE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.value == value } - } - - /** Traverse to nodes where value matches one of the elements in `values` exactly. - */ - def valueExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - valueExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.value), values, "VALUE") - } - - /** Traverse to nodes where value does not match the regular expression `value`. - */ - def valueNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.value != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.value, pattern) - } - } - - /** Traverse to nodes where value does not match any of the regular expressions in `values`. - */ - def valueNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.value, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TagNodePair.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TagNodePair.scala deleted file mode 100644 index 4840c3bac..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TagNodePair.scala +++ /dev/null @@ -1,7 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for TagNodePair */ -class TagNodePairTraversalExtGen[NodeType <: TagNodePair](val traversal: Iterator[NodeType]) extends AnyVal {} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TemplateDom.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TemplateDom.scala deleted file mode 100644 index b79dc464f..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TemplateDom.scala +++ /dev/null @@ -1,368 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for TemplateDom */ -class TemplateDomTraversalExtGen[NodeType <: TemplateDom](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Type.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Type.scala deleted file mode 100644 index 90ad33fbd..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Type.scala +++ /dev/null @@ -1,192 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Type */ -class TypeTraversalExtGen[NodeType <: Type](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Direct alias type declarations. Traverse to TYPE_DECL via ALIAS_OF IN edge. - */ - /** Direct alias type declarations. */ - @overflowdb.traversal.help.Doc(info = """Direct alias type declarations.""") - def aliasTypeDecl: Iterator[TypeDecl] = - traversal.flatMap(_.aliasTypeDecl) - - /** Type declaration which is referenced by this type. Traverse to TYPE_DECL via REF OUT edge. - */ - /** Type declaration which is referenced by this type. */ - @overflowdb.traversal.help.Doc(info = """Type declaration which is referenced by this type.""") - def referencedTypeDecl: Iterator[TypeDecl] = - traversal.flatMap(_.referencedTypeDecl) - - /** Traverse to fullName property */ - def fullName: Iterator[String] = - traversal.map(_.fullName) - - /** Traverse to nodes where the fullName matches the regular expression `value` - */ - def fullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - fullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.fullName, pattern) - } - } - - /** Traverse to nodes where the fullName matches at least one of the regular expressions in `values` - */ - def fullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.fullName, patterns) - - /** Traverse to nodes where fullName matches `value` exactly. - */ - def fullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.fullName == value } - } - - /** Traverse to nodes where fullName matches one of the elements in `values` exactly. - */ - def fullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - fullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.fullName), values, "FULL_NAME") - } - - /** Traverse to nodes where fullName does not match the regular expression `value`. - */ - def fullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.fullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.fullName, pattern) - } - } - - /** Traverse to nodes where fullName does not match any of the regular expressions in `values`. - */ - def fullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.fullName, patterns) - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to typeDeclFullName property */ - def typeDeclFullName: Iterator[String] = - traversal.map(_.typeDeclFullName) - - /** Traverse to nodes where the typeDeclFullName matches the regular expression `value` - */ - def typeDeclFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeDeclFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeDeclFullName, pattern) - } - } - - /** Traverse to nodes where the typeDeclFullName matches at least one of the regular expressions in `values` - */ - def typeDeclFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeDeclFullName, patterns) - - /** Traverse to nodes where typeDeclFullName matches `value` exactly. - */ - def typeDeclFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_DECL_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeDeclFullName == value } - } - - /** Traverse to nodes where typeDeclFullName matches one of the elements in `values` exactly. - */ - def typeDeclFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeDeclFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeDeclFullName), values, "TYPE_DECL_FULL_NAME") - } - - /** Traverse to nodes where typeDeclFullName does not match the regular expression `value`. - */ - def typeDeclFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeDeclFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeDeclFullName, pattern) - } - } - - /** Traverse to nodes where typeDeclFullName does not match any of the regular expressions in `values`. - */ - def typeDeclFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeDeclFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeArgument.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeArgument.scala deleted file mode 100644 index 741d85be4..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeArgument.scala +++ /dev/null @@ -1,209 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for TypeArgument */ -class TypeArgumentTraversalExtGen[NodeType <: TypeArgument](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeDecl.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeDecl.scala deleted file mode 100644 index c779a9cc7..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeDecl.scala +++ /dev/null @@ -1,674 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for TypeDecl */ -class TypeDeclTraversalExtGen[NodeType <: TypeDecl](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to NAMESPACE_BLOCK via AST IN edge. - */ - def namespaceBlock: Iterator[NamespaceBlock] = - traversal.flatMap(_.namespaceBlock) - - /** Traverse to TYPE via ALIAS_OF OUT edge. - */ - def aliasedType: Iterator[Type] = - traversal.flatMap(_.aliasedType) - - /** Traverse to aliasTypeFullName property */ - def aliasTypeFullName: Iterator[String] = - traversal.flatMap(_.aliasTypeFullName) - - /** Traverse to nodes where the aliasTypeFullName matches the regular expression `value` - */ - def aliasTypeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.aliasTypeFullName.isDefined && node.aliasTypeFullName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.aliasTypeFullName.isDefined))(_.aliasTypeFullName.get, pattern) - } - } - - /** Traverse to nodes where the aliasTypeFullName matches at least one of the regular expressions in `values` - */ - def aliasTypeFullName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.aliasTypeFullName.isDefined))(_.aliasTypeFullName.get, patterns) - } - - /** Traverse to nodes where aliasTypeFullName matches `value` exactly. - */ - def aliasTypeFullNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.aliasTypeFullName.contains(value) } - - /** Traverse to nodes where aliasTypeFullName matches one of the elements in `values` exactly. - */ - def aliasTypeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - aliasTypeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.aliasTypeFullName, values, "ALIAS_TYPE_FULL_NAME") - } - - /** Traverse to nodes where aliasTypeFullName does not match the regular expression `value`. - */ - def aliasTypeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.aliasTypeFullName.isEmpty || node.aliasTypeFullName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.aliasTypeFullName.isDefined))(_.aliasTypeFullName.get, pattern) - } - } - - /** Traverse to nodes where aliasTypeFullName does not match any of the regular expressions in `values`. - */ - def aliasTypeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.aliasTypeFullName.isDefined))(_.aliasTypeFullName.get, patterns) - } - - /** Traverse to astParentFullName property */ - def astParentFullName: Iterator[String] = - traversal.map(_.astParentFullName) - - /** Traverse to nodes where the astParentFullName matches the regular expression `value` - */ - def astParentFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - astParentFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.astParentFullName, pattern) - } - } - - /** Traverse to nodes where the astParentFullName matches at least one of the regular expressions in `values` - */ - def astParentFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.astParentFullName, patterns) - - /** Traverse to nodes where astParentFullName matches `value` exactly. - */ - def astParentFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("AST_PARENT_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.astParentFullName == value } - } - - /** Traverse to nodes where astParentFullName matches one of the elements in `values` exactly. - */ - def astParentFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - astParentFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter.exactMultiple[NodeType, String]( - traversal, - node => Some(node.astParentFullName), - values, - "AST_PARENT_FULL_NAME" - ) - } - - /** Traverse to nodes where astParentFullName does not match the regular expression `value`. - */ - def astParentFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.astParentFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.astParentFullName, pattern) - } - } - - /** Traverse to nodes where astParentFullName does not match any of the regular expressions in `values`. - */ - def astParentFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.astParentFullName, patterns) - } - - /** Traverse to astParentType property */ - def astParentType: Iterator[String] = - traversal.map(_.astParentType) - - /** Traverse to nodes where the astParentType matches the regular expression `value` - */ - def astParentType(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - astParentTypeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.astParentType, pattern) - } - } - - /** Traverse to nodes where the astParentType matches at least one of the regular expressions in `values` - */ - def astParentType(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.astParentType, patterns) - - /** Traverse to nodes where astParentType matches `value` exactly. - */ - def astParentTypeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("AST_PARENT_TYPE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.astParentType == value } - } - - /** Traverse to nodes where astParentType matches one of the elements in `values` exactly. - */ - def astParentTypeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - astParentTypeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.astParentType), values, "AST_PARENT_TYPE") - } - - /** Traverse to nodes where astParentType does not match the regular expression `value`. - */ - def astParentTypeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.astParentType != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.astParentType, pattern) - } - } - - /** Traverse to nodes where astParentType does not match any of the regular expressions in `values`. - */ - def astParentTypeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.astParentType, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to filename property */ - def filename: Iterator[String] = - traversal.map(_.filename) - - /** Traverse to nodes where the filename matches the regular expression `value` - */ - def filename(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - filenameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.filename, pattern) - } - } - - /** Traverse to nodes where the filename matches at least one of the regular expressions in `values` - */ - def filename(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.filename, patterns) - - /** Traverse to nodes where filename matches `value` exactly. - */ - def filenameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("FILENAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.filename == value } - } - - /** Traverse to nodes where filename matches one of the elements in `values` exactly. - */ - def filenameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - filenameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.filename), values, "FILENAME") - } - - /** Traverse to nodes where filename does not match the regular expression `value`. - */ - def filenameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.filename != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.filename, pattern) - } - } - - /** Traverse to nodes where filename does not match any of the regular expressions in `values`. - */ - def filenameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.filename, patterns) - } - - /** Traverse to fullName property */ - def fullName: Iterator[String] = - traversal.map(_.fullName) - - /** Traverse to nodes where the fullName matches the regular expression `value` - */ - def fullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - fullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.fullName, pattern) - } - } - - /** Traverse to nodes where the fullName matches at least one of the regular expressions in `values` - */ - def fullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.fullName, patterns) - - /** Traverse to nodes where fullName matches `value` exactly. - */ - def fullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.fullName == value } - } - - /** Traverse to nodes where fullName matches one of the elements in `values` exactly. - */ - def fullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - fullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.fullName), values, "FULL_NAME") - } - - /** Traverse to nodes where fullName does not match the regular expression `value`. - */ - def fullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.fullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.fullName, pattern) - } - } - - /** Traverse to nodes where fullName does not match any of the regular expressions in `values`. - */ - def fullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.fullName, patterns) - } - - /** Traverse to inheritsFromTypeFullName property */ - def inheritsFromTypeFullName: Iterator[String] = - traversal.flatMap(_.inheritsFromTypeFullName) - - /** Traverse to isExternal property */ - def isExternal: Iterator[Boolean] = - traversal.map(_.isExternal) - - /** Traverse to nodes where the isExternal equals the given `value` - */ - def isExternal(value: Boolean): Iterator[NodeType] = - traversal.filter { _.isExternal == value } - - /** Traverse to nodes where isExternal is not equal to the given `value`. - */ - def isExternalNot(value: Boolean): Iterator[NodeType] = - traversal.filter { _.isExternal != value } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to offset property */ - def offset: Iterator[scala.Int] = - traversal.flatMap(_.offset) - - /** Traverse to nodes where the offset equals the given `value` - */ - def offset(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offset.isDefined && node.offset.get == value } - - /** Traverse to nodes where the offset equals at least one of the given `values` - */ - def offset(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.offset.isDefined && vset.contains(node.offset.get) } - } - - /** Traverse to nodes where the offset is greater than the given `value` - */ - def offsetGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offset.isDefined && node.offset.get > value } - - /** Traverse to nodes where the offset is greater than or equal the given `value` - */ - def offsetGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offset.isDefined && node.offset.get >= value } - - /** Traverse to nodes where the offset is less than the given `value` - */ - def offsetLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offset.isDefined && node.offset.get < value } - - /** Traverse to nodes where the offset is less than or equal the given `value` - */ - def offsetLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offset.isDefined && node.offset.get <= value } - - /** Traverse to nodes where offset is not equal to the given `value`. - */ - def offsetNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.offset.isDefined || node.offset.get != value } - - /** Traverse to nodes where offset is not equal to any of the given `values`. - */ - def offsetNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.offset.isDefined || !vset.contains(node.offset.get) } - } - - /** Traverse to offsetEnd property */ - def offsetEnd: Iterator[scala.Int] = - traversal.flatMap(_.offsetEnd) - - /** Traverse to nodes where the offsetEnd equals the given `value` - */ - def offsetEnd(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offsetEnd.isDefined && node.offsetEnd.get == value } - - /** Traverse to nodes where the offsetEnd equals at least one of the given `values` - */ - def offsetEnd(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.offsetEnd.isDefined && vset.contains(node.offsetEnd.get) } - } - - /** Traverse to nodes where the offsetEnd is greater than the given `value` - */ - def offsetEndGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offsetEnd.isDefined && node.offsetEnd.get > value } - - /** Traverse to nodes where the offsetEnd is greater than or equal the given `value` - */ - def offsetEndGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offsetEnd.isDefined && node.offsetEnd.get >= value } - - /** Traverse to nodes where the offsetEnd is less than the given `value` - */ - def offsetEndLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offsetEnd.isDefined && node.offsetEnd.get < value } - - /** Traverse to nodes where the offsetEnd is less than or equal the given `value` - */ - def offsetEndLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.offsetEnd.isDefined && node.offsetEnd.get <= value } - - /** Traverse to nodes where offsetEnd is not equal to the given `value`. - */ - def offsetEndNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.offsetEnd.isDefined || node.offsetEnd.get != value } - - /** Traverse to nodes where offsetEnd is not equal to any of the given `values`. - */ - def offsetEndNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.offsetEnd.isDefined || !vset.contains(node.offsetEnd.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeParameter.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeParameter.scala deleted file mode 100644 index b35240bcb..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeParameter.scala +++ /dev/null @@ -1,265 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for TypeParameter */ -class TypeParameterTraversalExtGen[NodeType <: TypeParameter](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to name property */ - def name: Iterator[String] = - traversal.map(_.name) - - /** Traverse to nodes where the name matches the regular expression `value` - */ - def name(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - nameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where the name matches at least one of the regular expressions in `values` - */ - def name(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.name, patterns) - - /** Traverse to nodes where name matches `value` exactly. - */ - def nameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.name == value } - } - - /** Traverse to nodes where name matches one of the elements in `values` exactly. - */ - def nameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - nameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.name), values, "NAME") - } - - /** Traverse to nodes where name does not match the regular expression `value`. - */ - def nameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.name != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.name, pattern) - } - } - - /** Traverse to nodes where name does not match any of the regular expressions in `values`. - */ - def nameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.name, patterns) - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeRef.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeRef.scala deleted file mode 100644 index d5c8734a0..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/TypeRef.scala +++ /dev/null @@ -1,377 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for TypeRef */ -class TypeRefTraversalExtGen[NodeType <: TypeRef](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to dynamicTypeHintFullName property */ - def dynamicTypeHintFullName: Iterator[String] = - traversal.flatMap(_.dynamicTypeHintFullName) - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to possibleTypes property */ - def possibleTypes: Iterator[String] = - traversal.flatMap(_.possibleTypes) - - /** Traverse to typeFullName property */ - def typeFullName: Iterator[String] = - traversal.map(_.typeFullName) - - /** Traverse to nodes where the typeFullName matches the regular expression `value` - */ - def typeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` - */ - def typeFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeFullName, patterns) - - /** Traverse to nodes where typeFullName matches `value` exactly. - */ - def typeFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeFullName == value } - } - - /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. - */ - def typeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeFullName), values, "TYPE_FULL_NAME") - } - - /** Traverse to nodes where typeFullName does not match the regular expression `value`. - */ - def typeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. - */ - def typeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Unknown.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Unknown.scala deleted file mode 100644 index 2d039fa50..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/Unknown.scala +++ /dev/null @@ -1,491 +0,0 @@ -package io.shiftleft.codepropertygraph.generated.traversal - -import overflowdb.traversal._ -import io.shiftleft.codepropertygraph.generated.nodes._ - -/** Traversal steps for Unknown */ -class UnknownTraversalExtGen[NodeType <: Unknown](val traversal: Iterator[NodeType]) extends AnyVal { - - /** Traverse to argumentIndex property */ - def argumentIndex: Iterator[scala.Int] = - traversal.map(_.argumentIndex) - - /** Traverse to nodes where the argumentIndex equals the given `value` - */ - def argumentIndex(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex == value } - - /** Traverse to nodes where the argumentIndex equals at least one of the given `values` - */ - def argumentIndex(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.argumentIndex) } - } - - /** Traverse to nodes where the argumentIndex is greater than the given `value` - */ - def argumentIndexGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex > value } - - /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` - */ - def argumentIndexGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex >= value } - - /** Traverse to nodes where the argumentIndex is less than the given `value` - */ - def argumentIndexLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex < value } - - /** Traverse to nodes where the argumentIndex is less than or equal the given `value` - */ - def argumentIndexLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex <= value } - - /** Traverse to nodes where argumentIndex is not equal to the given `value`. - */ - def argumentIndexNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.argumentIndex != value } - - /** Traverse to nodes where argumentIndex is not equal to any of the given `values`. - */ - def argumentIndexNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.argumentIndex) } - } - - /** Traverse to argumentName property */ - def argumentName: Iterator[String] = - traversal.flatMap(_.argumentName) - - /** Traverse to nodes where the argumentName matches the regular expression `value` - */ - def argumentName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isDefined && node.argumentName.get == pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexp(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` - */ - def argumentName(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to nodes where argumentName matches `value` exactly. - */ - def argumentNameExact(value: String): Iterator[NodeType] = - traversal.filter { node => node.argumentName.contains(value) } - - /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. - */ - def argumentNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - argumentNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, _.argumentName, values, "ARGUMENT_NAME") - } - - /** Traverse to nodes where argumentName does not match the regular expression `value`. - */ - def argumentNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNot(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, pattern) - } - } - - /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. - */ - def argumentNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter - .regexpNotMultiple(traversal.filter(_.argumentName.isDefined))(_.argumentName.get, patterns) - } - - /** Traverse to code property */ - def code: Iterator[String] = - traversal.map(_.code) - - /** Traverse to nodes where the code matches the regular expression `value` - */ - def code(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - codeExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where the code matches at least one of the regular expressions in `values` - */ - def code(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.code, patterns) - - /** Traverse to nodes where code matches `value` exactly. - */ - def codeExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => init.getByIndex("CODE", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.code == value } - } - - /** Traverse to nodes where code matches one of the elements in `values` exactly. - */ - def codeExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - codeExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.code), values, "CODE") - } - - /** Traverse to nodes where code does not match the regular expression `value`. - */ - def codeNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.code != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.code, pattern) - } - } - - /** Traverse to nodes where code does not match any of the regular expressions in `values`. - */ - def codeNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.code, patterns) - } - - /** Traverse to columnNumber property */ - def columnNumber: Iterator[scala.Int] = - traversal.flatMap(_.columnNumber) - - /** Traverse to nodes where the columnNumber equals the given `value` - */ - def columnNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get == value } - - /** Traverse to nodes where the columnNumber equals at least one of the given `values` - */ - def columnNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.columnNumber.isDefined && vset.contains(node.columnNumber.get) } - } - - /** Traverse to nodes where the columnNumber is greater than the given `value` - */ - def columnNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get > value } - - /** Traverse to nodes where the columnNumber is greater than or equal the given `value` - */ - def columnNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get >= value } - - /** Traverse to nodes where the columnNumber is less than the given `value` - */ - def columnNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get < value } - - /** Traverse to nodes where the columnNumber is less than or equal the given `value` - */ - def columnNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.columnNumber.isDefined && node.columnNumber.get <= value } - - /** Traverse to nodes where columnNumber is not equal to the given `value`. - */ - def columnNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.columnNumber.isDefined || node.columnNumber.get != value } - - /** Traverse to nodes where columnNumber is not equal to any of the given `values`. - */ - def columnNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.columnNumber.isDefined || !vset.contains(node.columnNumber.get) } - } - - /** Traverse to containedRef property */ - def containedRef: Iterator[String] = - traversal.map(_.containedRef) - - /** Traverse to nodes where the containedRef matches the regular expression `value` - */ - def containedRef(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - containedRefExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.containedRef, pattern) - } - } - - /** Traverse to nodes where the containedRef matches at least one of the regular expressions in `values` - */ - def containedRef(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.containedRef, patterns) - - /** Traverse to nodes where containedRef matches `value` exactly. - */ - def containedRefExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("CONTAINED_REF", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.containedRef == value } - } - - /** Traverse to nodes where containedRef matches one of the elements in `values` exactly. - */ - def containedRefExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - containedRefExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.containedRef), values, "CONTAINED_REF") - } - - /** Traverse to nodes where containedRef does not match the regular expression `value`. - */ - def containedRefNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.containedRef != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.containedRef, pattern) - } - } - - /** Traverse to nodes where containedRef does not match any of the regular expressions in `values`. - */ - def containedRefNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.containedRef, patterns) - } - - /** Traverse to dynamicTypeHintFullName property */ - def dynamicTypeHintFullName: Iterator[String] = - traversal.flatMap(_.dynamicTypeHintFullName) - - /** Traverse to lineNumber property */ - def lineNumber: Iterator[scala.Int] = - traversal.flatMap(_.lineNumber) - - /** Traverse to nodes where the lineNumber equals the given `value` - */ - def lineNumber(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get == value } - - /** Traverse to nodes where the lineNumber equals at least one of the given `values` - */ - def lineNumber(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => node.lineNumber.isDefined && vset.contains(node.lineNumber.get) } - } - - /** Traverse to nodes where the lineNumber is greater than the given `value` - */ - def lineNumberGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get > value } - - /** Traverse to nodes where the lineNumber is greater than or equal the given `value` - */ - def lineNumberGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get >= value } - - /** Traverse to nodes where the lineNumber is less than the given `value` - */ - def lineNumberLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get < value } - - /** Traverse to nodes where the lineNumber is less than or equal the given `value` - */ - def lineNumberLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => node.lineNumber.isDefined && node.lineNumber.get <= value } - - /** Traverse to nodes where lineNumber is not equal to the given `value`. - */ - def lineNumberNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { node => !node.lineNumber.isDefined || node.lineNumber.get != value } - - /** Traverse to nodes where lineNumber is not equal to any of the given `values`. - */ - def lineNumberNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !node.lineNumber.isDefined || !vset.contains(node.lineNumber.get) } - } - - /** Traverse to order property */ - def order: Iterator[scala.Int] = - traversal.map(_.order) - - /** Traverse to nodes where the order equals the given `value` - */ - def order(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order == value } - - /** Traverse to nodes where the order equals at least one of the given `values` - */ - def order(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => vset.contains(node.order) } - } - - /** Traverse to nodes where the order is greater than the given `value` - */ - def orderGt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order > value } - - /** Traverse to nodes where the order is greater than or equal the given `value` - */ - def orderGte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order >= value } - - /** Traverse to nodes where the order is less than the given `value` - */ - def orderLt(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order < value } - - /** Traverse to nodes where the order is less than or equal the given `value` - */ - def orderLte(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order <= value } - - /** Traverse to nodes where order is not equal to the given `value`. - */ - def orderNot(value: scala.Int): Iterator[NodeType] = - traversal.filter { _.order != value } - - /** Traverse to nodes where order is not equal to any of the given `values`. - */ - def orderNot(values: scala.Int*): Iterator[NodeType] = { - val vset = values.toSet - traversal.filter { node => !vset.contains(node.order) } - } - - /** Traverse to parserTypeName property */ - def parserTypeName: Iterator[String] = - traversal.map(_.parserTypeName) - - /** Traverse to nodes where the parserTypeName matches the regular expression `value` - */ - def parserTypeName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - parserTypeNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.parserTypeName, pattern) - } - } - - /** Traverse to nodes where the parserTypeName matches at least one of the regular expressions in `values` - */ - def parserTypeName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.parserTypeName, patterns) - - /** Traverse to nodes where parserTypeName matches `value` exactly. - */ - def parserTypeNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("PARSER_TYPE_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.parserTypeName == value } - } - - /** Traverse to nodes where parserTypeName matches one of the elements in `values` exactly. - */ - def parserTypeNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - parserTypeNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.parserTypeName), values, "PARSER_TYPE_NAME") - } - - /** Traverse to nodes where parserTypeName does not match the regular expression `value`. - */ - def parserTypeNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.parserTypeName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.parserTypeName, pattern) - } - } - - /** Traverse to nodes where parserTypeName does not match any of the regular expressions in `values`. - */ - def parserTypeNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.parserTypeName, patterns) - } - - /** Traverse to possibleTypes property */ - def possibleTypes: Iterator[String] = - traversal.flatMap(_.possibleTypes) - - /** Traverse to typeFullName property */ - def typeFullName: Iterator[String] = - traversal.map(_.typeFullName) - - /** Traverse to nodes where the typeFullName matches the regular expression `value` - */ - def typeFullName(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - typeFullNameExact(pattern) - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexp(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` - */ - def typeFullName(patterns: String*): Iterator[NodeType] = - overflowdb.traversal.filter.StringPropertyFilter.regexpMultiple(traversal)(_.typeFullName, patterns) - - /** Traverse to nodes where typeFullName matches `value` exactly. - */ - def typeFullNameExact(value: String): Iterator[NodeType] = { - val fastResult = traversal match { - case init: overflowdb.traversal.InitialTraversal[NodeType] => - init.getByIndex("TYPE_FULL_NAME", value).getOrElse(null) - case _ => null - } - if (fastResult != null) fastResult - else traversal.filter { node => node.typeFullName == value } - } - - /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. - */ - def typeFullNameExact(values: String*): Iterator[NodeType] = { - if (values.size == 1) - typeFullNameExact(values.head) - else - overflowdb.traversal.filter.StringPropertyFilter - .exactMultiple[NodeType, String](traversal, node => Some(node.typeFullName), values, "TYPE_FULL_NAME") - } - - /** Traverse to nodes where typeFullName does not match the regular expression `value`. - */ - def typeFullNameNot(pattern: String): Iterator[NodeType] = { - if (!Misc.isRegex(pattern)) { - traversal.filter { node => node.typeFullName != pattern } - } else { - overflowdb.traversal.filter.StringPropertyFilter.regexpNot(traversal)(_.typeFullName, pattern) - } - } - - /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. - */ - def typeFullNameNot(patterns: String*): Iterator[NodeType] = { - overflowdb.traversal.filter.StringPropertyFilter.regexpNotMultiple(traversal)(_.typeFullName, patterns) - } - -} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/package.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/package.scala deleted file mode 100644 index 9e016a0f3..000000000 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversal/package.scala +++ /dev/null @@ -1,2 +0,0 @@ -package io.shiftleft.codepropertygraph.generated -package object traversal extends NodeTraversalImplicits diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationBase.scala new file mode 100644 index 000000000..10dd8b9c1 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationBase.scala @@ -0,0 +1,127 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalAnnotationBase[NodeType <: nodes.AnnotationBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to fullName property */ + def fullName: Iterator[String] = + traversal.map(_.fullName) + + /** Traverse to nodes where the fullName matches the regular expression `value` + */ + def fullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + fullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.fullName).matches } + } + + /** Traverse to nodes where the fullName matches at least one of the regular expressions in `values` + */ + def fullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.fullName).matches } } + } + + /** Traverse to nodes where fullName matches `value` exactly. + */ + def fullNameExact(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, 22, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.fullName == value } + } + + /** Traverse to nodes where fullName matches one of the elements in `values` exactly. + */ + def fullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) fullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.fullName) } + } + + /** Traverse to nodes where fullName does not match the regular expression `value`. + */ + def fullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.fullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.fullName).matches } + } + } + + /** Traverse to nodes where fullName does not match any of the regular expressions in `values`. + */ + def fullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.fullName).matches }.isEmpty } + } + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationliteralBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationliteralBase.scala new file mode 100644 index 000000000..dc9a241f1 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationliteralBase.scala @@ -0,0 +1,68 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalAnnotationliteralBase[NodeType <: nodes.AnnotationLiteralBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationparameterBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationparameterBase.scala new file mode 100644 index 000000000..ece3d4da1 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationparameterBase.scala @@ -0,0 +1,8 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalAnnotationparameterBase[NodeType <: nodes.AnnotationParameterBase]( + val traversal: Iterator[NodeType] +) extends AnyVal {} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationparameterassignBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationparameterassignBase.scala new file mode 100644 index 000000000..3aa196f31 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAnnotationparameterassignBase.scala @@ -0,0 +1,8 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalAnnotationparameterassignBase[NodeType <: nodes.AnnotationParameterAssignBase]( + val traversal: Iterator[NodeType] +) extends AnyVal {} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalArrayinitializerBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalArrayinitializerBase.scala new file mode 100644 index 000000000..55e1772ab --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalArrayinitializerBase.scala @@ -0,0 +1,7 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalArrayinitializerBase[NodeType <: nodes.ArrayInitializerBase](val traversal: Iterator[NodeType]) + extends AnyVal {} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAstnodeBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAstnodeBase.scala new file mode 100644 index 000000000..3184335ea --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalAstnodeBase.scala @@ -0,0 +1,243 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalAstnodeBase[NodeType <: nodes.AstNodeBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to code property */ + def code: Iterator[String] = + traversal.map(_.code) + + /** Traverse to nodes where the code matches the regular expression `value` + */ + def code(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + codeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.code).matches } + } + + /** Traverse to nodes where the code matches at least one of the regular expressions in `values` + */ + def code(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.code).matches } } + } + + /** Traverse to nodes where code matches `value` exactly. + */ + def codeExact(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, 10, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.code == value } + } + + /** Traverse to nodes where code matches one of the elements in `values` exactly. + */ + def codeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) codeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.code) } + } + + /** Traverse to nodes where code does not match the regular expression `value`. + */ + def codeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.code != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.code).matches } + } + } + + /** Traverse to nodes where code does not match any of the regular expressions in `values`. + */ + def codeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.code).matches }.isEmpty } + } + + /** Traverse to columnNumber property */ + def columnNumber: Iterator[Int] = + traversal.flatMap(_.columnNumber) + + /** Traverse to nodes where the columnNumber equals the given `value` + */ + def columnNumber(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumber; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the columnNumber equals at least one of the given `values` + */ + def columnNumber(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.columnNumber; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the columnNumber is not equal to the given `value` + */ + def columnNumberNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumber; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the columnNumber does not equal any one of the given `values` + */ + def columnNumberNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.columnNumber; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the columnNumber is greater than the given `value` + */ + def columnNumberGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumber; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the columnNumber is greater than or equal the given `value` + */ + def columnNumberGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumber; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the columnNumber is less than the given `value` + */ + def columnNumberLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumber; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the columnNumber is less than or equal the given `value` + */ + def columnNumberLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumber; tmp.isDefined && tmp.get <= value + } + + /** Traverse to lineNumber property */ + def lineNumber: Iterator[Int] = + traversal.flatMap(_.lineNumber) + + /** Traverse to nodes where the lineNumber equals the given `value` + */ + def lineNumber(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the lineNumber equals at least one of the given `values` + */ + def lineNumber(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the lineNumber is not equal to the given `value` + */ + def lineNumberNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the lineNumber does not equal any one of the given `values` + */ + def lineNumberNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.lineNumber; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the lineNumber is greater than the given `value` + */ + def lineNumberGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the lineNumber is greater than or equal the given `value` + */ + def lineNumberGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the lineNumber is less than the given `value` + */ + def lineNumberLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the lineNumber is less than or equal the given `value` + */ + def lineNumberLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get <= value + } + + /** Traverse to order property */ + def order: Iterator[Int] = + traversal.map(_.order) + + /** Traverse to nodes where the order equals the given `value` + */ + def order(value: Int): Iterator[NodeType] = + traversal.filter { _.order == value } + + /** Traverse to nodes where the order equals at least one of the given `values` + */ + def order(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => vset.contains(node.order) } + } + + /** Traverse to nodes where the order is not equal to the given `value` + */ + def orderNot(value: Int): Iterator[NodeType] = + traversal.filter { _.order != value } + + /** Traverse to nodes where the order is not equal to any of the given `values` + */ + def orderNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => !vset.contains(node.order) } + } + + /** Traverse to nodes where the order is greater than the given `value` + */ + def orderGt(value: Int): Iterator[NodeType] = + traversal.filter { _.order > value } + + /** Traverse to nodes where the order is greater than or equal the given `value` + */ + def orderGte(value: Int): Iterator[NodeType] = + traversal.filter { _.order >= value } + + /** Traverse to nodes where the order is less than the given `value` + */ + def orderLt(value: Int): Iterator[NodeType] = + traversal.filter { _.order < value } + + /** Traverse to nodes where the order is less than or equal the given `value` + */ + def orderLte(value: Int): Iterator[NodeType] = + traversal.filter { _.order <= value } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalBindingBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalBindingBase.scala new file mode 100644 index 000000000..d62129e2d --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalBindingBase.scala @@ -0,0 +1,185 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalBindingBase[NodeType <: nodes.BindingBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to methodFullName property */ + def methodFullName: Iterator[String] = + traversal.map(_.methodFullName) + + /** Traverse to nodes where the methodFullName matches the regular expression `value` + */ + def methodFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + methodFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.methodFullName).matches } + } + + /** Traverse to nodes where the methodFullName matches at least one of the regular expressions in `values` + */ + def methodFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.methodFullName).matches } } + } + + /** Traverse to nodes where methodFullName matches `value` exactly. + */ + def methodFullNameExact(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, 36, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.methodFullName == value } + } + + /** Traverse to nodes where methodFullName matches one of the elements in `values` exactly. + */ + def methodFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) methodFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.methodFullName) } + } + + /** Traverse to nodes where methodFullName does not match the regular expression `value`. + */ + def methodFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.methodFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.methodFullName).matches } + } + } + + /** Traverse to nodes where methodFullName does not match any of the regular expressions in `values`. + */ + def methodFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.methodFullName).matches }.isEmpty } + } + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + + /** Traverse to signature property */ + def signature: Iterator[String] = + traversal.map(_.signature) + + /** Traverse to nodes where the signature matches the regular expression `value` + */ + def signature(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + signatureExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.signature).matches } + } + + /** Traverse to nodes where the signature matches at least one of the regular expressions in `values` + */ + def signature(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.signature).matches } } + } + + /** Traverse to nodes where signature matches `value` exactly. + */ + def signatureExact(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, 49, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.signature == value } + } + + /** Traverse to nodes where signature matches one of the elements in `values` exactly. + */ + def signatureExact(values: String*): Iterator[NodeType] = + if (values.length == 1) signatureExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.signature) } + } + + /** Traverse to nodes where signature does not match the regular expression `value`. + */ + def signatureNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.signature != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.signature).matches } + } + } + + /** Traverse to nodes where signature does not match any of the regular expressions in `values`. + */ + def signatureNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.signature).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..f03f6f6f5 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalBlockBase.scala @@ -0,0 +1,75 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalBlockBase[NodeType <: nodes.BlockBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to dynamicTypeHintFullName property */ + def dynamicTypeHintFullName: Iterator[String] = + traversal.flatMap(_.dynamicTypeHintFullName) + + /** Traverse to possibleTypes property */ + def possibleTypes: Iterator[String] = + traversal.flatMap(_.possibleTypes) + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..dd97faa5a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallBase.scala @@ -0,0 +1,193 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalCallBase[NodeType <: nodes.CallBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to dispatchType property */ + def dispatchType: Iterator[String] = + traversal.map(_.dispatchType) + + /** Traverse to nodes where the dispatchType matches the regular expression `value` + */ + def dispatchType(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + dispatchTypeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.dispatchType).matches } + } + + /** Traverse to nodes where the dispatchType matches at least one of the regular expressions in `values` + */ + def dispatchType(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.dispatchType).matches } } + } + + /** Traverse to nodes where dispatchType matches `value` exactly. + */ + def dispatchTypeExact(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, 17, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.dispatchType == value } + } + + /** Traverse to nodes where dispatchType matches one of the elements in `values` exactly. + */ + def dispatchTypeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) dispatchTypeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.dispatchType) } + } + + /** Traverse to nodes where dispatchType does not match the regular expression `value`. + */ + def dispatchTypeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.dispatchType != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.dispatchType).matches } + } + } + + /** Traverse to nodes where dispatchType does not match any of the regular expressions in `values`. + */ + def dispatchTypeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.dispatchType).matches }.isEmpty } + } + + /** Traverse to dynamicTypeHintFullName property */ + def dynamicTypeHintFullName: Iterator[String] = + traversal.flatMap(_.dynamicTypeHintFullName) + + /** Traverse to methodFullName property */ + def methodFullName: Iterator[String] = + traversal.map(_.methodFullName) + + /** Traverse to nodes where the methodFullName matches the regular expression `value` + */ + def methodFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + methodFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.methodFullName).matches } + } + + /** Traverse to nodes where the methodFullName matches at least one of the regular expressions in `values` + */ + def methodFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.methodFullName).matches } } + } + + /** Traverse to nodes where methodFullName matches `value` exactly. + */ + def methodFullNameExact(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, 36, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.methodFullName == value } + } + + /** Traverse to nodes where methodFullName matches one of the elements in `values` exactly. + */ + def methodFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) methodFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.methodFullName) } + } + + /** Traverse to nodes where methodFullName does not match the regular expression `value`. + */ + def methodFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.methodFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.methodFullName).matches } + } + } + + /** Traverse to nodes where methodFullName does not match any of the regular expressions in `values`. + */ + def methodFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.methodFullName).matches }.isEmpty } + } + + /** Traverse to possibleTypes property */ + def possibleTypes: Iterator[String] = + traversal.flatMap(_.possibleTypes) + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallreprBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallreprBase.scala new file mode 100644 index 000000000..b39b72b6c --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCallreprBase.scala @@ -0,0 +1,126 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalCallreprBase[NodeType <: nodes.CallReprBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + + /** Traverse to signature property */ + def signature: Iterator[String] = + traversal.map(_.signature) + + /** Traverse to nodes where the signature matches the regular expression `value` + */ + def signature(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + signatureExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.signature).matches } + } + + /** Traverse to nodes where the signature matches at least one of the regular expressions in `values` + */ + def signature(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.signature).matches } } + } + + /** Traverse to nodes where signature matches `value` exactly. + */ + def signatureExact(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, 49, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.signature == value } + } + + /** Traverse to nodes where signature matches one of the elements in `values` exactly. + */ + def signatureExact(values: String*): Iterator[NodeType] = + if (values.length == 1) signatureExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.signature) } + } + + /** Traverse to nodes where signature does not match the regular expression `value`. + */ + def signatureNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.signature != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.signature).matches } + } + } + + /** Traverse to nodes where signature does not match any of the regular expressions in `values`. + */ + def signatureNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.signature).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCfgnodeBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCfgnodeBase.scala new file mode 100644 index 000000000..0172f5b59 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCfgnodeBase.scala @@ -0,0 +1,6 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalCfgnodeBase[NodeType <: nodes.CfgNodeBase](val traversal: Iterator[NodeType]) extends AnyVal {} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalClosurebindingBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalClosurebindingBase.scala new file mode 100644 index 000000000..e19e06924 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalClosurebindingBase.scala @@ -0,0 +1,214 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalClosurebindingBase[NodeType <: nodes.ClosureBindingBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to closureBindingId property */ + def closureBindingId: Iterator[String] = + traversal.flatMap(_.closureBindingId) + + /** Traverse to nodes where the closureBindingId matches the regular expression `value` + */ + def closureBindingId(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + closureBindingIdExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.closureBindingId; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the closureBindingId matches at least one of the regular expressions in `values` + */ + def closureBindingId(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.closureBindingId; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where closureBindingId matches `value` exactly. + */ + def closureBindingIdExact(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, 8, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.closureBindingId; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where closureBindingId matches one of the elements in `values` exactly. + */ + def closureBindingIdExact(values: String*): Iterator[NodeType] = + if (values.length == 1) closureBindingIdExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.closureBindingId; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where closureBindingId does not match the regular expression `value`. + */ + def closureBindingIdNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.closureBindingId.isEmpty || node.closureBindingId.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.closureBindingId; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where closureBindingId does not match any of the regular expressions in `values`. + */ + def closureBindingIdNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.closureBindingId; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to closureOriginalName property */ + def closureOriginalName: Iterator[String] = + traversal.flatMap(_.closureOriginalName) + + /** Traverse to nodes where the closureOriginalName matches the regular expression `value` + */ + def closureOriginalName(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + closureOriginalNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.closureOriginalName; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the closureOriginalName matches at least one of the regular expressions in `values` + */ + def closureOriginalName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.closureOriginalName; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where closureOriginalName matches `value` exactly. + */ + def closureOriginalNameExact(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, 9, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.closureOriginalName; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where closureOriginalName matches one of the elements in `values` exactly. + */ + def closureOriginalNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) closureOriginalNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.closureOriginalName; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where closureOriginalName does not match the regular expression `value`. + */ + def closureOriginalNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.closureOriginalName.isEmpty || node.closureOriginalName.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.closureOriginalName; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where closureOriginalName does not match any of the regular expressions in `values`. + */ + def closureOriginalNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.closureOriginalName; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to evaluationStrategy property */ + def evaluationStrategy: Iterator[String] = + traversal.map(_.evaluationStrategy) + + /** Traverse to nodes where the evaluationStrategy matches the regular expression `value` + */ + def evaluationStrategy(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + evaluationStrategyExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.evaluationStrategy).matches } + } + + /** Traverse to nodes where the evaluationStrategy matches at least one of the regular expressions in `values` + */ + def evaluationStrategy(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.evaluationStrategy).matches } } + } + + /** Traverse to nodes where evaluationStrategy matches `value` exactly. + */ + def evaluationStrategyExact(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, 19, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.evaluationStrategy == value } + } + + /** Traverse to nodes where evaluationStrategy matches one of the elements in `values` exactly. + */ + def evaluationStrategyExact(values: String*): Iterator[NodeType] = + if (values.length == 1) evaluationStrategyExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.evaluationStrategy) } + } + + /** Traverse to nodes where evaluationStrategy does not match the regular expression `value`. + */ + def evaluationStrategyNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.evaluationStrategy != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.evaluationStrategy).matches } + } + } + + /** Traverse to nodes where evaluationStrategy does not match any of the regular expressions in `values`. + */ + def evaluationStrategyNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.evaluationStrategy).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCommentBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCommentBase.scala new file mode 100644 index 000000000..d7be8ce66 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalCommentBase.scala @@ -0,0 +1,67 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalCommentBase[NodeType <: nodes.CommentBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to filename property */ + def filename: Iterator[String] = + traversal.map(_.filename) + + /** Traverse to nodes where the filename matches the regular expression `value` + */ + def filename(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + filenameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.filename).matches } + } + + /** Traverse to nodes where the filename matches at least one of the regular expressions in `values` + */ + def filename(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.filename).matches } } + } + + /** Traverse to nodes where filename matches `value` exactly. + */ + def filenameExact(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, 21, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.filename == value } + } + + /** Traverse to nodes where filename matches one of the elements in `values` exactly. + */ + def filenameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) filenameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.filename) } + } + + /** Traverse to nodes where filename does not match the regular expression `value`. + */ + def filenameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.filename != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.filename).matches } + } + } + + /** Traverse to nodes where filename does not match any of the regular expressions in `values`. + */ + def filenameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.filename).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalConfigfileBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalConfigfileBase.scala new file mode 100644 index 000000000..9d7d363f9 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalConfigfileBase.scala @@ -0,0 +1,127 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalConfigfileBase[NodeType <: nodes.ConfigFileBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to content property */ + def content: Iterator[String] = + traversal.map(_.content) + + /** Traverse to nodes where the content matches the regular expression `value` + */ + def content(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + contentExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.content).matches } + } + + /** Traverse to nodes where the content matches at least one of the regular expressions in `values` + */ + def content(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.content).matches } } + } + + /** Traverse to nodes where content matches `value` exactly. + */ + def contentExact(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, 14, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.content == value } + } + + /** Traverse to nodes where content matches one of the elements in `values` exactly. + */ + def contentExact(values: String*): Iterator[NodeType] = + if (values.length == 1) contentExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.content) } + } + + /** Traverse to nodes where content does not match the regular expression `value`. + */ + def contentNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.content != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.content).matches } + } + } + + /** Traverse to nodes where content does not match any of the regular expressions in `values`. + */ + def contentNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.content).matches }.isEmpty } + } + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalControlstructureBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalControlstructureBase.scala new file mode 100644 index 000000000..5c781913b --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalControlstructureBase.scala @@ -0,0 +1,127 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalControlstructureBase[NodeType <: nodes.ControlStructureBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to controlStructureType property */ + def controlStructureType: Iterator[String] = + traversal.map(_.controlStructureType) + + /** Traverse to nodes where the controlStructureType matches the regular expression `value` + */ + def controlStructureType(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + controlStructureTypeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.controlStructureType).matches } + } + + /** Traverse to nodes where the controlStructureType matches at least one of the regular expressions in `values` + */ + def controlStructureType(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.controlStructureType).matches } } + } + + /** Traverse to nodes where controlStructureType matches `value` exactly. + */ + def controlStructureTypeExact(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, 15, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.controlStructureType == value } + } + + /** Traverse to nodes where controlStructureType matches one of the elements in `values` exactly. + */ + def controlStructureTypeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) controlStructureTypeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.controlStructureType) } + } + + /** Traverse to nodes where controlStructureType does not match the regular expression `value`. + */ + def controlStructureTypeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.controlStructureType != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.controlStructureType).matches } + } + } + + /** Traverse to nodes where controlStructureType does not match any of the regular expressions in `values`. + */ + def controlStructureTypeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.controlStructureType).matches }.isEmpty } + } + + /** Traverse to parserTypeName property */ + def parserTypeName: Iterator[String] = + traversal.map(_.parserTypeName) + + /** Traverse to nodes where the parserTypeName matches the regular expression `value` + */ + def parserTypeName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + parserTypeNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.parserTypeName).matches } + } + + /** Traverse to nodes where the parserTypeName matches at least one of the regular expressions in `values` + */ + def parserTypeName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.parserTypeName).matches } } + } + + /** Traverse to nodes where parserTypeName matches `value` exactly. + */ + def parserTypeNameExact(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 { _.parserTypeName == value } + } + + /** Traverse to nodes where parserTypeName matches one of the elements in `values` exactly. + */ + def parserTypeNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) parserTypeNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.parserTypeName) } + } + + /** Traverse to nodes where parserTypeName does not match the regular expression `value`. + */ + def parserTypeNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.parserTypeName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.parserTypeName).matches } + } + } + + /** Traverse to nodes where parserTypeName does not match any of the regular expressions in `values`. + */ + def parserTypeNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.parserTypeName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalDeclarationBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalDeclarationBase.scala new file mode 100644 index 000000000..2e5944c7a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalDeclarationBase.scala @@ -0,0 +1,68 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalDeclarationBase[NodeType <: nodes.DeclarationBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..0772b6e71 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalDependencyBase.scala @@ -0,0 +1,200 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalDependencyBase[NodeType <: nodes.DependencyBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to dependencyGroupId property */ + def dependencyGroupId: Iterator[String] = + traversal.flatMap(_.dependencyGroupId) + + /** Traverse to nodes where the dependencyGroupId matches the regular expression `value` + */ + def dependencyGroupId(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + dependencyGroupIdExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.dependencyGroupId; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the dependencyGroupId matches at least one of the regular expressions in `values` + */ + def dependencyGroupId(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.dependencyGroupId; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where dependencyGroupId matches `value` exactly. + */ + def dependencyGroupIdExact(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, 16, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.dependencyGroupId; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where dependencyGroupId matches one of the elements in `values` exactly. + */ + def dependencyGroupIdExact(values: String*): Iterator[NodeType] = + if (values.length == 1) dependencyGroupIdExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.dependencyGroupId; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where dependencyGroupId does not match the regular expression `value`. + */ + def dependencyGroupIdNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.dependencyGroupId.isEmpty || node.dependencyGroupId.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.dependencyGroupId; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where dependencyGroupId does not match any of the regular expressions in `values`. + */ + def dependencyGroupIdNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.dependencyGroupId; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + + /** Traverse to version property */ + def version: Iterator[String] = + traversal.map(_.version) + + /** Traverse to nodes where the version matches the regular expression `value` + */ + def version(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + versionExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.version).matches } + } + + /** Traverse to nodes where the version matches at least one of the regular expressions in `values` + */ + def version(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.version).matches } } + } + + /** Traverse to nodes where version matches `value` exactly. + */ + def versionExact(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, 54, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.version == value } + } + + /** Traverse to nodes where version matches one of the elements in `values` exactly. + */ + def versionExact(values: String*): Iterator[NodeType] = + if (values.length == 1) versionExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.version) } + } + + /** Traverse to nodes where version does not match the regular expression `value`. + */ + def versionNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.version != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.version).matches } + } + } + + /** Traverse to nodes where version does not match any of the regular expressions in `values`. + */ + def versionNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.version).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalExpressionBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalExpressionBase.scala new file mode 100644 index 000000000..091232826 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalExpressionBase.scala @@ -0,0 +1,130 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalExpressionBase[NodeType <: nodes.ExpressionBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to argumentIndex property */ + def argumentIndex: Iterator[Int] = + traversal.map(_.argumentIndex) + + /** Traverse to nodes where the argumentIndex equals the given `value` + */ + def argumentIndex(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex == value } + + /** Traverse to nodes where the argumentIndex equals at least one of the given `values` + */ + def argumentIndex(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => vset.contains(node.argumentIndex) } + } + + /** Traverse to nodes where the argumentIndex is not equal to the given `value` + */ + def argumentIndexNot(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex != value } + + /** Traverse to nodes where the argumentIndex is not equal to any of the given `values` + */ + def argumentIndexNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => !vset.contains(node.argumentIndex) } + } + + /** Traverse to nodes where the argumentIndex is greater than the given `value` + */ + def argumentIndexGt(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex > value } + + /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` + */ + def argumentIndexGte(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex >= value } + + /** Traverse to nodes where the argumentIndex is less than the given `value` + */ + def argumentIndexLt(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex < value } + + /** Traverse to nodes where the argumentIndex is less than or equal the given `value` + */ + def argumentIndexLte(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex <= value } + + /** Traverse to argumentName property */ + def argumentName: Iterator[String] = + traversal.flatMap(_.argumentName) + + /** Traverse to nodes where the argumentName matches the regular expression `value` + */ + def argumentName(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + argumentNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.argumentName; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` + */ + def argumentName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.argumentName; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where argumentName matches `value` exactly. + */ + def argumentNameExact(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, 2, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.argumentName; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. + */ + def argumentNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) argumentNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.argumentName; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where argumentName does not match the regular expression `value`. + */ + def argumentNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.argumentName; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. + */ + def argumentNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.argumentName; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalFieldidentifierBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalFieldidentifierBase.scala new file mode 100644 index 000000000..6be2f65e0 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalFieldidentifierBase.scala @@ -0,0 +1,68 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalFieldidentifierBase[NodeType <: nodes.FieldIdentifierBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to canonicalName property */ + def canonicalName: Iterator[String] = + traversal.map(_.canonicalName) + + /** Traverse to nodes where the canonicalName matches the regular expression `value` + */ + def canonicalName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + canonicalNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.canonicalName).matches } + } + + /** Traverse to nodes where the canonicalName matches at least one of the regular expressions in `values` + */ + def canonicalName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.canonicalName).matches } } + } + + /** Traverse to nodes where canonicalName matches `value` exactly. + */ + def canonicalNameExact(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, 5, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.canonicalName == value } + } + + /** Traverse to nodes where canonicalName matches one of the elements in `values` exactly. + */ + def canonicalNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) canonicalNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.canonicalName) } + } + + /** Traverse to nodes where canonicalName does not match the regular expression `value`. + */ + def canonicalNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.canonicalName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.canonicalName).matches } + } + } + + /** Traverse to nodes where canonicalName does not match any of the regular expressions in `values`. + */ + def canonicalNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.canonicalName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalFileBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalFileBase.scala new file mode 100644 index 000000000..6b4082cb5 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalFileBase.scala @@ -0,0 +1,199 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalFileBase[NodeType <: nodes.FileBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to content property */ + def content: Iterator[String] = + traversal.map(_.content) + + /** Traverse to nodes where the content matches the regular expression `value` + */ + def content(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + contentExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.content).matches } + } + + /** Traverse to nodes where the content matches at least one of the regular expressions in `values` + */ + def content(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.content).matches } } + } + + /** Traverse to nodes where content matches `value` exactly. + */ + def contentExact(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, 14, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.content == value } + } + + /** Traverse to nodes where content matches one of the elements in `values` exactly. + */ + def contentExact(values: String*): Iterator[NodeType] = + if (values.length == 1) contentExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.content) } + } + + /** Traverse to nodes where content does not match the regular expression `value`. + */ + def contentNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.content != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.content).matches } + } + } + + /** Traverse to nodes where content does not match any of the regular expressions in `values`. + */ + def contentNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.content).matches }.isEmpty } + } + + /** Traverse to hash property */ + def hash: Iterator[String] = + traversal.flatMap(_.hash) + + /** Traverse to nodes where the hash matches the regular expression `value` + */ + def hash(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + hashExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.hash; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the hash matches at least one of the regular expressions in `values` + */ + def hash(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.hash; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where hash matches `value` exactly. + */ + def hashExact(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, 23, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.hash; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where hash matches one of the elements in `values` exactly. + */ + def hashExact(values: String*): Iterator[NodeType] = + if (values.length == 1) hashExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.hash; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where hash does not match the regular expression `value`. + */ + def hashNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.hash.isEmpty || node.hash.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.hash; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where hash does not match any of the regular expressions in `values`. + */ + def hashNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.hash; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalFindingBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalFindingBase.scala new file mode 100644 index 000000000..c37fbd51b --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalFindingBase.scala @@ -0,0 +1,6 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalFindingBase[NodeType <: nodes.FindingBase](val traversal: Iterator[NodeType]) extends AnyVal {} 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 new file mode 100644 index 000000000..37128b8ca --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalIdentifierBase.scala @@ -0,0 +1,135 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalIdentifierBase[NodeType <: nodes.IdentifierBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to dynamicTypeHintFullName property */ + def dynamicTypeHintFullName: Iterator[String] = + traversal.flatMap(_.dynamicTypeHintFullName) + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + + /** Traverse to possibleTypes property */ + def possibleTypes: Iterator[String] = + traversal.flatMap(_.possibleTypes) + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalImportBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalImportBase.scala new file mode 100644 index 000000000..e51d54da4 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalImportBase.scala @@ -0,0 +1,181 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalImportBase[NodeType <: nodes.ImportBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to explicitAs property */ + def explicitAs: Iterator[Boolean] = + traversal.flatMap(_.explicitAs) + + /** Traverse to nodes where the explicitAs equals the given `value` + */ + def explicitAs(value: Boolean): Iterator[NodeType] = + traversal.filter { node => node.explicitAs.isDefined && node.explicitAs.get == value } + + /** Traverse to importedAs property */ + def importedAs: Iterator[String] = + traversal.flatMap(_.importedAs) + + /** Traverse to nodes where the importedAs matches the regular expression `value` + */ + def importedAs(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + importedAsExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.importedAs; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the importedAs matches at least one of the regular expressions in `values` + */ + def importedAs(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.importedAs; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where importedAs matches `value` exactly. + */ + def importedAsExact(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, 24, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.importedAs; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where importedAs matches one of the elements in `values` exactly. + */ + def importedAsExact(values: String*): Iterator[NodeType] = + if (values.length == 1) importedAsExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.importedAs; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where importedAs does not match the regular expression `value`. + */ + def importedAsNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.importedAs.isEmpty || node.importedAs.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.importedAs; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where importedAs does not match any of the regular expressions in `values`. + */ + def importedAsNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.importedAs; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to importedEntity property */ + def importedEntity: Iterator[String] = + traversal.flatMap(_.importedEntity) + + /** Traverse to nodes where the importedEntity matches the regular expression `value` + */ + def importedEntity(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + importedEntityExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.importedEntity; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the importedEntity matches at least one of the regular expressions in `values` + */ + def importedEntity(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.importedEntity; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where importedEntity matches `value` exactly. + */ + def importedEntityExact(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, 25, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.importedEntity; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where importedEntity matches one of the elements in `values` exactly. + */ + def importedEntityExact(values: String*): Iterator[NodeType] = + if (values.length == 1) importedEntityExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.importedEntity; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where importedEntity does not match the regular expression `value`. + */ + def importedEntityNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.importedEntity.isEmpty || node.importedEntity.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.importedEntity; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where importedEntity does not match any of the regular expressions in `values`. + */ + def importedEntityNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.importedEntity; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to isExplicit property */ + def isExplicit: Iterator[Boolean] = + traversal.flatMap(_.isExplicit) + + /** Traverse to nodes where the isExplicit equals the given `value` + */ + def isExplicit(value: Boolean): Iterator[NodeType] = + traversal.filter { node => node.isExplicit.isDefined && node.isExplicit.get == value } + + /** Traverse to isWildcard property */ + def isWildcard: Iterator[Boolean] = + traversal.flatMap(_.isWildcard) + + /** Traverse to nodes where the isWildcard equals the given `value` + */ + def isWildcard(value: Boolean): Iterator[NodeType] = + traversal.filter { node => node.isWildcard.isDefined && node.isWildcard.get == value } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalJumplabelBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalJumplabelBase.scala new file mode 100644 index 000000000..80442e24c --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalJumplabelBase.scala @@ -0,0 +1,126 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalJumplabelBase[NodeType <: nodes.JumpLabelBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + + /** Traverse to parserTypeName property */ + def parserTypeName: Iterator[String] = + traversal.map(_.parserTypeName) + + /** Traverse to nodes where the parserTypeName matches the regular expression `value` + */ + def parserTypeName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + parserTypeNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.parserTypeName).matches } + } + + /** Traverse to nodes where the parserTypeName matches at least one of the regular expressions in `values` + */ + def parserTypeName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.parserTypeName).matches } } + } + + /** Traverse to nodes where parserTypeName matches `value` exactly. + */ + def parserTypeNameExact(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 { _.parserTypeName == value } + } + + /** Traverse to nodes where parserTypeName matches one of the elements in `values` exactly. + */ + def parserTypeNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) parserTypeNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.parserTypeName) } + } + + /** Traverse to nodes where parserTypeName does not match the regular expression `value`. + */ + def parserTypeNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.parserTypeName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.parserTypeName).matches } + } + } + + /** Traverse to nodes where parserTypeName does not match any of the regular expressions in `values`. + */ + def parserTypeNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.parserTypeName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalJumptargetBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalJumptargetBase.scala new file mode 100644 index 000000000..24dc7d632 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalJumptargetBase.scala @@ -0,0 +1,175 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalJumptargetBase[NodeType <: nodes.JumpTargetBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to argumentIndex property */ + def argumentIndex: Iterator[Int] = + traversal.map(_.argumentIndex) + + /** Traverse to nodes where the argumentIndex equals the given `value` + */ + def argumentIndex(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex == value } + + /** Traverse to nodes where the argumentIndex equals at least one of the given `values` + */ + def argumentIndex(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => vset.contains(node.argumentIndex) } + } + + /** Traverse to nodes where the argumentIndex is not equal to the given `value` + */ + def argumentIndexNot(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex != value } + + /** Traverse to nodes where the argumentIndex is not equal to any of the given `values` + */ + def argumentIndexNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => !vset.contains(node.argumentIndex) } + } + + /** Traverse to nodes where the argumentIndex is greater than the given `value` + */ + def argumentIndexGt(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex > value } + + /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` + */ + def argumentIndexGte(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex >= value } + + /** Traverse to nodes where the argumentIndex is less than the given `value` + */ + def argumentIndexLt(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex < value } + + /** Traverse to nodes where the argumentIndex is less than or equal the given `value` + */ + def argumentIndexLte(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex <= value } + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + + /** Traverse to parserTypeName property */ + def parserTypeName: Iterator[String] = + traversal.map(_.parserTypeName) + + /** Traverse to nodes where the parserTypeName matches the regular expression `value` + */ + def parserTypeName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + parserTypeNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.parserTypeName).matches } + } + + /** Traverse to nodes where the parserTypeName matches at least one of the regular expressions in `values` + */ + def parserTypeName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.parserTypeName).matches } } + } + + /** Traverse to nodes where parserTypeName matches `value` exactly. + */ + def parserTypeNameExact(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 { _.parserTypeName == value } + } + + /** Traverse to nodes where parserTypeName matches one of the elements in `values` exactly. + */ + def parserTypeNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) parserTypeNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.parserTypeName) } + } + + /** Traverse to nodes where parserTypeName does not match the regular expression `value`. + */ + def parserTypeNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.parserTypeName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.parserTypeName).matches } + } + } + + /** Traverse to nodes where parserTypeName does not match any of the regular expressions in `values`. + */ + def parserTypeNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.parserTypeName).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..d08c63c9a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalKeyvaluepairBase.scala @@ -0,0 +1,127 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalKeyvaluepairBase[NodeType <: nodes.KeyValuePairBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to key property */ + def key: Iterator[String] = + traversal.map(_.key) + + /** Traverse to nodes where the key matches the regular expression `value` + */ + def key(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + keyExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.key).matches } + } + + /** Traverse to nodes where the key matches at least one of the regular expressions in `values` + */ + def key(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.key).matches } } + } + + /** Traverse to nodes where key matches `value` exactly. + */ + def keyExact(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, 32, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.key == value } + } + + /** Traverse to nodes where key matches one of the elements in `values` exactly. + */ + def keyExact(values: String*): Iterator[NodeType] = + if (values.length == 1) keyExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.key) } + } + + /** Traverse to nodes where key does not match the regular expression `value`. + */ + def keyNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.key != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.key).matches } + } + } + + /** Traverse to nodes where key does not match any of the regular expressions in `values`. + */ + def keyNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.key).matches }.isEmpty } + } + + /** Traverse to value property */ + def value: Iterator[String] = + traversal.map(_.value) + + /** Traverse to nodes where the value matches the regular expression `value` + */ + def value(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + valueExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.value).matches } + } + + /** Traverse to nodes where the value matches at least one of the regular expressions in `values` + */ + def value(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.value).matches } } + } + + /** Traverse to nodes where value matches `value` exactly. + */ + def valueExact(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, 53, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.value == value } + } + + /** Traverse to nodes where value matches one of the elements in `values` exactly. + */ + def valueExact(values: String*): Iterator[NodeType] = + if (values.length == 1) valueExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.value) } + } + + /** Traverse to nodes where value does not match the regular expression `value`. + */ + def valueNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.value != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.value).matches } + } + } + + /** Traverse to nodes where value does not match any of the regular expressions in `values`. + */ + def valueNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.value).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..b6719767e --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLiteralBase.scala @@ -0,0 +1,75 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalLiteralBase[NodeType <: nodes.LiteralBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to dynamicTypeHintFullName property */ + def dynamicTypeHintFullName: Iterator[String] = + traversal.flatMap(_.dynamicTypeHintFullName) + + /** Traverse to possibleTypes property */ + def possibleTypes: Iterator[String] = + traversal.flatMap(_.possibleTypes) + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..eea241dc8 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLocalBase.scala @@ -0,0 +1,148 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalLocalBase[NodeType <: nodes.LocalBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to closureBindingId property */ + def closureBindingId: Iterator[String] = + traversal.flatMap(_.closureBindingId) + + /** Traverse to nodes where the closureBindingId matches the regular expression `value` + */ + def closureBindingId(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + closureBindingIdExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.closureBindingId; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the closureBindingId matches at least one of the regular expressions in `values` + */ + def closureBindingId(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.closureBindingId; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where closureBindingId matches `value` exactly. + */ + def closureBindingIdExact(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, 8, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.closureBindingId; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where closureBindingId matches one of the elements in `values` exactly. + */ + def closureBindingIdExact(values: String*): Iterator[NodeType] = + if (values.length == 1) closureBindingIdExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.closureBindingId; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where closureBindingId does not match the regular expression `value`. + */ + def closureBindingIdNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.closureBindingId.isEmpty || node.closureBindingId.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.closureBindingId; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where closureBindingId does not match any of the regular expressions in `values`. + */ + def closureBindingIdNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.closureBindingId; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to dynamicTypeHintFullName property */ + def dynamicTypeHintFullName: Iterator[String] = + traversal.flatMap(_.dynamicTypeHintFullName) + + /** Traverse to possibleTypes property */ + def possibleTypes: Iterator[String] = + traversal.flatMap(_.possibleTypes) + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLocationBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLocationBase.scala new file mode 100644 index 000000000..7d849acdb --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalLocationBase.scala @@ -0,0 +1,544 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalLocationBase[NodeType <: nodes.LocationBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to className property */ + def className: Iterator[String] = + traversal.map(_.className) + + /** Traverse to nodes where the className matches the regular expression `value` + */ + def className(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + classNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.className).matches } + } + + /** Traverse to nodes where the className matches at least one of the regular expressions in `values` + */ + def className(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.className).matches } } + } + + /** Traverse to nodes where className matches `value` exactly. + */ + def classNameExact(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, 6, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.className == value } + } + + /** Traverse to nodes where className matches one of the elements in `values` exactly. + */ + def classNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) classNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.className) } + } + + /** Traverse to nodes where className does not match the regular expression `value`. + */ + def classNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.className != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.className).matches } + } + } + + /** Traverse to nodes where className does not match any of the regular expressions in `values`. + */ + def classNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.className).matches }.isEmpty } + } + + /** Traverse to classShortName property */ + def classShortName: Iterator[String] = + traversal.map(_.classShortName) + + /** Traverse to nodes where the classShortName matches the regular expression `value` + */ + def classShortName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + classShortNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.classShortName).matches } + } + + /** Traverse to nodes where the classShortName matches at least one of the regular expressions in `values` + */ + def classShortName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.classShortName).matches } } + } + + /** Traverse to nodes where classShortName matches `value` exactly. + */ + def classShortNameExact(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, 7, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.classShortName == value } + } + + /** Traverse to nodes where classShortName matches one of the elements in `values` exactly. + */ + def classShortNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) classShortNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.classShortName) } + } + + /** Traverse to nodes where classShortName does not match the regular expression `value`. + */ + def classShortNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.classShortName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.classShortName).matches } + } + } + + /** Traverse to nodes where classShortName does not match any of the regular expressions in `values`. + */ + def classShortNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.classShortName).matches }.isEmpty } + } + + /** Traverse to filename property */ + def filename: Iterator[String] = + traversal.map(_.filename) + + /** Traverse to nodes where the filename matches the regular expression `value` + */ + def filename(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + filenameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.filename).matches } + } + + /** Traverse to nodes where the filename matches at least one of the regular expressions in `values` + */ + def filename(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.filename).matches } } + } + + /** Traverse to nodes where filename matches `value` exactly. + */ + def filenameExact(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, 21, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.filename == value } + } + + /** Traverse to nodes where filename matches one of the elements in `values` exactly. + */ + def filenameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) filenameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.filename) } + } + + /** Traverse to nodes where filename does not match the regular expression `value`. + */ + def filenameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.filename != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.filename).matches } + } + } + + /** Traverse to nodes where filename does not match any of the regular expressions in `values`. + */ + def filenameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.filename).matches }.isEmpty } + } + + /** Traverse to lineNumber property */ + def lineNumber: Iterator[Int] = + traversal.flatMap(_.lineNumber) + + /** Traverse to nodes where the lineNumber equals the given `value` + */ + def lineNumber(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the lineNumber equals at least one of the given `values` + */ + def lineNumber(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the lineNumber is not equal to the given `value` + */ + def lineNumberNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the lineNumber does not equal any one of the given `values` + */ + def lineNumberNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.lineNumber; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the lineNumber is greater than the given `value` + */ + def lineNumberGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the lineNumber is greater than or equal the given `value` + */ + def lineNumberGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the lineNumber is less than the given `value` + */ + def lineNumberLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the lineNumber is less than or equal the given `value` + */ + def lineNumberLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get <= value + } + + /** Traverse to methodFullName property */ + def methodFullName: Iterator[String] = + traversal.map(_.methodFullName) + + /** Traverse to nodes where the methodFullName matches the regular expression `value` + */ + def methodFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + methodFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.methodFullName).matches } + } + + /** Traverse to nodes where the methodFullName matches at least one of the regular expressions in `values` + */ + def methodFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.methodFullName).matches } } + } + + /** Traverse to nodes where methodFullName matches `value` exactly. + */ + def methodFullNameExact(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, 36, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.methodFullName == value } + } + + /** Traverse to nodes where methodFullName matches one of the elements in `values` exactly. + */ + def methodFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) methodFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.methodFullName) } + } + + /** Traverse to nodes where methodFullName does not match the regular expression `value`. + */ + def methodFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.methodFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.methodFullName).matches } + } + } + + /** Traverse to nodes where methodFullName does not match any of the regular expressions in `values`. + */ + def methodFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.methodFullName).matches }.isEmpty } + } + + /** Traverse to methodShortName property */ + def methodShortName: Iterator[String] = + traversal.map(_.methodShortName) + + /** Traverse to nodes where the methodShortName matches the regular expression `value` + */ + def methodShortName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + methodShortNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.methodShortName).matches } + } + + /** Traverse to nodes where the methodShortName matches at least one of the regular expressions in `values` + */ + def methodShortName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.methodShortName).matches } } + } + + /** Traverse to nodes where methodShortName matches `value` exactly. + */ + def methodShortNameExact(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, 37, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.methodShortName == value } + } + + /** Traverse to nodes where methodShortName matches one of the elements in `values` exactly. + */ + def methodShortNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) methodShortNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.methodShortName) } + } + + /** Traverse to nodes where methodShortName does not match the regular expression `value`. + */ + def methodShortNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.methodShortName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.methodShortName).matches } + } + } + + /** Traverse to nodes where methodShortName does not match any of the regular expressions in `values`. + */ + def methodShortNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.methodShortName).matches }.isEmpty } + } + + /** Traverse to nodeLabel property */ + def nodeLabel: Iterator[String] = + traversal.map(_.nodeLabel) + + /** Traverse to nodes where the nodeLabel matches the regular expression `value` + */ + def nodeLabel(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nodeLabelExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.nodeLabel).matches } + } + + /** Traverse to nodes where the nodeLabel matches at least one of the regular expressions in `values` + */ + def nodeLabel(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.nodeLabel).matches } } + } + + /** Traverse to nodes where nodeLabel matches `value` exactly. + */ + def nodeLabelExact(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, 40, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.nodeLabel == value } + } + + /** Traverse to nodes where nodeLabel matches one of the elements in `values` exactly. + */ + def nodeLabelExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nodeLabelExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.nodeLabel) } + } + + /** Traverse to nodes where nodeLabel does not match the regular expression `value`. + */ + def nodeLabelNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.nodeLabel != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.nodeLabel).matches } + } + } + + /** Traverse to nodes where nodeLabel does not match any of the regular expressions in `values`. + */ + def nodeLabelNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.nodeLabel).matches }.isEmpty } + } + + /** Traverse to packageName property */ + def packageName: Iterator[String] = + traversal.map(_.packageName) + + /** Traverse to nodes where the packageName matches the regular expression `value` + */ + def packageName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + packageNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.packageName).matches } + } + + /** Traverse to nodes where the packageName matches at least one of the regular expressions in `values` + */ + def packageName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.packageName).matches } } + } + + /** Traverse to nodes where packageName matches `value` exactly. + */ + def packageNameExact(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, 45, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.packageName == value } + } + + /** Traverse to nodes where packageName matches one of the elements in `values` exactly. + */ + def packageNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) packageNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.packageName) } + } + + /** Traverse to nodes where packageName does not match the regular expression `value`. + */ + def packageNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.packageName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.packageName).matches } + } + } + + /** Traverse to nodes where packageName does not match any of the regular expressions in `values`. + */ + def packageNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.packageName).matches }.isEmpty } + } + + /** Traverse to symbol property */ + def symbol: Iterator[String] = + traversal.map(_.symbol) + + /** Traverse to nodes where the symbol matches the regular expression `value` + */ + def symbol(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + symbolExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.symbol).matches } + } + + /** Traverse to nodes where the symbol matches at least one of the regular expressions in `values` + */ + def symbol(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.symbol).matches } } + } + + /** Traverse to nodes where symbol matches `value` exactly. + */ + def symbolExact(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, 50, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.symbol == value } + } + + /** Traverse to nodes where symbol matches one of the elements in `values` exactly. + */ + def symbolExact(values: String*): Iterator[NodeType] = + if (values.length == 1) symbolExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.symbol) } + } + + /** Traverse to nodes where symbol does not match the regular expression `value`. + */ + def symbolNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.symbol != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.symbol).matches } + } + } + + /** Traverse to nodes where symbol does not match any of the regular expressions in `values`. + */ + def symbolNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.symbol).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..535d1e620 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMemberBase.scala @@ -0,0 +1,193 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalMemberBase[NodeType <: nodes.MemberBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to astParentFullName property */ + def astParentFullName: Iterator[String] = + traversal.map(_.astParentFullName) + + /** Traverse to nodes where the astParentFullName matches the regular expression `value` + */ + def astParentFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + astParentFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.astParentFullName).matches } + } + + /** Traverse to nodes where the astParentFullName matches at least one of the regular expressions in `values` + */ + def astParentFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.astParentFullName).matches } } + } + + /** Traverse to nodes where astParentFullName matches `value` exactly. + */ + def astParentFullNameExact(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, 3, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.astParentFullName == value } + } + + /** Traverse to nodes where astParentFullName matches one of the elements in `values` exactly. + */ + def astParentFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) astParentFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.astParentFullName) } + } + + /** Traverse to nodes where astParentFullName does not match the regular expression `value`. + */ + def astParentFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.astParentFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.astParentFullName).matches } + } + } + + /** Traverse to nodes where astParentFullName does not match any of the regular expressions in `values`. + */ + def astParentFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.astParentFullName).matches }.isEmpty } + } + + /** Traverse to astParentType property */ + def astParentType: Iterator[String] = + traversal.map(_.astParentType) + + /** Traverse to nodes where the astParentType matches the regular expression `value` + */ + def astParentType(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + astParentTypeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.astParentType).matches } + } + + /** Traverse to nodes where the astParentType matches at least one of the regular expressions in `values` + */ + def astParentType(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.astParentType).matches } } + } + + /** Traverse to nodes where astParentType matches `value` exactly. + */ + def astParentTypeExact(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, 4, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.astParentType == value } + } + + /** Traverse to nodes where astParentType matches one of the elements in `values` exactly. + */ + def astParentTypeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) astParentTypeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.astParentType) } + } + + /** Traverse to nodes where astParentType does not match the regular expression `value`. + */ + def astParentTypeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.astParentType != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.astParentType).matches } + } + } + + /** Traverse to nodes where astParentType does not match any of the regular expressions in `values`. + */ + def astParentTypeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.astParentType).matches }.isEmpty } + } + + /** Traverse to dynamicTypeHintFullName property */ + def dynamicTypeHintFullName: Iterator[String] = + traversal.flatMap(_.dynamicTypeHintFullName) + + /** Traverse to possibleTypes property */ + def possibleTypes: Iterator[String] = + traversal.flatMap(_.possibleTypes) + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..b5a61b6c4 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMetadataBase.scala @@ -0,0 +1,262 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalMetadataBase[NodeType <: nodes.MetaDataBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to hash property */ + def hash: Iterator[String] = + traversal.flatMap(_.hash) + + /** Traverse to nodes where the hash matches the regular expression `value` + */ + def hash(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + hashExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.hash; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the hash matches at least one of the regular expressions in `values` + */ + def hash(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.hash; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where hash matches `value` exactly. + */ + def hashExact(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, 23, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.hash; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where hash matches one of the elements in `values` exactly. + */ + def hashExact(values: String*): Iterator[NodeType] = + if (values.length == 1) hashExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.hash; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where hash does not match the regular expression `value`. + */ + def hashNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.hash.isEmpty || node.hash.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.hash; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where hash does not match any of the regular expressions in `values`. + */ + def hashNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.hash; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to language property */ + def language: Iterator[String] = + traversal.map(_.language) + + /** Traverse to nodes where the language matches the regular expression `value` + */ + def language(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + languageExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.language).matches } + } + + /** Traverse to nodes where the language matches at least one of the regular expressions in `values` + */ + def language(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.language).matches } } + } + + /** Traverse to nodes where language matches `value` exactly. + */ + def languageExact(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, 33, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.language == value } + } + + /** Traverse to nodes where language matches one of the elements in `values` exactly. + */ + def languageExact(values: String*): Iterator[NodeType] = + if (values.length == 1) languageExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.language) } + } + + /** Traverse to nodes where language does not match the regular expression `value`. + */ + def languageNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.language != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.language).matches } + } + } + + /** Traverse to nodes where language does not match any of the regular expressions in `values`. + */ + def languageNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.language).matches }.isEmpty } + } + + /** Traverse to overlays property */ + def overlays: Iterator[String] = + traversal.flatMap(_.overlays) + + /** Traverse to root property */ + def root: Iterator[String] = + traversal.map(_.root) + + /** Traverse to nodes where the root matches the regular expression `value` + */ + def root(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + rootExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.root).matches } + } + + /** Traverse to nodes where the root matches at least one of the regular expressions in `values` + */ + def root(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.root).matches } } + } + + /** Traverse to nodes where root matches `value` exactly. + */ + def rootExact(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, 48, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.root == value } + } + + /** Traverse to nodes where root matches one of the elements in `values` exactly. + */ + def rootExact(values: String*): Iterator[NodeType] = + if (values.length == 1) rootExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.root) } + } + + /** Traverse to nodes where root does not match the regular expression `value`. + */ + def rootNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.root != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.root).matches } + } + } + + /** Traverse to nodes where root does not match any of the regular expressions in `values`. + */ + def rootNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.root).matches }.isEmpty } + } + + /** Traverse to version property */ + def version: Iterator[String] = + traversal.map(_.version) + + /** Traverse to nodes where the version matches the regular expression `value` + */ + def version(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + versionExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.version).matches } + } + + /** Traverse to nodes where the version matches at least one of the regular expressions in `values` + */ + def version(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.version).matches } } + } + + /** Traverse to nodes where version matches `value` exactly. + */ + def versionExact(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, 54, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.version == value } + } + + /** Traverse to nodes where version matches one of the elements in `values` exactly. + */ + def versionExact(values: String*): Iterator[NodeType] = + if (values.length == 1) versionExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.version) } + } + + /** Traverse to nodes where version does not match the regular expression `value`. + */ + def versionNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.version != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.version).matches } + } + } + + /** Traverse to nodes where version does not match any of the regular expressions in `values`. + */ + def versionNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.version).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodBase.scala new file mode 100644 index 000000000..e261d8a3a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodBase.scala @@ -0,0 +1,641 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalMethodBase[NodeType <: nodes.MethodBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to astParentFullName property */ + def astParentFullName: Iterator[String] = + traversal.map(_.astParentFullName) + + /** Traverse to nodes where the astParentFullName matches the regular expression `value` + */ + def astParentFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + astParentFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.astParentFullName).matches } + } + + /** Traverse to nodes where the astParentFullName matches at least one of the regular expressions in `values` + */ + def astParentFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.astParentFullName).matches } } + } + + /** Traverse to nodes where astParentFullName matches `value` exactly. + */ + def astParentFullNameExact(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, 3, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.astParentFullName == value } + } + + /** Traverse to nodes where astParentFullName matches one of the elements in `values` exactly. + */ + def astParentFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) astParentFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.astParentFullName) } + } + + /** Traverse to nodes where astParentFullName does not match the regular expression `value`. + */ + def astParentFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.astParentFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.astParentFullName).matches } + } + } + + /** Traverse to nodes where astParentFullName does not match any of the regular expressions in `values`. + */ + def astParentFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.astParentFullName).matches }.isEmpty } + } + + /** Traverse to astParentType property */ + def astParentType: Iterator[String] = + traversal.map(_.astParentType) + + /** Traverse to nodes where the astParentType matches the regular expression `value` + */ + def astParentType(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + astParentTypeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.astParentType).matches } + } + + /** Traverse to nodes where the astParentType matches at least one of the regular expressions in `values` + */ + def astParentType(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.astParentType).matches } } + } + + /** Traverse to nodes where astParentType matches `value` exactly. + */ + def astParentTypeExact(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, 4, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.astParentType == value } + } + + /** Traverse to nodes where astParentType matches one of the elements in `values` exactly. + */ + def astParentTypeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) astParentTypeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.astParentType) } + } + + /** Traverse to nodes where astParentType does not match the regular expression `value`. + */ + def astParentTypeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.astParentType != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.astParentType).matches } + } + } + + /** Traverse to nodes where astParentType does not match any of the regular expressions in `values`. + */ + def astParentTypeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.astParentType).matches }.isEmpty } + } + + /** Traverse to columnNumberEnd property */ + def columnNumberEnd: Iterator[Int] = + traversal.flatMap(_.columnNumberEnd) + + /** Traverse to nodes where the columnNumberEnd equals the given `value` + */ + def columnNumberEnd(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the columnNumberEnd equals at least one of the given `values` + */ + def columnNumberEnd(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the columnNumberEnd is not equal to the given `value` + */ + def columnNumberEndNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the columnNumberEnd does not equal any one of the given `values` + */ + def columnNumberEndNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the columnNumberEnd is greater than the given `value` + */ + def columnNumberEndGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the columnNumberEnd is greater than or equal the given `value` + */ + def columnNumberEndGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the columnNumberEnd is less than the given `value` + */ + def columnNumberEndLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the columnNumberEnd is less than or equal the given `value` + */ + def columnNumberEndLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isDefined && tmp.get <= value + } + + /** Traverse to filename property */ + def filename: Iterator[String] = + traversal.map(_.filename) + + /** Traverse to nodes where the filename matches the regular expression `value` + */ + def filename(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + filenameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.filename).matches } + } + + /** Traverse to nodes where the filename matches at least one of the regular expressions in `values` + */ + def filename(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.filename).matches } } + } + + /** Traverse to nodes where filename matches `value` exactly. + */ + def filenameExact(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, 21, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.filename == value } + } + + /** Traverse to nodes where filename matches one of the elements in `values` exactly. + */ + def filenameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) filenameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.filename) } + } + + /** Traverse to nodes where filename does not match the regular expression `value`. + */ + def filenameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.filename != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.filename).matches } + } + } + + /** Traverse to nodes where filename does not match any of the regular expressions in `values`. + */ + def filenameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.filename).matches }.isEmpty } + } + + /** Traverse to fullName property */ + def fullName: Iterator[String] = + traversal.map(_.fullName) + + /** Traverse to nodes where the fullName matches the regular expression `value` + */ + def fullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + fullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.fullName).matches } + } + + /** Traverse to nodes where the fullName matches at least one of the regular expressions in `values` + */ + def fullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.fullName).matches } } + } + + /** Traverse to nodes where fullName matches `value` exactly. + */ + def fullNameExact(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, 22, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.fullName == value } + } + + /** Traverse to nodes where fullName matches one of the elements in `values` exactly. + */ + def fullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) fullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.fullName) } + } + + /** Traverse to nodes where fullName does not match the regular expression `value`. + */ + def fullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.fullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.fullName).matches } + } + } + + /** Traverse to nodes where fullName does not match any of the regular expressions in `values`. + */ + def fullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.fullName).matches }.isEmpty } + } + + /** Traverse to hash property */ + def hash: Iterator[String] = + traversal.flatMap(_.hash) + + /** Traverse to nodes where the hash matches the regular expression `value` + */ + def hash(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + hashExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.hash; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the hash matches at least one of the regular expressions in `values` + */ + def hash(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.hash; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where hash matches `value` exactly. + */ + def hashExact(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, 23, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.hash; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where hash matches one of the elements in `values` exactly. + */ + def hashExact(values: String*): Iterator[NodeType] = + if (values.length == 1) hashExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.hash; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where hash does not match the regular expression `value`. + */ + def hashNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.hash.isEmpty || node.hash.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.hash; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where hash does not match any of the regular expressions in `values`. + */ + def hashNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.hash; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to isExternal property */ + def isExternal: Iterator[Boolean] = + traversal.map(_.isExternal) + + /** Traverse to nodes where the isExternal equals the given `value` + */ + def isExternal(value: Boolean): Iterator[NodeType] = + traversal.filter { _.isExternal == value } + + /** Traverse to lineNumberEnd property */ + def lineNumberEnd: Iterator[Int] = + traversal.flatMap(_.lineNumberEnd) + + /** Traverse to nodes where the lineNumberEnd equals the given `value` + */ + def lineNumberEnd(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the lineNumberEnd equals at least one of the given `values` + */ + def lineNumberEnd(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the lineNumberEnd is not equal to the given `value` + */ + def lineNumberEndNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the lineNumberEnd does not equal any one of the given `values` + */ + def lineNumberEndNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the lineNumberEnd is greater than the given `value` + */ + def lineNumberEndGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the lineNumberEnd is greater than or equal the given `value` + */ + def lineNumberEndGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the lineNumberEnd is less than the given `value` + */ + def lineNumberEndLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the lineNumberEnd is less than or equal the given `value` + */ + def lineNumberEndLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isDefined && tmp.get <= value + } + + /** Traverse to offset property */ + def offset: Iterator[Int] = + traversal.flatMap(_.offset) + + /** Traverse to nodes where the offset equals the given `value` + */ + def offset(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the offset equals at least one of the given `values` + */ + def offset(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the offset is not equal to the given `value` + */ + def offsetNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the offset does not equal any one of the given `values` + */ + def offsetNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.offset; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the offset is greater than the given `value` + */ + def offsetGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the offset is greater than or equal the given `value` + */ + def offsetGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the offset is less than the given `value` + */ + def offsetLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the offset is less than or equal the given `value` + */ + def offsetLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get <= value + } + + /** Traverse to offsetEnd property */ + def offsetEnd: Iterator[Int] = + traversal.flatMap(_.offsetEnd) + + /** Traverse to nodes where the offsetEnd equals the given `value` + */ + def offsetEnd(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the offsetEnd equals at least one of the given `values` + */ + def offsetEnd(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the offsetEnd is not equal to the given `value` + */ + def offsetEndNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the offsetEnd does not equal any one of the given `values` + */ + def offsetEndNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the offsetEnd is greater than the given `value` + */ + def offsetEndGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the offsetEnd is greater than or equal the given `value` + */ + def offsetEndGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the offsetEnd is less than the given `value` + */ + def offsetEndLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the offsetEnd is less than or equal the given `value` + */ + def offsetEndLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get <= value + } + + /** Traverse to signature property */ + def signature: Iterator[String] = + traversal.map(_.signature) + + /** Traverse to nodes where the signature matches the regular expression `value` + */ + def signature(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + signatureExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.signature).matches } + } + + /** Traverse to nodes where the signature matches at least one of the regular expressions in `values` + */ + def signature(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.signature).matches } } + } + + /** Traverse to nodes where signature matches `value` exactly. + */ + def signatureExact(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, 49, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.signature == value } + } + + /** Traverse to nodes where signature matches one of the elements in `values` exactly. + */ + def signatureExact(values: String*): Iterator[NodeType] = + if (values.length == 1) signatureExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.signature) } + } + + /** Traverse to nodes where signature does not match the regular expression `value`. + */ + def signatureNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.signature != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.signature).matches } + } + } + + /** Traverse to nodes where signature does not match any of the regular expressions in `values`. + */ + def signatureNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.signature).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..5406f8d9a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodparameterinBase.scala @@ -0,0 +1,265 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalMethodparameterinBase[NodeType <: nodes.MethodParameterInBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to closureBindingId property */ + def closureBindingId: Iterator[String] = + traversal.flatMap(_.closureBindingId) + + /** Traverse to nodes where the closureBindingId matches the regular expression `value` + */ + def closureBindingId(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + closureBindingIdExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.closureBindingId; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the closureBindingId matches at least one of the regular expressions in `values` + */ + def closureBindingId(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.closureBindingId; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where closureBindingId matches `value` exactly. + */ + def closureBindingIdExact(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, 8, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.closureBindingId; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where closureBindingId matches one of the elements in `values` exactly. + */ + def closureBindingIdExact(values: String*): Iterator[NodeType] = + if (values.length == 1) closureBindingIdExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.closureBindingId; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where closureBindingId does not match the regular expression `value`. + */ + def closureBindingIdNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.closureBindingId.isEmpty || node.closureBindingId.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.closureBindingId; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where closureBindingId does not match any of the regular expressions in `values`. + */ + def closureBindingIdNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.closureBindingId; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to dynamicTypeHintFullName property */ + def dynamicTypeHintFullName: Iterator[String] = + traversal.flatMap(_.dynamicTypeHintFullName) + + /** Traverse to evaluationStrategy property */ + def evaluationStrategy: Iterator[String] = + traversal.map(_.evaluationStrategy) + + /** Traverse to nodes where the evaluationStrategy matches the regular expression `value` + */ + def evaluationStrategy(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + evaluationStrategyExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.evaluationStrategy).matches } + } + + /** Traverse to nodes where the evaluationStrategy matches at least one of the regular expressions in `values` + */ + def evaluationStrategy(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.evaluationStrategy).matches } } + } + + /** Traverse to nodes where evaluationStrategy matches `value` exactly. + */ + def evaluationStrategyExact(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, 19, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.evaluationStrategy == value } + } + + /** Traverse to nodes where evaluationStrategy matches one of the elements in `values` exactly. + */ + def evaluationStrategyExact(values: String*): Iterator[NodeType] = + if (values.length == 1) evaluationStrategyExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.evaluationStrategy) } + } + + /** Traverse to nodes where evaluationStrategy does not match the regular expression `value`. + */ + def evaluationStrategyNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.evaluationStrategy != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.evaluationStrategy).matches } + } + } + + /** Traverse to nodes where evaluationStrategy does not match any of the regular expressions in `values`. + */ + def evaluationStrategyNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.evaluationStrategy).matches }.isEmpty } + } + + /** Traverse to index property */ + def index: Iterator[Int] = + traversal.map(_.index) + + /** Traverse to nodes where the index equals the given `value` + */ + def index(value: Int): Iterator[NodeType] = + traversal.filter { _.index == value } + + /** Traverse to nodes where the index equals at least one of the given `values` + */ + def index(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => vset.contains(node.index) } + } + + /** Traverse to nodes where the index is not equal to the given `value` + */ + def indexNot(value: Int): Iterator[NodeType] = + traversal.filter { _.index != value } + + /** Traverse to nodes where the index is not equal to any of the given `values` + */ + def indexNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => !vset.contains(node.index) } + } + + /** Traverse to nodes where the index is greater than the given `value` + */ + def indexGt(value: Int): Iterator[NodeType] = + traversal.filter { _.index > value } + + /** Traverse to nodes where the index is greater than or equal the given `value` + */ + def indexGte(value: Int): Iterator[NodeType] = + traversal.filter { _.index >= value } + + /** Traverse to nodes where the index is less than the given `value` + */ + def indexLt(value: Int): Iterator[NodeType] = + traversal.filter { _.index < value } + + /** Traverse to nodes where the index is less than or equal the given `value` + */ + def indexLte(value: Int): Iterator[NodeType] = + traversal.filter { _.index <= value } + + /** Traverse to isVariadic property */ + def isVariadic: Iterator[Boolean] = + traversal.map(_.isVariadic) + + /** Traverse to nodes where the isVariadic equals the given `value` + */ + def isVariadic(value: Boolean): Iterator[NodeType] = + traversal.filter { _.isVariadic == value } + + /** Traverse to possibleTypes property */ + def possibleTypes: Iterator[String] = + traversal.flatMap(_.possibleTypes) + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..d72465a76 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodparameteroutBase.scala @@ -0,0 +1,184 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalMethodparameteroutBase[NodeType <: nodes.MethodParameterOutBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to evaluationStrategy property */ + def evaluationStrategy: Iterator[String] = + traversal.map(_.evaluationStrategy) + + /** Traverse to nodes where the evaluationStrategy matches the regular expression `value` + */ + def evaluationStrategy(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + evaluationStrategyExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.evaluationStrategy).matches } + } + + /** Traverse to nodes where the evaluationStrategy matches at least one of the regular expressions in `values` + */ + def evaluationStrategy(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.evaluationStrategy).matches } } + } + + /** Traverse to nodes where evaluationStrategy matches `value` exactly. + */ + def evaluationStrategyExact(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, 19, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.evaluationStrategy == value } + } + + /** Traverse to nodes where evaluationStrategy matches one of the elements in `values` exactly. + */ + def evaluationStrategyExact(values: String*): Iterator[NodeType] = + if (values.length == 1) evaluationStrategyExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.evaluationStrategy) } + } + + /** Traverse to nodes where evaluationStrategy does not match the regular expression `value`. + */ + def evaluationStrategyNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.evaluationStrategy != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.evaluationStrategy).matches } + } + } + + /** Traverse to nodes where evaluationStrategy does not match any of the regular expressions in `values`. + */ + def evaluationStrategyNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.evaluationStrategy).matches }.isEmpty } + } + + /** Traverse to index property */ + def index: Iterator[Int] = + traversal.map(_.index) + + /** Traverse to nodes where the index equals the given `value` + */ + def index(value: Int): Iterator[NodeType] = + traversal.filter { _.index == value } + + /** Traverse to nodes where the index equals at least one of the given `values` + */ + def index(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => vset.contains(node.index) } + } + + /** Traverse to nodes where the index is not equal to the given `value` + */ + def indexNot(value: Int): Iterator[NodeType] = + traversal.filter { _.index != value } + + /** Traverse to nodes where the index is not equal to any of the given `values` + */ + def indexNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => !vset.contains(node.index) } + } + + /** Traverse to nodes where the index is greater than the given `value` + */ + def indexGt(value: Int): Iterator[NodeType] = + traversal.filter { _.index > value } + + /** Traverse to nodes where the index is greater than or equal the given `value` + */ + def indexGte(value: Int): Iterator[NodeType] = + traversal.filter { _.index >= value } + + /** Traverse to nodes where the index is less than the given `value` + */ + def indexLt(value: Int): Iterator[NodeType] = + traversal.filter { _.index < value } + + /** Traverse to nodes where the index is less than or equal the given `value` + */ + def indexLte(value: Int): Iterator[NodeType] = + traversal.filter { _.index <= value } + + /** Traverse to isVariadic property */ + def isVariadic: Iterator[Boolean] = + traversal.map(_.isVariadic) + + /** Traverse to nodes where the isVariadic equals the given `value` + */ + def isVariadic(value: Boolean): Iterator[NodeType] = + traversal.filter { _.isVariadic == value } + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..9492b66cd --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodrefBase.scala @@ -0,0 +1,134 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalMethodrefBase[NodeType <: nodes.MethodRefBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to dynamicTypeHintFullName property */ + def dynamicTypeHintFullName: Iterator[String] = + traversal.flatMap(_.dynamicTypeHintFullName) + + /** Traverse to methodFullName property */ + def methodFullName: Iterator[String] = + traversal.map(_.methodFullName) + + /** Traverse to nodes where the methodFullName matches the regular expression `value` + */ + def methodFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + methodFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.methodFullName).matches } + } + + /** Traverse to nodes where the methodFullName matches at least one of the regular expressions in `values` + */ + def methodFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.methodFullName).matches } } + } + + /** Traverse to nodes where methodFullName matches `value` exactly. + */ + def methodFullNameExact(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, 36, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.methodFullName == value } + } + + /** Traverse to nodes where methodFullName matches one of the elements in `values` exactly. + */ + def methodFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) methodFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.methodFullName) } + } + + /** Traverse to nodes where methodFullName does not match the regular expression `value`. + */ + def methodFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.methodFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.methodFullName).matches } + } + } + + /** Traverse to nodes where methodFullName does not match any of the regular expressions in `values`. + */ + def methodFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.methodFullName).matches }.isEmpty } + } + + /** Traverse to possibleTypes property */ + def possibleTypes: Iterator[String] = + traversal.flatMap(_.possibleTypes) + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..046df0048 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalMethodreturnBase.scala @@ -0,0 +1,135 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalMethodreturnBase[NodeType <: nodes.MethodReturnBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to dynamicTypeHintFullName property */ + def dynamicTypeHintFullName: Iterator[String] = + traversal.flatMap(_.dynamicTypeHintFullName) + + /** Traverse to evaluationStrategy property */ + def evaluationStrategy: Iterator[String] = + traversal.map(_.evaluationStrategy) + + /** Traverse to nodes where the evaluationStrategy matches the regular expression `value` + */ + def evaluationStrategy(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + evaluationStrategyExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.evaluationStrategy).matches } + } + + /** Traverse to nodes where the evaluationStrategy matches at least one of the regular expressions in `values` + */ + def evaluationStrategy(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.evaluationStrategy).matches } } + } + + /** Traverse to nodes where evaluationStrategy matches `value` exactly. + */ + def evaluationStrategyExact(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, 19, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.evaluationStrategy == value } + } + + /** Traverse to nodes where evaluationStrategy matches one of the elements in `values` exactly. + */ + def evaluationStrategyExact(values: String*): Iterator[NodeType] = + if (values.length == 1) evaluationStrategyExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.evaluationStrategy) } + } + + /** Traverse to nodes where evaluationStrategy does not match the regular expression `value`. + */ + def evaluationStrategyNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.evaluationStrategy != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.evaluationStrategy).matches } + } + } + + /** Traverse to nodes where evaluationStrategy does not match any of the regular expressions in `values`. + */ + def evaluationStrategyNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.evaluationStrategy).matches }.isEmpty } + } + + /** Traverse to possibleTypes property */ + def possibleTypes: Iterator[String] = + traversal.flatMap(_.possibleTypes) + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalModifierBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalModifierBase.scala new file mode 100644 index 000000000..587d9ee3c --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalModifierBase.scala @@ -0,0 +1,67 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalModifierBase[NodeType <: nodes.ModifierBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to modifierType property */ + def modifierType: Iterator[String] = + traversal.map(_.modifierType) + + /** Traverse to nodes where the modifierType matches the regular expression `value` + */ + def modifierType(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + modifierTypeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.modifierType).matches } + } + + /** Traverse to nodes where the modifierType matches at least one of the regular expressions in `values` + */ + def modifierType(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.modifierType).matches } } + } + + /** Traverse to nodes where modifierType matches `value` exactly. + */ + def modifierTypeExact(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, 38, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.modifierType == value } + } + + /** Traverse to nodes where modifierType matches one of the elements in `values` exactly. + */ + def modifierTypeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) modifierTypeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.modifierType) } + } + + /** Traverse to nodes where modifierType does not match the regular expression `value`. + */ + def modifierTypeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.modifierType != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.modifierType).matches } + } + } + + /** Traverse to nodes where modifierType does not match any of the regular expressions in `values`. + */ + def modifierTypeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.modifierType).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalNamespaceBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalNamespaceBase.scala new file mode 100644 index 000000000..e7a6d6529 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalNamespaceBase.scala @@ -0,0 +1,67 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalNamespaceBase[NodeType <: nodes.NamespaceBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalNamespaceblockBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalNamespaceblockBase.scala new file mode 100644 index 000000000..f3ab11ea0 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalNamespaceblockBase.scala @@ -0,0 +1,186 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalNamespaceblockBase[NodeType <: nodes.NamespaceBlockBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to filename property */ + def filename: Iterator[String] = + traversal.map(_.filename) + + /** Traverse to nodes where the filename matches the regular expression `value` + */ + def filename(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + filenameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.filename).matches } + } + + /** Traverse to nodes where the filename matches at least one of the regular expressions in `values` + */ + def filename(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.filename).matches } } + } + + /** Traverse to nodes where filename matches `value` exactly. + */ + def filenameExact(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, 21, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.filename == value } + } + + /** Traverse to nodes where filename matches one of the elements in `values` exactly. + */ + def filenameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) filenameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.filename) } + } + + /** Traverse to nodes where filename does not match the regular expression `value`. + */ + def filenameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.filename != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.filename).matches } + } + } + + /** Traverse to nodes where filename does not match any of the regular expressions in `values`. + */ + def filenameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.filename).matches }.isEmpty } + } + + /** Traverse to fullName property */ + def fullName: Iterator[String] = + traversal.map(_.fullName) + + /** Traverse to nodes where the fullName matches the regular expression `value` + */ + def fullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + fullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.fullName).matches } + } + + /** Traverse to nodes where the fullName matches at least one of the regular expressions in `values` + */ + def fullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.fullName).matches } } + } + + /** Traverse to nodes where fullName matches `value` exactly. + */ + def fullNameExact(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, 22, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.fullName == value } + } + + /** Traverse to nodes where fullName matches one of the elements in `values` exactly. + */ + def fullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) fullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.fullName) } + } + + /** Traverse to nodes where fullName does not match the regular expression `value`. + */ + def fullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.fullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.fullName).matches } + } + } + + /** Traverse to nodes where fullName does not match any of the regular expressions in `values`. + */ + def fullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.fullName).matches }.isEmpty } + } + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyAliasTypeFullName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyAliasTypeFullName.scala new file mode 100644 index 000000000..ff3b16eaf --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyAliasTypeFullName.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 TraversalPropertyAliasTypeFullName[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasAliasTypeFullNameEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to aliasTypeFullName property */ + def aliasTypeFullName: Iterator[String] = + traversal.flatMap(_.aliasTypeFullName) + + /** Traverse to nodes where the aliasTypeFullName matches the regular expression `value` + */ + def aliasTypeFullName(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + aliasTypeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.aliasTypeFullName; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the aliasTypeFullName matches at least one of the regular expressions in `values` + */ + def aliasTypeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.aliasTypeFullName; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where aliasTypeFullName matches `value` exactly. + */ + def aliasTypeFullNameExact(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, 0, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.aliasTypeFullName; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where aliasTypeFullName matches one of the elements in `values` exactly. + */ + def aliasTypeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) aliasTypeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.aliasTypeFullName; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where aliasTypeFullName does not match the regular expression `value`. + */ + def aliasTypeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.aliasTypeFullName.isEmpty || node.aliasTypeFullName.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.aliasTypeFullName; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where aliasTypeFullName does not match any of the regular expressions in `values`. + */ + def aliasTypeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.aliasTypeFullName; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyArgumentIndex.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyArgumentIndex.scala new file mode 100644 index 000000000..ad03b6999 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyArgumentIndex.scala @@ -0,0 +1,58 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyArgumentIndex[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasArgumentIndexEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to argumentIndex property */ + def argumentIndex: Iterator[Int] = + traversal.map(_.argumentIndex) + + /** Traverse to nodes where the argumentIndex equals the given `value` + */ + def argumentIndex(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex == value } + + /** Traverse to nodes where the argumentIndex equals at least one of the given `values` + */ + def argumentIndex(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => vset.contains(node.argumentIndex) } + } + + /** Traverse to nodes where the argumentIndex is not equal to the given `value` + */ + def argumentIndexNot(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex != value } + + /** Traverse to nodes where the argumentIndex is not equal to any of the given `values` + */ + def argumentIndexNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => !vset.contains(node.argumentIndex) } + } + + /** Traverse to nodes where the argumentIndex is greater than the given `value` + */ + def argumentIndexGt(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex > value } + + /** Traverse to nodes where the argumentIndex is greater than or equal the given `value` + */ + def argumentIndexGte(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex >= value } + + /** Traverse to nodes where the argumentIndex is less than the given `value` + */ + def argumentIndexLt(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex < value } + + /** Traverse to nodes where the argumentIndex is less than or equal the given `value` + */ + def argumentIndexLte(value: Int): Iterator[NodeType] = + traversal.filter { _.argumentIndex <= value } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyArgumentName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyArgumentName.scala new file mode 100644 index 000000000..db3c08f45 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyArgumentName.scala @@ -0,0 +1,83 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyArgumentName[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasArgumentNameEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to argumentName property */ + def argumentName: Iterator[String] = + traversal.flatMap(_.argumentName) + + /** Traverse to nodes where the argumentName matches the regular expression `value` + */ + def argumentName(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + argumentNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.argumentName; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the argumentName matches at least one of the regular expressions in `values` + */ + def argumentName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.argumentName; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where argumentName matches `value` exactly. + */ + def argumentNameExact(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, 2, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.argumentName; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where argumentName matches one of the elements in `values` exactly. + */ + def argumentNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) argumentNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.argumentName; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where argumentName does not match the regular expression `value`. + */ + def argumentNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.argumentName.isEmpty || node.argumentName.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.argumentName; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where argumentName does not match any of the regular expressions in `values`. + */ + def argumentNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.argumentName; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyAstParentFullName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyAstParentFullName.scala new file mode 100644 index 000000000..8f0182b70 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyAstParentFullName.scala @@ -0,0 +1,70 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyAstParentFullName[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasAstParentFullNameEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to astParentFullName property */ + def astParentFullName: Iterator[String] = + traversal.map(_.astParentFullName) + + /** Traverse to nodes where the astParentFullName matches the regular expression `value` + */ + def astParentFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + astParentFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.astParentFullName).matches } + } + + /** Traverse to nodes where the astParentFullName matches at least one of the regular expressions in `values` + */ + def astParentFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.astParentFullName).matches } } + } + + /** Traverse to nodes where astParentFullName matches `value` exactly. + */ + def astParentFullNameExact(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, 3, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.astParentFullName == value } + } + + /** Traverse to nodes where astParentFullName matches one of the elements in `values` exactly. + */ + def astParentFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) astParentFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.astParentFullName) } + } + + /** Traverse to nodes where astParentFullName does not match the regular expression `value`. + */ + def astParentFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.astParentFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.astParentFullName).matches } + } + } + + /** Traverse to nodes where astParentFullName does not match any of the regular expressions in `values`. + */ + def astParentFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.astParentFullName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyAstParentType.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyAstParentType.scala new file mode 100644 index 000000000..d7110c66c --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyAstParentType.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyAstParentType[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasAstParentTypeEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to astParentType property */ + def astParentType: Iterator[String] = + traversal.map(_.astParentType) + + /** Traverse to nodes where the astParentType matches the regular expression `value` + */ + def astParentType(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + astParentTypeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.astParentType).matches } + } + + /** Traverse to nodes where the astParentType matches at least one of the regular expressions in `values` + */ + def astParentType(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.astParentType).matches } } + } + + /** Traverse to nodes where astParentType matches `value` exactly. + */ + def astParentTypeExact(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, 4, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.astParentType == value } + } + + /** Traverse to nodes where astParentType matches one of the elements in `values` exactly. + */ + def astParentTypeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) astParentTypeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.astParentType) } + } + + /** Traverse to nodes where astParentType does not match the regular expression `value`. + */ + def astParentTypeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.astParentType != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.astParentType).matches } + } + } + + /** Traverse to nodes where astParentType does not match any of the regular expressions in `values`. + */ + def astParentTypeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.astParentType).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyCanonicalName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyCanonicalName.scala new file mode 100644 index 000000000..4cd7c6138 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyCanonicalName.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyCanonicalName[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasCanonicalNameEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to canonicalName property */ + def canonicalName: Iterator[String] = + traversal.map(_.canonicalName) + + /** Traverse to nodes where the canonicalName matches the regular expression `value` + */ + def canonicalName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + canonicalNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.canonicalName).matches } + } + + /** Traverse to nodes where the canonicalName matches at least one of the regular expressions in `values` + */ + def canonicalName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.canonicalName).matches } } + } + + /** Traverse to nodes where canonicalName matches `value` exactly. + */ + def canonicalNameExact(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, 5, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.canonicalName == value } + } + + /** Traverse to nodes where canonicalName matches one of the elements in `values` exactly. + */ + def canonicalNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) canonicalNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.canonicalName) } + } + + /** Traverse to nodes where canonicalName does not match the regular expression `value`. + */ + def canonicalNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.canonicalName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.canonicalName).matches } + } + } + + /** Traverse to nodes where canonicalName does not match any of the regular expressions in `values`. + */ + def canonicalNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.canonicalName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClassName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClassName.scala new file mode 100644 index 000000000..88433acf4 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClassName.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyClassName[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasClassNameEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to className property */ + def className: Iterator[String] = + traversal.map(_.className) + + /** Traverse to nodes where the className matches the regular expression `value` + */ + def className(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + classNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.className).matches } + } + + /** Traverse to nodes where the className matches at least one of the regular expressions in `values` + */ + def className(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.className).matches } } + } + + /** Traverse to nodes where className matches `value` exactly. + */ + def classNameExact(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, 6, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.className == value } + } + + /** Traverse to nodes where className matches one of the elements in `values` exactly. + */ + def classNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) classNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.className) } + } + + /** Traverse to nodes where className does not match the regular expression `value`. + */ + def classNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.className != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.className).matches } + } + } + + /** Traverse to nodes where className does not match any of the regular expressions in `values`. + */ + def classNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.className).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClassShortName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClassShortName.scala new file mode 100644 index 000000000..0dbce0877 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClassShortName.scala @@ -0,0 +1,70 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyClassShortName[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasClassShortNameEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to classShortName property */ + def classShortName: Iterator[String] = + traversal.map(_.classShortName) + + /** Traverse to nodes where the classShortName matches the regular expression `value` + */ + def classShortName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + classShortNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.classShortName).matches } + } + + /** Traverse to nodes where the classShortName matches at least one of the regular expressions in `values` + */ + def classShortName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.classShortName).matches } } + } + + /** Traverse to nodes where classShortName matches `value` exactly. + */ + def classShortNameExact(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, 7, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.classShortName == value } + } + + /** Traverse to nodes where classShortName matches one of the elements in `values` exactly. + */ + def classShortNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) classShortNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.classShortName) } + } + + /** Traverse to nodes where classShortName does not match the regular expression `value`. + */ + def classShortNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.classShortName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.classShortName).matches } + } + } + + /** Traverse to nodes where classShortName does not match any of the regular expressions in `values`. + */ + def classShortNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.classShortName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClosureBindingId.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClosureBindingId.scala new file mode 100644 index 000000000..ba7d043b6 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClosureBindingId.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 TraversalPropertyClosureBindingId[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasClosureBindingIdEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to closureBindingId property */ + def closureBindingId: Iterator[String] = + traversal.flatMap(_.closureBindingId) + + /** Traverse to nodes where the closureBindingId matches the regular expression `value` + */ + def closureBindingId(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + closureBindingIdExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.closureBindingId; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the closureBindingId matches at least one of the regular expressions in `values` + */ + def closureBindingId(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.closureBindingId; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where closureBindingId matches `value` exactly. + */ + def closureBindingIdExact(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, 8, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.closureBindingId; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where closureBindingId matches one of the elements in `values` exactly. + */ + def closureBindingIdExact(values: String*): Iterator[NodeType] = + if (values.length == 1) closureBindingIdExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.closureBindingId; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where closureBindingId does not match the regular expression `value`. + */ + def closureBindingIdNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.closureBindingId.isEmpty || node.closureBindingId.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.closureBindingId; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where closureBindingId does not match any of the regular expressions in `values`. + */ + def closureBindingIdNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.closureBindingId; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClosureOriginalName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClosureOriginalName.scala new file mode 100644 index 000000000..e85a2f35c --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyClosureOriginalName.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 TraversalPropertyClosureOriginalName[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasClosureOriginalNameEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to closureOriginalName property */ + def closureOriginalName: Iterator[String] = + traversal.flatMap(_.closureOriginalName) + + /** Traverse to nodes where the closureOriginalName matches the regular expression `value` + */ + def closureOriginalName(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + closureOriginalNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.closureOriginalName; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the closureOriginalName matches at least one of the regular expressions in `values` + */ + def closureOriginalName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.closureOriginalName; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where closureOriginalName matches `value` exactly. + */ + def closureOriginalNameExact(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, 9, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.closureOriginalName; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where closureOriginalName matches one of the elements in `values` exactly. + */ + def closureOriginalNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) closureOriginalNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.closureOriginalName; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where closureOriginalName does not match the regular expression `value`. + */ + def closureOriginalNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.closureOriginalName.isEmpty || node.closureOriginalName.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.closureOriginalName; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where closureOriginalName does not match any of the regular expressions in `values`. + */ + def closureOriginalNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.closureOriginalName; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyCode.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyCode.scala new file mode 100644 index 000000000..c8f8c16cc --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyCode.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyCode[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasCodeEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to code property */ + def code: Iterator[String] = + traversal.map(_.code) + + /** Traverse to nodes where the code matches the regular expression `value` + */ + def code(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + codeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.code).matches } + } + + /** Traverse to nodes where the code matches at least one of the regular expressions in `values` + */ + def code(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.code).matches } } + } + + /** Traverse to nodes where code matches `value` exactly. + */ + def codeExact(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, 10, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.code == value } + } + + /** Traverse to nodes where code matches one of the elements in `values` exactly. + */ + def codeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) codeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.code) } + } + + /** Traverse to nodes where code does not match the regular expression `value`. + */ + def codeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.code != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.code).matches } + } + } + + /** Traverse to nodes where code does not match any of the regular expressions in `values`. + */ + def codeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.code).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyColumnNumber.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyColumnNumber.scala new file mode 100644 index 000000000..1515469ee --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyColumnNumber.scala @@ -0,0 +1,74 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyColumnNumber[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasColumnNumberEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to columnNumber property */ + def columnNumber: Iterator[Int] = + traversal.flatMap(_.columnNumber) + + /** Traverse to nodes where the columnNumber equals the given `value` + */ + def columnNumber(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumber; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the columnNumber equals at least one of the given `values` + */ + def columnNumber(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.columnNumber; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the columnNumber is not equal to the given `value` + */ + def columnNumberNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumber; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the columnNumber does not equal any one of the given `values` + */ + def columnNumberNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.columnNumber; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the columnNumber is greater than the given `value` + */ + def columnNumberGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumber; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the columnNumber is greater than or equal the given `value` + */ + def columnNumberGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumber; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the columnNumber is less than the given `value` + */ + def columnNumberLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumber; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the columnNumber is less than or equal the given `value` + */ + def columnNumberLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumber; tmp.isDefined && tmp.get <= value + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyColumnNumberEnd.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyColumnNumberEnd.scala new file mode 100644 index 000000000..0b85562b9 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyColumnNumberEnd.scala @@ -0,0 +1,75 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyColumnNumberEnd[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasColumnNumberEndEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to columnNumberEnd property */ + def columnNumberEnd: Iterator[Int] = + traversal.flatMap(_.columnNumberEnd) + + /** Traverse to nodes where the columnNumberEnd equals the given `value` + */ + def columnNumberEnd(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the columnNumberEnd equals at least one of the given `values` + */ + def columnNumberEnd(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the columnNumberEnd is not equal to the given `value` + */ + def columnNumberEndNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the columnNumberEnd does not equal any one of the given `values` + */ + def columnNumberEndNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the columnNumberEnd is greater than the given `value` + */ + def columnNumberEndGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the columnNumberEnd is greater than or equal the given `value` + */ + def columnNumberEndGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the columnNumberEnd is less than the given `value` + */ + def columnNumberEndLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the columnNumberEnd is less than or equal the given `value` + */ + def columnNumberEndLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.columnNumberEnd; tmp.isDefined && tmp.get <= value + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyContainedRef.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyContainedRef.scala new file mode 100644 index 000000000..b43ad5d0a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyContainedRef.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyContainedRef[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasContainedRefEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to containedRef property */ + def containedRef: Iterator[String] = + traversal.map(_.containedRef) + + /** Traverse to nodes where the containedRef matches the regular expression `value` + */ + def containedRef(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + containedRefExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.containedRef).matches } + } + + /** Traverse to nodes where the containedRef matches at least one of the regular expressions in `values` + */ + def containedRef(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.containedRef).matches } } + } + + /** Traverse to nodes where containedRef matches `value` exactly. + */ + def containedRefExact(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, 13, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.containedRef == value } + } + + /** Traverse to nodes where containedRef matches one of the elements in `values` exactly. + */ + def containedRefExact(values: String*): Iterator[NodeType] = + if (values.length == 1) containedRefExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.containedRef) } + } + + /** Traverse to nodes where containedRef does not match the regular expression `value`. + */ + def containedRefNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.containedRef != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.containedRef).matches } + } + } + + /** Traverse to nodes where containedRef does not match any of the regular expressions in `values`. + */ + def containedRefNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.containedRef).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyContent.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyContent.scala new file mode 100644 index 000000000..2a9ed055e --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyContent.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyContent[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasContentEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to content property */ + def content: Iterator[String] = + traversal.map(_.content) + + /** Traverse to nodes where the content matches the regular expression `value` + */ + def content(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + contentExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.content).matches } + } + + /** Traverse to nodes where the content matches at least one of the regular expressions in `values` + */ + def content(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.content).matches } } + } + + /** Traverse to nodes where content matches `value` exactly. + */ + def contentExact(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, 14, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.content == value } + } + + /** Traverse to nodes where content matches one of the elements in `values` exactly. + */ + def contentExact(values: String*): Iterator[NodeType] = + if (values.length == 1) contentExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.content) } + } + + /** Traverse to nodes where content does not match the regular expression `value`. + */ + def contentNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.content != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.content).matches } + } + } + + /** Traverse to nodes where content does not match any of the regular expressions in `values`. + */ + def contentNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.content).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyControlStructureType.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyControlStructureType.scala new file mode 100644 index 000000000..91703ce58 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyControlStructureType.scala @@ -0,0 +1,70 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyControlStructureType[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasControlStructureTypeEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to controlStructureType property */ + def controlStructureType: Iterator[String] = + traversal.map(_.controlStructureType) + + /** Traverse to nodes where the controlStructureType matches the regular expression `value` + */ + def controlStructureType(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + controlStructureTypeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.controlStructureType).matches } + } + + /** Traverse to nodes where the controlStructureType matches at least one of the regular expressions in `values` + */ + def controlStructureType(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.controlStructureType).matches } } + } + + /** Traverse to nodes where controlStructureType matches `value` exactly. + */ + def controlStructureTypeExact(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, 15, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.controlStructureType == value } + } + + /** Traverse to nodes where controlStructureType matches one of the elements in `values` exactly. + */ + def controlStructureTypeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) controlStructureTypeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.controlStructureType) } + } + + /** Traverse to nodes where controlStructureType does not match the regular expression `value`. + */ + def controlStructureTypeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.controlStructureType != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.controlStructureType).matches } + } + } + + /** Traverse to nodes where controlStructureType does not match any of the regular expressions in `values`. + */ + def controlStructureTypeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.controlStructureType).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyDependencyGroupId.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyDependencyGroupId.scala new file mode 100644 index 000000000..bad95dd9f --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyDependencyGroupId.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 TraversalPropertyDependencyGroupId[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasDependencyGroupIdEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to dependencyGroupId property */ + def dependencyGroupId: Iterator[String] = + traversal.flatMap(_.dependencyGroupId) + + /** Traverse to nodes where the dependencyGroupId matches the regular expression `value` + */ + def dependencyGroupId(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + dependencyGroupIdExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.dependencyGroupId; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the dependencyGroupId matches at least one of the regular expressions in `values` + */ + def dependencyGroupId(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.dependencyGroupId; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where dependencyGroupId matches `value` exactly. + */ + def dependencyGroupIdExact(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, 16, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.dependencyGroupId; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where dependencyGroupId matches one of the elements in `values` exactly. + */ + def dependencyGroupIdExact(values: String*): Iterator[NodeType] = + if (values.length == 1) dependencyGroupIdExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.dependencyGroupId; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where dependencyGroupId does not match the regular expression `value`. + */ + def dependencyGroupIdNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.dependencyGroupId.isEmpty || node.dependencyGroupId.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.dependencyGroupId; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where dependencyGroupId does not match any of the regular expressions in `values`. + */ + def dependencyGroupIdNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.dependencyGroupId; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyDispatchType.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyDispatchType.scala new file mode 100644 index 000000000..957287558 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyDispatchType.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyDispatchType[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasDispatchTypeEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to dispatchType property */ + def dispatchType: Iterator[String] = + traversal.map(_.dispatchType) + + /** Traverse to nodes where the dispatchType matches the regular expression `value` + */ + def dispatchType(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + dispatchTypeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.dispatchType).matches } + } + + /** Traverse to nodes where the dispatchType matches at least one of the regular expressions in `values` + */ + def dispatchType(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.dispatchType).matches } } + } + + /** Traverse to nodes where dispatchType matches `value` exactly. + */ + def dispatchTypeExact(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, 17, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.dispatchType == value } + } + + /** Traverse to nodes where dispatchType matches one of the elements in `values` exactly. + */ + def dispatchTypeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) dispatchTypeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.dispatchType) } + } + + /** Traverse to nodes where dispatchType does not match the regular expression `value`. + */ + def dispatchTypeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.dispatchType != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.dispatchType).matches } + } + } + + /** Traverse to nodes where dispatchType does not match any of the regular expressions in `values`. + */ + def dispatchTypeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.dispatchType).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyDynamicTypeHintFullName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyDynamicTypeHintFullName.scala new file mode 100644 index 000000000..def758f34 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyDynamicTypeHintFullName.scala @@ -0,0 +1,15 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyDynamicTypeHintFullName[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasDynamicTypeHintFullNameEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to dynamicTypeHintFullName property */ + def dynamicTypeHintFullName: Iterator[String] = + traversal.flatMap(_.dynamicTypeHintFullName) + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyEvaluationStrategy.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyEvaluationStrategy.scala new file mode 100644 index 000000000..7979469a8 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyEvaluationStrategy.scala @@ -0,0 +1,70 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyEvaluationStrategy[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasEvaluationStrategyEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to evaluationStrategy property */ + def evaluationStrategy: Iterator[String] = + traversal.map(_.evaluationStrategy) + + /** Traverse to nodes where the evaluationStrategy matches the regular expression `value` + */ + def evaluationStrategy(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + evaluationStrategyExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.evaluationStrategy).matches } + } + + /** Traverse to nodes where the evaluationStrategy matches at least one of the regular expressions in `values` + */ + def evaluationStrategy(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.evaluationStrategy).matches } } + } + + /** Traverse to nodes where evaluationStrategy matches `value` exactly. + */ + def evaluationStrategyExact(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, 19, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.evaluationStrategy == value } + } + + /** Traverse to nodes where evaluationStrategy matches one of the elements in `values` exactly. + */ + def evaluationStrategyExact(values: String*): Iterator[NodeType] = + if (values.length == 1) evaluationStrategyExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.evaluationStrategy) } + } + + /** Traverse to nodes where evaluationStrategy does not match the regular expression `value`. + */ + def evaluationStrategyNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.evaluationStrategy != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.evaluationStrategy).matches } + } + } + + /** Traverse to nodes where evaluationStrategy does not match any of the regular expressions in `values`. + */ + def evaluationStrategyNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.evaluationStrategy).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyExplicitAs.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyExplicitAs.scala new file mode 100644 index 000000000..34df2f2b7 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyExplicitAs.scala @@ -0,0 +1,19 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyExplicitAs[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasExplicitAsEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to explicitAs property */ + def explicitAs: Iterator[Boolean] = + traversal.flatMap(_.explicitAs) + + /** Traverse to nodes where the explicitAs equals the given `value` + */ + def explicitAs(value: Boolean): Iterator[NodeType] = + traversal.filter { node => node.explicitAs.isDefined && node.explicitAs.get == value } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyFilename.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyFilename.scala new file mode 100644 index 000000000..29f20ad3e --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyFilename.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyFilename[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasFilenameEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to filename property */ + def filename: Iterator[String] = + traversal.map(_.filename) + + /** Traverse to nodes where the filename matches the regular expression `value` + */ + def filename(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + filenameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.filename).matches } + } + + /** Traverse to nodes where the filename matches at least one of the regular expressions in `values` + */ + def filename(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.filename).matches } } + } + + /** Traverse to nodes where filename matches `value` exactly. + */ + def filenameExact(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, 21, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.filename == value } + } + + /** Traverse to nodes where filename matches one of the elements in `values` exactly. + */ + def filenameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) filenameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.filename) } + } + + /** Traverse to nodes where filename does not match the regular expression `value`. + */ + def filenameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.filename != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.filename).matches } + } + } + + /** Traverse to nodes where filename does not match any of the regular expressions in `values`. + */ + def filenameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.filename).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyFullName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyFullName.scala new file mode 100644 index 000000000..4f231bc8b --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyFullName.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyFullName[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasFullNameEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to fullName property */ + def fullName: Iterator[String] = + traversal.map(_.fullName) + + /** Traverse to nodes where the fullName matches the regular expression `value` + */ + def fullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + fullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.fullName).matches } + } + + /** Traverse to nodes where the fullName matches at least one of the regular expressions in `values` + */ + def fullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.fullName).matches } } + } + + /** Traverse to nodes where fullName matches `value` exactly. + */ + def fullNameExact(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, 22, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.fullName == value } + } + + /** Traverse to nodes where fullName matches one of the elements in `values` exactly. + */ + def fullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) fullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.fullName) } + } + + /** Traverse to nodes where fullName does not match the regular expression `value`. + */ + def fullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.fullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.fullName).matches } + } + } + + /** Traverse to nodes where fullName does not match any of the regular expressions in `values`. + */ + def fullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.fullName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyHash.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyHash.scala new file mode 100644 index 000000000..d465d24b0 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyHash.scala @@ -0,0 +1,83 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyHash[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasHashEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to hash property */ + def hash: Iterator[String] = + traversal.flatMap(_.hash) + + /** Traverse to nodes where the hash matches the regular expression `value` + */ + def hash(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + hashExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.hash; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the hash matches at least one of the regular expressions in `values` + */ + def hash(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.hash; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where hash matches `value` exactly. + */ + def hashExact(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, 23, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.hash; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where hash matches one of the elements in `values` exactly. + */ + def hashExact(values: String*): Iterator[NodeType] = + if (values.length == 1) hashExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.hash; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where hash does not match the regular expression `value`. + */ + def hashNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.hash.isEmpty || node.hash.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.hash; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where hash does not match any of the regular expressions in `values`. + */ + def hashNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.hash; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyImportedAs.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyImportedAs.scala new file mode 100644 index 000000000..23646c0ab --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyImportedAs.scala @@ -0,0 +1,83 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyImportedAs[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasImportedAsEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to importedAs property */ + def importedAs: Iterator[String] = + traversal.flatMap(_.importedAs) + + /** Traverse to nodes where the importedAs matches the regular expression `value` + */ + def importedAs(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + importedAsExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.importedAs; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the importedAs matches at least one of the regular expressions in `values` + */ + def importedAs(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.importedAs; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where importedAs matches `value` exactly. + */ + def importedAsExact(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, 24, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.importedAs; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where importedAs matches one of the elements in `values` exactly. + */ + def importedAsExact(values: String*): Iterator[NodeType] = + if (values.length == 1) importedAsExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.importedAs; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where importedAs does not match the regular expression `value`. + */ + def importedAsNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.importedAs.isEmpty || node.importedAs.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.importedAs; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where importedAs does not match any of the regular expressions in `values`. + */ + def importedAsNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.importedAs; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyImportedEntity.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyImportedEntity.scala new file mode 100644 index 000000000..3f189fffb --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyImportedEntity.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 TraversalPropertyImportedEntity[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasImportedEntityEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to importedEntity property */ + def importedEntity: Iterator[String] = + traversal.flatMap(_.importedEntity) + + /** Traverse to nodes where the importedEntity matches the regular expression `value` + */ + def importedEntity(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + importedEntityExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.importedEntity; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the importedEntity matches at least one of the regular expressions in `values` + */ + def importedEntity(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.importedEntity; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where importedEntity matches `value` exactly. + */ + def importedEntityExact(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, 25, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.importedEntity; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where importedEntity matches one of the elements in `values` exactly. + */ + def importedEntityExact(values: String*): Iterator[NodeType] = + if (values.length == 1) importedEntityExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.importedEntity; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where importedEntity does not match the regular expression `value`. + */ + def importedEntityNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.importedEntity.isEmpty || node.importedEntity.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.importedEntity; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where importedEntity does not match any of the regular expressions in `values`. + */ + def importedEntityNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.importedEntity; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIndex.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIndex.scala new file mode 100644 index 000000000..bd910af0a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIndex.scala @@ -0,0 +1,58 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyIndex[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasIndexEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to index property */ + def index: Iterator[Int] = + traversal.map(_.index) + + /** Traverse to nodes where the index equals the given `value` + */ + def index(value: Int): Iterator[NodeType] = + traversal.filter { _.index == value } + + /** Traverse to nodes where the index equals at least one of the given `values` + */ + def index(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => vset.contains(node.index) } + } + + /** Traverse to nodes where the index is not equal to the given `value` + */ + def indexNot(value: Int): Iterator[NodeType] = + traversal.filter { _.index != value } + + /** Traverse to nodes where the index is not equal to any of the given `values` + */ + def indexNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => !vset.contains(node.index) } + } + + /** Traverse to nodes where the index is greater than the given `value` + */ + def indexGt(value: Int): Iterator[NodeType] = + traversal.filter { _.index > value } + + /** Traverse to nodes where the index is greater than or equal the given `value` + */ + def indexGte(value: Int): Iterator[NodeType] = + traversal.filter { _.index >= value } + + /** Traverse to nodes where the index is less than the given `value` + */ + def indexLt(value: Int): Iterator[NodeType] = + traversal.filter { _.index < value } + + /** Traverse to nodes where the index is less than or equal the given `value` + */ + def indexLte(value: Int): Iterator[NodeType] = + traversal.filter { _.index <= value } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyInheritsFromTypeFullName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyInheritsFromTypeFullName.scala new file mode 100644 index 000000000..412e0a38d --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyInheritsFromTypeFullName.scala @@ -0,0 +1,15 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyInheritsFromTypeFullName[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasInheritsFromTypeFullNameEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to inheritsFromTypeFullName property */ + def inheritsFromTypeFullName: Iterator[String] = + traversal.flatMap(_.inheritsFromTypeFullName) + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsExplicit.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsExplicit.scala new file mode 100644 index 000000000..01a446992 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsExplicit.scala @@ -0,0 +1,19 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyIsExplicit[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasIsExplicitEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to isExplicit property */ + def isExplicit: Iterator[Boolean] = + traversal.flatMap(_.isExplicit) + + /** Traverse to nodes where the isExplicit equals the given `value` + */ + def isExplicit(value: Boolean): Iterator[NodeType] = + traversal.filter { node => node.isExplicit.isDefined && node.isExplicit.get == value } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsExternal.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsExternal.scala new file mode 100644 index 000000000..c38831182 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsExternal.scala @@ -0,0 +1,19 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyIsExternal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasIsExternalEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to isExternal property */ + def isExternal: Iterator[Boolean] = + traversal.map(_.isExternal) + + /** Traverse to nodes where the isExternal equals the given `value` + */ + def isExternal(value: Boolean): Iterator[NodeType] = + traversal.filter { _.isExternal == value } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsVariadic.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsVariadic.scala new file mode 100644 index 000000000..57249f941 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsVariadic.scala @@ -0,0 +1,19 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyIsVariadic[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasIsVariadicEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to isVariadic property */ + def isVariadic: Iterator[Boolean] = + traversal.map(_.isVariadic) + + /** Traverse to nodes where the isVariadic equals the given `value` + */ + def isVariadic(value: Boolean): Iterator[NodeType] = + traversal.filter { _.isVariadic == value } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsWildcard.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsWildcard.scala new file mode 100644 index 000000000..65a839cd2 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyIsWildcard.scala @@ -0,0 +1,19 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyIsWildcard[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasIsWildcardEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to isWildcard property */ + def isWildcard: Iterator[Boolean] = + traversal.flatMap(_.isWildcard) + + /** Traverse to nodes where the isWildcard equals the given `value` + */ + def isWildcard(value: Boolean): Iterator[NodeType] = + traversal.filter { node => node.isWildcard.isDefined && node.isWildcard.get == value } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyKey.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyKey.scala new file mode 100644 index 000000000..657c62eae --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyKey.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyKey[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasKeyEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to key property */ + def key: Iterator[String] = + traversal.map(_.key) + + /** Traverse to nodes where the key matches the regular expression `value` + */ + def key(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + keyExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.key).matches } + } + + /** Traverse to nodes where the key matches at least one of the regular expressions in `values` + */ + def key(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.key).matches } } + } + + /** Traverse to nodes where key matches `value` exactly. + */ + def keyExact(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, 32, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.key == value } + } + + /** Traverse to nodes where key matches one of the elements in `values` exactly. + */ + def keyExact(values: String*): Iterator[NodeType] = + if (values.length == 1) keyExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.key) } + } + + /** Traverse to nodes where key does not match the regular expression `value`. + */ + def keyNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.key != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.key).matches } + } + } + + /** Traverse to nodes where key does not match any of the regular expressions in `values`. + */ + def keyNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.key).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyLanguage.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyLanguage.scala new file mode 100644 index 000000000..d881baaad --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyLanguage.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyLanguage[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasLanguageEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to language property */ + def language: Iterator[String] = + traversal.map(_.language) + + /** Traverse to nodes where the language matches the regular expression `value` + */ + def language(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + languageExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.language).matches } + } + + /** Traverse to nodes where the language matches at least one of the regular expressions in `values` + */ + def language(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.language).matches } } + } + + /** Traverse to nodes where language matches `value` exactly. + */ + def languageExact(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, 33, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.language == value } + } + + /** Traverse to nodes where language matches one of the elements in `values` exactly. + */ + def languageExact(values: String*): Iterator[NodeType] = + if (values.length == 1) languageExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.language) } + } + + /** Traverse to nodes where language does not match the regular expression `value`. + */ + def languageNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.language != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.language).matches } + } + } + + /** Traverse to nodes where language does not match any of the regular expressions in `values`. + */ + def languageNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.language).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyLineNumber.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyLineNumber.scala new file mode 100644 index 000000000..8278e70cf --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyLineNumber.scala @@ -0,0 +1,74 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyLineNumber[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasLineNumberEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to lineNumber property */ + def lineNumber: Iterator[Int] = + traversal.flatMap(_.lineNumber) + + /** Traverse to nodes where the lineNumber equals the given `value` + */ + def lineNumber(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the lineNumber equals at least one of the given `values` + */ + def lineNumber(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the lineNumber is not equal to the given `value` + */ + def lineNumberNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the lineNumber does not equal any one of the given `values` + */ + def lineNumberNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.lineNumber; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the lineNumber is greater than the given `value` + */ + def lineNumberGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the lineNumber is greater than or equal the given `value` + */ + def lineNumberGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the lineNumber is less than the given `value` + */ + def lineNumberLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the lineNumber is less than or equal the given `value` + */ + def lineNumberLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumber; tmp.isDefined && tmp.get <= value + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyLineNumberEnd.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyLineNumberEnd.scala new file mode 100644 index 000000000..5fc5533b6 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyLineNumberEnd.scala @@ -0,0 +1,74 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyLineNumberEnd[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasLineNumberEndEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to lineNumberEnd property */ + def lineNumberEnd: Iterator[Int] = + traversal.flatMap(_.lineNumberEnd) + + /** Traverse to nodes where the lineNumberEnd equals the given `value` + */ + def lineNumberEnd(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the lineNumberEnd equals at least one of the given `values` + */ + def lineNumberEnd(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the lineNumberEnd is not equal to the given `value` + */ + def lineNumberEndNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the lineNumberEnd does not equal any one of the given `values` + */ + def lineNumberEndNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the lineNumberEnd is greater than the given `value` + */ + def lineNumberEndGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the lineNumberEnd is greater than or equal the given `value` + */ + def lineNumberEndGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the lineNumberEnd is less than the given `value` + */ + def lineNumberEndLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the lineNumberEnd is less than or equal the given `value` + */ + def lineNumberEndLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.lineNumberEnd; tmp.isDefined && tmp.get <= value + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyMethodFullName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyMethodFullName.scala new file mode 100644 index 000000000..c8e43bfc3 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyMethodFullName.scala @@ -0,0 +1,70 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyMethodFullName[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasMethodFullNameEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to methodFullName property */ + def methodFullName: Iterator[String] = + traversal.map(_.methodFullName) + + /** Traverse to nodes where the methodFullName matches the regular expression `value` + */ + def methodFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + methodFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.methodFullName).matches } + } + + /** Traverse to nodes where the methodFullName matches at least one of the regular expressions in `values` + */ + def methodFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.methodFullName).matches } } + } + + /** Traverse to nodes where methodFullName matches `value` exactly. + */ + def methodFullNameExact(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, 36, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.methodFullName == value } + } + + /** Traverse to nodes where methodFullName matches one of the elements in `values` exactly. + */ + def methodFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) methodFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.methodFullName) } + } + + /** Traverse to nodes where methodFullName does not match the regular expression `value`. + */ + def methodFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.methodFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.methodFullName).matches } + } + } + + /** Traverse to nodes where methodFullName does not match any of the regular expressions in `values`. + */ + def methodFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.methodFullName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyMethodShortName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyMethodShortName.scala new file mode 100644 index 000000000..840a39b34 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyMethodShortName.scala @@ -0,0 +1,70 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyMethodShortName[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasMethodShortNameEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to methodShortName property */ + def methodShortName: Iterator[String] = + traversal.map(_.methodShortName) + + /** Traverse to nodes where the methodShortName matches the regular expression `value` + */ + def methodShortName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + methodShortNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.methodShortName).matches } + } + + /** Traverse to nodes where the methodShortName matches at least one of the regular expressions in `values` + */ + def methodShortName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.methodShortName).matches } } + } + + /** Traverse to nodes where methodShortName matches `value` exactly. + */ + def methodShortNameExact(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, 37, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.methodShortName == value } + } + + /** Traverse to nodes where methodShortName matches one of the elements in `values` exactly. + */ + def methodShortNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) methodShortNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.methodShortName) } + } + + /** Traverse to nodes where methodShortName does not match the regular expression `value`. + */ + def methodShortNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.methodShortName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.methodShortName).matches } + } + } + + /** Traverse to nodes where methodShortName does not match any of the regular expressions in `values`. + */ + def methodShortNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.methodShortName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyModifierType.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyModifierType.scala new file mode 100644 index 000000000..3f38887e0 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyModifierType.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyModifierType[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasModifierTypeEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to modifierType property */ + def modifierType: Iterator[String] = + traversal.map(_.modifierType) + + /** Traverse to nodes where the modifierType matches the regular expression `value` + */ + def modifierType(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + modifierTypeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.modifierType).matches } + } + + /** Traverse to nodes where the modifierType matches at least one of the regular expressions in `values` + */ + def modifierType(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.modifierType).matches } } + } + + /** Traverse to nodes where modifierType matches `value` exactly. + */ + def modifierTypeExact(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, 38, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.modifierType == value } + } + + /** Traverse to nodes where modifierType matches one of the elements in `values` exactly. + */ + def modifierTypeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) modifierTypeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.modifierType) } + } + + /** Traverse to nodes where modifierType does not match the regular expression `value`. + */ + def modifierTypeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.modifierType != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.modifierType).matches } + } + } + + /** Traverse to nodes where modifierType does not match any of the regular expressions in `values`. + */ + def modifierTypeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.modifierType).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyName.scala new file mode 100644 index 000000000..b5c720dd2 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyName.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyName[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasNameEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyNodeLabel.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyNodeLabel.scala new file mode 100644 index 000000000..acb57ad8e --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyNodeLabel.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyNodeLabel[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasNodeLabelEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to nodeLabel property */ + def nodeLabel: Iterator[String] = + traversal.map(_.nodeLabel) + + /** Traverse to nodes where the nodeLabel matches the regular expression `value` + */ + def nodeLabel(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nodeLabelExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.nodeLabel).matches } + } + + /** Traverse to nodes where the nodeLabel matches at least one of the regular expressions in `values` + */ + def nodeLabel(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.nodeLabel).matches } } + } + + /** Traverse to nodes where nodeLabel matches `value` exactly. + */ + def nodeLabelExact(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, 40, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.nodeLabel == value } + } + + /** Traverse to nodes where nodeLabel matches one of the elements in `values` exactly. + */ + def nodeLabelExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nodeLabelExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.nodeLabel) } + } + + /** Traverse to nodes where nodeLabel does not match the regular expression `value`. + */ + def nodeLabelNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.nodeLabel != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.nodeLabel).matches } + } + } + + /** Traverse to nodes where nodeLabel does not match any of the regular expressions in `values`. + */ + def nodeLabelNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.nodeLabel).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOffset.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOffset.scala new file mode 100644 index 000000000..2f6097027 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOffset.scala @@ -0,0 +1,74 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyOffset[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasOffsetEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to offset property */ + def offset: Iterator[Int] = + traversal.flatMap(_.offset) + + /** Traverse to nodes where the offset equals the given `value` + */ + def offset(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the offset equals at least one of the given `values` + */ + def offset(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the offset is not equal to the given `value` + */ + def offsetNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the offset does not equal any one of the given `values` + */ + def offsetNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.offset; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the offset is greater than the given `value` + */ + def offsetGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the offset is greater than or equal the given `value` + */ + def offsetGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the offset is less than the given `value` + */ + def offsetLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the offset is less than or equal the given `value` + */ + def offsetLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get <= value + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOffsetEnd.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOffsetEnd.scala new file mode 100644 index 000000000..57291c7d1 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOffsetEnd.scala @@ -0,0 +1,74 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyOffsetEnd[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasOffsetEndEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to offsetEnd property */ + def offsetEnd: Iterator[Int] = + traversal.flatMap(_.offsetEnd) + + /** Traverse to nodes where the offsetEnd equals the given `value` + */ + def offsetEnd(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the offsetEnd equals at least one of the given `values` + */ + def offsetEnd(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the offsetEnd is not equal to the given `value` + */ + def offsetEndNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the offsetEnd does not equal any one of the given `values` + */ + def offsetEndNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the offsetEnd is greater than the given `value` + */ + def offsetEndGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the offsetEnd is greater than or equal the given `value` + */ + def offsetEndGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the offsetEnd is less than the given `value` + */ + def offsetEndLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the offsetEnd is less than or equal the given `value` + */ + def offsetEndLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get <= value + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOrder.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOrder.scala new file mode 100644 index 000000000..e0305796f --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOrder.scala @@ -0,0 +1,58 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyOrder[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasOrderEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to order property */ + def order: Iterator[Int] = + traversal.map(_.order) + + /** Traverse to nodes where the order equals the given `value` + */ + def order(value: Int): Iterator[NodeType] = + traversal.filter { _.order == value } + + /** Traverse to nodes where the order equals at least one of the given `values` + */ + def order(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => vset.contains(node.order) } + } + + /** Traverse to nodes where the order is not equal to the given `value` + */ + def orderNot(value: Int): Iterator[NodeType] = + traversal.filter { _.order != value } + + /** Traverse to nodes where the order is not equal to any of the given `values` + */ + def orderNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => !vset.contains(node.order) } + } + + /** Traverse to nodes where the order is greater than the given `value` + */ + def orderGt(value: Int): Iterator[NodeType] = + traversal.filter { _.order > value } + + /** Traverse to nodes where the order is greater than or equal the given `value` + */ + def orderGte(value: Int): Iterator[NodeType] = + traversal.filter { _.order >= value } + + /** Traverse to nodes where the order is less than the given `value` + */ + def orderLt(value: Int): Iterator[NodeType] = + traversal.filter { _.order < value } + + /** Traverse to nodes where the order is less than or equal the given `value` + */ + def orderLte(value: Int): Iterator[NodeType] = + traversal.filter { _.order <= value } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOverlays.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOverlays.scala new file mode 100644 index 000000000..388fe99b1 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyOverlays.scala @@ -0,0 +1,14 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyOverlays[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasOverlaysEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to overlays property */ + def overlays: Iterator[String] = + traversal.flatMap(_.overlays) + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyPackageName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyPackageName.scala new file mode 100644 index 000000000..fad9f6891 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyPackageName.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyPackageName[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasPackageNameEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to packageName property */ + def packageName: Iterator[String] = + traversal.map(_.packageName) + + /** Traverse to nodes where the packageName matches the regular expression `value` + */ + def packageName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + packageNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.packageName).matches } + } + + /** Traverse to nodes where the packageName matches at least one of the regular expressions in `values` + */ + def packageName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.packageName).matches } } + } + + /** Traverse to nodes where packageName matches `value` exactly. + */ + def packageNameExact(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, 45, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.packageName == value } + } + + /** Traverse to nodes where packageName matches one of the elements in `values` exactly. + */ + def packageNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) packageNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.packageName) } + } + + /** Traverse to nodes where packageName does not match the regular expression `value`. + */ + def packageNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.packageName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.packageName).matches } + } + } + + /** Traverse to nodes where packageName does not match any of the regular expressions in `values`. + */ + def packageNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.packageName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyParserTypeName.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyParserTypeName.scala new file mode 100644 index 000000000..9efee7bee --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyParserTypeName.scala @@ -0,0 +1,70 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyParserTypeName[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasParserTypeNameEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to parserTypeName property */ + def parserTypeName: Iterator[String] = + traversal.map(_.parserTypeName) + + /** Traverse to nodes where the parserTypeName matches the regular expression `value` + */ + def parserTypeName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + parserTypeNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.parserTypeName).matches } + } + + /** Traverse to nodes where the parserTypeName matches at least one of the regular expressions in `values` + */ + def parserTypeName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.parserTypeName).matches } } + } + + /** Traverse to nodes where parserTypeName matches `value` exactly. + */ + def parserTypeNameExact(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 { _.parserTypeName == value } + } + + /** Traverse to nodes where parserTypeName matches one of the elements in `values` exactly. + */ + def parserTypeNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) parserTypeNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.parserTypeName) } + } + + /** Traverse to nodes where parserTypeName does not match the regular expression `value`. + */ + def parserTypeNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.parserTypeName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.parserTypeName).matches } + } + } + + /** Traverse to nodes where parserTypeName does not match any of the regular expressions in `values`. + */ + def parserTypeNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.parserTypeName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyPossibleTypes.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyPossibleTypes.scala new file mode 100644 index 000000000..21fe4a1fa --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyPossibleTypes.scala @@ -0,0 +1,14 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyPossibleTypes[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasPossibleTypesEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to possibleTypes property */ + def possibleTypes: Iterator[String] = + traversal.flatMap(_.possibleTypes) + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyRoot.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyRoot.scala new file mode 100644 index 000000000..ba130959b --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyRoot.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyRoot[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasRootEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to root property */ + def root: Iterator[String] = + traversal.map(_.root) + + /** Traverse to nodes where the root matches the regular expression `value` + */ + def root(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + rootExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.root).matches } + } + + /** Traverse to nodes where the root matches at least one of the regular expressions in `values` + */ + def root(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.root).matches } } + } + + /** Traverse to nodes where root matches `value` exactly. + */ + def rootExact(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, 48, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.root == value } + } + + /** Traverse to nodes where root matches one of the elements in `values` exactly. + */ + def rootExact(values: String*): Iterator[NodeType] = + if (values.length == 1) rootExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.root) } + } + + /** Traverse to nodes where root does not match the regular expression `value`. + */ + def rootNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.root != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.root).matches } + } + } + + /** Traverse to nodes where root does not match any of the regular expressions in `values`. + */ + def rootNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.root).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertySignature.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertySignature.scala new file mode 100644 index 000000000..73d4041f2 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertySignature.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertySignature[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasSignatureEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to signature property */ + def signature: Iterator[String] = + traversal.map(_.signature) + + /** Traverse to nodes where the signature matches the regular expression `value` + */ + def signature(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + signatureExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.signature).matches } + } + + /** Traverse to nodes where the signature matches at least one of the regular expressions in `values` + */ + def signature(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.signature).matches } } + } + + /** Traverse to nodes where signature matches `value` exactly. + */ + def signatureExact(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, 49, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.signature == value } + } + + /** Traverse to nodes where signature matches one of the elements in `values` exactly. + */ + def signatureExact(values: String*): Iterator[NodeType] = + if (values.length == 1) signatureExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.signature) } + } + + /** Traverse to nodes where signature does not match the regular expression `value`. + */ + def signatureNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.signature != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.signature).matches } + } + } + + /** Traverse to nodes where signature does not match any of the regular expressions in `values`. + */ + def signatureNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.signature).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertySymbol.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertySymbol.scala new file mode 100644 index 000000000..08787395a --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertySymbol.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertySymbol[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasSymbolEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to symbol property */ + def symbol: Iterator[String] = + traversal.map(_.symbol) + + /** Traverse to nodes where the symbol matches the regular expression `value` + */ + def symbol(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + symbolExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.symbol).matches } + } + + /** Traverse to nodes where the symbol matches at least one of the regular expressions in `values` + */ + def symbol(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.symbol).matches } } + } + + /** Traverse to nodes where symbol matches `value` exactly. + */ + def symbolExact(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, 50, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.symbol == value } + } + + /** Traverse to nodes where symbol matches one of the elements in `values` exactly. + */ + def symbolExact(values: String*): Iterator[NodeType] = + if (values.length == 1) symbolExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.symbol) } + } + + /** Traverse to nodes where symbol does not match the regular expression `value`. + */ + def symbolNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.symbol != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.symbol).matches } + } + } + + /** Traverse to nodes where symbol does not match any of the regular expressions in `values`. + */ + def symbolNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.symbol).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..6378926c3 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyTypeDeclFullName.scala @@ -0,0 +1,70 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyTypeDeclFullName[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasTypeDeclFullNameEMT] +](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to typeDeclFullName property */ + def typeDeclFullName: Iterator[String] = + traversal.map(_.typeDeclFullName) + + /** Traverse to nodes where the typeDeclFullName matches the regular expression `value` + */ + def typeDeclFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeDeclFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeDeclFullName).matches } + } + + /** Traverse to nodes where the typeDeclFullName matches at least one of the regular expressions in `values` + */ + def typeDeclFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeDeclFullName).matches } } + } + + /** Traverse to nodes where typeDeclFullName matches `value` exactly. + */ + def typeDeclFullNameExact(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, 51, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeDeclFullName == value } + } + + /** Traverse to nodes where typeDeclFullName matches one of the elements in `values` exactly. + */ + def typeDeclFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeDeclFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeDeclFullName) } + } + + /** Traverse to nodes where typeDeclFullName does not match the regular expression `value`. + */ + def typeDeclFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeDeclFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeDeclFullName).matches } + } + } + + /** Traverse to nodes where typeDeclFullName does not match any of the regular expressions in `values`. + */ + def typeDeclFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeDeclFullName).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..14de30e66 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyTypeFullName.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyTypeFullName[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasTypeFullNameEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..9e3feeb51 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyValue.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyValue[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasValueEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to value property */ + def value: Iterator[String] = + traversal.map(_.value) + + /** Traverse to nodes where the value matches the regular expression `value` + */ + def value(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + valueExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.value).matches } + } + + /** Traverse to nodes where the value matches at least one of the regular expressions in `values` + */ + def value(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.value).matches } } + } + + /** Traverse to nodes where value matches `value` exactly. + */ + def valueExact(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, 53, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.value == value } + } + + /** Traverse to nodes where value matches one of the elements in `values` exactly. + */ + def valueExact(values: String*): Iterator[NodeType] = + if (values.length == 1) valueExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.value) } + } + + /** Traverse to nodes where value does not match the regular expression `value`. + */ + def valueNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.value != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.value).matches } + } + } + + /** Traverse to nodes where value does not match any of the regular expressions in `values`. + */ + def valueNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.value).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..6974274e5 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalPropertyVersion.scala @@ -0,0 +1,69 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalPropertyVersion[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasVersionEMT]]( + val traversal: Iterator[NodeType] +) extends AnyVal { + + /** Traverse to version property */ + def version: Iterator[String] = + traversal.map(_.version) + + /** Traverse to nodes where the version matches the regular expression `value` + */ + def version(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + versionExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.version).matches } + } + + /** Traverse to nodes where the version matches at least one of the regular expressions in `values` + */ + def version(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.version).matches } } + } + + /** Traverse to nodes where version matches `value` exactly. + */ + def versionExact(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, 54, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.version == value } + } + + /** Traverse to nodes where version matches one of the elements in `values` exactly. + */ + def versionExact(values: String*): Iterator[NodeType] = + if (values.length == 1) versionExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.version) } + } + + /** Traverse to nodes where version does not match the regular expression `value`. + */ + def versionNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.version != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.version).matches } + } + } + + /** Traverse to nodes where version does not match any of the regular expressions in `values`. + */ + def versionNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.version).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalReturnBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalReturnBase.scala new file mode 100644 index 000000000..3913eb79c --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalReturnBase.scala @@ -0,0 +1,6 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalReturnBase[NodeType <: nodes.ReturnBase](val traversal: Iterator[NodeType]) extends AnyVal {} 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 new file mode 100644 index 000000000..ec89bb2a1 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTagBase.scala @@ -0,0 +1,126 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalTagBase[NodeType <: nodes.TagBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + + /** Traverse to value property */ + def value: Iterator[String] = + traversal.map(_.value) + + /** Traverse to nodes where the value matches the regular expression `value` + */ + def value(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + valueExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.value).matches } + } + + /** Traverse to nodes where the value matches at least one of the regular expressions in `values` + */ + def value(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.value).matches } } + } + + /** Traverse to nodes where value matches `value` exactly. + */ + def valueExact(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, 53, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.value == value } + } + + /** Traverse to nodes where value matches one of the elements in `values` exactly. + */ + def valueExact(values: String*): Iterator[NodeType] = + if (values.length == 1) valueExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.value) } + } + + /** Traverse to nodes where value does not match the regular expression `value`. + */ + def valueNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.value != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.value).matches } + } + } + + /** Traverse to nodes where value does not match any of the regular expressions in `values`. + */ + def valueNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.value).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTagnodepairBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTagnodepairBase.scala new file mode 100644 index 000000000..6977bfb3e --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTagnodepairBase.scala @@ -0,0 +1,7 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalTagnodepairBase[NodeType <: nodes.TagNodePairBase](val traversal: Iterator[NodeType]) + extends AnyVal {} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTemplatedomBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTemplatedomBase.scala new file mode 100644 index 000000000..2b2b68526 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTemplatedomBase.scala @@ -0,0 +1,68 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalTemplatedomBase[NodeType <: nodes.TemplateDomBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..9bc084fc8 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeBase.scala @@ -0,0 +1,185 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalTypeBase[NodeType <: nodes.TypeBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to fullName property */ + def fullName: Iterator[String] = + traversal.map(_.fullName) + + /** Traverse to nodes where the fullName matches the regular expression `value` + */ + def fullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + fullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.fullName).matches } + } + + /** Traverse to nodes where the fullName matches at least one of the regular expressions in `values` + */ + def fullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.fullName).matches } } + } + + /** Traverse to nodes where fullName matches `value` exactly. + */ + def fullNameExact(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, 22, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.fullName == value } + } + + /** Traverse to nodes where fullName matches one of the elements in `values` exactly. + */ + def fullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) fullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.fullName) } + } + + /** Traverse to nodes where fullName does not match the regular expression `value`. + */ + def fullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.fullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.fullName).matches } + } + } + + /** Traverse to nodes where fullName does not match any of the regular expressions in `values`. + */ + def fullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.fullName).matches }.isEmpty } + } + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + + /** Traverse to typeDeclFullName property */ + def typeDeclFullName: Iterator[String] = + traversal.map(_.typeDeclFullName) + + /** Traverse to nodes where the typeDeclFullName matches the regular expression `value` + */ + def typeDeclFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeDeclFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeDeclFullName).matches } + } + + /** Traverse to nodes where the typeDeclFullName matches at least one of the regular expressions in `values` + */ + def typeDeclFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeDeclFullName).matches } } + } + + /** Traverse to nodes where typeDeclFullName matches `value` exactly. + */ + def typeDeclFullNameExact(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, 51, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeDeclFullName == value } + } + + /** Traverse to nodes where typeDeclFullName matches one of the elements in `values` exactly. + */ + def typeDeclFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeDeclFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeDeclFullName) } + } + + /** Traverse to nodes where typeDeclFullName does not match the regular expression `value`. + */ + def typeDeclFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeDeclFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeDeclFullName).matches } + } + } + + /** Traverse to nodes where typeDeclFullName does not match any of the regular expressions in `values`. + */ + def typeDeclFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeDeclFullName).matches }.isEmpty } + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeargumentBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeargumentBase.scala new file mode 100644 index 000000000..88096e1eb --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeargumentBase.scala @@ -0,0 +1,7 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalTypeargumentBase[NodeType <: nodes.TypeArgumentBase](val traversal: Iterator[NodeType]) + extends AnyVal {} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypedeclBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypedeclBase.scala new file mode 100644 index 000000000..4fde5e815 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypedeclBase.scala @@ -0,0 +1,517 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalTypedeclBase[NodeType <: nodes.TypeDeclBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to aliasTypeFullName property */ + def aliasTypeFullName: Iterator[String] = + traversal.flatMap(_.aliasTypeFullName) + + /** Traverse to nodes where the aliasTypeFullName matches the regular expression `value` + */ + def aliasTypeFullName(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + aliasTypeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => + val tmp = item.aliasTypeFullName; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where the aliasTypeFullName matches at least one of the regular expressions in `values` + */ + def aliasTypeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => + val tmp = item.aliasTypeFullName; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to nodes where aliasTypeFullName matches `value` exactly. + */ + def aliasTypeFullNameExact(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, 0, value) + .asInstanceOf[Iterator[NodeType]] + case _ => + traversal.filter { node => + val tmp = node.aliasTypeFullName; tmp.isDefined && tmp.get == value + } + } + + /** Traverse to nodes where aliasTypeFullName matches one of the elements in `values` exactly. + */ + def aliasTypeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) aliasTypeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => + val tmp = item.aliasTypeFullName; tmp.isDefined && valueSet.contains(tmp.get) + } + } + + /** Traverse to nodes where aliasTypeFullName does not match the regular expression `value`. + */ + def aliasTypeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.aliasTypeFullName.isEmpty || node.aliasTypeFullName.get != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => + val tmp = item.aliasTypeFullName; tmp.isDefined && matcher.reset(tmp.get).matches + } + } + } + + /** Traverse to nodes where aliasTypeFullName does not match any of the regular expressions in `values`. + */ + def aliasTypeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filterNot { item => + val tmp = item.aliasTypeFullName; tmp.isDefined && matchers.exists { _.reset(tmp.get).matches } + } + } + + /** Traverse to astParentFullName property */ + def astParentFullName: Iterator[String] = + traversal.map(_.astParentFullName) + + /** Traverse to nodes where the astParentFullName matches the regular expression `value` + */ + def astParentFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + astParentFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.astParentFullName).matches } + } + + /** Traverse to nodes where the astParentFullName matches at least one of the regular expressions in `values` + */ + def astParentFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.astParentFullName).matches } } + } + + /** Traverse to nodes where astParentFullName matches `value` exactly. + */ + def astParentFullNameExact(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, 3, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.astParentFullName == value } + } + + /** Traverse to nodes where astParentFullName matches one of the elements in `values` exactly. + */ + def astParentFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) astParentFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.astParentFullName) } + } + + /** Traverse to nodes where astParentFullName does not match the regular expression `value`. + */ + def astParentFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.astParentFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.astParentFullName).matches } + } + } + + /** Traverse to nodes where astParentFullName does not match any of the regular expressions in `values`. + */ + def astParentFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.astParentFullName).matches }.isEmpty } + } + + /** Traverse to astParentType property */ + def astParentType: Iterator[String] = + traversal.map(_.astParentType) + + /** Traverse to nodes where the astParentType matches the regular expression `value` + */ + def astParentType(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + astParentTypeExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.astParentType).matches } + } + + /** Traverse to nodes where the astParentType matches at least one of the regular expressions in `values` + */ + def astParentType(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.astParentType).matches } } + } + + /** Traverse to nodes where astParentType matches `value` exactly. + */ + def astParentTypeExact(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, 4, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.astParentType == value } + } + + /** Traverse to nodes where astParentType matches one of the elements in `values` exactly. + */ + def astParentTypeExact(values: String*): Iterator[NodeType] = + if (values.length == 1) astParentTypeExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.astParentType) } + } + + /** Traverse to nodes where astParentType does not match the regular expression `value`. + */ + def astParentTypeNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.astParentType != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.astParentType).matches } + } + } + + /** Traverse to nodes where astParentType does not match any of the regular expressions in `values`. + */ + def astParentTypeNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.astParentType).matches }.isEmpty } + } + + /** Traverse to filename property */ + def filename: Iterator[String] = + traversal.map(_.filename) + + /** Traverse to nodes where the filename matches the regular expression `value` + */ + def filename(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + filenameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.filename).matches } + } + + /** Traverse to nodes where the filename matches at least one of the regular expressions in `values` + */ + def filename(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.filename).matches } } + } + + /** Traverse to nodes where filename matches `value` exactly. + */ + def filenameExact(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, 21, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.filename == value } + } + + /** Traverse to nodes where filename matches one of the elements in `values` exactly. + */ + def filenameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) filenameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.filename) } + } + + /** Traverse to nodes where filename does not match the regular expression `value`. + */ + def filenameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.filename != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.filename).matches } + } + } + + /** Traverse to nodes where filename does not match any of the regular expressions in `values`. + */ + def filenameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.filename).matches }.isEmpty } + } + + /** Traverse to fullName property */ + def fullName: Iterator[String] = + traversal.map(_.fullName) + + /** Traverse to nodes where the fullName matches the regular expression `value` + */ + def fullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + fullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.fullName).matches } + } + + /** Traverse to nodes where the fullName matches at least one of the regular expressions in `values` + */ + def fullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.fullName).matches } } + } + + /** Traverse to nodes where fullName matches `value` exactly. + */ + def fullNameExact(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, 22, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.fullName == value } + } + + /** Traverse to nodes where fullName matches one of the elements in `values` exactly. + */ + def fullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) fullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.fullName) } + } + + /** Traverse to nodes where fullName does not match the regular expression `value`. + */ + def fullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.fullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.fullName).matches } + } + } + + /** Traverse to nodes where fullName does not match any of the regular expressions in `values`. + */ + def fullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.fullName).matches }.isEmpty } + } + + /** Traverse to inheritsFromTypeFullName property */ + def inheritsFromTypeFullName: Iterator[String] = + traversal.flatMap(_.inheritsFromTypeFullName) + + /** Traverse to isExternal property */ + def isExternal: Iterator[Boolean] = + traversal.map(_.isExternal) + + /** Traverse to nodes where the isExternal equals the given `value` + */ + def isExternal(value: Boolean): Iterator[NodeType] = + traversal.filter { _.isExternal == value } + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + + /** Traverse to offset property */ + def offset: Iterator[Int] = + traversal.flatMap(_.offset) + + /** Traverse to nodes where the offset equals the given `value` + */ + def offset(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the offset equals at least one of the given `values` + */ + def offset(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the offset is not equal to the given `value` + */ + def offsetNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the offset does not equal any one of the given `values` + */ + def offsetNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.offset; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the offset is greater than the given `value` + */ + def offsetGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the offset is greater than or equal the given `value` + */ + def offsetGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the offset is less than the given `value` + */ + def offsetLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the offset is less than or equal the given `value` + */ + def offsetLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offset; tmp.isDefined && tmp.get <= value + } + + /** Traverse to offsetEnd property */ + def offsetEnd: Iterator[Int] = + traversal.flatMap(_.offsetEnd) + + /** Traverse to nodes where the offsetEnd equals the given `value` + */ + def offsetEnd(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get == value + } + + /** Traverse to nodes where the offsetEnd equals at least one of the given `values` + */ + def offsetEnd(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the offsetEnd is not equal to the given `value` + */ + def offsetEndNot(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isEmpty || tmp.get != value + } + + /** Traverse to nodes where the offsetEnd does not equal any one of the given `values` + */ + def offsetEndNot(values: Int*): Iterator[NodeType] = { + val vset = values.toSet + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isEmpty || !vset.contains(tmp.get) + } + } + + /** Traverse to nodes where the offsetEnd is greater than the given `value` + */ + def offsetEndGt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get > value + } + + /** Traverse to nodes where the offsetEnd is greater than or equal the given `value` + */ + def offsetEndGte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get >= value + } + + /** Traverse to nodes where the offsetEnd is less than the given `value` + */ + def offsetEndLt(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get < value + } + + /** Traverse to nodes where the offsetEnd is less than or equal the given `value` + */ + def offsetEndLte(value: Int): Iterator[NodeType] = + traversal.filter { node => + val tmp = node.offsetEnd; tmp.isDefined && tmp.get <= value + } + +} diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeparameterBase.scala b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeparameterBase.scala new file mode 100644 index 000000000..3ce639f0f --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTypeparameterBase.scala @@ -0,0 +1,68 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalTypeparameterBase[NodeType <: nodes.TypeParameterBase](val traversal: Iterator[NodeType]) + extends AnyVal { + + /** Traverse to name property */ + def name: Iterator[String] = + traversal.map(_.name) + + /** Traverse to nodes where the name matches the regular expression `value` + */ + def name(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + nameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.name).matches } + } + + /** Traverse to nodes where the name matches at least one of the regular expressions in `values` + */ + def name(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.name).matches } } + } + + /** Traverse to nodes where name matches `value` exactly. + */ + def nameExact(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, 39, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.name == value } + } + + /** Traverse to nodes where name matches one of the elements in `values` exactly. + */ + def nameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) nameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.name) } + } + + /** Traverse to nodes where name does not match the regular expression `value`. + */ + def nameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.name != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.name).matches } + } + } + + /** Traverse to nodes where name does not match any of the regular expressions in `values`. + */ + def nameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.name).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..742e72b11 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalTyperefBase.scala @@ -0,0 +1,75 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalTyperefBase[NodeType <: nodes.TypeRefBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to dynamicTypeHintFullName property */ + def dynamicTypeHintFullName: Iterator[String] = + traversal.flatMap(_.dynamicTypeHintFullName) + + /** Traverse to possibleTypes property */ + def possibleTypes: Iterator[String] = + traversal.flatMap(_.possibleTypes) + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..51cc2cb00 --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/TraversalUnknownBase.scala @@ -0,0 +1,193 @@ +package io.shiftleft.codepropertygraph.generated.traversals + +import io.shiftleft.codepropertygraph.generated.nodes +import io.shiftleft.codepropertygraph.generated.accessors.languagebootstrap.* + +final class TraversalUnknownBase[NodeType <: nodes.UnknownBase](val traversal: Iterator[NodeType]) extends AnyVal { + + /** Traverse to containedRef property */ + def containedRef: Iterator[String] = + traversal.map(_.containedRef) + + /** Traverse to nodes where the containedRef matches the regular expression `value` + */ + def containedRef(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + containedRefExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.containedRef).matches } + } + + /** Traverse to nodes where the containedRef matches at least one of the regular expressions in `values` + */ + def containedRef(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.containedRef).matches } } + } + + /** Traverse to nodes where containedRef matches `value` exactly. + */ + def containedRefExact(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, 13, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.containedRef == value } + } + + /** Traverse to nodes where containedRef matches one of the elements in `values` exactly. + */ + def containedRefExact(values: String*): Iterator[NodeType] = + if (values.length == 1) containedRefExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.containedRef) } + } + + /** Traverse to nodes where containedRef does not match the regular expression `value`. + */ + def containedRefNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.containedRef != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.containedRef).matches } + } + } + + /** Traverse to nodes where containedRef does not match any of the regular expressions in `values`. + */ + def containedRefNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.containedRef).matches }.isEmpty } + } + + /** Traverse to dynamicTypeHintFullName property */ + def dynamicTypeHintFullName: Iterator[String] = + traversal.flatMap(_.dynamicTypeHintFullName) + + /** Traverse to parserTypeName property */ + def parserTypeName: Iterator[String] = + traversal.map(_.parserTypeName) + + /** Traverse to nodes where the parserTypeName matches the regular expression `value` + */ + def parserTypeName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + parserTypeNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.parserTypeName).matches } + } + + /** Traverse to nodes where the parserTypeName matches at least one of the regular expressions in `values` + */ + def parserTypeName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.parserTypeName).matches } } + } + + /** Traverse to nodes where parserTypeName matches `value` exactly. + */ + def parserTypeNameExact(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 { _.parserTypeName == value } + } + + /** Traverse to nodes where parserTypeName matches one of the elements in `values` exactly. + */ + def parserTypeNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) parserTypeNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.parserTypeName) } + } + + /** Traverse to nodes where parserTypeName does not match the regular expression `value`. + */ + def parserTypeNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.parserTypeName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.parserTypeName).matches } + } + } + + /** Traverse to nodes where parserTypeName does not match any of the regular expressions in `values`. + */ + def parserTypeNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.parserTypeName).matches }.isEmpty } + } + + /** Traverse to possibleTypes property */ + def possibleTypes: Iterator[String] = + traversal.flatMap(_.possibleTypes) + + /** Traverse to typeFullName property */ + def typeFullName: Iterator[String] = + traversal.map(_.typeFullName) + + /** Traverse to nodes where the typeFullName matches the regular expression `value` + */ + def typeFullName(pattern: String): Iterator[NodeType] = + if (!flatgraph.misc.Regex.isRegex(pattern)) { + typeFullNameExact(pattern) + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filter { item => matcher.reset(item.typeFullName).matches } + } + + /** Traverse to nodes where the typeFullName matches at least one of the regular expressions in `values` + */ + def typeFullName(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.exists { _.reset(item.typeFullName).matches } } + } + + /** Traverse to nodes where typeFullName matches `value` exactly. + */ + def typeFullNameExact(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, 52, value) + .asInstanceOf[Iterator[NodeType]] + case _ => traversal.filter { _.typeFullName == value } + } + + /** Traverse to nodes where typeFullName matches one of the elements in `values` exactly. + */ + def typeFullNameExact(values: String*): Iterator[NodeType] = + if (values.length == 1) typeFullNameExact(values.head) + else { + val valueSet = values.toSet + traversal.filter { item => valueSet.contains(item.typeFullName) } + } + + /** Traverse to nodes where typeFullName does not match the regular expression `value`. + */ + def typeFullNameNot(pattern: String): Iterator[NodeType] = { + if (!flatgraph.misc.Regex.isRegex(pattern)) { + traversal.filter { node => node.typeFullName != pattern } + } else { + val matcher = flatgraph.misc.Regex.multilineMatcher(pattern) + traversal.filterNot { item => matcher.reset(item.typeFullName).matches } + } + } + + /** Traverse to nodes where typeFullName does not match any of the regular expressions in `values`. + */ + def typeFullNameNot(patterns: String*): Iterator[NodeType] = { + val matchers = patterns.map(flatgraph.misc.Regex.multilineMatcher) + traversal.filter { item => matchers.find { _.reset(item.typeFullName).matches }.isEmpty } + } + +} 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 new file mode 100644 index 000000000..d30502b2c --- /dev/null +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/traversals/package.scala @@ -0,0 +1,395 @@ +package io.shiftleft.codepropertygraph.generated + +import io.shiftleft.codepropertygraph.generated.nodes + +package object traversals { + + /** not supposed to be used directly by users, hence the `bootstrap` in the name */ + object languagebootstrap extends ConcreteStoredConversions + + trait ConcreteStoredConversions extends ConcreteBaseConversions { + implicit def accessPropertyAliasTypeFullNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasAliasTypeFullNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyAliasTypeFullName[NodeType] = + new TraversalPropertyAliasTypeFullName(traversal.iterator) + implicit def accessPropertyArgumentIndexTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasArgumentIndexEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyArgumentIndex[NodeType] = new TraversalPropertyArgumentIndex( + traversal.iterator + ) + implicit def accessPropertyArgumentNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasArgumentNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyArgumentName[NodeType] = new TraversalPropertyArgumentName( + traversal.iterator + ) + implicit def accessPropertyAstParentFullNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasAstParentFullNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyAstParentFullName[NodeType] = + new TraversalPropertyAstParentFullName(traversal.iterator) + implicit def accessPropertyAstParentTypeTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasAstParentTypeEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyAstParentType[NodeType] = new TraversalPropertyAstParentType( + traversal.iterator + ) + implicit def accessPropertyCanonicalNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasCanonicalNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyCanonicalName[NodeType] = new TraversalPropertyCanonicalName( + traversal.iterator + ) + implicit def accessPropertyClassNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasClassNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyClassName[NodeType] = new TraversalPropertyClassName( + traversal.iterator + ) + implicit def accessPropertyClassShortNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasClassShortNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyClassShortName[NodeType] = + new TraversalPropertyClassShortName(traversal.iterator) + implicit def accessPropertyClosureBindingIdTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasClosureBindingIdEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyClosureBindingId[NodeType] = + new TraversalPropertyClosureBindingId(traversal.iterator) + implicit def accessPropertyClosureOriginalNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasClosureOriginalNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyClosureOriginalName[NodeType] = + new TraversalPropertyClosureOriginalName(traversal.iterator) + implicit def accessPropertyCodeTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasCodeEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyCode[NodeType] = new TraversalPropertyCode(traversal.iterator) + implicit def accessPropertyColumnNumberTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasColumnNumberEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyColumnNumber[NodeType] = new TraversalPropertyColumnNumber( + traversal.iterator + ) + implicit def accessPropertyColumnNumberEndTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasColumnNumberEndEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyColumnNumberEnd[NodeType] = + new TraversalPropertyColumnNumberEnd(traversal.iterator) + implicit def accessPropertyContainedRefTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasContainedRefEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyContainedRef[NodeType] = new TraversalPropertyContainedRef( + traversal.iterator + ) + implicit def accessPropertyContentTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasContentEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyContent[NodeType] = new TraversalPropertyContent(traversal.iterator) + implicit def accessPropertyControlStructureTypeTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasControlStructureTypeEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyControlStructureType[NodeType] = + new TraversalPropertyControlStructureType(traversal.iterator) + implicit def accessPropertyDependencyGroupIdTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasDependencyGroupIdEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyDependencyGroupId[NodeType] = + new TraversalPropertyDependencyGroupId(traversal.iterator) + implicit def accessPropertyDispatchTypeTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasDispatchTypeEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyDispatchType[NodeType] = new TraversalPropertyDispatchType( + traversal.iterator + ) + implicit def accessPropertyDynamicTypeHintFullNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasDynamicTypeHintFullNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyDynamicTypeHintFullName[NodeType] = + new TraversalPropertyDynamicTypeHintFullName(traversal.iterator) + implicit def accessPropertyEvaluationStrategyTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasEvaluationStrategyEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyEvaluationStrategy[NodeType] = + new TraversalPropertyEvaluationStrategy(traversal.iterator) + implicit def accessPropertyExplicitAsTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasExplicitAsEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyExplicitAs[NodeType] = new TraversalPropertyExplicitAs( + traversal.iterator + ) + implicit def accessPropertyFilenameTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasFilenameEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyFilename[NodeType] = new TraversalPropertyFilename(traversal.iterator) + implicit def accessPropertyFullNameTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasFullNameEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyFullName[NodeType] = new TraversalPropertyFullName(traversal.iterator) + implicit def accessPropertyHashTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasHashEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyHash[NodeType] = new TraversalPropertyHash(traversal.iterator) + implicit def accessPropertyImportedAsTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasImportedAsEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyImportedAs[NodeType] = new TraversalPropertyImportedAs( + traversal.iterator + ) + implicit def accessPropertyImportedEntityTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasImportedEntityEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyImportedEntity[NodeType] = + new TraversalPropertyImportedEntity(traversal.iterator) + implicit def accessPropertyIndexTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasIndexEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyIndex[NodeType] = new TraversalPropertyIndex(traversal.iterator) + implicit def accessPropertyInheritsFromTypeFullNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasInheritsFromTypeFullNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyInheritsFromTypeFullName[NodeType] = + new TraversalPropertyInheritsFromTypeFullName(traversal.iterator) + implicit def accessPropertyIsExplicitTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasIsExplicitEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyIsExplicit[NodeType] = new TraversalPropertyIsExplicit( + traversal.iterator + ) + implicit def accessPropertyIsExternalTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasIsExternalEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyIsExternal[NodeType] = new TraversalPropertyIsExternal( + traversal.iterator + ) + implicit def accessPropertyIsVariadicTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasIsVariadicEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyIsVariadic[NodeType] = new TraversalPropertyIsVariadic( + traversal.iterator + ) + implicit def accessPropertyIsWildcardTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasIsWildcardEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyIsWildcard[NodeType] = new TraversalPropertyIsWildcard( + traversal.iterator + ) + implicit def accessPropertyKeyTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasKeyEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyKey[NodeType] = new TraversalPropertyKey(traversal.iterator) + implicit def accessPropertyLanguageTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasLanguageEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyLanguage[NodeType] = new TraversalPropertyLanguage(traversal.iterator) + implicit def accessPropertyLineNumberTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasLineNumberEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyLineNumber[NodeType] = new TraversalPropertyLineNumber( + traversal.iterator + ) + implicit def accessPropertyLineNumberEndTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasLineNumberEndEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyLineNumberEnd[NodeType] = new TraversalPropertyLineNumberEnd( + traversal.iterator + ) + implicit def accessPropertyMethodFullNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasMethodFullNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyMethodFullName[NodeType] = + new TraversalPropertyMethodFullName(traversal.iterator) + implicit def accessPropertyMethodShortNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasMethodShortNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyMethodShortName[NodeType] = + new TraversalPropertyMethodShortName(traversal.iterator) + implicit def accessPropertyModifierTypeTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasModifierTypeEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyModifierType[NodeType] = new TraversalPropertyModifierType( + traversal.iterator + ) + implicit def accessPropertyNameTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasNameEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyName[NodeType] = new TraversalPropertyName(traversal.iterator) + implicit def accessPropertyNodeLabelTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasNodeLabelEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyNodeLabel[NodeType] = new TraversalPropertyNodeLabel( + traversal.iterator + ) + implicit def accessPropertyOffsetTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasOffsetEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyOffset[NodeType] = new TraversalPropertyOffset(traversal.iterator) + implicit def accessPropertyOffsetEndTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasOffsetEndEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyOffsetEnd[NodeType] = new TraversalPropertyOffsetEnd( + traversal.iterator + ) + implicit def accessPropertyOrderTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasOrderEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyOrder[NodeType] = new TraversalPropertyOrder(traversal.iterator) + implicit def accessPropertyOverlaysTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasOverlaysEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyOverlays[NodeType] = new TraversalPropertyOverlays(traversal.iterator) + implicit def accessPropertyPackageNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasPackageNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyPackageName[NodeType] = new TraversalPropertyPackageName( + traversal.iterator + ) + implicit def accessPropertyParserTypeNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasParserTypeNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyParserTypeName[NodeType] = + new TraversalPropertyParserTypeName(traversal.iterator) + implicit def accessPropertyPossibleTypesTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasPossibleTypesEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyPossibleTypes[NodeType] = new TraversalPropertyPossibleTypes( + traversal.iterator + ) + implicit def accessPropertyRootTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasRootEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyRoot[NodeType] = new TraversalPropertyRoot(traversal.iterator) + implicit def accessPropertySignatureTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasSignatureEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertySignature[NodeType] = new TraversalPropertySignature( + traversal.iterator + ) + implicit def accessPropertySymbolTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasSymbolEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertySymbol[NodeType] = new TraversalPropertySymbol(traversal.iterator) + implicit def accessPropertyTypeDeclFullNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasTypeDeclFullNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyTypeDeclFullName[NodeType] = + new TraversalPropertyTypeDeclFullName(traversal.iterator) + implicit def accessPropertyTypeFullNameTraversal[ + NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasTypeFullNameEMT] + ](traversal: IterableOnce[NodeType]): TraversalPropertyTypeFullName[NodeType] = new TraversalPropertyTypeFullName( + traversal.iterator + ) + implicit def accessPropertyValueTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasValueEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyValue[NodeType] = new TraversalPropertyValue(traversal.iterator) + implicit def accessPropertyVersionTraversal[NodeType <: nodes.StoredNode & nodes.StaticType[nodes.HasVersionEMT]]( + traversal: IterableOnce[NodeType] + ): TraversalPropertyVersion[NodeType] = new TraversalPropertyVersion(traversal.iterator) + } + + trait ConcreteBaseConversions extends AbstractBaseConversions0 { + implicit def traversalAnnotationBase[NodeType <: nodes.AnnotationBase]( + traversal: IterableOnce[NodeType] + ): TraversalAnnotationBase[NodeType] = new TraversalAnnotationBase(traversal.iterator) + implicit def traversalAnnotationliteralBase[NodeType <: nodes.AnnotationLiteralBase]( + traversal: IterableOnce[NodeType] + ): TraversalAnnotationliteralBase[NodeType] = new TraversalAnnotationliteralBase(traversal.iterator) + implicit def traversalAnnotationparameterBase[NodeType <: nodes.AnnotationParameterBase]( + traversal: IterableOnce[NodeType] + ): TraversalAnnotationparameterBase[NodeType] = new TraversalAnnotationparameterBase(traversal.iterator) + implicit def traversalAnnotationparameterassignBase[NodeType <: nodes.AnnotationParameterAssignBase]( + traversal: IterableOnce[NodeType] + ): TraversalAnnotationparameterassignBase[NodeType] = new TraversalAnnotationparameterassignBase(traversal.iterator) + implicit def traversalArrayinitializerBase[NodeType <: nodes.ArrayInitializerBase]( + traversal: IterableOnce[NodeType] + ): TraversalArrayinitializerBase[NodeType] = new TraversalArrayinitializerBase(traversal.iterator) + implicit def traversalBindingBase[NodeType <: nodes.BindingBase]( + traversal: IterableOnce[NodeType] + ): TraversalBindingBase[NodeType] = new TraversalBindingBase(traversal.iterator) + implicit def traversalBlockBase[NodeType <: nodes.BlockBase]( + traversal: IterableOnce[NodeType] + ): TraversalBlockBase[NodeType] = new TraversalBlockBase(traversal.iterator) + implicit def traversalCallBase[NodeType <: nodes.CallBase]( + traversal: IterableOnce[NodeType] + ): TraversalCallBase[NodeType] = new TraversalCallBase(traversal.iterator) + implicit def traversalClosurebindingBase[NodeType <: nodes.ClosureBindingBase]( + traversal: IterableOnce[NodeType] + ): TraversalClosurebindingBase[NodeType] = new TraversalClosurebindingBase(traversal.iterator) + implicit def traversalCommentBase[NodeType <: nodes.CommentBase]( + traversal: IterableOnce[NodeType] + ): TraversalCommentBase[NodeType] = new TraversalCommentBase(traversal.iterator) + implicit def traversalConfigfileBase[NodeType <: nodes.ConfigFileBase]( + traversal: IterableOnce[NodeType] + ): TraversalConfigfileBase[NodeType] = new TraversalConfigfileBase(traversal.iterator) + implicit def traversalControlstructureBase[NodeType <: nodes.ControlStructureBase]( + traversal: IterableOnce[NodeType] + ): TraversalControlstructureBase[NodeType] = new TraversalControlstructureBase(traversal.iterator) + implicit def traversalDependencyBase[NodeType <: nodes.DependencyBase]( + traversal: IterableOnce[NodeType] + ): TraversalDependencyBase[NodeType] = new TraversalDependencyBase(traversal.iterator) + implicit def traversalFieldidentifierBase[NodeType <: nodes.FieldIdentifierBase]( + traversal: IterableOnce[NodeType] + ): TraversalFieldidentifierBase[NodeType] = new TraversalFieldidentifierBase(traversal.iterator) + implicit def traversalFileBase[NodeType <: nodes.FileBase]( + traversal: IterableOnce[NodeType] + ): TraversalFileBase[NodeType] = new TraversalFileBase(traversal.iterator) + implicit def traversalFindingBase[NodeType <: nodes.FindingBase]( + traversal: IterableOnce[NodeType] + ): TraversalFindingBase[NodeType] = new TraversalFindingBase(traversal.iterator) + implicit def traversalIdentifierBase[NodeType <: nodes.IdentifierBase]( + traversal: IterableOnce[NodeType] + ): TraversalIdentifierBase[NodeType] = new TraversalIdentifierBase(traversal.iterator) + implicit def traversalImportBase[NodeType <: nodes.ImportBase]( + traversal: IterableOnce[NodeType] + ): TraversalImportBase[NodeType] = new TraversalImportBase(traversal.iterator) + implicit def traversalJumplabelBase[NodeType <: nodes.JumpLabelBase]( + traversal: IterableOnce[NodeType] + ): TraversalJumplabelBase[NodeType] = new TraversalJumplabelBase(traversal.iterator) + implicit def traversalJumptargetBase[NodeType <: nodes.JumpTargetBase]( + traversal: IterableOnce[NodeType] + ): TraversalJumptargetBase[NodeType] = new TraversalJumptargetBase(traversal.iterator) + implicit def traversalKeyvaluepairBase[NodeType <: nodes.KeyValuePairBase]( + traversal: IterableOnce[NodeType] + ): TraversalKeyvaluepairBase[NodeType] = new TraversalKeyvaluepairBase(traversal.iterator) + implicit def traversalLiteralBase[NodeType <: nodes.LiteralBase]( + traversal: IterableOnce[NodeType] + ): TraversalLiteralBase[NodeType] = new TraversalLiteralBase(traversal.iterator) + implicit def traversalLocalBase[NodeType <: nodes.LocalBase]( + traversal: IterableOnce[NodeType] + ): TraversalLocalBase[NodeType] = new TraversalLocalBase(traversal.iterator) + implicit def traversalLocationBase[NodeType <: nodes.LocationBase]( + traversal: IterableOnce[NodeType] + ): TraversalLocationBase[NodeType] = new TraversalLocationBase(traversal.iterator) + implicit def traversalMemberBase[NodeType <: nodes.MemberBase]( + traversal: IterableOnce[NodeType] + ): TraversalMemberBase[NodeType] = new TraversalMemberBase(traversal.iterator) + implicit def traversalMetadataBase[NodeType <: nodes.MetaDataBase]( + traversal: IterableOnce[NodeType] + ): TraversalMetadataBase[NodeType] = new TraversalMetadataBase(traversal.iterator) + implicit def traversalMethodBase[NodeType <: nodes.MethodBase]( + traversal: IterableOnce[NodeType] + ): TraversalMethodBase[NodeType] = new TraversalMethodBase(traversal.iterator) + implicit def traversalMethodparameterinBase[NodeType <: nodes.MethodParameterInBase]( + traversal: IterableOnce[NodeType] + ): TraversalMethodparameterinBase[NodeType] = new TraversalMethodparameterinBase(traversal.iterator) + implicit def traversalMethodparameteroutBase[NodeType <: nodes.MethodParameterOutBase]( + traversal: IterableOnce[NodeType] + ): TraversalMethodparameteroutBase[NodeType] = new TraversalMethodparameteroutBase(traversal.iterator) + implicit def traversalMethodrefBase[NodeType <: nodes.MethodRefBase]( + traversal: IterableOnce[NodeType] + ): TraversalMethodrefBase[NodeType] = new TraversalMethodrefBase(traversal.iterator) + implicit def traversalMethodreturnBase[NodeType <: nodes.MethodReturnBase]( + traversal: IterableOnce[NodeType] + ): TraversalMethodreturnBase[NodeType] = new TraversalMethodreturnBase(traversal.iterator) + implicit def traversalModifierBase[NodeType <: nodes.ModifierBase]( + traversal: IterableOnce[NodeType] + ): TraversalModifierBase[NodeType] = new TraversalModifierBase(traversal.iterator) + implicit def traversalNamespaceBase[NodeType <: nodes.NamespaceBase]( + traversal: IterableOnce[NodeType] + ): TraversalNamespaceBase[NodeType] = new TraversalNamespaceBase(traversal.iterator) + implicit def traversalNamespaceblockBase[NodeType <: nodes.NamespaceBlockBase]( + traversal: IterableOnce[NodeType] + ): TraversalNamespaceblockBase[NodeType] = new TraversalNamespaceblockBase(traversal.iterator) + implicit def traversalReturnBase[NodeType <: nodes.ReturnBase]( + traversal: IterableOnce[NodeType] + ): TraversalReturnBase[NodeType] = new TraversalReturnBase(traversal.iterator) + implicit def traversalTagBase[NodeType <: nodes.TagBase]( + traversal: IterableOnce[NodeType] + ): TraversalTagBase[NodeType] = new TraversalTagBase(traversal.iterator) + implicit def traversalTagnodepairBase[NodeType <: nodes.TagNodePairBase]( + traversal: IterableOnce[NodeType] + ): TraversalTagnodepairBase[NodeType] = new TraversalTagnodepairBase(traversal.iterator) + implicit def traversalTemplatedomBase[NodeType <: nodes.TemplateDomBase]( + traversal: IterableOnce[NodeType] + ): TraversalTemplatedomBase[NodeType] = new TraversalTemplatedomBase(traversal.iterator) + implicit def traversalTypeBase[NodeType <: nodes.TypeBase]( + traversal: IterableOnce[NodeType] + ): TraversalTypeBase[NodeType] = new TraversalTypeBase(traversal.iterator) + implicit def traversalTypeargumentBase[NodeType <: nodes.TypeArgumentBase]( + traversal: IterableOnce[NodeType] + ): TraversalTypeargumentBase[NodeType] = new TraversalTypeargumentBase(traversal.iterator) + implicit def traversalTypedeclBase[NodeType <: nodes.TypeDeclBase]( + traversal: IterableOnce[NodeType] + ): TraversalTypedeclBase[NodeType] = new TraversalTypedeclBase(traversal.iterator) + implicit def traversalTypeparameterBase[NodeType <: nodes.TypeParameterBase]( + traversal: IterableOnce[NodeType] + ): TraversalTypeparameterBase[NodeType] = new TraversalTypeparameterBase(traversal.iterator) + implicit def traversalTyperefBase[NodeType <: nodes.TypeRefBase]( + traversal: IterableOnce[NodeType] + ): TraversalTyperefBase[NodeType] = new TraversalTyperefBase(traversal.iterator) + implicit def traversalUnknownBase[NodeType <: nodes.UnknownBase]( + traversal: IterableOnce[NodeType] + ): TraversalUnknownBase[NodeType] = new TraversalUnknownBase(traversal.iterator) + } + + trait AbstractBaseConversions0 extends AbstractBaseConversions1 { + implicit def traversalAstnodeBase[NodeType <: nodes.AstNodeBase]( + traversal: IterableOnce[NodeType] + ): TraversalAstnodeBase[NodeType] = new TraversalAstnodeBase(traversal.iterator) + implicit def traversalCallreprBase[NodeType <: nodes.CallReprBase]( + traversal: IterableOnce[NodeType] + ): TraversalCallreprBase[NodeType] = new TraversalCallreprBase(traversal.iterator) + implicit def traversalCfgnodeBase[NodeType <: nodes.CfgNodeBase]( + traversal: IterableOnce[NodeType] + ): TraversalCfgnodeBase[NodeType] = new TraversalCfgnodeBase(traversal.iterator) + implicit def traversalExpressionBase[NodeType <: nodes.ExpressionBase]( + traversal: IterableOnce[NodeType] + ): TraversalExpressionBase[NodeType] = new TraversalExpressionBase(traversal.iterator) + } + + trait AbstractBaseConversions1 { + implicit def traversalDeclarationBase[NodeType <: nodes.DeclarationBase]( + traversal: IterableOnce[NodeType] + ): TraversalDeclarationBase[NodeType] = new TraversalDeclarationBase(traversal.iterator) + } +} diff --git a/project/Versions.scala b/project/Versions.scala index a39d8e199..9ee9bce58 100644 --- a/project/Versions.scala +++ b/project/Versions.scala @@ -1,9 +1,8 @@ /* reads version declarations from /build.sbt so that we can declare them in one place */ object Versions { - val overflowdb = parseVersion("overflowdbVersion") - val overflowdbCodegen = parseVersion("overflowdbCodegenVersion") - val scalatest = "3.2.10" - val json4s = "4.0.3" + val flatgraph = parseVersion("flatgraphVersion") + val scalatest = "3.2.10" + val json4s = "4.0.3" private def parseVersion(key: String): String = { val versionRegexp = s""".*val $key[ ]+=[ ]?"(.*?)"""".r diff --git a/project/plugins.sbt b/project/plugins.sbt index 039102043..89b523b44 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -4,5 +4,4 @@ addSbtPlugin("com.github.sbt" % "sbt-findbugs" % "2.0.0") addSbtPlugin("io.shiftleft" % "sbt-ci-release-early" % "2.0.18") addSbtPlugin("com.dwijnand" % "sbt-dynver" % "4.1.1") addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.5") -addSbtPlugin("io.shiftleft" % "sbt-overflowdb" % "2.112") - +addSbtPlugin("io.joern" % "sbt-flatgraph" % Versions.flatgraph) diff --git a/project/project/Versions.scala b/project/project/Versions.scala new file mode 100644 index 000000000..7c7ddb3d2 --- /dev/null +++ b/project/project/Versions.scala @@ -0,0 +1,20 @@ +/* reads version declarations from /build.sbt so that we can declare them in one place */ +object Versions { + val flatgraph = parseVersion("flatgraphVersion") + + private def parseVersion(key: String): String = { + val versionRegexp = s""".*val $key[ ]+=[ ]?"(.*?)"""".r + val versions: List[String] = scala.io.Source + .fromFile("build.sbt") + .getLines + .filter(_.contains(s"val $key")) + .collect { case versionRegexp(version) => version } + .toList + assert( + versions.size == 1, + s"""unable to extract $key from build.sbt, expected exactly one line like `val $key= "0.0.0-SNAPSHOT"`.""" + ) + versions.head + } + +} diff --git a/schema/build.sbt b/schema/build.sbt index 4ed24c875..5917f00a1 100644 --- a/schema/build.sbt +++ b/schema/build.sbt @@ -1,9 +1,9 @@ name := "codepropertygraph-schema" -libraryDependencies += "io.shiftleft" %% "overflowdb-codegen" % Versions.overflowdbCodegen +libraryDependencies += "io.joern" %% "flatgraph-domain-classes-generator" % Versions.flatgraph lazy val generatedSrcDir = settingKey[File]("root for generated sources - we want to check those in") -enablePlugins(OdbCodegenSbtPlugin) +enablePlugins(FlatgraphCodegenSbtPlugin) generateDomainClasses/classWithSchema := "io.shiftleft.codepropertygraph.schema.CpgSchema$" generateDomainClasses/fieldName := "instance" generateDomainClasses/outputDir := (Projects.domainClasses / generatedSrcDir).value diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Annotation.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Annotation.scala index e9e8c6e21..819d68c8e 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Annotation.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Annotation.scala @@ -1,6 +1,6 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.schema._ +import flatgraph.schema._ object Annotation extends SchemaBase { def docIndex: Int = 20 diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Ast.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Ast.scala index adb9a9921..7b717a946 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Ast.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Ast.scala @@ -1,9 +1,9 @@ package io.shiftleft.codepropertygraph.schema import io.shiftleft.codepropertygraph.schema.CpgSchema.PropertyDefaults -import overflowdb.schema.EdgeType.Cardinality -import overflowdb.schema.Property.ValueType -import overflowdb.schema.{Constant, NodeType, SchemaBuilder, SchemaInfo} +import flatgraph.schema.EdgeType.Cardinality +import flatgraph.schema.Property.ValueType +import flatgraph.schema.{Constant, NodeType, SchemaBuilder, SchemaInfo} object Ast extends SchemaBase { @@ -47,11 +47,11 @@ object Ast extends SchemaBase { fs: FileSystem.Schema ) { implicit private val schemaInfo: SchemaInfo = SchemaInfo.forClass(getClass) - import base.* - import fs.* - import methodSchema.* - import namespaces.* - import typeSchema.* + import base._ + import fs._ + import methodSchema._ + import namespaces._ + import typeSchema._ // Base types @@ -130,6 +130,7 @@ object Ast extends SchemaBase { ) .protoId(8) .addProperties(typeFullName) + .primaryKey(code) val local: NodeType = builder .addNodeType( @@ -143,6 +144,7 @@ object Ast extends SchemaBase { .protoId(23) .addProperties(typeFullName) .extendz(declaration, astNode) + .primaryKey(name) val identifier: NodeType = builder .addNodeType( @@ -154,6 +156,7 @@ object Ast extends SchemaBase { ) .protoId(27) .addProperties(typeFullName, name) + .primaryKey(name) val canonicalName = builder .addProperty( @@ -314,6 +317,7 @@ object Ast extends SchemaBase { ) .protoId(30) .starterName("ret") + .primaryKey(code) val controlStructureType = builder .addProperty( @@ -577,6 +581,7 @@ object Ast extends SchemaBase { .protoId(15) .extendz(callRepr) .addProperties(typeFullName) + .primaryKey(name) val expression = builder .addNodeBaseType( diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Base.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Base.scala index d15e28b73..06974ef8f 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Base.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Base.scala @@ -1,8 +1,8 @@ package io.shiftleft.codepropertygraph.schema import io.shiftleft.codepropertygraph.schema.CpgSchema.PropertyDefaults -import overflowdb.schema.Property.ValueType -import overflowdb.schema._ +import flatgraph.schema.Property.ValueType +import flatgraph.schema._ object Base extends SchemaBase { diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Binding.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Binding.scala index 9e45b7c6d..383c1f1da 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Binding.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Binding.scala @@ -1,6 +1,6 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.schema.{EdgeType, NodeType, SchemaBuilder, SchemaInfo} +import flatgraph.schema.{EdgeType, NodeType, SchemaBuilder, SchemaInfo} object Binding extends SchemaBase { 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 fb0569bc0..ddaa34cd2 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CallGraph.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CallGraph.scala @@ -1,9 +1,9 @@ package io.shiftleft.codepropertygraph.schema import io.shiftleft.codepropertygraph.schema.CpgSchema.PropertyDefaults -import overflowdb.schema.EdgeType.Cardinality -import overflowdb.schema.Property.ValueType -import overflowdb.schema.{Constant, SchemaBuilder, SchemaInfo} +import flatgraph.schema.EdgeType.Cardinality +import flatgraph.schema.Property.ValueType +import flatgraph.schema.{Constant, SchemaBuilder, SchemaInfo} object CallGraph extends SchemaBase { diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Cfg.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Cfg.scala index 4f1a67481..67a75878d 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Cfg.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Cfg.scala @@ -1,7 +1,7 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.schema.EdgeType.Cardinality -import overflowdb.schema.{SchemaBuilder, SchemaInfo} +import flatgraph.schema.EdgeType.Cardinality +import flatgraph.schema.{SchemaBuilder, SchemaInfo} object Cfg extends SchemaBase { @@ -99,6 +99,8 @@ object Cfg extends SchemaBase { stepNameIn = "toReturn" ) + callNode.addOutEdge(edge = cfg, inNode = methodReturn) + methodRef.addOutEdge(edge = cfg, inNode = methodReturn) typeRef.addOutEdge(edge = cfg, inNode = methodReturn) } diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Codegen.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Codegen.scala deleted file mode 100644 index d08ddc506..000000000 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Codegen.scala +++ /dev/null @@ -1,12 +0,0 @@ -package io.shiftleft.codepropertygraph.schema - -import overflowdb.codegen.CodeGen - -import java.io.File - -object Codegen extends App { - val outputDir = - args.headOption.map(new File(_)).getOrElse(throw new AssertionError("please pass outputDir as first parameter")) - - new CodeGen(CpgSchema.instance).run(outputDir) -} diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Comment.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Comment.scala index 8e04f2465..540b565df 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Comment.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Comment.scala @@ -1,6 +1,6 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.schema._ +import flatgraph.schema._ object Comment extends SchemaBase { def docIndex = 12 @@ -8,12 +8,13 @@ object Comment extends SchemaBase { override def description = "" - def apply(builder: SchemaBuilder, ast: Ast.Schema, fs: FileSystem.Schema) = - new Schema(builder, ast, fs) + def apply(builder: SchemaBuilder, base: Base.Schema, ast: Ast.Schema, fs: FileSystem.Schema) = + new Schema(builder, base, ast, fs) - class Schema(builder: SchemaBuilder, astSchema: Ast.Schema, fs: FileSystem.Schema) { + class Schema(builder: SchemaBuilder, baseSchema: Base.Schema, astSchema: Ast.Schema, fs: FileSystem.Schema) { import astSchema._ import fs._ + import baseSchema._ implicit private val schemaInfo: SchemaInfo = SchemaInfo.forClass(getClass) val comment: NodeType = builder @@ -21,6 +22,7 @@ object Comment extends SchemaBase { .protoId(511) .addProperties(filename) .extendz(astNode) + .primaryKey(code) comment.addOutEdge(edge = sourceFile, inNode = comment, stepNameOut = "file") file.addOutEdge(edge = ast, inNode = comment, stepNameOut = "comment") diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Configuration.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Configuration.scala index bd9913911..f329365f0 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Configuration.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Configuration.scala @@ -1,6 +1,6 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.schema.{NodeType, SchemaBuilder, SchemaInfo} +import flatgraph.schema.{NodeType, SchemaBuilder, SchemaInfo} object Configuration extends SchemaBase { diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CpgSchema.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CpgSchema.scala index 1ac614cb7..b24683863 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CpgSchema.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/CpgSchema.scala @@ -1,6 +1,6 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.schema.{Schema, SchemaBuilder} +import flatgraph.schema.{Schema, SchemaBuilder} class CpgSchema(builder: SchemaBuilder) { @@ -23,7 +23,7 @@ class CpgSchema(builder: SchemaBuilder) { val shortcuts = Shortcuts(builder, base, method, ast, typeSchema, fs) - val sourceSpecific = Comment(builder, ast, fs) + val sourceSpecific = Comment(builder, base, ast, fs) val tagsAndLocation = TagsAndLocation(builder, base, typeSchema, method, ast, fs, callGraph) val binding = Binding(builder, base, typeSchema, method, callGraph) val annotation = Annotation(builder, base, method, typeSchema, ast, shortcuts) diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Dominators.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Dominators.scala index f3f26a3c2..516f7818f 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Dominators.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Dominators.scala @@ -1,6 +1,6 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.schema.{SchemaBuilder, SchemaInfo} +import flatgraph.schema.{SchemaBuilder, SchemaInfo} object Dominators extends SchemaBase { diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/FileSystem.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/FileSystem.scala index b3c9cecb5..65ca4d2bb 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/FileSystem.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/FileSystem.scala @@ -1,8 +1,8 @@ package io.shiftleft.codepropertygraph.schema import io.shiftleft.codepropertygraph.schema.CpgSchema.PropertyDefaults -import overflowdb.schema.Property.ValueType -import overflowdb.schema.{NodeType, SchemaBuilder, SchemaInfo} +import flatgraph.schema.Property.ValueType +import flatgraph.schema.{NodeType, SchemaBuilder, SchemaInfo} object FileSystem extends SchemaBase { @@ -106,6 +106,7 @@ object FileSystem extends SchemaBase { ) .protoId(38) .addProperties(name, hash, content) + .primaryKey(name) val offset = builder .addProperty( diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Finding.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Finding.scala index c12e99185..2c240f789 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Finding.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Finding.scala @@ -1,8 +1,8 @@ package io.shiftleft.codepropertygraph.schema import io.shiftleft.codepropertygraph.schema.CpgSchema.PropertyDefaults -import overflowdb.schema.Property.{Cardinality, ValueType} -import overflowdb.schema._ +import flatgraph.schema.Property.{Cardinality, ValueType} +import flatgraph.schema._ object Finding extends SchemaBase { diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Hidden.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Hidden.scala index 8ff18a02a..13c55294e 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Hidden.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Hidden.scala @@ -1,7 +1,7 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.schema.Property.ValueType -import overflowdb.schema.{EdgeType, NodeType, SchemaBuilder, SchemaInfo} +import flatgraph.schema.Property.ValueType +import flatgraph.schema.{EdgeType, NodeType, SchemaBuilder, SchemaInfo} object Hidden extends SchemaBase { override def docIndex: Int = -1 @@ -148,6 +148,7 @@ object Hidden extends SchemaBase { .addNodeType(name = "DEPENDENCY", comment = "This node represents a dependency") .protoId(35) .addProperties(version, name, dependencyGroupId) + .primaryKey(name) /* * Type hints @@ -278,6 +279,14 @@ object Hidden extends SchemaBase { block.addOutEdge(edge = ast, inNode = importNode) file.addOutEdge(edge = ast, inNode = importNode) typeDecl.addOutEdge(edge = ast, inNode = importNode) + + val secondaryId = builder.addProperty( + name = "SECONDARY_ID", + ValueType.String, + comment = """ID from a different context, e.g. if the graph was imported from a different format, + |we can use this to preserve the link to the original""".stripMargin + ) + } } diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/MetaData.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/MetaData.scala index 7d8858433..cadb9e3a9 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/MetaData.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/MetaData.scala @@ -1,8 +1,8 @@ package io.shiftleft.codepropertygraph.schema import io.shiftleft.codepropertygraph.schema.CpgSchema.PropertyDefaults -import overflowdb.schema.Property.ValueType -import overflowdb.schema.{Constant, NodeType, SchemaBuilder, SchemaInfo} +import flatgraph.schema.Property.ValueType +import flatgraph.schema.{Constant, NodeType, SchemaBuilder, SchemaInfo} object MetaData extends SchemaBase { diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Method.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Method.scala index 062d5b14e..65f65b837 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Method.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Method.scala @@ -1,7 +1,7 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.schema.Property.ValueType -import overflowdb.schema.{NodeType, SchemaBuilder, SchemaInfo} +import flatgraph.schema.Property.ValueType +import flatgraph.schema.{NodeType, SchemaBuilder, SchemaInfo} object Method extends SchemaBase { @@ -76,6 +76,7 @@ object Method extends SchemaBase { .addProperties(astParentType, astParentFullName) .addProperties(offset, offsetEnd) .extendz(declaration) + .primaryKey(name) val isVariadic = builder .addProperty( @@ -101,6 +102,7 @@ object Method extends SchemaBase { .protoId(34) .addProperties(typeFullName, isVariadic, index) .extendz(declaration) + .primaryKey(name) val methodParameterOut: NodeType = builder .addNodeType( diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Namespace.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Namespace.scala index d035310ca..414535fd7 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Namespace.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Namespace.scala @@ -1,6 +1,6 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.schema.{NodeType, SchemaBuilder, SchemaInfo} +import flatgraph.schema.{NodeType, SchemaBuilder, SchemaInfo} object Namespace extends SchemaBase { @@ -43,6 +43,7 @@ object Namespace extends SchemaBase { ) .protoId(41) .addProperties(name, fullName, filename) + .primaryKey(name) val namespace: NodeType = builder .addNodeType( @@ -58,6 +59,7 @@ object Namespace extends SchemaBase { ) .protoId(40) .addProperties(name) + .primaryKey(name) namespaceBlock.addOutEdge(edge = sourceFile, inNode = file, stepNameIn = "namespaceBlock") diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Operators.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Operators.scala index c404d006e..6b4271313 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Operators.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Operators.scala @@ -1,7 +1,7 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.schema.Property.ValueType -import overflowdb.schema._ +import flatgraph.schema.Property.ValueType +import flatgraph.schema._ object Operators extends SchemaBase { diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Pdg.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Pdg.scala index 61170fa1d..f3b9f2541 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Pdg.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Pdg.scala @@ -1,8 +1,8 @@ package io.shiftleft.codepropertygraph.schema import io.shiftleft.codepropertygraph.schema.CpgSchema.PropertyDefaults -import overflowdb.schema.Property.ValueType -import overflowdb.schema.{SchemaBuilder, SchemaInfo} +import flatgraph.schema.Property.ValueType +import flatgraph.schema.{SchemaBuilder, SchemaInfo} object Pdg extends SchemaBase { @@ -50,7 +50,7 @@ object Pdg extends SchemaBase { |""".stripMargin ) .protoId(137) - .addProperties(variable) + .withProperty(variable) literal .addOutEdge(edge = cdg, inNode = callNode) diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/ProtoSerialize.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/ProtoSerialize.scala index 83803c9cc..c6f9019dd 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/ProtoSerialize.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/ProtoSerialize.scala @@ -1,8 +1,8 @@ package io.shiftleft.codepropertygraph.schema import io.shiftleft.codepropertygraph.schema.CpgSchema.PropertyDefaults -import overflowdb.schema.Property.ValueType -import overflowdb.schema.{SchemaBuilder, SchemaInfo} +import flatgraph.schema.Property.ValueType +import flatgraph.schema.{SchemaBuilder, SchemaInfo} object ProtoSerialize extends SchemaBase { diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Protogen.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Protogen.scala index c93150595..02b60bd15 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Protogen.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Protogen.scala @@ -1,14 +1,14 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.codegen.ProtoGen -import overflowdb.schema.{ProtoOptions, SchemaBuilder} +import flatgraph.codegen.ProtoGen +import flatgraph.schema.{ProtoOptions, SchemaBuilder} -import java.io.File +import java.nio.file.Paths object Protogen { def main(args: Array[String]): Unit = { val outputDir = - args.headOption.map(new File(_)).getOrElse(throw new AssertionError("please pass outputDir as first parameter")) + args.headOption.map(Paths.get(_)).getOrElse(throw new AssertionError("please pass outputDir as first parameter")) val builder = new SchemaBuilder(domainShortName = "Cpg", basePackage = "io.shiftleft.codepropertygraph.generated") diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Shortcuts.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Shortcuts.scala index e73ce6685..17a0f6f9c 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Shortcuts.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Shortcuts.scala @@ -1,7 +1,7 @@ package io.shiftleft.codepropertygraph.schema -import overflowdb.schema.EdgeType.Cardinality -import overflowdb.schema._ +import flatgraph.schema.EdgeType.Cardinality +import flatgraph.schema._ object Shortcuts extends SchemaBase { diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/TagsAndLocation.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/TagsAndLocation.scala index 5829c7997..023f93f96 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/TagsAndLocation.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/TagsAndLocation.scala @@ -1,8 +1,8 @@ package io.shiftleft.codepropertygraph.schema import io.shiftleft.codepropertygraph.schema.CpgSchema.PropertyDefaults -import overflowdb.schema.Property.ValueType -import overflowdb.schema._ +import flatgraph.schema.Property.ValueType +import flatgraph.schema._ object TagsAndLocation extends SchemaBase { @@ -85,6 +85,7 @@ object TagsAndLocation extends SchemaBase { .addNodeType(name = "TAG", comment = "This node represents a tag.") .protoId(24) .addProperties(name, value) + .primaryKey(name) val location: NodeType = builder .addNodeType(name = "LOCATION", comment = "A location node summarizes a source code location.") diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Type.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Type.scala index 9473bf751..2c5c16d01 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Type.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/Type.scala @@ -1,8 +1,8 @@ package io.shiftleft.codepropertygraph.schema import io.shiftleft.codepropertygraph.schema.CpgSchema.PropertyDefaults -import overflowdb.schema.Property.ValueType -import overflowdb.schema.{NodeType, SchemaBuilder, SchemaInfo} +import flatgraph.schema.Property.ValueType +import flatgraph.schema.{NodeType, SchemaBuilder, SchemaInfo} object Type extends SchemaBase { @@ -112,6 +112,7 @@ object Type extends SchemaBase { .addProperties(name, fullName, isExternal, inheritsFromTypeFullName, aliasTypeFullName, filename) .addProperties(astParentType, astParentFullName) .addProperties(offset, offsetEnd) + .primaryKey(name) val typeParameter: NodeType = builder .addNodeType( @@ -150,6 +151,7 @@ object Type extends SchemaBase { .addProperties(typeFullName) .addProperties(astParentType, astParentFullName) .extendz(declaration) + .primaryKey(name) val tpe: NodeType = builder .addNodeType( @@ -160,6 +162,7 @@ object Type extends SchemaBase { .protoId(45) .addProperties(name, fullName, typeDeclFullName) .starterName("typ") + .primaryKey(name) // edges diff --git a/schema2json/build.sbt b/schema2json/build.sbt index 75ba752d6..bfe2de18f 100644 --- a/schema2json/build.sbt +++ b/schema2json/build.sbt @@ -9,51 +9,6 @@ libraryDependencies ++= Seq( scalacOptions -= "-Xfatal-warnings" // some antl-generated sources prompt compiler warnings :( -scalacOptions ++= ( - CrossVersion.partialVersion(scalaVersion.value) match { - case Some((3, _)) => Seq() - case _ => - Seq( - "-deprecation", // Emit warning and location for usages of deprecated APIs. - "-encoding", - "utf-8", // Specify character encoding used by source files. - "-explaintypes", // Explain type errors in more detail. - "-feature", // Emit warning and location for usages of features that should be imported explicitly. - "-language:existentials", // Existential types (besides wildcard types) can be written and inferred - "-language:experimental.macros", // Allow macro definition (besides implementation and application) - "-language:higherKinds", // Allow higher-kinded types - "-language:implicitConversions", // Allow definition of implicit functions called views - "-unchecked", // Enable additional warnings where generated code depends on assumptions. - "-Xcheckinit", // Wrap field accessors to throw an exception on uninitialized access. - // "-Xfatal-warnings", // Fail the compilation if there are any warnings. - "-Xlint:adapted-args", // Warn if an argument list is modified to match the receiver. - "-Xlint:constant", // Evaluation of a constant arithmetic expression results in an error. - "-Xlint:delayedinit-select", // Selecting member of DelayedInit. - "-Xlint:doc-detached", // A Scaladoc comment appears to be detached from its element. - "-Xlint:inaccessible", // Warn about inaccessible types in method signatures. - "-Xlint:infer-any", // Warn when a type argument is inferred to be `Any`. - "-Xlint:missing-interpolator", // A string literal appears to be missing an interpolator id. - "-Xlint:option-implicit", // Option.apply used implicit view. - "-Xlint:package-object-classes", // Class or object defined in package object. - "-Xlint:poly-implicit-overload", // Parameterized overloaded implicit methods are not visible as view bounds. - "-Xlint:private-shadow", // A private field (or class parameter) shadows a superclass field. - "-Xlint:stars-align", // Pattern sequence wildcard must align with sequence component. - "-Xlint:type-parameter-shadow", // A local type parameter shadows a type already in scope. - "-Ywarn-dead-code", // Warn when dead code is identified. - "-Ywarn-extra-implicit", // Warn when more than one implicit parameter section is defined. - "-Xlint:nullary-unit", // Warn when nullary methods return Unit. - "-Ywarn-numeric-widen", // Warn when numerics are widened. - "-Ywarn-unused:implicits", // Warn if an implicit parameter is unused. - "-Ywarn-unused:imports", // Warn if an import selector is not referenced. - "-Ywarn-unused:locals", // Warn if a local definition is unused. - "-Ywarn-unused:params", // Warn if a value parameter is unused. - "-Ywarn-unused:patvars", // Warn if a variable bound in a pattern is unused. - "-Ywarn-unused:privates" // Warn if a private member is unused. - // "-Ywarn-value-discard" // Warn when non-Unit expression results are unused. - ) - } -) - compile / javacOptions ++= Seq("-Xlint:all", "-Xlint:-cast", "-g") Test / fork := true testOptions += Tests.Argument(TestFrameworks.JUnit, "-a", "-v") diff --git a/schema2json/src/main/scala/Schema2Json.scala b/schema2json/src/main/scala/Schema2Json.scala index 06b694d38..2c8d5b0ec 100644 --- a/schema2json/src/main/scala/Schema2Json.scala +++ b/schema2json/src/main/scala/Schema2Json.scala @@ -3,8 +3,8 @@ import org.json4s.JsonDSL._ import org.json4s.native.JsonMethods._ import org.json4s.native.Serialization import org.json4s.{Formats, NoTypeHints} -import overflowdb.schema.Property.Cardinality -import overflowdb.schema.{AbstractNodeType, NodeBaseType, NodeType, Property, SchemaInfo} +import flatgraph.schema.Property.Cardinality +import flatgraph.schema.{AbstractNodeType, NodeBaseType, NodeType, Property, SchemaInfo} object Schema2Json extends App { @@ -17,9 +17,8 @@ object Schema2Json extends App { ("schemas" -> schemaSummary) ~ ("nodes" -> nodeTypesAsJson) ~ ("edges" -> edgeTypesAsJson) ~ ("properties" -> propertiesAsJson) val outFileName = "/tmp/schema.json" - better.files - .File(outFileName) - .write(compact(render(json))) + os.write(os.Path(outFileName), compact(render(json))) + // Files.writeString(Paths.get(outFileName), compact(render(json))) println(s"Schema written to: $outFileName") private def schemaName(nodeType: AbstractNodeType): String = diff --git a/updateDependencies.sh b/updateDependencies.sh index 161abe153..f5c02c42b 100755 --- a/updateDependencies.sh +++ b/updateDependencies.sh @@ -20,8 +20,7 @@ else fi declare -A repos=( - [overflowdb]=https://repo1.maven.org/maven2/io/shiftleft/overflowdb-core_3 - [overflowdbCodegen]=https://repo1.maven.org/maven2/io/shiftleft/overflowdb-codegen_2.12 + [flatgraph]=https://repo1.maven.org/maven2/io/joern/flatgraph-core_3 ) function latest_version { @@ -71,8 +70,7 @@ function update { } if [ "$DEPENDENCY" == "" ]; then - update overflowdb - update overflowdbCodegen + update flatgraph else DEPENDENCY="${DEPENDENCY#--only=}" update $DEPENDENCY From 5804e6686f9f41531f51cec28b6e090245feb09f Mon Sep 17 00:00:00 2001 From: Markus Lottmann Date: Fri, 2 Aug 2024 14:58:23 +0200 Subject: [PATCH 04/13] Deprecated SerializedCpg APIs. (#1781) This PR does not change behaviour. The serialization feature was internally not doing anything anymore for quite a while. Time to deprecated the API to eventually removed them. --- .../scala/io/shiftleft/SerializedCpg.scala | 1 + .../scala/io/shiftleft/passes/CpgPass.scala | 86 +++++++++---------- .../io/shiftleft/passes/CpgPassNewTests.scala | 17 +--- 3 files changed, 45 insertions(+), 59 deletions(-) diff --git a/codepropertygraph/src/main/scala/io/shiftleft/SerializedCpg.scala b/codepropertygraph/src/main/scala/io/shiftleft/SerializedCpg.scala index 2ce70c6ed..11d72d960 100644 --- a/codepropertygraph/src/main/scala/io/shiftleft/SerializedCpg.scala +++ b/codepropertygraph/src/main/scala/io/shiftleft/SerializedCpg.scala @@ -7,6 +7,7 @@ import java.net.{URI, URISyntaxException} import java.nio.file.{FileSystem, FileSystems, Files} import java.util +@deprecated("New API functions do not use this class anymore") class SerializedCpg extends AutoCloseable { /** We allow creating a dummy serialized CPG that does not do anything. diff --git a/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala b/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala index 39bf37e05..42228d6cd 100644 --- a/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala +++ b/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala @@ -62,7 +62,43 @@ abstract class ForkJoinParallelCpgPass[T <: AnyRef](cpg: Cpg, @nowarn outName: S // Override this to disable parallelism of passes. Useful for debugging. def isParallel: Boolean = true - override def createAndApply(): Unit = createApplySerializeAndStore(null) + override def createAndApply(): Unit = { + baseLogger.info(s"Start of pass: $name") + val nanosStart = System.nanoTime() + var nParts = 0 + var nanosBuilt = -1L + var nDiff = -1 + var nDiffT = -1 + try { + val diffGraph = Cpg.newDiffGraphBuilder + nParts = runWithBuilder(diffGraph) + nanosBuilt = System.nanoTime() + nDiff = diffGraph.size + + // TODO how about `nDiffT` which seems to count the number of modifications.. + // nDiffT = overflowdb.BatchedUpdate + // .applyDiff(cpg.graph, diffGraph, null) + // .transitiveModifications() + + flatgraph.DiffGraphApplier.applyDiff(cpg.graph, diffGraph) + } catch { + case exc: Exception => + baseLogger.error(s"Pass ${name} failed", exc) + throw exc + } finally { + try { + finish() + } finally { + // the nested finally is somewhat ugly -- but we promised to clean up with finish(), we want to include finish() + // in the reported timings, and we must have our final log message if finish() throws + val nanosStop = System.nanoTime() + val fracRun = if (nanosBuilt == -1) 0.0 else (nanosStop - nanosBuilt) * 100.0 / (nanosStop - nanosStart + 1) + baseLogger.info( + f"Pass $name completed in ${(nanosStop - nanosStart) * 1e-6}%.0f ms (${fracRun}%.0f%% on mutations). ${nDiff}%d + ${nDiffT - nDiff}%d changes committed from ${nParts}%d parts." + ) + } + } + } override def runWithBuilder(externalBuilder: DiffGraphBuilder): Int = { try { @@ -105,45 +141,9 @@ abstract class ForkJoinParallelCpgPass[T <: AnyRef](cpg: Cpg, @nowarn outName: S } } + @deprecated("Please use createAndApply") override def createApplySerializeAndStore(serializedCpg: SerializedCpg, prefix: String = ""): Unit = { - baseLogger.info(s"Start of pass: $name") - val nanosStart = System.nanoTime() - var nParts = 0 - var nanosBuilt = -1L - var nDiff = -1 - var nDiffT = -1 - try { - val diffGraph = Cpg.newDiffGraphBuilder - nParts = runWithBuilder(diffGraph) - nanosBuilt = System.nanoTime() - nDiff = diffGraph.size - - // TODO how about `nDiffT` which seems to count the number of modifications.. -// nDiffT = overflowdb.BatchedUpdate -// .applyDiff(cpg.graph, diffGraph, null) -// .transitiveModifications() - - flatgraph.DiffGraphApplier.applyDiff(cpg.graph, diffGraph) - } catch { - case exc: Exception => - baseLogger.error(s"Pass ${name} failed", exc) - throw exc - } finally { - try { - finish() - } finally { - // the nested finally is somewhat ugly -- but we promised to clean up with finish(), we want to include finish() - // in the reported timings, and we must have our final log message if finish() throws - val nanosStop = System.nanoTime() - val fracRun = if (nanosBuilt == -1) 0.0 else (nanosStop - nanosBuilt) * 100.0 / (nanosStop - nanosStart + 1) - val serializationString = if (serializedCpg != null && !serializedCpg.isEmpty) { - " Diff serialized and stored." - } else "" - baseLogger.info( - f"Pass $name completed in ${(nanosStop - nanosStart) * 1e-6}%.0f ms (${fracRun}%.0f%% on mutations). ${nDiff}%d + ${nDiffT - nDiff}%d changes committed from ${nParts}%d parts.${serializationString}%s" - ) - } - } + createAndApply() } } @@ -154,6 +154,7 @@ trait CpgPassBase { def createAndApply(): Unit + @deprecated("Please use createAndApply") def createApplySerializeAndStore(serializedCpg: SerializedCpg, prefix: String = ""): Unit /** Name of the pass. By default it is inferred from the name of the class, override if needed. @@ -196,11 +197,8 @@ trait CpgPassBase { prefix + "_" + outputName + "_" + index } - protected def store(overlay: GeneratedMessageV3, name: String, serializedCpg: SerializedCpg): Unit = { - if (overlay.getSerializedSize > 0) { - serializedCpg.addOverlay(overlay, name) - } - } + @deprecated + protected def store(overlay: GeneratedMessageV3, name: String, serializedCpg: SerializedCpg): Unit = {} protected def withStartEndTimesLogged[A](fun: => A): A = { baseLogger.info(s"Running pass: $name") diff --git a/codepropertygraph/src/test/scala/io/shiftleft/passes/CpgPassNewTests.scala b/codepropertygraph/src/test/scala/io/shiftleft/passes/CpgPassNewTests.scala index ac7f1b468..c5486de96 100644 --- a/codepropertygraph/src/test/scala/io/shiftleft/passes/CpgPassNewTests.scala +++ b/codepropertygraph/src/test/scala/io/shiftleft/passes/CpgPassNewTests.scala @@ -2,7 +2,6 @@ package io.shiftleft.passes import better.files.File import flatgraph.SchemaViolationException -import io.shiftleft.SerializedCpg import io.shiftleft.codepropertygraph.generated.Cpg import io.shiftleft.codepropertygraph.generated.nodes.NewFile import io.shiftleft.codepropertygraph.generated.language.* @@ -16,7 +15,7 @@ class CpgPassNewTests extends AnyWordSpec with Matchers { private object Fixture { def apply(f: (Cpg, CpgPassBase) => Unit): Unit = { val cpg = Cpg.empty - class MyPass(cpg: Cpg) extends SimpleCpgPass(cpg, "MyPass") { + class MyPass(cpg: Cpg) extends CpgPass(cpg, "MyPass") { override def run(builder: DiffGraphBuilder): Unit = { val builder2 = Cpg.newDiffGraphBuilder builder.addNode(NewFile().name("foo")) @@ -35,21 +34,9 @@ class CpgPassNewTests extends AnyWordSpec with Matchers { cpg.all.label.toSet shouldBe Set("FILE") } - "produce a serialized CPG file" in Fixture { (_, pass) => - File.usingTemporaryFile("pass", ".zip") { file => - file.delete() - val filename = file.path.toString - val serializedCpg = new SerializedCpg(filename) - pass.createApplySerializeAndStore(serializedCpg) - serializedCpg.close() - file.exists shouldBe true - Files.size(file.path) should not be 0 - } - } - "fail for schema violations" in { val cpg = Cpg.empty - val pass = new SimpleCpgPass(cpg, "pass1") { + val pass = new CpgPass(cpg, "pass1") { override def run(dst: DiffGraphBuilder): Unit = { val file1 = NewFile().name("foo") val file2 = NewFile().name("bar") From 6dd37e77d82ba5d246878b4e65f5c6082ff55e3f Mon Sep 17 00:00:00 2001 From: Markus Lottmann Date: Fri, 2 Aug 2024 15:10:04 +0200 Subject: [PATCH 05/13] Remove unused test files. (#1782) --- resources/testcode/jars-pregenerated/hello-shiftleft-0.0.5.jar | 3 --- resources/testcode/sources/binding/BindingTest.java | 3 --- resources/testcode/sources/expression/TestGraph.java | 3 --- resources/testcode/sources/file/FileTest.java | 3 --- resources/testcode/sources/memberaccesslinker/TestGraph.java | 3 --- resources/testcode/sources/method/TestGraph.java | 3 --- .../testcode/sources/methodparameter/MethodParameterTest.java | 3 --- resources/testcode/sources/namespace/NamespaceTest.java | 3 --- resources/testcode/sources/splitmeup/InlineArguments.java | 3 --- resources/testcode/sources/splitmeup/TestGraph.java | 3 --- resources/testcode/sources/type/ClassHierarchyTest.java | 3 --- resources/testcode/sources/type/ClassMemberTest.java | 3 --- 12 files changed, 36 deletions(-) delete mode 100644 resources/testcode/jars-pregenerated/hello-shiftleft-0.0.5.jar delete mode 100644 resources/testcode/sources/binding/BindingTest.java delete mode 100644 resources/testcode/sources/expression/TestGraph.java delete mode 100644 resources/testcode/sources/file/FileTest.java delete mode 100644 resources/testcode/sources/memberaccesslinker/TestGraph.java delete mode 100644 resources/testcode/sources/method/TestGraph.java delete mode 100644 resources/testcode/sources/methodparameter/MethodParameterTest.java delete mode 100644 resources/testcode/sources/namespace/NamespaceTest.java delete mode 100644 resources/testcode/sources/splitmeup/InlineArguments.java delete mode 100644 resources/testcode/sources/splitmeup/TestGraph.java delete mode 100644 resources/testcode/sources/type/ClassHierarchyTest.java delete mode 100644 resources/testcode/sources/type/ClassMemberTest.java diff --git a/resources/testcode/jars-pregenerated/hello-shiftleft-0.0.5.jar b/resources/testcode/jars-pregenerated/hello-shiftleft-0.0.5.jar deleted file mode 100644 index d8fc0d265..000000000 --- a/resources/testcode/jars-pregenerated/hello-shiftleft-0.0.5.jar +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:637856006e87ba06ca594960e733e0d86bcc9d049704002d78476e1be030aa47 -size 32496494 diff --git a/resources/testcode/sources/binding/BindingTest.java b/resources/testcode/sources/binding/BindingTest.java deleted file mode 100644 index 8d07a38c3..000000000 --- a/resources/testcode/sources/binding/BindingTest.java +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e77fbeea4faa6b453408554396acceef403281021c9a24bc934f32510767f97c -size 125 diff --git a/resources/testcode/sources/expression/TestGraph.java b/resources/testcode/sources/expression/TestGraph.java deleted file mode 100644 index ed27e6af9..000000000 --- a/resources/testcode/sources/expression/TestGraph.java +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a711c4507e3a67bede59e5b82304751856a1244916a676c231da8d2f89b580aa -size 156 diff --git a/resources/testcode/sources/file/FileTest.java b/resources/testcode/sources/file/FileTest.java deleted file mode 100644 index 7729c92f5..000000000 --- a/resources/testcode/sources/file/FileTest.java +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b9e22866c3a0fcd4c7de9910824fb63596e78f823d455bb6ac71cf4049e9020d -size 103 diff --git a/resources/testcode/sources/memberaccesslinker/TestGraph.java b/resources/testcode/sources/memberaccesslinker/TestGraph.java deleted file mode 100644 index 84cfebf8c..000000000 --- a/resources/testcode/sources/memberaccesslinker/TestGraph.java +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:94e6b92e45a5d584ccdb8c2d6124c780842653d5bd63a9b7b35caae7ac893a53 -size 238 diff --git a/resources/testcode/sources/method/TestGraph.java b/resources/testcode/sources/method/TestGraph.java deleted file mode 100644 index 9a0587823..000000000 --- a/resources/testcode/sources/method/TestGraph.java +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3dd958a19baf6a013bf8778dd255421acbd1eb1e35d457cad3f7ad99b415ab6a -size 518 diff --git a/resources/testcode/sources/methodparameter/MethodParameterTest.java b/resources/testcode/sources/methodparameter/MethodParameterTest.java deleted file mode 100644 index 43fc867fb..000000000 --- a/resources/testcode/sources/methodparameter/MethodParameterTest.java +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8e4e8e2524ce4f89c6faada16bc8d143b8200b66687233edb349da0f2d61506e -size 201 diff --git a/resources/testcode/sources/namespace/NamespaceTest.java b/resources/testcode/sources/namespace/NamespaceTest.java deleted file mode 100644 index 01aadba6b..000000000 --- a/resources/testcode/sources/namespace/NamespaceTest.java +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f784c3471f3b34c38b82b19e30a71957029816d1fec60eb3114bf912ebe6e796 -size 73 diff --git a/resources/testcode/sources/splitmeup/InlineArguments.java b/resources/testcode/sources/splitmeup/InlineArguments.java deleted file mode 100644 index ba4d3096e..000000000 --- a/resources/testcode/sources/splitmeup/InlineArguments.java +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8ae3d3e51cf49bc5dd8d32e6367cce2d17ff308c3bdefd2171936c1210951e7f -size 793 diff --git a/resources/testcode/sources/splitmeup/TestGraph.java b/resources/testcode/sources/splitmeup/TestGraph.java deleted file mode 100644 index beb4a4097..000000000 --- a/resources/testcode/sources/splitmeup/TestGraph.java +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1bc1b515ee82b74a439db1bc33422e6868b305a61e6b6edbe45127aa7a761846 -size 278 diff --git a/resources/testcode/sources/type/ClassHierarchyTest.java b/resources/testcode/sources/type/ClassHierarchyTest.java deleted file mode 100644 index 6cd6851cd..000000000 --- a/resources/testcode/sources/type/ClassHierarchyTest.java +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8ce26a4d1b6d56d4ff5b4772e3e8b3e1ae4b39e686c889864ce4c1a0b7ae10c0 -size 333 diff --git a/resources/testcode/sources/type/ClassMemberTest.java b/resources/testcode/sources/type/ClassMemberTest.java deleted file mode 100644 index 966192e50..000000000 --- a/resources/testcode/sources/type/ClassMemberTest.java +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:db96848489252452b75333accca343cade22650d293a85a87d3742c5c6db42ce -size 180 From 3e9c83c30baee783fbc76cb8f6d19a36bd6931a9 Mon Sep 17 00:00:00 2001 From: Markus Lottmann Date: Mon, 5 Aug 2024 11:18:02 +0200 Subject: [PATCH 06/13] Bump flatgraph. (#1783) --- build.sbt | 2 +- .../shiftleft/codepropertygraph/generated/GraphSchema.scala | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.sbt b/build.sbt index 3f2c65897..cbaf5733a 100644 --- a/build.sbt +++ b/build.sbt @@ -1,7 +1,7 @@ name := "codepropertygraph" // parsed by project/Versions.scala, updated by updateDependencies.sh -val flatgraphVersion = "0.0.81" +val flatgraphVersion = "0.0.86" inThisBuild( List( 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 98dc997a4..ae3b63952 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala @@ -50,7 +50,7 @@ object GraphSchema extends flatgraph.Schema { "UNKNOWN" ) val nodeKindByLabel = nodeLabels.zipWithIndex.toMap - val edgeLabels = Array( + val edgeLabels: Array[String] = Array( "ALIAS_OF", "ARGUMENT", "AST", @@ -236,7 +236,7 @@ object GraphSchema extends flatgraph.Schema { size => new Array[flatgraph.GNode](size), size => new Array[flatgraph.GNode](size) ) - val normalNodePropertyNames = Array( + val normalNodePropertyNames: Array[String] = Array( "ALIAS_TYPE_FULL_NAME", "ARGUMENT_INDEX", "ARGUMENT_NAME", From fdea40501030878c24e72f1a041d8342e0bf62ae Mon Sep 17 00:00:00 2001 From: Markus Lottmann Date: Mon, 5 Aug 2024 17:57:01 +0200 Subject: [PATCH 07/13] Cleanup: Remove language constant for SOLIDITY. (#1780) * Cleanup: Remove language constant for SOLIDITY. This frontend was never introduced to joern and thus we do not need the constant. --- .../shiftleft/codepropertygraph/generated/Languages.java | 4 ---- .../io/shiftleft/codepropertygraph/schema/MetaData.scala | 7 +------ 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Languages.java b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Languages.java index 5be3dac83..e2dceeb0d 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Languages.java +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/Languages.java @@ -50,9 +50,6 @@ public class Languages { /** Source-based JS frontend based on Babel */ public static final String JSSRC = "JSSRC"; -/** Solidity language frontend */ -public static final String SOLIDITY = "SOLIDITY"; - /** Source-based frontend for Ruby */ public static final String RUBYSRC = "RUBYSRC"; @@ -78,7 +75,6 @@ public class Languages { add(JAVASRC); add(PYTHONSRC); add(JSSRC); -add(SOLIDITY); add(RUBYSRC); add(SWIFTSRC); add(CSHARPSRC); diff --git a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/MetaData.scala b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/MetaData.scala index cadb9e3a9..f853eff39 100644 --- a/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/MetaData.scala +++ b/schema/src/main/scala/io/shiftleft/codepropertygraph/schema/MetaData.scala @@ -118,12 +118,7 @@ object MetaData extends SchemaBase { valueType = ValueType.String, comment = "Source-based JS frontend based on Babel" ).protoId(15), - Constant( - name = "SOLIDITY", - value = "SOLIDITY", - valueType = ValueType.String, - comment = "Solidity language frontend" - ).protoId(16), + // Removed protoId 16. Used to be "Solidity". Constant( name = "RUBYSRC", value = "RUBYSRC", From ddb766ba41c23c2537a543e7cbe173c0a60103c2 Mon Sep 17 00:00:00 2001 From: Suchakra Sharma Date: Tue, 6 Aug 2024 20:13:45 -0400 Subject: [PATCH 08/13] misc fixes in passes for build * remove ConcurrentWriterCpgPass which we thought we would need * adjust ForkJoinParallelCpgPassNewTests timeout tests * remove all overflowdb usage --- build.sbt | 4 +- .../scala/io/shiftleft/passes/CpgPass.scala | 23 +-- .../io/shiftleft/passes/ParallelCpgPass.scala | 164 ------------------ .../passes/ParallelCpgPassNewTests.scala | 107 +----------- .../generated/GraphSchema.scala | 4 +- 5 files changed, 17 insertions(+), 285 deletions(-) delete mode 100644 codepropertygraph/src/main/scala/io/shiftleft/passes/ParallelCpgPass.scala diff --git a/build.sbt b/build.sbt index 341acab20..71e42f6cc 100644 --- a/build.sbt +++ b/build.sbt @@ -1,7 +1,7 @@ name := "codepropertygraph" // parsed by project/Versions.scala, updated by updateDependencies.sh -val flatgraphVersion = "0.1.2" +val flatgraphVersion = "0.1.3" inThisBuild( List( @@ -83,4 +83,4 @@ credentials += "maven.pkg.github.com", "Privado-Inc", sys.env.getOrElse("GITHUB_TOKEN", "N/A") - ) \ No newline at end of file + ) diff --git a/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala b/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala index 0c038975f..75705c5b3 100644 --- a/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala +++ b/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala @@ -51,23 +51,9 @@ abstract class CpgPass(cpg: Cpg, outName: String = "") extends ForkJoinParallelC * methods. This may be better than using the constructor or GC, because e.g. SCPG chains of passes construct * passes eagerly, and releases them only when the entire chain has run. * */ -abstract class ForkJoinParallelCpgPass[T <: AnyRef](cpg: Cpg, @nowarn outName: String = "") extends CpgPassBase { - type DiffGraphBuilder = io.shiftleft.codepropertygraph.generated.DiffGraphBuilder - // generate Array of parts that can be processed in parallel - def generateParts(): Array[? <: AnyRef] - // setup large data structures, acquire external resources - def init(): Unit = {} - // release large data structures and external resources - def finish(): Unit = {} - // main function: add desired changes to builder - def runOnPart(builder: DiffGraphBuilder, part: T): Unit - // Override this to disable parallelism of passes. Useful for debugging. - def isParallel: Boolean = true - abstract class ForkJoinParallelCpgPassWithTimeout[T <: AnyRef]( cpg: Cpg, @nowarn outName: String = "", - keyPool: Option[KeyPool] = None, timeout: Long = -1 ) extends NewStyleCpgPassBaseWithTimeout[T](timeout) { @@ -111,6 +97,11 @@ abstract class ForkJoinParallelCpgPassWithTimeout[T <: AnyRef]( } } + @deprecated("Please use createAndApply") + override def createApplySerializeAndStore(serializedCpg: SerializedCpg, prefix: String = ""): Unit = { + createAndApply() + } + } abstract class ForkJoinParallelCpgPass[T <: AnyRef](cpg: Cpg, @nowarn outName: String = "") extends CpgPassBase { @@ -213,7 +204,7 @@ abstract class ForkJoinParallelCpgPass[T <: AnyRef](cpg: Cpg, @nowarn outName: S } abstract class NewStyleCpgPassBaseWithTimeout[T <: AnyRef](timeout: Long) extends CpgPassBase { - type DiffGraphBuilder = overflowdb.BatchedUpdate.DiffGraphBuilder + type DiffGraphBuilder = io.shiftleft.codepropertygraph.generated.DiffGraphBuilder // generate Array of parts that can be processed in parallel def generateParts(): Array[? <: AnyRef] @@ -232,7 +223,7 @@ abstract class NewStyleCpgPassBaseWithTimeout[T <: AnyRef](timeout: Long) extend override def createAndApply(): Unit = createApplySerializeAndStore(null) - override def runWithBuilder(externalBuilder: BatchedUpdate.DiffGraphBuilder): Int = { + override def runWithBuilder(externalBuilder: DiffGraphBuilder): Int = { try { init() val parts = generateParts() diff --git a/codepropertygraph/src/main/scala/io/shiftleft/passes/ParallelCpgPass.scala b/codepropertygraph/src/main/scala/io/shiftleft/passes/ParallelCpgPass.scala deleted file mode 100644 index 22850945f..000000000 --- a/codepropertygraph/src/main/scala/io/shiftleft/passes/ParallelCpgPass.scala +++ /dev/null @@ -1,164 +0,0 @@ -package io.shiftleft.passes -import io.shiftleft.SerializedCpg -import io.shiftleft.codepropertygraph.generated.Cpg -import io.shiftleft.utils.{ExecutionContextProvider, StatsLogger} -import org.slf4j.MDC - -import java.util.concurrent.LinkedBlockingQueue -import scala.annotation.nowarn -import scala.collection.mutable -import scala.concurrent.duration.Duration -import scala.concurrent.{Await, ExecutionContext, Future} - -/* ConcurrentWriterCpgPass is a possible replacement for ParallelCpgPass and NewStylePass. - * - * Instead of returning an Iterator, generateParts() returns an Array. This means that the entire collection - * of parts must live on the heap at the same time; on the other hand, there are no possible issues with iterator invalidation, - * e.g. when running over all METHOD nodes and deleting some of them. - * - * Changes are applied sequentially, in the same order as the output of `runOnParts`, as opposed to `ParallelCpgPass`, - * where the ordering of change application is non-deterministic. For this reason, ConcurrentWriterCpgPass only accepts a single KeyPool. - * - * However, as opposed to NewStylePass, changes are not buffered and applied in one go; instead, they are applied as the respective - * `runOnPart` finishes, concurrently with other `runOnPart` invocations. - * - * Compared to NewStylePass, this avoids excessive peak memory consumption. On the other hand, `runOnPart` sees the CPG - * in an intermediate state: No promises are made about which previous changes are already applied; and changes are - * applied concurrently, such that all reads from the graph are potential race conditions. Furthermore, this variant has - * higher constant overhead per part than NewStylePass, i.e. is better suited to passes that create few large diffs. - * - * - * Initialization and cleanup of external resources or large datastructures can be done in the `init()` and `finish()` - * methods. This may be better than using the constructor or GC, because e.g. SCPG chains of passes construct - * passes eagerly, and releases them only when the entire chain has run. - * */ -object ConcurrentWriterCpgPass { - private val writerQueueCapacity = 4 - private val producerQueueCapacity = 2 + 4 * Runtime.getRuntime().availableProcessors() -} -abstract class ConcurrentWriterCpgPass[T <: AnyRef]( - cpg: Cpg, - @nowarn outName: String = "", - keyPool: Option[KeyPool] = None -) extends NewStyleCpgPassBase[T] { - - @volatile var nDiffT = -1 - - /** WARNING: runOnPart is executed in parallel to committing of graph modifications. The upshot is that it is unsafe - * to read ANY data from cpg, on pain of bad race conditions - * - * Only use ConcurrentWriterCpgPass if you are _very_ sure that you avoid races. - * - * E.g. adding a CFG edge to node X races with reading an AST edge of node X. - */ - override def createApplySerializeAndStore(serializedCpg: SerializedCpg, prefix: String = ""): Unit = { - import ConcurrentWriterCpgPass.producerQueueCapacity - baseLogger.info(s"Start of enhancement: $name") - StatsLogger.initiateNewStage(getClass.getSimpleName, Some(name), getClass.getSuperclass.getSimpleName) - val nanosStart = System.nanoTime() - var nParts = 0 - var nDiff = 0 - nDiffT = -1 - init() - val parts = generateParts() - nParts = parts.size - val partIter = parts.iterator - val completionQueue = mutable.ArrayDeque[Future[overflowdb.BatchedUpdate.DiffGraph]]() - val writer = new Writer(MDC.getCopyOfContextMap()) - val writerThread = new Thread(writer) - writerThread.setName("Writer") - writerThread.start() - implicit val ec: ExecutionContext = ExecutionContextProvider.getExecutionContext - try { - try { - // The idea is that we have a ringbuffer completionQueue that contains the workunits that are currently in-flight. - // We add futures to the end of the ringbuffer, and take futures from the front. - // then we await the future from the front, and add it to the writer-queue. - // the end result is that we get deterministic output (esp. deterministic order of changes), while having up to one - // writer-thread and up to producerQueueCapacity many threads in-flight. - // as opposed to ParallelCpgPass, there is no race between diffgraph-generators to enqueue into the writer -- everything - // is nice and ordered. Downside is that a very slow part may gum up the works (i.e. the completionQueue fills up and threads go idle) - var done = false - while (!done && writer.raisedException == null) { - if (writer.raisedException != null) - throw writer.raisedException // will be wrapped with good stacktrace in the finally block - - if (completionQueue.size < producerQueueCapacity && partIter.hasNext) { - val next = partIter.next() - // todo: Verify that we get FIFO scheduling; otherwise, do something about it. - // if this e.g. used LIFO with 4 cores and 18 size of ringbuffer, then 3 cores may idle while we block on the front item. - completionQueue.append(Future.apply { - val builder = Cpg.newDiffGraphBuilder - runOnPart(builder, next.asInstanceOf[T]) - builder.build() - }) - } else if (completionQueue.nonEmpty) { - val future = completionQueue.removeHead() - val res = Await.result(future, Duration.Inf) - nDiff += res.size - writer.queue.put(Some(res)) - } else { - done = true - } - } - } finally { - try { - // if the writer died on us, then the queue might be full and we could deadlock - if (writer.raisedException == null) writer.queue.put(None) - writerThread.join() - // we need to reraise exceptions - if (writer.raisedException != null) - throw new RuntimeException("Failure in diffgraph application", writer.raisedException) - - } finally { finish() } - } - } finally { - // the nested finally is somewhat ugly -- but we promised to clean up with finish(), we want to include finish() - // in the reported timings, and we must have our final log message if finish() throws - - val nanosStop = System.nanoTime() - - baseLogger.info( - f"Enhancement $name completed in ${(nanosStop - nanosStart) * 1e-6}%.0f ms. ${nDiff}%d + ${nDiffT - nDiff}%d changes committed from ${nParts}%d parts." - ) - StatsLogger.endLastStage() - } - } - - private class Writer(mdc: java.util.Map[String, String]) extends Runnable { - - val queue = - new LinkedBlockingQueue[Option[overflowdb.BatchedUpdate.DiffGraph]](ConcurrentWriterCpgPass.writerQueueCapacity) - - @volatile var raisedException: Exception = null - - override def run(): Unit = { - try { - nDiffT = 0 - // logback chokes on null context maps - if (mdc != null) MDC.setContextMap(mdc) - var terminate = false - var index: Int = 0 - while (!terminate) { - queue.take() match { - case None => - baseLogger.debug("Shutting down WriterThread") - terminate = true - case Some(diffGraph) => - nDiffT += overflowdb.BatchedUpdate - .applyDiff(cpg.graph, diffGraph, keyPool.getOrElse(null), null) - .transitiveModifications() - index += 1 - } - } - } catch { - case exception: InterruptedException => baseLogger.warn("Interrupted WriterThread", exception) - case exc: Exception => - raisedException = exc - queue.clear() - throw exc - } - } - } - -} diff --git a/codepropertygraph/src/test/scala/io/shiftleft/passes/ParallelCpgPassNewTests.scala b/codepropertygraph/src/test/scala/io/shiftleft/passes/ParallelCpgPassNewTests.scala index 3f7a9829f..7cc459ea0 100644 --- a/codepropertygraph/src/test/scala/io/shiftleft/passes/ParallelCpgPassNewTests.scala +++ b/codepropertygraph/src/test/scala/io/shiftleft/passes/ParallelCpgPassNewTests.scala @@ -4,115 +4,20 @@ import better.files.File import io.shiftleft.SerializedCpg import io.shiftleft.codepropertygraph.generated.Cpg import io.shiftleft.codepropertygraph.generated.Properties +import io.shiftleft.codepropertygraph.generated.language.* import io.shiftleft.codepropertygraph.generated.nodes.{NewCall, NewFile} import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec -import overflowdb.traversal._ import java.nio.file.Files import scala.jdk.CollectionConverters._ -class ParallelCpgPassNewTests extends AnyWordSpec with Matchers { - - private object Fixture { - def apply(keyPools: Option[Iterator[KeyPool]] = None)(f: (Cpg, CpgPassBase) => Unit): Unit = { - val cpg = Cpg.empty - val pool = keyPools.flatMap(_.nextOption()) - class MyPass(cpg: Cpg) extends ConcurrentWriterCpgPass[String](cpg, "MyPass", pool) { - override def generateParts(): Array[String] = Array("foo", "bar") - - override def runOnPart(diffGraph: DiffGraphBuilder, part: String): Unit = { - diffGraph.addNode(NewFile().name(part)) - } - } - val pass = new MyPass(cpg) - f(cpg, pass) - } - } - - "ConcurrentWriterCpgPass" should { - "allow creating and applying result of pass" in Fixture() { (cpg, pass) => - pass.createAndApply() - cpg.graph.nodes.map(_.property(Properties.Name)).toSetMutable shouldBe Set("foo", "bar") - } - - "produce a serialized CPG file" in Fixture() { (_, pass) => - File.usingTemporaryFile("pass", ".zip") { file => - file.delete() - val filename = file.path.toString - val serializedCpg = new SerializedCpg(filename) - pass.createApplySerializeAndStore(serializedCpg) - serializedCpg.close() - file.exists shouldBe true - Files.size(file.path) should not be 0 - } - } - - val keyPools = Iterator(new IntervalKeyPool(10, 20), new IntervalKeyPool(30, 40)) - - "use only the first KeyPool for createAndApply" in Fixture(Some(keyPools)) { (cpg, pass) => - pass.createAndApply() - cpg.graph.V.asScala.map(_.id()).toSet shouldBe Set(10, 11) - } - - "fail for schema violations" in { - val cpg = Cpg.empty - val pass = new ConcurrentWriterCpgPass[String](cpg, "pass2") { - override def generateParts() = Array("a", "b") - override def runOnPart(diffGraph: DiffGraphBuilder, part: String): Unit = - part match { - case "a" => - // this is fine - diffGraph.addNode(NewFile().name(part)) - case "b" => - // schema violation - val file1 = NewFile().name("foo") - val file2 = NewFile().name("bar") - diffGraph - .addNode(file1) - .addNode(file2) - .addEdge(file1, file2, "illegal_edge_label") - - } - } - - // the above DiffGraph (part "b") is not schema conform, applying it must throw an exception - intercept[Exception] { - pass.createAndApply() - } - } - - "add NewNodes that are referenced in different parts only once" in { - val cpg = Cpg.empty - val pass = new ConcurrentWriterCpgPass[String](cpg, "pass2") { - val call1 = NewCall().name("call1") - val call2 = NewCall().name("call2") - val call3 = NewCall().name("call3") - - override def generateParts() = Array("a", "b") - override def runOnPart(diffGraph: DiffGraphBuilder, part: String): Unit = - part match { - case "a" => - diffGraph.addEdge(call1, call2, "AST") - case "b" => - diffGraph.addEdge(call2, call3, "AST") - } - } - pass.createAndApply() - cpg.graph.nodeCount() shouldBe 3 - } - } - -} - class ForkJoinParallelCpgPassNewTests extends AnyWordSpec with Matchers { private object Fixture { - def apply(keyPools: Option[Iterator[KeyPool]] = None, timeout: Long = -1)(f: (Cpg, CpgPassBase) => Unit): Unit = { - val cpg = Cpg.empty - val pool = keyPools.flatMap(_.nextOption()) - class MyPass(cpg: Cpg) - extends ForkJoinParallelCpgPassWithTimeout[String](cpg, "MyPass", pool, timeout = timeout) { + def apply(timeout: Long = -1)(f: (Cpg, CpgPassBase) => Unit): Unit = { + val cpg = Cpg.empty + class MyPass(cpg: Cpg) extends ForkJoinParallelCpgPassWithTimeout[String](cpg, "MyPass", timeout = timeout) { override def generateParts(): Array[String] = Range(1, 101).map(_.toString).toArray override def runOnPart(diffGraph: DiffGraphBuilder, part: String): Unit = { @@ -128,12 +33,12 @@ class ForkJoinParallelCpgPassNewTests extends AnyWordSpec with Matchers { "ForkJoinParallelPassWithTimeout" should { "generate partial result in case of timeout" in Fixture(timeout = 2) { (cpg, pass) => pass.createAndApply() - assert(cpg.graph.nodes.map(_.property(Properties.Name)).toList.size != 100) + assert(cpg.all.map(_.property(Properties.Name)).toList.size != 100) } "generate complete result without timeout" in Fixture() { (cpg, pass) => pass.createAndApply() - assert(cpg.graph.nodes.map(_.property(Properties.Name)).toList.size == 100) + assert(cpg.all.map(_.property(Properties.Name)).toList.size == 100) } } 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 ae3b63952..98dc997a4 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala @@ -50,7 +50,7 @@ object GraphSchema extends flatgraph.Schema { "UNKNOWN" ) val nodeKindByLabel = nodeLabels.zipWithIndex.toMap - val edgeLabels: Array[String] = Array( + val edgeLabels = Array( "ALIAS_OF", "ARGUMENT", "AST", @@ -236,7 +236,7 @@ object GraphSchema extends flatgraph.Schema { size => new Array[flatgraph.GNode](size), size => new Array[flatgraph.GNode](size) ) - val normalNodePropertyNames: Array[String] = Array( + val normalNodePropertyNames = Array( "ALIAS_TYPE_FULL_NAME", "ARGUMENT_INDEX", "ARGUMENT_NAME", From d7ea2f349ad0998799bbeb56c6cc37d39d260a4c Mon Sep 17 00:00:00 2001 From: Pandurang Patil <5101898+pandurangpatil@users.noreply.github.com> Date: Tue, 17 Sep 2024 19:06:12 +0530 Subject: [PATCH 09/13] used direct dependency of flatgraph instead of using forked version --- build.sbt | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/build.sbt b/build.sbt index 71e42f6cc..8bc479d9e 100644 --- a/build.sbt +++ b/build.sbt @@ -1,13 +1,17 @@ name := "codepropertygraph" // parsed by project/Versions.scala, updated by updateDependencies.sh -val flatgraphVersion = "0.1.3" +val flatgraphVersion = "0.0.89" inThisBuild( List( - organization := "io.shiftleft", - scalaVersion := "3.4.2", - resolvers ++= Seq("Github Package Registry" at "https://maven.pkg.github.com/Privado-Inc/flatgraph", Resolver.mavenLocal, "Sonatype OSS" at "https://oss.sonatype.org/content/repositories/public"), + organization := "io.shiftleft", + scalaVersion := "3.4.2", + resolvers ++= Seq( + "Github Package Registry" at "https://maven.pkg.github.com/Privado-Inc/flatgraph", + Resolver.mavenLocal, + "Sonatype OSS" at "https://oss.sonatype.org/content/repositories/public" + ), packageDoc / publishArtifact := true, packageSrc / publishArtifact := true, scmInfo := Some( @@ -41,7 +45,7 @@ ThisBuild / Test / javaOptions += s"-Duser.dir=${(ThisBuild / baseDirectory).val ThisBuild / libraryDependencies ++= Seq( "org.apache.logging.log4j" % "log4j-slf4j2-impl" % "2.19.0" % Optional, - "org.apache.logging.log4j" % "log4j-core" % "2.19.0" % Optional, + "org.apache.logging.log4j" % "log4j-core" % "2.19.0" % Optional // `Optional` means "not transitive", but still included in "stage/lib" ) @@ -55,7 +59,8 @@ lazy val codepropertygraph = Projects.codepropertygraph lazy val schema2json = Projects.schema2json ThisBuild / scalacOptions ++= Seq( - "-release", "8", + "-release", + "8", "-deprecation", "-feature", // "-explain", @@ -66,7 +71,8 @@ ThisBuild / scalacOptions ++= Seq( ThisBuild / javacOptions ++= Seq( "-g", // debug symbols - "--release", "8" + "--release", + "8" ) Global / onChangedBuildSource := ReloadOnSourceChanges From 3fe72ff370d82fbe40a1ccc2220cf38b4acdd3f9 Mon Sep 17 00:00:00 2001 From: KhemrajSingh Rathore Date: Fri, 20 Dec 2024 11:29:51 +0530 Subject: [PATCH 10/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c9ef62806..6a109a497 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![CI pipeline](https://github.com/ShiftLeftSecurity/codepropertygraph/actions/workflows/release.yml/badge.svg)](https://github.com/ShiftLeftSecurity/codepropertygraph/actions/workflows/release.yml) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.shiftleft/codepropertygraph_3/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.shiftleft/codepropertygraph_3) -# Code Property Graph - Specification and Tooling +# Code Property Graph - Specification and Tooling You can find a clickable specification at: From cabe9151d232fee25f2b237df8c1c7107ed0d82b Mon Sep 17 00:00:00 2001 From: Pandurang Patil <5101898+pandurangpatil@users.noreply.github.com> Date: Fri, 20 Dec 2024 14:58:07 +0530 Subject: [PATCH 11/13] Fixed the issue related to stats recorder. (#10) --- .../src/main/scala/io/shiftleft/passes/CpgPass.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala b/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala index 75705c5b3..3557a3874 100644 --- a/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala +++ b/codepropertygraph/src/main/scala/io/shiftleft/passes/CpgPass.scala @@ -119,6 +119,7 @@ abstract class ForkJoinParallelCpgPass[T <: AnyRef](cpg: Cpg, @nowarn outName: S override def createAndApply(): Unit = { baseLogger.info(s"Start of pass: $name") + StatsLogger.initiateNewStage(getClass.getSimpleName, Some(name), getClass.getSuperclass.getSimpleName) val nanosStart = System.nanoTime() var nParts = 0 var nanosBuilt = -1L @@ -151,6 +152,7 @@ abstract class ForkJoinParallelCpgPass[T <: AnyRef](cpg: Cpg, @nowarn outName: S baseLogger.info( f"Pass $name completed in ${(nanosStop - nanosStart) * 1e-6}%.0f ms (${fracRun}%.0f%% on mutations). ${nDiff}%d + ${nDiffT - nDiff}%d changes committed from ${nParts}%d parts." ) + StatsLogger.endLastStage() } } } From 4a975bb889a243ccf01f13bcaaa463d6dfbc4baa Mon Sep 17 00:00:00 2001 From: Pandurang Patil <5101898+pandurangpatil@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:24:35 +0530 Subject: [PATCH 12/13] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 6a109a497..33a96a5d0 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ # Code Property Graph - Specification and Tooling You can find a clickable specification at: - https://cpg.joern.io **Note: for first-time users, we recommend building "joern" at https://github.com/joernio/joern/ instead. It combines this repo with a C/C++ language frontend to construct a complete code analysis platform.** From 4acebcf91f230bb7c9b59d4691abb731e9555311 Mon Sep 17 00:00:00 2001 From: Khemraj Rathore Date: Fri, 20 Dec 2024 15:32:55 +0530 Subject: [PATCH 13/13] fix scalafmt --- .../shiftleft/codepropertygraph/generated/GraphSchema.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 98dc997a4..ae3b63952 100644 --- a/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala +++ b/domainClasses/src/main/generated/io/shiftleft/codepropertygraph/generated/GraphSchema.scala @@ -50,7 +50,7 @@ object GraphSchema extends flatgraph.Schema { "UNKNOWN" ) val nodeKindByLabel = nodeLabels.zipWithIndex.toMap - val edgeLabels = Array( + val edgeLabels: Array[String] = Array( "ALIAS_OF", "ARGUMENT", "AST", @@ -236,7 +236,7 @@ object GraphSchema extends flatgraph.Schema { size => new Array[flatgraph.GNode](size), size => new Array[flatgraph.GNode](size) ) - val normalNodePropertyNames = Array( + val normalNodePropertyNames: Array[String] = Array( "ALIAS_TYPE_FULL_NAME", "ARGUMENT_INDEX", "ARGUMENT_NAME",