From bddad33959d57b778528736d18a5210daa1d7e36 Mon Sep 17 00:00:00 2001 From: Prabhu Subramanian Date: Wed, 11 Oct 2023 11:48:30 +0100 Subject: [PATCH] Reachables slice Signed-off-by: Prabhu Subramanian --- .github/workflows/repotests.yml | 15 + README.md | 4 + build.sbt | 4 +- specification/atom.proto | 37 +- .../go/github.com/AppThreat/atom/atom.pb.go | 1299 +- .../bindings/java/io/appthreat/atom/Atom.java | 11597 ++++++++++------ specification/bindings/python/atom.py | 49 +- specification/docs/spec.docbook | 373 +- specification/docs/spec.html | 338 +- specification/docs/spec.md | 1311 +- specification/gen-bindings.sh | 8 +- specification/schemas/DataFlowSlice.json | 38 +- specification/schemas/Nodes.json | 171 + specification/schemas/ReachableSlice.json | 214 + src/main/scala/io/appthreat/atom/Atom.scala | 40 +- .../scala/io/appthreat/atom/package.scala | 3 + .../atom/slicing/DataFlowSlicing.scala | 13 +- .../atom/slicing/ReachableSlicing.scala | 170 + .../io/appthreat/atom/slicing/package.scala | 21 +- wrapper/nodejs/index.js | 2 +- wrapper/nodejs/package-lock.json | 4 +- wrapper/nodejs/package.json | 2 +- 22 files changed, 9773 insertions(+), 5940 deletions(-) create mode 100644 specification/schemas/Nodes.json create mode 100644 specification/schemas/ReachableSlice.json create mode 100644 src/main/scala/io/appthreat/atom/slicing/ReachableSlicing.scala diff --git a/.github/workflows/repotests.yml b/.github/workflows/repotests.yml index 7addcf6..90d807f 100644 --- a/.github/workflows/repotests.yml +++ b/.github/workflows/repotests.yml @@ -3,6 +3,7 @@ on: push: branches: - main + - feature/* workflow_dispatch: jobs: jvm-testing: @@ -31,6 +32,10 @@ jobs: with: repository: 'libexpat/libexpat' path: 'repotests/libexpat' + - uses: actions/checkout@v3 + with: + repository: 'HooliCorp/java-sec-code' + path: 'repotests/java-sec-code' - uses: actions/checkout@v3 with: repository: 'HooliCorp/DjanGoat' @@ -41,6 +46,10 @@ jobs: with: distribution: 'zulu' java-version: ${{ matrix.java-version }} + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: '20.x' - run: | sbt stage astGenDlTask ./atom.sh -o /tmp/java.atom -l java $GITHUB_WORKSPACE/repotests/shiftleft-java-example -Dlog4j.configurationFile=log4j2.xml @@ -63,3 +72,9 @@ jobs: ./atom.sh usages -o /tmp/c3.atom -l c $GITHUB_WORKSPACE/repotests/libexpat -Dlog4j.configurationFile=log4j2.xml --slice-outfile /tmp/c.usages.json env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - run: | + sudo npm install -g @cyclonedx/cdxgen --omit=optional + cdxgen -t java --deep -o java-sec-code/bom.json java-sec-code + ./atom.sh reachables -o /tmp/java-sec-code.atom -l java $GITHUB_WORKSPACE/repotests/java-sec-code -Dlog4j.configurationFile=log4j2.xml --slice-outfile /tmp/java-sec-code.reachables.json + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index d7abca8..a19a450 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,10 @@ Command: usages [options] Extract local variable and parameter usages --min-num-calls the minimum number of calls required for a usage slice - defaults to 1. --include-source includes method source code in the slices - defaults to false. +Command: reachables [options] +Extract reachable data-flow slices based on automated framework tags +--source-tag source tag - defaults to framework-input. +--sink-tag sink tag - defaults to framework-output. --help display this help message ``` diff --git a/build.sbt b/build.sbt index 4ab0045..247fbab 100644 --- a/build.sbt +++ b/build.sbt @@ -1,9 +1,9 @@ name := "atom" ThisBuild / organization := "io.appthreat" -ThisBuild / version := "1.2.5" +ThisBuild / version := "1.5.0" ThisBuild / scalaVersion := "3.3.1" -val chenVersion = "0.0.11" +val chenVersion = "0.0.13" lazy val atom = Projects.atom diff --git a/specification/atom.proto b/specification/atom.proto index b5b601d..cfce533 100644 --- a/specification/atom.proto +++ b/specification/atom.proto @@ -924,14 +924,7 @@ message UsageSlice { repeated UserDefinedTypes userDefinedTypes = 2; } -/** - * DataFlow slices offers a list of nodes and edges exported from data dependency graph - * - * ![Data Flow slices overview](./docs/Data%20Flows.png) - */ -message DataFlowSlice { - - message Nodes { +message Nodes { // Id of the node uint32 id = 1; // Label @@ -960,7 +953,16 @@ message DataFlowSlice { uint32 lineNumber = 13; // Column number uint32 columnNumber = 14; - } + // Tags. Can contain simple names including package url + string tags = 15; +} + +/** + * DataFlow slices offers a list of nodes and edges exported from data dependency graph + * + * ![Data Flow slices overview](./docs/Data%20Flows.png) + */ +message DataFlowSlice { message Edges { // Source node id @@ -989,3 +991,20 @@ message DataFlowSlice { Graph graph = 1; Paths path = 2; } + +/** + * Reachables slices offers a list of reachable nodes based on automated tags exported from data dependency graph + */ +message ReachableSlice { + + message Reachables { + repeated Nodes nodes = 1; + } + + message Purls { + repeated string purls = 1; + } + + Reachables reachables = 1; + Purls purls = 2; +} diff --git a/specification/bindings/go/github.com/AppThreat/atom/atom.pb.go b/specification/bindings/go/github.com/AppThreat/atom/atom.pb.go index fbc0953..5cb38f5 100644 --- a/specification/bindings/go/github.com/AppThreat/atom/atom.pb.go +++ b/specification/bindings/go/github.com/AppThreat/atom/atom.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.26.0 // protoc v4.23.3 // source: atom.proto @@ -2140,6 +2140,180 @@ func (x *UsageSlice) GetUserDefinedTypes() []*UsageSlice_UserDefinedTypes { return nil } +type Nodes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Id of the node + Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + // Label + Label NodeType `protobuf:"varint,2,opt,name=label,proto3,enum=atom.NodeType" json:"label,omitempty"` + // Name of the call or identifier or parameter + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + // Full name of the call + FullName string `protobuf:"bytes,4,opt,name=fullName,proto3" json:"fullName,omitempty"` + // Method signature of the call + Signature string `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` + // Boolean to indicate if this call belongs to an external method + IsExternal bool `protobuf:"varint,6,opt,name=isExternal,proto3" json:"isExternal,omitempty"` + // Source code + Code string `protobuf:"bytes,7,opt,name=code,proto3" json:"code,omitempty"` + // Type full name + TypeFullName string `protobuf:"bytes,8,opt,name=typeFullName,proto3" json:"typeFullName,omitempty"` + // Parent method name + ParentMethodName string `protobuf:"bytes,9,opt,name=parentMethodName,proto3" json:"parentMethodName,omitempty"` + // Parent filename + ParentFileName string `protobuf:"bytes,10,opt,name=parentFileName,proto3" json:"parentFileName,omitempty"` + // Parent package name + ParentPackageName string `protobuf:"bytes,11,opt,name=parentPackageName,proto3" json:"parentPackageName,omitempty"` + // Parent class name + ParentClassName string `protobuf:"bytes,12,opt,name=parentClassName,proto3" json:"parentClassName,omitempty"` + // Line number + LineNumber uint32 `protobuf:"varint,13,opt,name=lineNumber,proto3" json:"lineNumber,omitempty"` + // Column number + ColumnNumber uint32 `protobuf:"varint,14,opt,name=columnNumber,proto3" json:"columnNumber,omitempty"` + // Tags. Can contain simple names including package url + Tags string `protobuf:"bytes,15,opt,name=tags,proto3" json:"tags,omitempty"` +} + +func (x *Nodes) Reset() { + *x = Nodes{} + if protoimpl.UnsafeEnabled { + mi := &file_atom_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Nodes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Nodes) ProtoMessage() {} + +func (x *Nodes) ProtoReflect() protoreflect.Message { + mi := &file_atom_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Nodes.ProtoReflect.Descriptor instead. +func (*Nodes) Descriptor() ([]byte, []int) { + return file_atom_proto_rawDescGZIP(), []int{14} +} + +func (x *Nodes) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *Nodes) GetLabel() NodeType { + if x != nil { + return x.Label + } + return NodeType_UNKNOWN_NODE_TYPE +} + +func (x *Nodes) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Nodes) GetFullName() string { + if x != nil { + return x.FullName + } + return "" +} + +func (x *Nodes) GetSignature() string { + if x != nil { + return x.Signature + } + return "" +} + +func (x *Nodes) GetIsExternal() bool { + if x != nil { + return x.IsExternal + } + return false +} + +func (x *Nodes) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Nodes) GetTypeFullName() string { + if x != nil { + return x.TypeFullName + } + return "" +} + +func (x *Nodes) GetParentMethodName() string { + if x != nil { + return x.ParentMethodName + } + return "" +} + +func (x *Nodes) GetParentFileName() string { + if x != nil { + return x.ParentFileName + } + return "" +} + +func (x *Nodes) GetParentPackageName() string { + if x != nil { + return x.ParentPackageName + } + return "" +} + +func (x *Nodes) GetParentClassName() string { + if x != nil { + return x.ParentClassName + } + return "" +} + +func (x *Nodes) GetLineNumber() uint32 { + if x != nil { + return x.LineNumber + } + return 0 +} + +func (x *Nodes) GetColumnNumber() uint32 { + if x != nil { + return x.ColumnNumber + } + return 0 +} + +func (x *Nodes) GetTags() string { + if x != nil { + return x.Tags + } + return "" +} + // * // DataFlow slices offers a list of nodes and edges exported from data dependency graph // @@ -2156,7 +2330,7 @@ type DataFlowSlice struct { func (x *DataFlowSlice) Reset() { *x = DataFlowSlice{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[14] + mi := &file_atom_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2169,7 +2343,7 @@ func (x *DataFlowSlice) String() string { func (*DataFlowSlice) ProtoMessage() {} func (x *DataFlowSlice) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[14] + mi := &file_atom_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2182,7 +2356,7 @@ func (x *DataFlowSlice) ProtoReflect() protoreflect.Message { // Deprecated: Use DataFlowSlice.ProtoReflect.Descriptor instead. func (*DataFlowSlice) Descriptor() ([]byte, []int) { - return file_atom_proto_rawDescGZIP(), []int{14} + return file_atom_proto_rawDescGZIP(), []int{15} } func (x *DataFlowSlice) GetGraph() *DataFlowSlice_Graph { @@ -2199,6 +2373,63 @@ func (x *DataFlowSlice) GetPath() *DataFlowSlice_Paths { return nil } +// * +// Reachables slices offers a list of reachable nodes based on automated tags exported from data dependency graph +type ReachableSlice struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Reachables *ReachableSlice_Reachables `protobuf:"bytes,1,opt,name=reachables,proto3" json:"reachables,omitempty"` + Purls *ReachableSlice_Purls `protobuf:"bytes,2,opt,name=purls,proto3" json:"purls,omitempty"` +} + +func (x *ReachableSlice) Reset() { + *x = ReachableSlice{} + if protoimpl.UnsafeEnabled { + mi := &file_atom_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReachableSlice) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReachableSlice) ProtoMessage() {} + +func (x *ReachableSlice) ProtoReflect() protoreflect.Message { + mi := &file_atom_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReachableSlice.ProtoReflect.Descriptor instead. +func (*ReachableSlice) Descriptor() ([]byte, []int) { + return file_atom_proto_rawDescGZIP(), []int{16} +} + +func (x *ReachableSlice) GetReachables() *ReachableSlice_Reachables { + if x != nil { + return x.Reachables + } + return nil +} + +func (x *ReachableSlice) GetPurls() *ReachableSlice_Purls { + if x != nil { + return x.Purls + } + return nil +} + type CpgStruct_Node struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2212,7 +2443,7 @@ type CpgStruct_Node struct { func (x *CpgStruct_Node) Reset() { *x = CpgStruct_Node{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[15] + mi := &file_atom_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2225,7 +2456,7 @@ func (x *CpgStruct_Node) String() string { func (*CpgStruct_Node) ProtoMessage() {} func (x *CpgStruct_Node) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[15] + mi := &file_atom_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2279,7 +2510,7 @@ type CpgStruct_Edge struct { func (x *CpgStruct_Edge) Reset() { *x = CpgStruct_Edge{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[16] + mi := &file_atom_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2292,7 +2523,7 @@ func (x *CpgStruct_Edge) String() string { func (*CpgStruct_Edge) ProtoMessage() {} func (x *CpgStruct_Edge) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[16] + mi := &file_atom_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2349,7 +2580,7 @@ type CpgStruct_Node_Property struct { func (x *CpgStruct_Node_Property) Reset() { *x = CpgStruct_Node_Property{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[17] + mi := &file_atom_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2362,7 +2593,7 @@ func (x *CpgStruct_Node_Property) String() string { func (*CpgStruct_Node_Property) ProtoMessage() {} func (x *CpgStruct_Node_Property) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[17] + mi := &file_atom_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2405,7 +2636,7 @@ type CpgStruct_Edge_Property struct { func (x *CpgStruct_Edge_Property) Reset() { *x = CpgStruct_Edge_Property{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[18] + mi := &file_atom_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2418,7 +2649,7 @@ func (x *CpgStruct_Edge_Property) String() string { func (*CpgStruct_Edge_Property) ProtoMessage() {} func (x *CpgStruct_Edge_Property) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[18] + mi := &file_atom_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2459,7 +2690,7 @@ type DiffGraph_RemoveNode struct { func (x *DiffGraph_RemoveNode) Reset() { *x = DiffGraph_RemoveNode{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[19] + mi := &file_atom_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2472,7 +2703,7 @@ func (x *DiffGraph_RemoveNode) String() string { func (*DiffGraph_RemoveNode) ProtoMessage() {} func (x *DiffGraph_RemoveNode) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[19] + mi := &file_atom_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2508,7 +2739,7 @@ type DiffGraph_RemoveNodeProperty struct { func (x *DiffGraph_RemoveNodeProperty) Reset() { *x = DiffGraph_RemoveNodeProperty{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[20] + mi := &file_atom_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2521,7 +2752,7 @@ func (x *DiffGraph_RemoveNodeProperty) String() string { func (*DiffGraph_RemoveNodeProperty) ProtoMessage() {} func (x *DiffGraph_RemoveNodeProperty) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[20] + mi := &file_atom_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2572,7 +2803,7 @@ type DiffGraph_RemoveEdge struct { func (x *DiffGraph_RemoveEdge) Reset() { *x = DiffGraph_RemoveEdge{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[21] + mi := &file_atom_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2585,7 +2816,7 @@ func (x *DiffGraph_RemoveEdge) String() string { func (*DiffGraph_RemoveEdge) ProtoMessage() {} func (x *DiffGraph_RemoveEdge) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[21] + mi := &file_atom_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2644,7 +2875,7 @@ type DiffGraph_RemoveEdgeProperty struct { func (x *DiffGraph_RemoveEdgeProperty) Reset() { *x = DiffGraph_RemoveEdgeProperty{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[22] + mi := &file_atom_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2657,7 +2888,7 @@ func (x *DiffGraph_RemoveEdgeProperty) String() string { func (*DiffGraph_RemoveEdgeProperty) ProtoMessage() {} func (x *DiffGraph_RemoveEdgeProperty) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[22] + mi := &file_atom_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2729,7 +2960,7 @@ type DiffGraph_Entry struct { func (x *DiffGraph_Entry) Reset() { *x = DiffGraph_Entry{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[23] + mi := &file_atom_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2742,7 +2973,7 @@ func (x *DiffGraph_Entry) String() string { func (*DiffGraph_Entry) ProtoMessage() {} func (x *DiffGraph_Entry) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[23] + mi := &file_atom_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2897,7 +3128,7 @@ type UsageSlice_TargetObj struct { func (x *UsageSlice_TargetObj) Reset() { *x = UsageSlice_TargetObj{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[24] + mi := &file_atom_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2910,7 +3141,7 @@ func (x *UsageSlice_TargetObj) String() string { func (*UsageSlice_TargetObj) ProtoMessage() {} func (x *UsageSlice_TargetObj) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[24] + mi := &file_atom_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3002,7 +3233,7 @@ type UsageSlice_DefinedBy struct { func (x *UsageSlice_DefinedBy) Reset() { *x = UsageSlice_DefinedBy{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[25] + mi := &file_atom_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3015,7 +3246,7 @@ func (x *UsageSlice_DefinedBy) String() string { func (*UsageSlice_DefinedBy) ProtoMessage() {} func (x *UsageSlice_DefinedBy) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[25] + mi := &file_atom_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3112,7 +3343,7 @@ type UsageSlice_InvokedCalls struct { func (x *UsageSlice_InvokedCalls) Reset() { *x = UsageSlice_InvokedCalls{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[26] + mi := &file_atom_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3125,7 +3356,7 @@ func (x *UsageSlice_InvokedCalls) String() string { func (*UsageSlice_InvokedCalls) ProtoMessage() {} func (x *UsageSlice_InvokedCalls) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[26] + mi := &file_atom_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3217,7 +3448,7 @@ type UsageSlice_ArgToCalls struct { func (x *UsageSlice_ArgToCalls) Reset() { *x = UsageSlice_ArgToCalls{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[27] + mi := &file_atom_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3230,7 +3461,7 @@ func (x *UsageSlice_ArgToCalls) String() string { func (*UsageSlice_ArgToCalls) ProtoMessage() {} func (x *UsageSlice_ArgToCalls) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[27] + mi := &file_atom_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3317,7 +3548,7 @@ type UsageSlice_ObjectUsageSlice struct { func (x *UsageSlice_ObjectUsageSlice) Reset() { *x = UsageSlice_ObjectUsageSlice{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[28] + mi := &file_atom_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3330,7 +3561,7 @@ func (x *UsageSlice_ObjectUsageSlice) String() string { func (*UsageSlice_ObjectUsageSlice) ProtoMessage() {} func (x *UsageSlice_ObjectUsageSlice) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[28] + mi := &file_atom_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3396,7 +3627,7 @@ type UsageSlice_MethodUsageSlice struct { func (x *UsageSlice_MethodUsageSlice) Reset() { *x = UsageSlice_MethodUsageSlice{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[29] + mi := &file_atom_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3409,7 +3640,7 @@ func (x *UsageSlice_MethodUsageSlice) String() string { func (*UsageSlice_MethodUsageSlice) ProtoMessage() {} func (x *UsageSlice_MethodUsageSlice) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[29] + mi := &file_atom_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3488,7 +3719,7 @@ type UsageSlice_Fields struct { func (x *UsageSlice_Fields) Reset() { *x = UsageSlice_Fields{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[30] + mi := &file_atom_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3501,7 +3732,7 @@ func (x *UsageSlice_Fields) String() string { func (*UsageSlice_Fields) ProtoMessage() {} func (x *UsageSlice_Fields) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[30] + mi := &file_atom_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3575,7 +3806,7 @@ type UsageSlice_Procedures struct { func (x *UsageSlice_Procedures) Reset() { *x = UsageSlice_Procedures{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[31] + mi := &file_atom_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3588,7 +3819,7 @@ func (x *UsageSlice_Procedures) String() string { func (*UsageSlice_Procedures) ProtoMessage() {} func (x *UsageSlice_Procedures) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[31] + mi := &file_atom_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3667,7 +3898,7 @@ type UsageSlice_UserDefinedTypes struct { func (x *UsageSlice_UserDefinedTypes) Reset() { *x = UsageSlice_UserDefinedTypes{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[32] + mi := &file_atom_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3680,7 +3911,7 @@ func (x *UsageSlice_UserDefinedTypes) String() string { func (*UsageSlice_UserDefinedTypes) ProtoMessage() {} func (x *UsageSlice_UserDefinedTypes) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[32] + mi := &file_atom_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3738,171 +3969,6 @@ func (x *UsageSlice_UserDefinedTypes) GetColumnNumber() uint32 { return 0 } -type DataFlowSlice_Nodes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Id of the node - Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - // Label - Label NodeType `protobuf:"varint,2,opt,name=label,proto3,enum=atom.NodeType" json:"label,omitempty"` - // Name of the call or identifier or parameter - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - // Full name of the call - FullName string `protobuf:"bytes,4,opt,name=fullName,proto3" json:"fullName,omitempty"` - // Method signature of the call - Signature string `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` - // Boolean to indicate if this call belongs to an external method - IsExternal bool `protobuf:"varint,6,opt,name=isExternal,proto3" json:"isExternal,omitempty"` - // Source code - Code string `protobuf:"bytes,7,opt,name=code,proto3" json:"code,omitempty"` - // Type full name - TypeFullName string `protobuf:"bytes,8,opt,name=typeFullName,proto3" json:"typeFullName,omitempty"` - // Parent method name - ParentMethodName string `protobuf:"bytes,9,opt,name=parentMethodName,proto3" json:"parentMethodName,omitempty"` - // Parent filename - ParentFileName string `protobuf:"bytes,10,opt,name=parentFileName,proto3" json:"parentFileName,omitempty"` - // Parent package name - ParentPackageName string `protobuf:"bytes,11,opt,name=parentPackageName,proto3" json:"parentPackageName,omitempty"` - // Parent class name - ParentClassName string `protobuf:"bytes,12,opt,name=parentClassName,proto3" json:"parentClassName,omitempty"` - // Line number - LineNumber uint32 `protobuf:"varint,13,opt,name=lineNumber,proto3" json:"lineNumber,omitempty"` - // Column number - ColumnNumber uint32 `protobuf:"varint,14,opt,name=columnNumber,proto3" json:"columnNumber,omitempty"` -} - -func (x *DataFlowSlice_Nodes) Reset() { - *x = DataFlowSlice_Nodes{} - if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DataFlowSlice_Nodes) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DataFlowSlice_Nodes) ProtoMessage() {} - -func (x *DataFlowSlice_Nodes) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DataFlowSlice_Nodes.ProtoReflect.Descriptor instead. -func (*DataFlowSlice_Nodes) Descriptor() ([]byte, []int) { - return file_atom_proto_rawDescGZIP(), []int{14, 0} -} - -func (x *DataFlowSlice_Nodes) GetId() uint32 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *DataFlowSlice_Nodes) GetLabel() NodeType { - if x != nil { - return x.Label - } - return NodeType_UNKNOWN_NODE_TYPE -} - -func (x *DataFlowSlice_Nodes) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *DataFlowSlice_Nodes) GetFullName() string { - if x != nil { - return x.FullName - } - return "" -} - -func (x *DataFlowSlice_Nodes) GetSignature() string { - if x != nil { - return x.Signature - } - return "" -} - -func (x *DataFlowSlice_Nodes) GetIsExternal() bool { - if x != nil { - return x.IsExternal - } - return false -} - -func (x *DataFlowSlice_Nodes) GetCode() string { - if x != nil { - return x.Code - } - return "" -} - -func (x *DataFlowSlice_Nodes) GetTypeFullName() string { - if x != nil { - return x.TypeFullName - } - return "" -} - -func (x *DataFlowSlice_Nodes) GetParentMethodName() string { - if x != nil { - return x.ParentMethodName - } - return "" -} - -func (x *DataFlowSlice_Nodes) GetParentFileName() string { - if x != nil { - return x.ParentFileName - } - return "" -} - -func (x *DataFlowSlice_Nodes) GetParentPackageName() string { - if x != nil { - return x.ParentPackageName - } - return "" -} - -func (x *DataFlowSlice_Nodes) GetParentClassName() string { - if x != nil { - return x.ParentClassName - } - return "" -} - -func (x *DataFlowSlice_Nodes) GetLineNumber() uint32 { - if x != nil { - return x.LineNumber - } - return 0 -} - -func (x *DataFlowSlice_Nodes) GetColumnNumber() uint32 { - if x != nil { - return x.ColumnNumber - } - return 0 -} - type DataFlowSlice_Edges struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3919,7 +3985,7 @@ type DataFlowSlice_Edges struct { func (x *DataFlowSlice_Edges) Reset() { *x = DataFlowSlice_Edges{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[34] + mi := &file_atom_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3932,7 +3998,7 @@ func (x *DataFlowSlice_Edges) String() string { func (*DataFlowSlice_Edges) ProtoMessage() {} func (x *DataFlowSlice_Edges) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[34] + mi := &file_atom_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3945,7 +4011,7 @@ func (x *DataFlowSlice_Edges) ProtoReflect() protoreflect.Message { // Deprecated: Use DataFlowSlice_Edges.ProtoReflect.Descriptor instead. func (*DataFlowSlice_Edges) Descriptor() ([]byte, []int) { - return file_atom_proto_rawDescGZIP(), []int{14, 1} + return file_atom_proto_rawDescGZIP(), []int{15, 0} } func (x *DataFlowSlice_Edges) GetSrc() uint32 { @@ -3981,7 +4047,7 @@ type DataFlowSlice_Flows struct { func (x *DataFlowSlice_Flows) Reset() { *x = DataFlowSlice_Flows{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[35] + mi := &file_atom_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3994,7 +4060,7 @@ func (x *DataFlowSlice_Flows) String() string { func (*DataFlowSlice_Flows) ProtoMessage() {} func (x *DataFlowSlice_Flows) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[35] + mi := &file_atom_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4007,7 +4073,7 @@ func (x *DataFlowSlice_Flows) ProtoReflect() protoreflect.Message { // Deprecated: Use DataFlowSlice_Flows.ProtoReflect.Descriptor instead. func (*DataFlowSlice_Flows) Descriptor() ([]byte, []int) { - return file_atom_proto_rawDescGZIP(), []int{14, 2} + return file_atom_proto_rawDescGZIP(), []int{15, 1} } func (x *DataFlowSlice_Flows) GetId() []uint32 { @@ -4029,7 +4095,7 @@ type DataFlowSlice_Paths struct { func (x *DataFlowSlice_Paths) Reset() { *x = DataFlowSlice_Paths{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[36] + mi := &file_atom_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4042,7 +4108,7 @@ func (x *DataFlowSlice_Paths) String() string { func (*DataFlowSlice_Paths) ProtoMessage() {} func (x *DataFlowSlice_Paths) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[36] + mi := &file_atom_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4055,7 +4121,7 @@ func (x *DataFlowSlice_Paths) ProtoReflect() protoreflect.Message { // Deprecated: Use DataFlowSlice_Paths.ProtoReflect.Descriptor instead. func (*DataFlowSlice_Paths) Descriptor() ([]byte, []int) { - return file_atom_proto_rawDescGZIP(), []int{14, 3} + return file_atom_proto_rawDescGZIP(), []int{15, 2} } func (x *DataFlowSlice_Paths) GetFlows() []*DataFlowSlice_Flows { @@ -4070,14 +4136,14 @@ type DataFlowSlice_Graph struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nodes []*DataFlowSlice_Nodes `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` + Nodes []*Nodes `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` Edges []*DataFlowSlice_Edges `protobuf:"bytes,2,rep,name=edges,proto3" json:"edges,omitempty"` } func (x *DataFlowSlice_Graph) Reset() { *x = DataFlowSlice_Graph{} if protoimpl.UnsafeEnabled { - mi := &file_atom_proto_msgTypes[37] + mi := &file_atom_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4090,7 +4156,7 @@ func (x *DataFlowSlice_Graph) String() string { func (*DataFlowSlice_Graph) ProtoMessage() {} func (x *DataFlowSlice_Graph) ProtoReflect() protoreflect.Message { - mi := &file_atom_proto_msgTypes[37] + mi := &file_atom_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4103,10 +4169,10 @@ func (x *DataFlowSlice_Graph) ProtoReflect() protoreflect.Message { // Deprecated: Use DataFlowSlice_Graph.ProtoReflect.Descriptor instead. func (*DataFlowSlice_Graph) Descriptor() ([]byte, []int) { - return file_atom_proto_rawDescGZIP(), []int{14, 4} + return file_atom_proto_rawDescGZIP(), []int{15, 3} } -func (x *DataFlowSlice_Graph) GetNodes() []*DataFlowSlice_Nodes { +func (x *DataFlowSlice_Graph) GetNodes() []*Nodes { if x != nil { return x.Nodes } @@ -4120,6 +4186,100 @@ func (x *DataFlowSlice_Graph) GetEdges() []*DataFlowSlice_Edges { return nil } +type ReachableSlice_Reachables struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Nodes []*Nodes `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` +} + +func (x *ReachableSlice_Reachables) Reset() { + *x = ReachableSlice_Reachables{} + if protoimpl.UnsafeEnabled { + mi := &file_atom_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReachableSlice_Reachables) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReachableSlice_Reachables) ProtoMessage() {} + +func (x *ReachableSlice_Reachables) ProtoReflect() protoreflect.Message { + mi := &file_atom_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReachableSlice_Reachables.ProtoReflect.Descriptor instead. +func (*ReachableSlice_Reachables) Descriptor() ([]byte, []int) { + return file_atom_proto_rawDescGZIP(), []int{16, 0} +} + +func (x *ReachableSlice_Reachables) GetNodes() []*Nodes { + if x != nil { + return x.Nodes + } + return nil +} + +type ReachableSlice_Purls struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Purls []string `protobuf:"bytes,1,rep,name=purls,proto3" json:"purls,omitempty"` +} + +func (x *ReachableSlice_Purls) Reset() { + *x = ReachableSlice_Purls{} + if protoimpl.UnsafeEnabled { + mi := &file_atom_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReachableSlice_Purls) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReachableSlice_Purls) ProtoMessage() {} + +func (x *ReachableSlice_Purls) ProtoReflect() protoreflect.Message { + mi := &file_atom_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReachableSlice_Purls.ProtoReflect.Descriptor instead. +func (*ReachableSlice_Purls) Descriptor() ([]byte, []int) { + return file_atom_proto_rawDescGZIP(), []int{16, 1} +} + +func (x *ReachableSlice_Purls) GetPurls() []string { + if x != nil { + return x.Purls + } + return nil +} + var File_atom_proto protoreflect.FileDescriptor var file_atom_proto_rawDesc = []byte{ @@ -4503,230 +4663,243 @@ var file_atom_proto_rawDesc = []byte{ 0x08, 0x0a, 0x04, 0x43, 0x41, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x46, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x10, 0x0a, 0x22, 0xe5, 0x06, 0x0a, 0x0d, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6c, 0x6f, - 0x77, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x12, 0x2f, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x2d, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x73, - 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x1a, 0xd3, 0x03, 0x0a, 0x05, 0x4e, 0x6f, 0x64, 0x65, 0x73, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x24, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x0e, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, - 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, - 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x79, 0x70, 0x65, - 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x74, 0x79, 0x70, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, - 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x65, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x69, - 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, - 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x1a, 0x60, 0x0a, 0x05, - 0x45, 0x64, 0x67, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x72, 0x63, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x03, 0x73, 0x72, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x73, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x64, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x05, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x2e, - 0x43, 0x70, 0x67, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x2e, 0x45, - 0x64, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x1a, 0x17, - 0x0a, 0x05, 0x46, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x38, 0x0a, 0x05, 0x50, 0x61, 0x74, 0x68, 0x73, - 0x12, 0x2f, 0x0a, 0x05, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x57, 0x4e, 0x10, 0x0a, 0x22, 0xe7, 0x03, 0x0a, 0x05, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x24, + 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6c, 0x6c, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x79, 0x70, 0x65, 0x46, 0x75, + 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x79, + 0x70, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, + 0x0a, 0x11, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, + 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x69, 0x6e, 0x65, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, + 0x67, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x81, + 0x03, 0x0a, 0x0d, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x6c, 0x69, 0x63, 0x65, + 0x12, 0x2f, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6c, 0x6f, 0x77, 0x53, + 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x12, 0x2d, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6c, 0x6f, 0x77, 0x53, - 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x6f, 0x77, - 0x73, 0x1a, 0x69, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x2f, 0x0a, 0x05, 0x6e, 0x6f, - 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x74, 0x6f, 0x6d, - 0x2e, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x4e, - 0x6f, 0x64, 0x65, 0x73, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x65, - 0x64, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x74, 0x6f, - 0x6d, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6c, 0x6f, 0x77, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x2e, - 0x45, 0x64, 0x67, 0x65, 0x73, 0x52, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x2a, 0xa5, 0x07, 0x0a, - 0x10, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4e, 0x4f, 0x44, - 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x45, 0x52, 0x54, 0x59, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, - 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, - 0x10, 0x50, 0x41, 0x52, 0x53, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, - 0x45, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x10, 0x04, 0x12, 0x08, - 0x0a, 0x04, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x55, 0x4c, 0x4c, - 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x53, 0x5f, 0x45, 0x58, - 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x41, 0x4c, 0x55, - 0x45, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x4c, 0x55, 0x4d, 0x4e, 0x5f, 0x4e, 0x55, - 0x4d, 0x42, 0x45, 0x52, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x4e, - 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x44, 0x10, 0x0c, 0x12, 0x0b, 0x0a, 0x07, 0x56, - 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x0d, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x56, 0x41, 0x4c, - 0x55, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x10, - 0x0f, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4c, 0x55, 0x4d, 0x4e, 0x5f, 0x4e, 0x55, 0x4d, 0x42, - 0x45, 0x52, 0x5f, 0x45, 0x4e, 0x44, 0x10, 0x10, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x41, 0x4e, 0x47, - 0x55, 0x41, 0x47, 0x45, 0x10, 0x13, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, - 0x54, 0x10, 0x14, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x15, 0x12, 0x0d, 0x0a, - 0x09, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x10, 0x16, 0x12, 0x11, 0x0a, 0x0d, - 0x44, 0x49, 0x53, 0x50, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x19, 0x12, - 0x11, 0x0a, 0x0d, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x49, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x10, 0x1a, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x53, 0x54, - 0x52, 0x55, 0x43, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x1b, 0x12, 0x12, - 0x0a, 0x0e, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, - 0x10, 0x28, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4c, 0x4f, 0x53, 0x55, 0x52, 0x45, 0x5f, 0x42, 0x49, - 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x44, 0x10, 0x32, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x33, 0x12, 0x17, - 0x0a, 0x13, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x5f, 0x46, 0x55, 0x4c, 0x4c, - 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x34, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x48, 0x45, 0x52, - 0x49, 0x54, 0x53, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x55, - 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x35, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x45, 0x54, - 0x48, 0x4f, 0x44, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x36, 0x12, - 0x13, 0x0a, 0x0f, 0x41, 0x53, 0x54, 0x5f, 0x50, 0x41, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x10, 0x38, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x53, 0x54, 0x5f, 0x50, 0x41, 0x52, 0x45, - 0x4e, 0x54, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x39, 0x12, 0x17, - 0x0a, 0x13, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x47, 0x52, 0x4f, - 0x55, 0x50, 0x5f, 0x49, 0x44, 0x10, 0x3a, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x59, 0x4d, 0x42, 0x4f, - 0x4c, 0x10, 0x64, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x53, 0x48, - 0x4f, 0x52, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x66, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x41, - 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x67, 0x12, 0x0e, 0x0a, 0x0a, - 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x68, 0x12, 0x0e, 0x0a, 0x0a, - 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x10, 0x69, 0x12, 0x0c, 0x0a, 0x08, - 0x46, 0x49, 0x4c, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x6a, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x56, - 0x45, 0x52, 0x4c, 0x41, 0x59, 0x53, 0x10, 0x76, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x41, 0x53, 0x48, - 0x10, 0x78, 0x12, 0x12, 0x0a, 0x0d, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x4e, - 0x41, 0x4d, 0x45, 0x10, 0x82, 0x01, 0x12, 0x08, 0x0a, 0x03, 0x4b, 0x45, 0x59, 0x10, 0x83, 0x01, - 0x12, 0x15, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x52, 0x54, 0x5f, - 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x84, 0x01, 0x12, 0x19, 0x0a, 0x14, 0x41, 0x4c, 0x49, 0x41, 0x53, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, - 0x9e, 0x01, 0x12, 0x1a, 0x0a, 0x15, 0x43, 0x4c, 0x4f, 0x53, 0x55, 0x52, 0x45, 0x5f, 0x4f, 0x52, - 0x49, 0x47, 0x49, 0x4e, 0x41, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x9f, 0x01, 0x12, 0x10, - 0x0a, 0x0b, 0x49, 0x53, 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x44, 0x49, 0x43, 0x10, 0xdd, 0x01, - 0x12, 0x09, 0x0a, 0x04, 0x52, 0x4f, 0x4f, 0x54, 0x10, 0xaf, 0x09, 0x12, 0x20, 0x0a, 0x1b, 0x44, - 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x48, 0x49, 0x4e, 0x54, - 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0xb7, 0x0c, 0x12, 0x0a, 0x0a, - 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0xaf, 0x11, 0x12, 0x14, 0x0a, 0x0e, 0x43, 0x41, 0x4e, - 0x4f, 0x4e, 0x49, 0x43, 0x41, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0xc4, 0x91, 0x7a, 0x12, - 0x13, 0x0a, 0x0d, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x46, - 0x10, 0xf9, 0xc0, 0x7a, 0x2a, 0x3b, 0x0a, 0x10, 0x45, 0x64, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x5f, 0x45, 0x44, 0x47, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x45, 0x52, 0x54, - 0x59, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x10, - 0x0b, 0x2a, 0xbd, 0x01, 0x0a, 0x0d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x54, 0x79, - 0x70, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4d, - 0x4f, 0x44, 0x49, 0x46, 0x49, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x0a, - 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, - 0x42, 0x4c, 0x49, 0x43, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x4f, 0x54, 0x45, 0x43, - 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, - 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x42, 0x53, 0x54, 0x52, 0x41, 0x43, 0x54, 0x10, 0x05, - 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x41, 0x54, 0x49, 0x56, 0x45, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, - 0x43, 0x4f, 0x4e, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x07, 0x12, 0x0b, 0x0a, - 0x07, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, - 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x09, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x49, 0x4e, 0x41, - 0x4c, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x41, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x10, - 0x0b, 0x2a, 0xf2, 0x01, 0x0a, 0x09, 0x4c, 0x41, 0x4e, 0x47, 0x55, 0x41, 0x47, 0x45, 0x53, 0x12, - 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4c, 0x41, 0x4e, 0x47, 0x55, - 0x41, 0x47, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x01, 0x12, - 0x0e, 0x0a, 0x0a, 0x4a, 0x41, 0x56, 0x41, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x02, 0x12, - 0x0a, 0x0a, 0x06, 0x47, 0x4f, 0x4c, 0x41, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, - 0x53, 0x48, 0x41, 0x52, 0x50, 0x10, 0x04, 0x12, 0x05, 0x0a, 0x01, 0x43, 0x10, 0x05, 0x12, 0x0a, - 0x0a, 0x06, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x4c, - 0x56, 0x4d, 0x10, 0x07, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x48, 0x50, 0x10, 0x08, 0x12, 0x13, 0x0a, - 0x0f, 0x46, 0x55, 0x5a, 0x5a, 0x59, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4c, 0x41, 0x4e, 0x47, - 0x10, 0x09, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x48, 0x49, 0x44, 0x52, 0x41, 0x10, 0x0a, 0x12, 0x0a, - 0x0a, 0x06, 0x4b, 0x4f, 0x54, 0x4c, 0x49, 0x4e, 0x10, 0x0b, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x45, - 0x57, 0x43, 0x10, 0x0c, 0x12, 0x0b, 0x0a, 0x07, 0x4a, 0x41, 0x56, 0x41, 0x53, 0x52, 0x43, 0x10, - 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x53, 0x52, 0x43, 0x10, 0x0e, - 0x12, 0x09, 0x0a, 0x05, 0x4a, 0x53, 0x53, 0x52, 0x43, 0x10, 0x0f, 0x12, 0x0c, 0x0a, 0x08, 0x53, - 0x4f, 0x4c, 0x49, 0x44, 0x49, 0x54, 0x59, 0x10, 0x10, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x42, - 0x59, 0x53, 0x52, 0x43, 0x10, 0x11, 0x2a, 0x67, 0x0a, 0x14, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x65, 0x73, 0x12, 0x1f, - 0x0a, 0x1b, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x45, 0x56, 0x41, 0x4c, 0x55, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x10, 0x00, 0x12, - 0x10, 0x0a, 0x0c, 0x42, 0x59, 0x5f, 0x52, 0x45, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x43, 0x45, 0x10, - 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x59, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, - 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x59, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x03, 0x2a, - 0x62, 0x0a, 0x0d, 0x44, 0x69, 0x73, 0x70, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x73, - 0x12, 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x44, 0x49, 0x53, 0x50, - 0x41, 0x54, 0x43, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x53, - 0x54, 0x41, 0x54, 0x49, 0x43, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x41, 0x54, 0x43, 0x48, 0x10, 0x01, - 0x12, 0x14, 0x0a, 0x10, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x44, 0x49, 0x53, 0x50, - 0x41, 0x54, 0x43, 0x48, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, - 0x44, 0x10, 0x03, 0x2a, 0xc4, 0x01, 0x0a, 0x17, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, - 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x12, - 0x22, 0x0a, 0x1e, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, - 0x4f, 0x4c, 0x5f, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x10, 0x01, 0x12, 0x0c, - 0x0a, 0x08, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x55, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, - 0x57, 0x48, 0x49, 0x4c, 0x45, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x44, 0x4f, 0x10, 0x04, 0x12, - 0x07, 0x0a, 0x03, 0x46, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x4f, 0x54, 0x4f, - 0x10, 0x06, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x46, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x4c, - 0x53, 0x45, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0x09, - 0x12, 0x07, 0x0a, 0x03, 0x54, 0x52, 0x59, 0x10, 0x0a, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x48, 0x52, - 0x4f, 0x57, 0x10, 0x0b, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x0c, 0x12, - 0x09, 0x0a, 0x05, 0x59, 0x49, 0x45, 0x4c, 0x44, 0x10, 0x0d, 0x2a, 0x82, 0x06, 0x0a, 0x08, 0x4e, - 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x0a, - 0x0a, 0x06, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x45, - 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x0e, 0x0a, - 0x0a, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x1f, 0x0a, - 0x1b, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, 0x41, - 0x4d, 0x45, 0x54, 0x45, 0x52, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x06, 0x12, 0x18, - 0x0a, 0x14, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, - 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x54, 0x45, - 0x52, 0x41, 0x4c, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x10, - 0x09, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x52, 0x52, 0x41, 0x59, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, - 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x52, 0x10, 0x0e, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x41, 0x4c, 0x4c, - 0x10, 0x0f, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x17, 0x12, 0x07, 0x0a, - 0x03, 0x54, 0x41, 0x47, 0x10, 0x18, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x10, 0x19, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x46, 0x49, - 0x45, 0x52, 0x10, 0x1b, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x10, 0x1e, - 0x12, 0x09, 0x0a, 0x05, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x1f, 0x12, 0x18, 0x0a, 0x14, 0x4d, - 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x5f, - 0x4f, 0x55, 0x54, 0x10, 0x21, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, - 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x10, 0x22, 0x12, 0x0e, - 0x0a, 0x0a, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44, 0x45, 0x4e, 0x43, 0x59, 0x10, 0x23, 0x12, 0x08, - 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x26, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x45, 0x54, 0x41, - 0x5f, 0x44, 0x41, 0x54, 0x41, 0x10, 0x27, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x41, 0x4d, 0x45, 0x53, - 0x50, 0x41, 0x43, 0x45, 0x10, 0x28, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, - 0x41, 0x43, 0x45, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x29, 0x12, 0x0b, 0x0a, 0x07, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x2c, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, - 0x10, 0x2d, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x10, - 0x2e, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, - 0x54, 0x45, 0x52, 0x10, 0x2f, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x52, - 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x30, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x4e, 0x4e, 0x4f, - 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x10, 0x31, - 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, - 0x32, 0x12, 0x0c, 0x0a, 0x07, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x92, 0x01, 0x12, - 0x12, 0x0a, 0x0d, 0x54, 0x41, 0x47, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x41, 0x49, 0x52, - 0x10, 0xd0, 0x01, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0xd6, - 0x01, 0x12, 0x13, 0x0a, 0x0e, 0x4b, 0x45, 0x59, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x50, - 0x41, 0x49, 0x52, 0x10, 0xd9, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x49, - 0x45, 0x52, 0x10, 0xac, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, - 0x52, 0x45, 0x46, 0x10, 0xcd, 0x02, 0x12, 0x14, 0x0a, 0x0f, 0x43, 0x4c, 0x4f, 0x53, 0x55, 0x52, - 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0xce, 0x02, 0x12, 0x0d, 0x0a, 0x08, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x46, 0x10, 0xcf, 0x02, 0x12, 0x16, 0x0a, 0x11, 0x43, - 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x55, 0x52, 0x45, - 0x10, 0xd3, 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x4a, 0x55, 0x4d, 0x50, 0x5f, 0x54, 0x41, 0x52, 0x47, - 0x45, 0x54, 0x10, 0xd4, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x4a, 0x55, 0x4d, 0x50, 0x5f, 0x4c, 0x41, - 0x42, 0x45, 0x4c, 0x10, 0xd5, 0x02, 0x12, 0x11, 0x0a, 0x0c, 0x54, 0x45, 0x4d, 0x50, 0x4c, 0x41, - 0x54, 0x45, 0x5f, 0x44, 0x4f, 0x4d, 0x10, 0xa1, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x4f, 0x4d, - 0x4d, 0x45, 0x4e, 0x54, 0x10, 0xff, 0x03, 0x12, 0x16, 0x0a, 0x10, 0x46, 0x49, 0x45, 0x4c, 0x44, - 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x10, 0xb9, 0x91, 0x7a, 0x42, - 0x48, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x74, 0x2e, - 0x61, 0x74, 0x6f, 0x6d, 0x42, 0x04, 0x41, 0x74, 0x6f, 0x6d, 0x5a, 0x19, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x41, 0x70, 0x70, 0x54, 0x68, 0x72, 0x65, 0x61, 0x74, - 0x2f, 0x61, 0x74, 0x6f, 0x6d, 0xaa, 0x02, 0x11, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x70, 0x74, 0x68, - 0x72, 0x65, 0x61, 0x74, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x73, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x1a, 0x60, 0x0a, 0x05, 0x45, 0x64, 0x67, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x72, 0x63, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x73, 0x72, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x64, + 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x64, 0x73, 0x74, 0x12, 0x33, 0x0a, + 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x61, + 0x74, 0x6f, 0x6d, 0x2e, 0x43, 0x70, 0x67, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x45, 0x64, + 0x67, 0x65, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x1a, 0x17, 0x0a, 0x05, 0x46, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x38, 0x0a, 0x05, 0x50, + 0x61, 0x74, 0x68, 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x46, + 0x6c, 0x6f, 0x77, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x05, + 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x1a, 0x5b, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x21, + 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x61, 0x74, 0x6f, 0x6d, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, + 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6c, 0x6f, 0x77, + 0x53, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x73, 0x52, 0x05, 0x65, 0x64, 0x67, + 0x65, 0x73, 0x22, 0xd3, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, + 0x53, 0x6c, 0x69, 0x63, 0x65, 0x12, 0x3f, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x2e, 0x52, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x2e, + 0x52, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x63, + 0x68, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x05, 0x70, 0x75, 0x72, 0x6c, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x2e, 0x52, 0x65, 0x61, + 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x75, 0x72, 0x6c, + 0x73, 0x52, 0x05, 0x70, 0x75, 0x72, 0x6c, 0x73, 0x1a, 0x2f, 0x0a, 0x0a, 0x52, 0x65, 0x61, 0x63, + 0x68, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x2e, 0x4e, 0x6f, 0x64, + 0x65, 0x73, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x1a, 0x1d, 0x0a, 0x05, 0x50, 0x75, 0x72, + 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x70, 0x75, 0x72, 0x6c, 0x73, 0x2a, 0xa5, 0x07, 0x0a, 0x10, 0x4e, 0x6f, 0x64, + 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, + 0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x52, + 0x4f, 0x50, 0x45, 0x52, 0x54, 0x59, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x45, + 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x52, + 0x53, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x03, 0x12, + 0x09, 0x0a, 0x05, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x41, + 0x4d, 0x45, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, + 0x45, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x53, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, + 0x41, 0x4c, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x08, 0x12, + 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x4c, 0x55, 0x4d, 0x4e, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, + 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, + 0x52, 0x5f, 0x45, 0x4e, 0x44, 0x10, 0x0c, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x45, 0x52, 0x53, 0x49, + 0x4f, 0x4e, 0x10, 0x0d, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x56, 0x41, 0x4c, 0x55, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x10, 0x0f, 0x12, 0x15, 0x0a, + 0x11, 0x43, 0x4f, 0x4c, 0x55, 0x4d, 0x4e, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x5f, 0x45, + 0x4e, 0x44, 0x10, 0x10, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x41, 0x4e, 0x47, 0x55, 0x41, 0x47, 0x45, + 0x10, 0x13, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x14, 0x12, + 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x15, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x49, 0x47, + 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x10, 0x16, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x49, 0x53, 0x50, + 0x41, 0x54, 0x43, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x19, 0x12, 0x11, 0x0a, 0x0d, 0x4d, + 0x4f, 0x44, 0x49, 0x46, 0x49, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x1a, 0x12, 0x1a, + 0x0a, 0x16, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, + 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x1b, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x52, + 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x28, 0x12, 0x16, + 0x0a, 0x12, 0x43, 0x4c, 0x4f, 0x53, 0x55, 0x52, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, + 0x47, 0x5f, 0x49, 0x44, 0x10, 0x32, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, + 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x33, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, + 0x45, 0x10, 0x34, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x48, 0x45, 0x52, 0x49, 0x54, 0x53, 0x5f, + 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, + 0x41, 0x4d, 0x45, 0x10, 0x35, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, + 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x36, 0x12, 0x13, 0x0a, 0x0f, 0x41, + 0x53, 0x54, 0x5f, 0x50, 0x41, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x38, + 0x12, 0x18, 0x0a, 0x14, 0x41, 0x53, 0x54, 0x5f, 0x50, 0x41, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x46, + 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x39, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x45, + 0x50, 0x45, 0x4e, 0x44, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x49, + 0x44, 0x10, 0x3a, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x10, 0x64, 0x12, + 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x53, 0x48, 0x4f, 0x52, 0x54, 0x5f, + 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x66, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, + 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x67, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4c, 0x41, 0x53, + 0x53, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x68, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x4f, 0x44, 0x45, + 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x10, 0x69, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x49, 0x4c, 0x45, + 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x6a, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x56, 0x45, 0x52, 0x4c, 0x41, + 0x59, 0x53, 0x10, 0x76, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x41, 0x53, 0x48, 0x10, 0x78, 0x12, 0x12, + 0x0a, 0x0d, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, + 0x82, 0x01, 0x12, 0x08, 0x0a, 0x03, 0x4b, 0x45, 0x59, 0x10, 0x83, 0x01, 0x12, 0x15, 0x0a, 0x10, + 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x52, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, + 0x10, 0x84, 0x01, 0x12, 0x19, 0x0a, 0x14, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x9e, 0x01, 0x12, 0x1a, + 0x0a, 0x15, 0x43, 0x4c, 0x4f, 0x53, 0x55, 0x52, 0x45, 0x5f, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, + 0x41, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x9f, 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x49, 0x53, + 0x5f, 0x56, 0x41, 0x52, 0x49, 0x41, 0x44, 0x49, 0x43, 0x10, 0xdd, 0x01, 0x12, 0x09, 0x0a, 0x04, + 0x52, 0x4f, 0x4f, 0x54, 0x10, 0xaf, 0x09, 0x12, 0x20, 0x0a, 0x1b, 0x44, 0x59, 0x4e, 0x41, 0x4d, + 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x48, 0x49, 0x4e, 0x54, 0x5f, 0x46, 0x55, 0x4c, + 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0xb7, 0x0c, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x44, + 0x45, 0x58, 0x10, 0xaf, 0x11, 0x12, 0x14, 0x0a, 0x0e, 0x43, 0x41, 0x4e, 0x4f, 0x4e, 0x49, 0x43, + 0x41, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0xc4, 0x91, 0x7a, 0x12, 0x13, 0x0a, 0x0d, 0x43, + 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x46, 0x10, 0xf9, 0xc0, 0x7a, + 0x2a, 0x3b, 0x0a, 0x10, 0x45, 0x64, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, + 0x45, 0x44, 0x47, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x45, 0x52, 0x54, 0x59, 0x10, 0x00, 0x12, + 0x0c, 0x0a, 0x08, 0x56, 0x41, 0x52, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0b, 0x2a, 0xbd, 0x01, + 0x0a, 0x0d, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, + 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, + 0x49, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, + 0x41, 0x54, 0x49, 0x43, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, + 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x52, 0x4f, 0x54, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, + 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x04, 0x12, 0x0c, + 0x0a, 0x08, 0x41, 0x42, 0x53, 0x54, 0x52, 0x41, 0x43, 0x54, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, + 0x4e, 0x41, 0x54, 0x49, 0x56, 0x45, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x53, + 0x54, 0x52, 0x55, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x49, 0x52, + 0x54, 0x55, 0x41, 0x4c, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, + 0x41, 0x4c, 0x10, 0x09, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x10, 0x0a, 0x12, + 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x41, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x0b, 0x2a, 0xf2, 0x01, + 0x0a, 0x09, 0x4c, 0x41, 0x4e, 0x47, 0x55, 0x41, 0x47, 0x45, 0x53, 0x12, 0x14, 0x0a, 0x10, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4c, 0x41, 0x4e, 0x47, 0x55, 0x41, 0x47, 0x45, 0x10, + 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x41, 0x56, 0x41, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4a, + 0x41, 0x56, 0x41, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x47, + 0x4f, 0x4c, 0x41, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x53, 0x48, 0x41, 0x52, + 0x50, 0x10, 0x04, 0x12, 0x05, 0x0a, 0x01, 0x43, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x59, + 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x4c, 0x56, 0x4d, 0x10, 0x07, + 0x12, 0x07, 0x0a, 0x03, 0x50, 0x48, 0x50, 0x10, 0x08, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x55, 0x5a, + 0x5a, 0x59, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4c, 0x41, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0a, + 0x0a, 0x06, 0x47, 0x48, 0x49, 0x44, 0x52, 0x41, 0x10, 0x0a, 0x12, 0x0a, 0x0a, 0x06, 0x4b, 0x4f, + 0x54, 0x4c, 0x49, 0x4e, 0x10, 0x0b, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x45, 0x57, 0x43, 0x10, 0x0c, + 0x12, 0x0b, 0x0a, 0x07, 0x4a, 0x41, 0x56, 0x41, 0x53, 0x52, 0x43, 0x10, 0x0d, 0x12, 0x0d, 0x0a, + 0x09, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x53, 0x52, 0x43, 0x10, 0x0e, 0x12, 0x09, 0x0a, 0x05, + 0x4a, 0x53, 0x53, 0x52, 0x43, 0x10, 0x0f, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x4f, 0x4c, 0x49, 0x44, + 0x49, 0x54, 0x59, 0x10, 0x10, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x42, 0x59, 0x53, 0x52, 0x43, + 0x10, 0x11, 0x2a, 0x67, 0x0a, 0x14, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x45, 0x56, 0x41, 0x4c, 0x55, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x42, + 0x59, 0x5f, 0x52, 0x45, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, + 0x0a, 0x42, 0x59, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0c, 0x0a, + 0x08, 0x42, 0x59, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x03, 0x2a, 0x62, 0x0a, 0x0d, 0x44, + 0x69, 0x73, 0x70, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x15, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x41, 0x54, 0x43, 0x48, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x54, 0x41, 0x54, 0x49, + 0x43, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x41, 0x54, 0x43, 0x48, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, + 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x41, 0x54, 0x43, 0x48, + 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x03, 0x2a, + 0xc4, 0x01, 0x0a, 0x17, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x53, 0x54, 0x52, 0x55, + 0x43, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x12, 0x22, 0x0a, 0x1e, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x53, + 0x54, 0x52, 0x55, 0x43, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, + 0x09, 0x0a, 0x05, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, + 0x4e, 0x54, 0x49, 0x4e, 0x55, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x48, 0x49, 0x4c, + 0x45, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x44, 0x4f, 0x10, 0x04, 0x12, 0x07, 0x0a, 0x03, 0x46, + 0x4f, 0x52, 0x10, 0x05, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x4f, 0x54, 0x4f, 0x10, 0x06, 0x12, 0x06, + 0x0a, 0x02, 0x49, 0x46, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x4c, 0x53, 0x45, 0x10, 0x08, + 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0x09, 0x12, 0x07, 0x0a, 0x03, + 0x54, 0x52, 0x59, 0x10, 0x0a, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x48, 0x52, 0x4f, 0x57, 0x10, 0x0b, + 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x0c, 0x12, 0x09, 0x0a, 0x05, 0x59, + 0x49, 0x45, 0x4c, 0x44, 0x10, 0x0d, 0x2a, 0x82, 0x06, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4e, + 0x4f, 0x44, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x45, + 0x54, 0x48, 0x4f, 0x44, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, + 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x4e, 0x4e, + 0x4f, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x4e, 0x4e, + 0x4f, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, + 0x52, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x4e, + 0x4e, 0x4f, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, + 0x45, 0x52, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x10, + 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x09, 0x12, 0x15, 0x0a, + 0x11, 0x41, 0x52, 0x52, 0x41, 0x59, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, + 0x45, 0x52, 0x10, 0x0e, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x41, 0x4c, 0x4c, 0x10, 0x0f, 0x12, 0x09, + 0x0a, 0x05, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x17, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x41, 0x47, + 0x10, 0x18, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x19, + 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x10, 0x1b, + 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x10, 0x1e, 0x12, 0x09, 0x0a, 0x05, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x1f, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x45, 0x54, 0x48, 0x4f, + 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x5f, 0x4f, 0x55, 0x54, 0x10, + 0x21, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x41, + 0x4d, 0x45, 0x54, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x10, 0x22, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x45, + 0x50, 0x45, 0x4e, 0x44, 0x45, 0x4e, 0x43, 0x59, 0x10, 0x23, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, + 0x4c, 0x45, 0x10, 0x26, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x44, 0x41, 0x54, + 0x41, 0x10, 0x27, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, + 0x10, 0x28, 0x12, 0x13, 0x0a, 0x0f, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x29, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x10, 0x2c, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, 0x10, 0x2d, 0x12, 0x0d, + 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x10, 0x2e, 0x12, 0x12, 0x0a, + 0x0e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, + 0x2f, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x52, 0x47, 0x55, 0x4d, 0x45, + 0x4e, 0x54, 0x10, 0x30, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x10, 0x31, 0x12, 0x0f, 0x0a, 0x0b, + 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x32, 0x12, 0x0c, 0x0a, + 0x07, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x92, 0x01, 0x12, 0x12, 0x0a, 0x0d, 0x54, + 0x41, 0x47, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x10, 0xd0, 0x01, 0x12, + 0x0c, 0x0a, 0x07, 0x46, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0xd6, 0x01, 0x12, 0x13, 0x0a, + 0x0e, 0x4b, 0x45, 0x59, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x10, + 0xd9, 0x01, 0x12, 0x0d, 0x0a, 0x08, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x49, 0x45, 0x52, 0x10, 0xac, + 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x52, 0x45, 0x46, 0x10, + 0xcd, 0x02, 0x12, 0x14, 0x0a, 0x0f, 0x43, 0x4c, 0x4f, 0x53, 0x55, 0x52, 0x45, 0x5f, 0x42, 0x49, + 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0xce, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x52, 0x45, 0x46, 0x10, 0xcf, 0x02, 0x12, 0x16, 0x0a, 0x11, 0x43, 0x4f, 0x4e, 0x54, 0x52, + 0x4f, 0x4c, 0x5f, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x55, 0x52, 0x45, 0x10, 0xd3, 0x02, 0x12, + 0x10, 0x0a, 0x0b, 0x4a, 0x55, 0x4d, 0x50, 0x5f, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x10, 0xd4, + 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x4a, 0x55, 0x4d, 0x50, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x10, + 0xd5, 0x02, 0x12, 0x11, 0x0a, 0x0c, 0x54, 0x45, 0x4d, 0x50, 0x4c, 0x41, 0x54, 0x45, 0x5f, 0x44, + 0x4f, 0x4d, 0x10, 0xa1, 0x03, 0x12, 0x0c, 0x0a, 0x07, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, + 0x10, 0xff, 0x03, 0x12, 0x16, 0x0a, 0x10, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x49, 0x44, 0x45, + 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x10, 0xb9, 0x91, 0x7a, 0x42, 0x48, 0x0a, 0x11, 0x69, + 0x6f, 0x2e, 0x61, 0x70, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x74, 0x2e, 0x61, 0x74, 0x6f, 0x6d, + 0x42, 0x04, 0x41, 0x74, 0x6f, 0x6d, 0x5a, 0x19, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x41, 0x70, 0x70, 0x54, 0x68, 0x72, 0x65, 0x61, 0x74, 0x2f, 0x61, 0x74, 0x6f, + 0x6d, 0xaa, 0x02, 0x11, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x74, + 0x2e, 0x61, 0x74, 0x6f, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4742,7 +4915,7 @@ func file_atom_proto_rawDescGZIP() []byte { } var file_atom_proto_enumTypes = make([]protoimpl.EnumInfo, 10) -var file_atom_proto_msgTypes = make([]protoimpl.MessageInfo, 38) +var file_atom_proto_msgTypes = make([]protoimpl.MessageInfo, 41) var file_atom_proto_goTypes = []interface{}{ (NodePropertyName)(0), // 0: atom.NodePropertyName (EdgePropertyName)(0), // 1: atom.EdgePropertyName @@ -4768,30 +4941,33 @@ var file_atom_proto_goTypes = []interface{}{ (*CpgOverlay)(nil), // 21: atom.CpgOverlay (*DiffGraph)(nil), // 22: atom.DiffGraph (*UsageSlice)(nil), // 23: atom.UsageSlice - (*DataFlowSlice)(nil), // 24: atom.DataFlowSlice - (*CpgStruct_Node)(nil), // 25: atom.CpgStruct.Node - (*CpgStruct_Edge)(nil), // 26: atom.CpgStruct.Edge - (*CpgStruct_Node_Property)(nil), // 27: atom.CpgStruct.Node.Property - (*CpgStruct_Edge_Property)(nil), // 28: atom.CpgStruct.Edge.Property - (*DiffGraph_RemoveNode)(nil), // 29: atom.DiffGraph.RemoveNode - (*DiffGraph_RemoveNodeProperty)(nil), // 30: atom.DiffGraph.RemoveNodeProperty - (*DiffGraph_RemoveEdge)(nil), // 31: atom.DiffGraph.RemoveEdge - (*DiffGraph_RemoveEdgeProperty)(nil), // 32: atom.DiffGraph.RemoveEdgeProperty - (*DiffGraph_Entry)(nil), // 33: atom.DiffGraph.Entry - (*UsageSlice_TargetObj)(nil), // 34: atom.UsageSlice.TargetObj - (*UsageSlice_DefinedBy)(nil), // 35: atom.UsageSlice.DefinedBy - (*UsageSlice_InvokedCalls)(nil), // 36: atom.UsageSlice.InvokedCalls - (*UsageSlice_ArgToCalls)(nil), // 37: atom.UsageSlice.ArgToCalls - (*UsageSlice_ObjectUsageSlice)(nil), // 38: atom.UsageSlice.ObjectUsageSlice - (*UsageSlice_MethodUsageSlice)(nil), // 39: atom.UsageSlice.MethodUsageSlice - (*UsageSlice_Fields)(nil), // 40: atom.UsageSlice.Fields - (*UsageSlice_Procedures)(nil), // 41: atom.UsageSlice.Procedures - (*UsageSlice_UserDefinedTypes)(nil), // 42: atom.UsageSlice.UserDefinedTypes - (*DataFlowSlice_Nodes)(nil), // 43: atom.DataFlowSlice.Nodes - (*DataFlowSlice_Edges)(nil), // 44: atom.DataFlowSlice.Edges - (*DataFlowSlice_Flows)(nil), // 45: atom.DataFlowSlice.Flows - (*DataFlowSlice_Paths)(nil), // 46: atom.DataFlowSlice.Paths - (*DataFlowSlice_Graph)(nil), // 47: atom.DataFlowSlice.Graph + (*Nodes)(nil), // 24: atom.Nodes + (*DataFlowSlice)(nil), // 25: atom.DataFlowSlice + (*ReachableSlice)(nil), // 26: atom.ReachableSlice + (*CpgStruct_Node)(nil), // 27: atom.CpgStruct.Node + (*CpgStruct_Edge)(nil), // 28: atom.CpgStruct.Edge + (*CpgStruct_Node_Property)(nil), // 29: atom.CpgStruct.Node.Property + (*CpgStruct_Edge_Property)(nil), // 30: atom.CpgStruct.Edge.Property + (*DiffGraph_RemoveNode)(nil), // 31: atom.DiffGraph.RemoveNode + (*DiffGraph_RemoveNodeProperty)(nil), // 32: atom.DiffGraph.RemoveNodeProperty + (*DiffGraph_RemoveEdge)(nil), // 33: atom.DiffGraph.RemoveEdge + (*DiffGraph_RemoveEdgeProperty)(nil), // 34: atom.DiffGraph.RemoveEdgeProperty + (*DiffGraph_Entry)(nil), // 35: atom.DiffGraph.Entry + (*UsageSlice_TargetObj)(nil), // 36: atom.UsageSlice.TargetObj + (*UsageSlice_DefinedBy)(nil), // 37: atom.UsageSlice.DefinedBy + (*UsageSlice_InvokedCalls)(nil), // 38: atom.UsageSlice.InvokedCalls + (*UsageSlice_ArgToCalls)(nil), // 39: atom.UsageSlice.ArgToCalls + (*UsageSlice_ObjectUsageSlice)(nil), // 40: atom.UsageSlice.ObjectUsageSlice + (*UsageSlice_MethodUsageSlice)(nil), // 41: atom.UsageSlice.MethodUsageSlice + (*UsageSlice_Fields)(nil), // 42: atom.UsageSlice.Fields + (*UsageSlice_Procedures)(nil), // 43: atom.UsageSlice.Procedures + (*UsageSlice_UserDefinedTypes)(nil), // 44: atom.UsageSlice.UserDefinedTypes + (*DataFlowSlice_Edges)(nil), // 45: atom.DataFlowSlice.Edges + (*DataFlowSlice_Flows)(nil), // 46: atom.DataFlowSlice.Flows + (*DataFlowSlice_Paths)(nil), // 47: atom.DataFlowSlice.Paths + (*DataFlowSlice_Graph)(nil), // 48: atom.DataFlowSlice.Graph + (*ReachableSlice_Reachables)(nil), // 49: atom.ReachableSlice.Reachables + (*ReachableSlice_Purls)(nil), // 50: atom.ReachableSlice.Purls } var file_atom_proto_depIdxs = []int32{ 12, // 0: atom.PropertyValue.string_list:type_name -> atom.StringList @@ -4801,59 +4977,62 @@ var file_atom_proto_depIdxs = []int32{ 16, // 4: atom.PropertyValue.float_list:type_name -> atom.FloatList 17, // 5: atom.PropertyValue.double_list:type_name -> atom.DoubleList 11, // 6: atom.PropertyValue.contained_refs:type_name -> atom.ContainedRefs - 25, // 7: atom.CpgStruct.node:type_name -> atom.CpgStruct.Node - 26, // 8: atom.CpgStruct.edge:type_name -> atom.CpgStruct.Edge - 27, // 9: atom.AdditionalNodeProperty.property:type_name -> atom.CpgStruct.Node.Property - 28, // 10: atom.AdditionalEdgeProperty.property:type_name -> atom.CpgStruct.Edge.Property + 27, // 7: atom.CpgStruct.node:type_name -> atom.CpgStruct.Node + 28, // 8: atom.CpgStruct.edge:type_name -> atom.CpgStruct.Edge + 29, // 9: atom.AdditionalNodeProperty.property:type_name -> atom.CpgStruct.Node.Property + 30, // 10: atom.AdditionalEdgeProperty.property:type_name -> atom.CpgStruct.Edge.Property 8, // 11: atom.AdditionalEdgeProperty.edge_type:type_name -> atom.CpgStruct.Edge.EdgeType - 25, // 12: atom.CpgOverlay.node:type_name -> atom.CpgStruct.Node - 26, // 13: atom.CpgOverlay.edge:type_name -> atom.CpgStruct.Edge + 27, // 12: atom.CpgOverlay.node:type_name -> atom.CpgStruct.Node + 28, // 13: atom.CpgOverlay.edge:type_name -> atom.CpgStruct.Edge 19, // 14: atom.CpgOverlay.node_property:type_name -> atom.AdditionalNodeProperty 20, // 15: atom.CpgOverlay.edge_property:type_name -> atom.AdditionalEdgeProperty - 33, // 16: atom.DiffGraph.entries:type_name -> atom.DiffGraph.Entry - 39, // 17: atom.UsageSlice.objectSlices:type_name -> atom.UsageSlice.MethodUsageSlice - 42, // 18: atom.UsageSlice.userDefinedTypes:type_name -> atom.UsageSlice.UserDefinedTypes - 47, // 19: atom.DataFlowSlice.graph:type_name -> atom.DataFlowSlice.Graph - 46, // 20: atom.DataFlowSlice.path:type_name -> atom.DataFlowSlice.Paths - 7, // 21: atom.CpgStruct.Node.type:type_name -> atom.NodeType - 27, // 22: atom.CpgStruct.Node.property:type_name -> atom.CpgStruct.Node.Property - 8, // 23: atom.CpgStruct.Edge.type:type_name -> atom.CpgStruct.Edge.EdgeType - 28, // 24: atom.CpgStruct.Edge.property:type_name -> atom.CpgStruct.Edge.Property - 0, // 25: atom.CpgStruct.Node.Property.name:type_name -> atom.NodePropertyName - 10, // 26: atom.CpgStruct.Node.Property.value:type_name -> atom.PropertyValue - 1, // 27: atom.CpgStruct.Edge.Property.name:type_name -> atom.EdgePropertyName - 10, // 28: atom.CpgStruct.Edge.Property.value:type_name -> atom.PropertyValue - 0, // 29: atom.DiffGraph.RemoveNodeProperty.name:type_name -> atom.NodePropertyName - 8, // 30: atom.DiffGraph.RemoveEdge.edge_type:type_name -> atom.CpgStruct.Edge.EdgeType - 8, // 31: atom.DiffGraph.RemoveEdgeProperty.edge_type:type_name -> atom.CpgStruct.Edge.EdgeType - 1, // 32: atom.DiffGraph.RemoveEdgeProperty.property_name:type_name -> atom.EdgePropertyName - 25, // 33: atom.DiffGraph.Entry.node:type_name -> atom.CpgStruct.Node - 26, // 34: atom.DiffGraph.Entry.edge:type_name -> atom.CpgStruct.Edge - 19, // 35: atom.DiffGraph.Entry.node_property:type_name -> atom.AdditionalNodeProperty - 20, // 36: atom.DiffGraph.Entry.edge_property:type_name -> atom.AdditionalEdgeProperty - 29, // 37: atom.DiffGraph.Entry.remove_node:type_name -> atom.DiffGraph.RemoveNode - 30, // 38: atom.DiffGraph.Entry.remove_node_property:type_name -> atom.DiffGraph.RemoveNodeProperty - 31, // 39: atom.DiffGraph.Entry.remove_edge:type_name -> atom.DiffGraph.RemoveEdge - 32, // 40: atom.DiffGraph.Entry.remove_edge_property:type_name -> atom.DiffGraph.RemoveEdgeProperty - 9, // 41: atom.UsageSlice.TargetObj.label:type_name -> atom.UsageSlice.LabelType - 34, // 42: atom.UsageSlice.ObjectUsageSlice.targetObj:type_name -> atom.UsageSlice.TargetObj - 35, // 43: atom.UsageSlice.ObjectUsageSlice.definedBy:type_name -> atom.UsageSlice.DefinedBy - 36, // 44: atom.UsageSlice.ObjectUsageSlice.invokedCalls:type_name -> atom.UsageSlice.InvokedCalls - 37, // 45: atom.UsageSlice.ObjectUsageSlice.argToCalls:type_name -> atom.UsageSlice.ArgToCalls - 38, // 46: atom.UsageSlice.MethodUsageSlice.usages:type_name -> atom.UsageSlice.ObjectUsageSlice - 9, // 47: atom.UsageSlice.Fields.label:type_name -> atom.UsageSlice.LabelType - 40, // 48: atom.UsageSlice.UserDefinedTypes.fields:type_name -> atom.UsageSlice.Fields - 41, // 49: atom.UsageSlice.UserDefinedTypes.procedures:type_name -> atom.UsageSlice.Procedures - 7, // 50: atom.DataFlowSlice.Nodes.label:type_name -> atom.NodeType - 8, // 51: atom.DataFlowSlice.Edges.label:type_name -> atom.CpgStruct.Edge.EdgeType - 45, // 52: atom.DataFlowSlice.Paths.flows:type_name -> atom.DataFlowSlice.Flows - 43, // 53: atom.DataFlowSlice.Graph.nodes:type_name -> atom.DataFlowSlice.Nodes - 44, // 54: atom.DataFlowSlice.Graph.edges:type_name -> atom.DataFlowSlice.Edges - 55, // [55:55] is the sub-list for method output_type - 55, // [55:55] is the sub-list for method input_type - 55, // [55:55] is the sub-list for extension type_name - 55, // [55:55] is the sub-list for extension extendee - 0, // [0:55] is the sub-list for field type_name + 35, // 16: atom.DiffGraph.entries:type_name -> atom.DiffGraph.Entry + 41, // 17: atom.UsageSlice.objectSlices:type_name -> atom.UsageSlice.MethodUsageSlice + 44, // 18: atom.UsageSlice.userDefinedTypes:type_name -> atom.UsageSlice.UserDefinedTypes + 7, // 19: atom.Nodes.label:type_name -> atom.NodeType + 48, // 20: atom.DataFlowSlice.graph:type_name -> atom.DataFlowSlice.Graph + 47, // 21: atom.DataFlowSlice.path:type_name -> atom.DataFlowSlice.Paths + 49, // 22: atom.ReachableSlice.reachables:type_name -> atom.ReachableSlice.Reachables + 50, // 23: atom.ReachableSlice.purls:type_name -> atom.ReachableSlice.Purls + 7, // 24: atom.CpgStruct.Node.type:type_name -> atom.NodeType + 29, // 25: atom.CpgStruct.Node.property:type_name -> atom.CpgStruct.Node.Property + 8, // 26: atom.CpgStruct.Edge.type:type_name -> atom.CpgStruct.Edge.EdgeType + 30, // 27: atom.CpgStruct.Edge.property:type_name -> atom.CpgStruct.Edge.Property + 0, // 28: atom.CpgStruct.Node.Property.name:type_name -> atom.NodePropertyName + 10, // 29: atom.CpgStruct.Node.Property.value:type_name -> atom.PropertyValue + 1, // 30: atom.CpgStruct.Edge.Property.name:type_name -> atom.EdgePropertyName + 10, // 31: atom.CpgStruct.Edge.Property.value:type_name -> atom.PropertyValue + 0, // 32: atom.DiffGraph.RemoveNodeProperty.name:type_name -> atom.NodePropertyName + 8, // 33: atom.DiffGraph.RemoveEdge.edge_type:type_name -> atom.CpgStruct.Edge.EdgeType + 8, // 34: atom.DiffGraph.RemoveEdgeProperty.edge_type:type_name -> atom.CpgStruct.Edge.EdgeType + 1, // 35: atom.DiffGraph.RemoveEdgeProperty.property_name:type_name -> atom.EdgePropertyName + 27, // 36: atom.DiffGraph.Entry.node:type_name -> atom.CpgStruct.Node + 28, // 37: atom.DiffGraph.Entry.edge:type_name -> atom.CpgStruct.Edge + 19, // 38: atom.DiffGraph.Entry.node_property:type_name -> atom.AdditionalNodeProperty + 20, // 39: atom.DiffGraph.Entry.edge_property:type_name -> atom.AdditionalEdgeProperty + 31, // 40: atom.DiffGraph.Entry.remove_node:type_name -> atom.DiffGraph.RemoveNode + 32, // 41: atom.DiffGraph.Entry.remove_node_property:type_name -> atom.DiffGraph.RemoveNodeProperty + 33, // 42: atom.DiffGraph.Entry.remove_edge:type_name -> atom.DiffGraph.RemoveEdge + 34, // 43: atom.DiffGraph.Entry.remove_edge_property:type_name -> atom.DiffGraph.RemoveEdgeProperty + 9, // 44: atom.UsageSlice.TargetObj.label:type_name -> atom.UsageSlice.LabelType + 36, // 45: atom.UsageSlice.ObjectUsageSlice.targetObj:type_name -> atom.UsageSlice.TargetObj + 37, // 46: atom.UsageSlice.ObjectUsageSlice.definedBy:type_name -> atom.UsageSlice.DefinedBy + 38, // 47: atom.UsageSlice.ObjectUsageSlice.invokedCalls:type_name -> atom.UsageSlice.InvokedCalls + 39, // 48: atom.UsageSlice.ObjectUsageSlice.argToCalls:type_name -> atom.UsageSlice.ArgToCalls + 40, // 49: atom.UsageSlice.MethodUsageSlice.usages:type_name -> atom.UsageSlice.ObjectUsageSlice + 9, // 50: atom.UsageSlice.Fields.label:type_name -> atom.UsageSlice.LabelType + 42, // 51: atom.UsageSlice.UserDefinedTypes.fields:type_name -> atom.UsageSlice.Fields + 43, // 52: atom.UsageSlice.UserDefinedTypes.procedures:type_name -> atom.UsageSlice.Procedures + 8, // 53: atom.DataFlowSlice.Edges.label:type_name -> atom.CpgStruct.Edge.EdgeType + 46, // 54: atom.DataFlowSlice.Paths.flows:type_name -> atom.DataFlowSlice.Flows + 24, // 55: atom.DataFlowSlice.Graph.nodes:type_name -> atom.Nodes + 45, // 56: atom.DataFlowSlice.Graph.edges:type_name -> atom.DataFlowSlice.Edges + 24, // 57: atom.ReachableSlice.Reachables.nodes:type_name -> atom.Nodes + 58, // [58:58] is the sub-list for method output_type + 58, // [58:58] is the sub-list for method input_type + 58, // [58:58] is the sub-list for extension type_name + 58, // [58:58] is the sub-list for extension extendee + 0, // [0:58] is the sub-list for field type_name } func init() { file_atom_proto_init() } @@ -5031,7 +5210,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataFlowSlice); i { + switch v := v.(*Nodes); i { case 0: return &v.state case 1: @@ -5043,7 +5222,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CpgStruct_Node); i { + switch v := v.(*DataFlowSlice); i { case 0: return &v.state case 1: @@ -5055,7 +5234,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CpgStruct_Edge); i { + switch v := v.(*ReachableSlice); i { case 0: return &v.state case 1: @@ -5067,7 +5246,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CpgStruct_Node_Property); i { + switch v := v.(*CpgStruct_Node); i { case 0: return &v.state case 1: @@ -5079,7 +5258,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CpgStruct_Edge_Property); i { + switch v := v.(*CpgStruct_Edge); i { case 0: return &v.state case 1: @@ -5091,7 +5270,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiffGraph_RemoveNode); i { + switch v := v.(*CpgStruct_Node_Property); i { case 0: return &v.state case 1: @@ -5103,7 +5282,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiffGraph_RemoveNodeProperty); i { + switch v := v.(*CpgStruct_Edge_Property); i { case 0: return &v.state case 1: @@ -5115,7 +5294,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiffGraph_RemoveEdge); i { + switch v := v.(*DiffGraph_RemoveNode); i { case 0: return &v.state case 1: @@ -5127,7 +5306,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiffGraph_RemoveEdgeProperty); i { + switch v := v.(*DiffGraph_RemoveNodeProperty); i { case 0: return &v.state case 1: @@ -5139,7 +5318,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiffGraph_Entry); i { + switch v := v.(*DiffGraph_RemoveEdge); i { case 0: return &v.state case 1: @@ -5151,7 +5330,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsageSlice_TargetObj); i { + switch v := v.(*DiffGraph_RemoveEdgeProperty); i { case 0: return &v.state case 1: @@ -5163,7 +5342,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsageSlice_DefinedBy); i { + switch v := v.(*DiffGraph_Entry); i { case 0: return &v.state case 1: @@ -5175,7 +5354,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsageSlice_InvokedCalls); i { + switch v := v.(*UsageSlice_TargetObj); i { case 0: return &v.state case 1: @@ -5187,7 +5366,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsageSlice_ArgToCalls); i { + switch v := v.(*UsageSlice_DefinedBy); i { case 0: return &v.state case 1: @@ -5199,7 +5378,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsageSlice_ObjectUsageSlice); i { + switch v := v.(*UsageSlice_InvokedCalls); i { case 0: return &v.state case 1: @@ -5211,7 +5390,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsageSlice_MethodUsageSlice); i { + switch v := v.(*UsageSlice_ArgToCalls); i { case 0: return &v.state case 1: @@ -5223,7 +5402,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsageSlice_Fields); i { + switch v := v.(*UsageSlice_ObjectUsageSlice); i { case 0: return &v.state case 1: @@ -5235,7 +5414,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsageSlice_Procedures); i { + switch v := v.(*UsageSlice_MethodUsageSlice); i { case 0: return &v.state case 1: @@ -5247,7 +5426,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UsageSlice_UserDefinedTypes); i { + switch v := v.(*UsageSlice_Fields); i { case 0: return &v.state case 1: @@ -5259,7 +5438,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataFlowSlice_Nodes); i { + switch v := v.(*UsageSlice_Procedures); i { case 0: return &v.state case 1: @@ -5271,7 +5450,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataFlowSlice_Edges); i { + switch v := v.(*UsageSlice_UserDefinedTypes); i { case 0: return &v.state case 1: @@ -5283,7 +5462,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataFlowSlice_Flows); i { + switch v := v.(*DataFlowSlice_Edges); i { case 0: return &v.state case 1: @@ -5295,7 +5474,7 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataFlowSlice_Paths); i { + switch v := v.(*DataFlowSlice_Flows); i { case 0: return &v.state case 1: @@ -5307,6 +5486,18 @@ func file_atom_proto_init() { } } file_atom_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataFlowSlice_Paths); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_atom_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DataFlowSlice_Graph); i { case 0: return &v.state @@ -5318,6 +5509,30 @@ func file_atom_proto_init() { return nil } } + file_atom_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReachableSlice_Reachables); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_atom_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReachableSlice_Purls); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_atom_proto_msgTypes[0].OneofWrappers = []interface{}{ (*PropertyValue_StringValue)(nil), @@ -5334,7 +5549,7 @@ func file_atom_proto_init() { (*PropertyValue_DoubleList)(nil), (*PropertyValue_ContainedRefs)(nil), } - file_atom_proto_msgTypes[23].OneofWrappers = []interface{}{ + file_atom_proto_msgTypes[25].OneofWrappers = []interface{}{ (*DiffGraph_Entry_Node)(nil), (*DiffGraph_Entry_Edge)(nil), (*DiffGraph_Entry_NodeProperty)(nil), @@ -5350,7 +5565,7 @@ func file_atom_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_atom_proto_rawDesc, NumEnums: 10, - NumMessages: 38, + NumMessages: 41, NumExtensions: 0, NumServices: 0, }, diff --git a/specification/bindings/java/io/appthreat/atom/Atom.java b/specification/bindings/java/io/appthreat/atom/Atom.java index 39d0f94..60b1ef2 100644 --- a/specification/bindings/java/io/appthreat/atom/Atom.java +++ b/specification/bindings/java/io/appthreat/atom/Atom.java @@ -39527,878 +39527,3674 @@ public io.appthreat.atom.Atom.UsageSlice getDefaultInstanceForType() { } - public interface DataFlowSliceOrBuilder extends - // @@protoc_insertion_point(interface_extends:atom.DataFlowSlice) + public interface NodesOrBuilder extends + // @@protoc_insertion_point(interface_extends:atom.Nodes) com.google.protobuf.MessageOrBuilder { /** - * .atom.DataFlowSlice.Graph graph = 1; - * @return Whether the graph field is set. + *
+     * Id of the node
+     * 
+ * + * uint32 id = 1; + * @return The id. */ - boolean hasGraph(); + int getId(); + /** - * .atom.DataFlowSlice.Graph graph = 1; - * @return The graph. + *
+     * Label
+     * 
+ * + * .atom.NodeType label = 2; + * @return The enum numeric value on the wire for label. */ - io.appthreat.atom.Atom.DataFlowSlice.Graph getGraph(); + int getLabelValue(); /** - * .atom.DataFlowSlice.Graph graph = 1; + *
+     * Label
+     * 
+ * + * .atom.NodeType label = 2; + * @return The label. */ - io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder getGraphOrBuilder(); + io.appthreat.atom.Atom.NodeType getLabel(); /** - * .atom.DataFlowSlice.Paths path = 2; - * @return Whether the path field is set. + *
+     * Name of the call or identifier or parameter
+     * 
+ * + * string name = 3; + * @return The name. */ - boolean hasPath(); + java.lang.String getName(); /** - * .atom.DataFlowSlice.Paths path = 2; - * @return The path. + *
+     * Name of the call or identifier or parameter
+     * 
+ * + * string name = 3; + * @return The bytes for name. */ - io.appthreat.atom.Atom.DataFlowSlice.Paths getPath(); + com.google.protobuf.ByteString + getNameBytes(); + /** - * .atom.DataFlowSlice.Paths path = 2; + *
+     * Full name of the call
+     * 
+ * + * string fullName = 4; + * @return The fullName. */ - io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder getPathOrBuilder(); + java.lang.String getFullName(); + /** + *
+     * Full name of the call
+     * 
+ * + * string fullName = 4; + * @return The bytes for fullName. + */ + com.google.protobuf.ByteString + getFullNameBytes(); + + /** + *
+     * Method signature of the call
+     * 
+ * + * string signature = 5; + * @return The signature. + */ + java.lang.String getSignature(); + /** + *
+     * Method signature of the call
+     * 
+ * + * string signature = 5; + * @return The bytes for signature. + */ + com.google.protobuf.ByteString + getSignatureBytes(); + + /** + *
+     * Boolean to indicate if this call belongs to an external method
+     * 
+ * + * bool isExternal = 6; + * @return The isExternal. + */ + boolean getIsExternal(); + + /** + *
+     * Source code
+     * 
+ * + * string code = 7; + * @return The code. + */ + java.lang.String getCode(); + /** + *
+     * Source code
+     * 
+ * + * string code = 7; + * @return The bytes for code. + */ + com.google.protobuf.ByteString + getCodeBytes(); + + /** + *
+     * Type full name
+     * 
+ * + * string typeFullName = 8; + * @return The typeFullName. + */ + java.lang.String getTypeFullName(); + /** + *
+     * Type full name
+     * 
+ * + * string typeFullName = 8; + * @return The bytes for typeFullName. + */ + com.google.protobuf.ByteString + getTypeFullNameBytes(); + + /** + *
+     * Parent method name
+     * 
+ * + * string parentMethodName = 9; + * @return The parentMethodName. + */ + java.lang.String getParentMethodName(); + /** + *
+     * Parent method name
+     * 
+ * + * string parentMethodName = 9; + * @return The bytes for parentMethodName. + */ + com.google.protobuf.ByteString + getParentMethodNameBytes(); + + /** + *
+     * Parent filename
+     * 
+ * + * string parentFileName = 10; + * @return The parentFileName. + */ + java.lang.String getParentFileName(); + /** + *
+     * Parent filename
+     * 
+ * + * string parentFileName = 10; + * @return The bytes for parentFileName. + */ + com.google.protobuf.ByteString + getParentFileNameBytes(); + + /** + *
+     * Parent package name
+     * 
+ * + * string parentPackageName = 11; + * @return The parentPackageName. + */ + java.lang.String getParentPackageName(); + /** + *
+     * Parent package name
+     * 
+ * + * string parentPackageName = 11; + * @return The bytes for parentPackageName. + */ + com.google.protobuf.ByteString + getParentPackageNameBytes(); + + /** + *
+     * Parent class name
+     * 
+ * + * string parentClassName = 12; + * @return The parentClassName. + */ + java.lang.String getParentClassName(); + /** + *
+     * Parent class name
+     * 
+ * + * string parentClassName = 12; + * @return The bytes for parentClassName. + */ + com.google.protobuf.ByteString + getParentClassNameBytes(); + + /** + *
+     * Line number
+     * 
+ * + * uint32 lineNumber = 13; + * @return The lineNumber. + */ + int getLineNumber(); + + /** + *
+     * Column number
+     * 
+ * + * uint32 columnNumber = 14; + * @return The columnNumber. + */ + int getColumnNumber(); + + /** + *
+     * Tags. Can contain simple names including package url
+     * 
+ * + * string tags = 15; + * @return The tags. + */ + java.lang.String getTags(); + /** + *
+     * Tags. Can contain simple names including package url
+     * 
+ * + * string tags = 15; + * @return The bytes for tags. + */ + com.google.protobuf.ByteString + getTagsBytes(); } /** - *
-   **
-   * DataFlow slices offers a list of nodes and edges exported from data dependency graph
-   *
-   * ![Data Flow slices overview](./docs/Data%20Flows.png)
-   * 
- * - * Protobuf type {@code atom.DataFlowSlice} + * Protobuf type {@code atom.Nodes} */ - public static final class DataFlowSlice extends + public static final class Nodes extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:atom.DataFlowSlice) - DataFlowSliceOrBuilder { + // @@protoc_insertion_point(message_implements:atom.Nodes) + NodesOrBuilder { private static final long serialVersionUID = 0L; - // Use DataFlowSlice.newBuilder() to construct. - private DataFlowSlice(com.google.protobuf.GeneratedMessageV3.Builder builder) { + // Use Nodes.newBuilder() to construct. + private Nodes(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); } - private DataFlowSlice() { + private Nodes() { + label_ = 0; + name_ = ""; + fullName_ = ""; + signature_ = ""; + code_ = ""; + typeFullName_ = ""; + parentMethodName_ = ""; + parentFileName_ = ""; + parentPackageName_ = ""; + parentClassName_ = ""; + tags_ = ""; } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new DataFlowSlice(); + return new Nodes(); } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_descriptor; + return io.appthreat.atom.Atom.internal_static_atom_Nodes_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_fieldAccessorTable + return io.appthreat.atom.Atom.internal_static_atom_Nodes_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.appthreat.atom.Atom.DataFlowSlice.class, io.appthreat.atom.Atom.DataFlowSlice.Builder.class); + io.appthreat.atom.Atom.Nodes.class, io.appthreat.atom.Atom.Nodes.Builder.class); } - public interface NodesOrBuilder extends - // @@protoc_insertion_point(interface_extends:atom.DataFlowSlice.Nodes) - com.google.protobuf.MessageOrBuilder { + public static final int ID_FIELD_NUMBER = 1; + private int id_ = 0; + /** + *
+     * Id of the node
+     * 
+ * + * uint32 id = 1; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } - /** - *
-       * Id of the node
-       * 
- * - * uint32 id = 1; - * @return The id. - */ - int getId(); + public static final int LABEL_FIELD_NUMBER = 2; + private int label_ = 0; + /** + *
+     * Label
+     * 
+ * + * .atom.NodeType label = 2; + * @return The enum numeric value on the wire for label. + */ + @java.lang.Override public int getLabelValue() { + return label_; + } + /** + *
+     * Label
+     * 
+ * + * .atom.NodeType label = 2; + * @return The label. + */ + @java.lang.Override public io.appthreat.atom.Atom.NodeType getLabel() { + io.appthreat.atom.Atom.NodeType result = io.appthreat.atom.Atom.NodeType.forNumber(label_); + return result == null ? io.appthreat.atom.Atom.NodeType.UNRECOGNIZED : result; + } - /** - *
-       * Label
-       * 
- * - * .atom.NodeType label = 2; - * @return The enum numeric value on the wire for label. - */ - int getLabelValue(); - /** - *
-       * Label
-       * 
- * - * .atom.NodeType label = 2; - * @return The label. - */ - io.appthreat.atom.Atom.NodeType getLabel(); + public static final int NAME_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + /** + *
+     * Name of the call or identifier or parameter
+     * 
+ * + * string name = 3; + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + /** + *
+     * Name of the call or identifier or parameter
+     * 
+ * + * string name = 3; + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } - /** - *
+    public static final int FULLNAME_FIELD_NUMBER = 4;
+    @SuppressWarnings("serial")
+    private volatile java.lang.Object fullName_ = "";
+    /**
+     * 
+     * Full name of the call
+     * 
+ * + * string fullName = 4; + * @return The fullName. + */ + @java.lang.Override + public java.lang.String getFullName() { + java.lang.Object ref = fullName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + fullName_ = s; + return s; + } + } + /** + *
+     * Full name of the call
+     * 
+ * + * string fullName = 4; + * @return The bytes for fullName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getFullNameBytes() { + java.lang.Object ref = fullName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + fullName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SIGNATURE_FIELD_NUMBER = 5; + @SuppressWarnings("serial") + private volatile java.lang.Object signature_ = ""; + /** + *
+     * Method signature of the call
+     * 
+ * + * string signature = 5; + * @return The signature. + */ + @java.lang.Override + public java.lang.String getSignature() { + java.lang.Object ref = signature_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + signature_ = s; + return s; + } + } + /** + *
+     * Method signature of the call
+     * 
+ * + * string signature = 5; + * @return The bytes for signature. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getSignatureBytes() { + java.lang.Object ref = signature_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + signature_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ISEXTERNAL_FIELD_NUMBER = 6; + private boolean isExternal_ = false; + /** + *
+     * Boolean to indicate if this call belongs to an external method
+     * 
+ * + * bool isExternal = 6; + * @return The isExternal. + */ + @java.lang.Override + public boolean getIsExternal() { + return isExternal_; + } + + public static final int CODE_FIELD_NUMBER = 7; + @SuppressWarnings("serial") + private volatile java.lang.Object code_ = ""; + /** + *
+     * Source code
+     * 
+ * + * string code = 7; + * @return The code. + */ + @java.lang.Override + public java.lang.String getCode() { + java.lang.Object ref = code_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + code_ = s; + return s; + } + } + /** + *
+     * Source code
+     * 
+ * + * string code = 7; + * @return The bytes for code. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getCodeBytes() { + java.lang.Object ref = code_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + code_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TYPEFULLNAME_FIELD_NUMBER = 8; + @SuppressWarnings("serial") + private volatile java.lang.Object typeFullName_ = ""; + /** + *
+     * Type full name
+     * 
+ * + * string typeFullName = 8; + * @return The typeFullName. + */ + @java.lang.Override + public java.lang.String getTypeFullName() { + java.lang.Object ref = typeFullName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + typeFullName_ = s; + return s; + } + } + /** + *
+     * Type full name
+     * 
+ * + * string typeFullName = 8; + * @return The bytes for typeFullName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getTypeFullNameBytes() { + java.lang.Object ref = typeFullName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + typeFullName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PARENTMETHODNAME_FIELD_NUMBER = 9; + @SuppressWarnings("serial") + private volatile java.lang.Object parentMethodName_ = ""; + /** + *
+     * Parent method name
+     * 
+ * + * string parentMethodName = 9; + * @return The parentMethodName. + */ + @java.lang.Override + public java.lang.String getParentMethodName() { + java.lang.Object ref = parentMethodName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parentMethodName_ = s; + return s; + } + } + /** + *
+     * Parent method name
+     * 
+ * + * string parentMethodName = 9; + * @return The bytes for parentMethodName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getParentMethodNameBytes() { + java.lang.Object ref = parentMethodName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + parentMethodName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PARENTFILENAME_FIELD_NUMBER = 10; + @SuppressWarnings("serial") + private volatile java.lang.Object parentFileName_ = ""; + /** + *
+     * Parent filename
+     * 
+ * + * string parentFileName = 10; + * @return The parentFileName. + */ + @java.lang.Override + public java.lang.String getParentFileName() { + java.lang.Object ref = parentFileName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parentFileName_ = s; + return s; + } + } + /** + *
+     * Parent filename
+     * 
+ * + * string parentFileName = 10; + * @return The bytes for parentFileName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getParentFileNameBytes() { + java.lang.Object ref = parentFileName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + parentFileName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PARENTPACKAGENAME_FIELD_NUMBER = 11; + @SuppressWarnings("serial") + private volatile java.lang.Object parentPackageName_ = ""; + /** + *
+     * Parent package name
+     * 
+ * + * string parentPackageName = 11; + * @return The parentPackageName. + */ + @java.lang.Override + public java.lang.String getParentPackageName() { + java.lang.Object ref = parentPackageName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parentPackageName_ = s; + return s; + } + } + /** + *
+     * Parent package name
+     * 
+ * + * string parentPackageName = 11; + * @return The bytes for parentPackageName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getParentPackageNameBytes() { + java.lang.Object ref = parentPackageName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + parentPackageName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PARENTCLASSNAME_FIELD_NUMBER = 12; + @SuppressWarnings("serial") + private volatile java.lang.Object parentClassName_ = ""; + /** + *
+     * Parent class name
+     * 
+ * + * string parentClassName = 12; + * @return The parentClassName. + */ + @java.lang.Override + public java.lang.String getParentClassName() { + java.lang.Object ref = parentClassName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parentClassName_ = s; + return s; + } + } + /** + *
+     * Parent class name
+     * 
+ * + * string parentClassName = 12; + * @return The bytes for parentClassName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getParentClassNameBytes() { + java.lang.Object ref = parentClassName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + parentClassName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int LINENUMBER_FIELD_NUMBER = 13; + private int lineNumber_ = 0; + /** + *
+     * Line number
+     * 
+ * + * uint32 lineNumber = 13; + * @return The lineNumber. + */ + @java.lang.Override + public int getLineNumber() { + return lineNumber_; + } + + public static final int COLUMNNUMBER_FIELD_NUMBER = 14; + private int columnNumber_ = 0; + /** + *
+     * Column number
+     * 
+ * + * uint32 columnNumber = 14; + * @return The columnNumber. + */ + @java.lang.Override + public int getColumnNumber() { + return columnNumber_; + } + + public static final int TAGS_FIELD_NUMBER = 15; + @SuppressWarnings("serial") + private volatile java.lang.Object tags_ = ""; + /** + *
+     * Tags. Can contain simple names including package url
+     * 
+ * + * string tags = 15; + * @return The tags. + */ + @java.lang.Override + public java.lang.String getTags() { + java.lang.Object ref = tags_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + tags_ = s; + return s; + } + } + /** + *
+     * Tags. Can contain simple names including package url
+     * 
+ * + * string tags = 15; + * @return The bytes for tags. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getTagsBytes() { + java.lang.Object ref = tags_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + tags_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (id_ != 0) { + output.writeUInt32(1, id_); + } + if (label_ != io.appthreat.atom.Atom.NodeType.UNKNOWN_NODE_TYPE.getNumber()) { + output.writeEnum(2, label_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, name_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(fullName_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 4, fullName_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(signature_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, signature_); + } + if (isExternal_ != false) { + output.writeBool(6, isExternal_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(code_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 7, code_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(typeFullName_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 8, typeFullName_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentMethodName_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 9, parentMethodName_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentFileName_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 10, parentFileName_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentPackageName_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 11, parentPackageName_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentClassName_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 12, parentClassName_); + } + if (lineNumber_ != 0) { + output.writeUInt32(13, lineNumber_); + } + if (columnNumber_ != 0) { + output.writeUInt32(14, columnNumber_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(tags_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 15, tags_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, id_); + } + if (label_ != io.appthreat.atom.Atom.NodeType.UNKNOWN_NODE_TYPE.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(2, label_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, name_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(fullName_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, fullName_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(signature_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, signature_); + } + if (isExternal_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(6, isExternal_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(code_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, code_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(typeFullName_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, typeFullName_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentMethodName_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, parentMethodName_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentFileName_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, parentFileName_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentPackageName_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(11, parentPackageName_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentClassName_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, parentClassName_); + } + if (lineNumber_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(13, lineNumber_); + } + if (columnNumber_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(14, columnNumber_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(tags_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(15, tags_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof io.appthreat.atom.Atom.Nodes)) { + return super.equals(obj); + } + io.appthreat.atom.Atom.Nodes other = (io.appthreat.atom.Atom.Nodes) obj; + + if (getId() + != other.getId()) return false; + if (label_ != other.label_) return false; + if (!getName() + .equals(other.getName())) return false; + if (!getFullName() + .equals(other.getFullName())) return false; + if (!getSignature() + .equals(other.getSignature())) return false; + if (getIsExternal() + != other.getIsExternal()) return false; + if (!getCode() + .equals(other.getCode())) return false; + if (!getTypeFullName() + .equals(other.getTypeFullName())) return false; + if (!getParentMethodName() + .equals(other.getParentMethodName())) return false; + if (!getParentFileName() + .equals(other.getParentFileName())) return false; + if (!getParentPackageName() + .equals(other.getParentPackageName())) return false; + if (!getParentClassName() + .equals(other.getParentClassName())) return false; + if (getLineNumber() + != other.getLineNumber()) return false; + if (getColumnNumber() + != other.getColumnNumber()) return false; + if (!getTags() + .equals(other.getTags())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (37 * hash) + LABEL_FIELD_NUMBER; + hash = (53 * hash) + label_; + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + FULLNAME_FIELD_NUMBER; + hash = (53 * hash) + getFullName().hashCode(); + hash = (37 * hash) + SIGNATURE_FIELD_NUMBER; + hash = (53 * hash) + getSignature().hashCode(); + hash = (37 * hash) + ISEXTERNAL_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getIsExternal()); + hash = (37 * hash) + CODE_FIELD_NUMBER; + hash = (53 * hash) + getCode().hashCode(); + hash = (37 * hash) + TYPEFULLNAME_FIELD_NUMBER; + hash = (53 * hash) + getTypeFullName().hashCode(); + hash = (37 * hash) + PARENTMETHODNAME_FIELD_NUMBER; + hash = (53 * hash) + getParentMethodName().hashCode(); + hash = (37 * hash) + PARENTFILENAME_FIELD_NUMBER; + hash = (53 * hash) + getParentFileName().hashCode(); + hash = (37 * hash) + PARENTPACKAGENAME_FIELD_NUMBER; + hash = (53 * hash) + getParentPackageName().hashCode(); + hash = (37 * hash) + PARENTCLASSNAME_FIELD_NUMBER; + hash = (53 * hash) + getParentClassName().hashCode(); + hash = (37 * hash) + LINENUMBER_FIELD_NUMBER; + hash = (53 * hash) + getLineNumber(); + hash = (37 * hash) + COLUMNNUMBER_FIELD_NUMBER; + hash = (53 * hash) + getColumnNumber(); + hash = (37 * hash) + TAGS_FIELD_NUMBER; + hash = (53 * hash) + getTags().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static io.appthreat.atom.Atom.Nodes parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.Nodes parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.Nodes parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.Nodes parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.Nodes parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.Nodes parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.Nodes parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static io.appthreat.atom.Atom.Nodes parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static io.appthreat.atom.Atom.Nodes parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static io.appthreat.atom.Atom.Nodes parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static io.appthreat.atom.Atom.Nodes parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static io.appthreat.atom.Atom.Nodes parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(io.appthreat.atom.Atom.Nodes prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code atom.Nodes} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:atom.Nodes) + io.appthreat.atom.Atom.NodesOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.appthreat.atom.Atom.internal_static_atom_Nodes_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.appthreat.atom.Atom.internal_static_atom_Nodes_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.appthreat.atom.Atom.Nodes.class, io.appthreat.atom.Atom.Nodes.Builder.class); + } + + // Construct using io.appthreat.atom.Atom.Nodes.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + id_ = 0; + label_ = 0; + name_ = ""; + fullName_ = ""; + signature_ = ""; + isExternal_ = false; + code_ = ""; + typeFullName_ = ""; + parentMethodName_ = ""; + parentFileName_ = ""; + parentPackageName_ = ""; + parentClassName_ = ""; + lineNumber_ = 0; + columnNumber_ = 0; + tags_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.appthreat.atom.Atom.internal_static_atom_Nodes_descriptor; + } + + @java.lang.Override + public io.appthreat.atom.Atom.Nodes getDefaultInstanceForType() { + return io.appthreat.atom.Atom.Nodes.getDefaultInstance(); + } + + @java.lang.Override + public io.appthreat.atom.Atom.Nodes build() { + io.appthreat.atom.Atom.Nodes result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public io.appthreat.atom.Atom.Nodes buildPartial() { + io.appthreat.atom.Atom.Nodes result = new io.appthreat.atom.Atom.Nodes(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(io.appthreat.atom.Atom.Nodes result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.id_ = id_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.label_ = label_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.fullName_ = fullName_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.signature_ = signature_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.isExternal_ = isExternal_; + } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.code_ = code_; + } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.typeFullName_ = typeFullName_; + } + if (((from_bitField0_ & 0x00000100) != 0)) { + result.parentMethodName_ = parentMethodName_; + } + if (((from_bitField0_ & 0x00000200) != 0)) { + result.parentFileName_ = parentFileName_; + } + if (((from_bitField0_ & 0x00000400) != 0)) { + result.parentPackageName_ = parentPackageName_; + } + if (((from_bitField0_ & 0x00000800) != 0)) { + result.parentClassName_ = parentClassName_; + } + if (((from_bitField0_ & 0x00001000) != 0)) { + result.lineNumber_ = lineNumber_; + } + if (((from_bitField0_ & 0x00002000) != 0)) { + result.columnNumber_ = columnNumber_; + } + if (((from_bitField0_ & 0x00004000) != 0)) { + result.tags_ = tags_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.appthreat.atom.Atom.Nodes) { + return mergeFrom((io.appthreat.atom.Atom.Nodes)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.appthreat.atom.Atom.Nodes other) { + if (other == io.appthreat.atom.Atom.Nodes.getDefaultInstance()) return this; + if (other.getId() != 0) { + setId(other.getId()); + } + if (other.label_ != 0) { + setLabelValue(other.getLabelValue()); + } + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (!other.getFullName().isEmpty()) { + fullName_ = other.fullName_; + bitField0_ |= 0x00000008; + onChanged(); + } + if (!other.getSignature().isEmpty()) { + signature_ = other.signature_; + bitField0_ |= 0x00000010; + onChanged(); + } + if (other.getIsExternal() != false) { + setIsExternal(other.getIsExternal()); + } + if (!other.getCode().isEmpty()) { + code_ = other.code_; + bitField0_ |= 0x00000040; + onChanged(); + } + if (!other.getTypeFullName().isEmpty()) { + typeFullName_ = other.typeFullName_; + bitField0_ |= 0x00000080; + onChanged(); + } + if (!other.getParentMethodName().isEmpty()) { + parentMethodName_ = other.parentMethodName_; + bitField0_ |= 0x00000100; + onChanged(); + } + if (!other.getParentFileName().isEmpty()) { + parentFileName_ = other.parentFileName_; + bitField0_ |= 0x00000200; + onChanged(); + } + if (!other.getParentPackageName().isEmpty()) { + parentPackageName_ = other.parentPackageName_; + bitField0_ |= 0x00000400; + onChanged(); + } + if (!other.getParentClassName().isEmpty()) { + parentClassName_ = other.parentClassName_; + bitField0_ |= 0x00000800; + onChanged(); + } + if (other.getLineNumber() != 0) { + setLineNumber(other.getLineNumber()); + } + if (other.getColumnNumber() != 0) { + setColumnNumber(other.getColumnNumber()); + } + if (!other.getTags().isEmpty()) { + tags_ = other.tags_; + bitField0_ |= 0x00004000; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + id_ = input.readUInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + label_ = input.readEnum(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 26: { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: { + fullName_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: { + signature_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000010; + break; + } // case 42 + case 48: { + isExternal_ = input.readBool(); + bitField0_ |= 0x00000020; + break; + } // case 48 + case 58: { + code_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000040; + break; + } // case 58 + case 66: { + typeFullName_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000080; + break; + } // case 66 + case 74: { + parentMethodName_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000100; + break; + } // case 74 + case 82: { + parentFileName_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000200; + break; + } // case 82 + case 90: { + parentPackageName_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000400; + break; + } // case 90 + case 98: { + parentClassName_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000800; + break; + } // case 98 + case 104: { + lineNumber_ = input.readUInt32(); + bitField0_ |= 0x00001000; + break; + } // case 104 + case 112: { + columnNumber_ = input.readUInt32(); + bitField0_ |= 0x00002000; + break; + } // case 112 + case 122: { + tags_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00004000; + break; + } // case 122 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private int id_ ; + /** + *
+       * Id of the node
+       * 
+ * + * uint32 id = 1; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + *
+       * Id of the node
+       * 
+ * + * uint32 id = 1; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
+       * Id of the node
+       * 
+ * + * uint32 id = 1; + * @return This builder for chaining. + */ + public Builder clearId() { + bitField0_ = (bitField0_ & ~0x00000001); + id_ = 0; + onChanged(); + return this; + } + + private int label_ = 0; + /** + *
+       * Label
+       * 
+ * + * .atom.NodeType label = 2; + * @return The enum numeric value on the wire for label. + */ + @java.lang.Override public int getLabelValue() { + return label_; + } + /** + *
+       * Label
+       * 
+ * + * .atom.NodeType label = 2; + * @param value The enum numeric value on the wire for label to set. + * @return This builder for chaining. + */ + public Builder setLabelValue(int value) { + label_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+       * Label
+       * 
+ * + * .atom.NodeType label = 2; + * @return The label. + */ + @java.lang.Override + public io.appthreat.atom.Atom.NodeType getLabel() { + io.appthreat.atom.Atom.NodeType result = io.appthreat.atom.Atom.NodeType.forNumber(label_); + return result == null ? io.appthreat.atom.Atom.NodeType.UNRECOGNIZED : result; + } + /** + *
+       * Label
+       * 
+ * + * .atom.NodeType label = 2; + * @param value The label to set. + * @return This builder for chaining. + */ + public Builder setLabel(io.appthreat.atom.Atom.NodeType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + label_ = value.getNumber(); + onChanged(); + return this; + } + /** + *
+       * Label
+       * 
+ * + * .atom.NodeType label = 2; + * @return This builder for chaining. + */ + public Builder clearLabel() { + bitField0_ = (bitField0_ & ~0x00000002); + label_ = 0; + onChanged(); + return this; + } + + private java.lang.Object name_ = ""; + /** + *
+       * Name of the call or identifier or parameter
+       * 
+ * + * string name = 3; + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Name of the call or identifier or parameter
+       * 
+ * + * string name = 3; + * @return The bytes for name. + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Name of the call or identifier or parameter
+       * 
+ * + * string name = 3; + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + name_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + *
+       * Name of the call or identifier or parameter
+       * 
+ * + * string name = 3; + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + /** + *
        * Name of the call or identifier or parameter
        * 
* - * string name = 3; - * @return The name. + * string name = 3; + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.lang.Object fullName_ = ""; + /** + *
+       * Full name of the call
+       * 
+ * + * string fullName = 4; + * @return The fullName. + */ + public java.lang.String getFullName() { + java.lang.Object ref = fullName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + fullName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Full name of the call
+       * 
+ * + * string fullName = 4; + * @return The bytes for fullName. + */ + public com.google.protobuf.ByteString + getFullNameBytes() { + java.lang.Object ref = fullName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + fullName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Full name of the call
+       * 
+ * + * string fullName = 4; + * @param value The fullName to set. + * @return This builder for chaining. + */ + public Builder setFullName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + fullName_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + *
+       * Full name of the call
+       * 
+ * + * string fullName = 4; + * @return This builder for chaining. + */ + public Builder clearFullName() { + fullName_ = getDefaultInstance().getFullName(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + /** + *
+       * Full name of the call
+       * 
+ * + * string fullName = 4; + * @param value The bytes for fullName to set. + * @return This builder for chaining. + */ + public Builder setFullNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + fullName_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + private java.lang.Object signature_ = ""; + /** + *
+       * Method signature of the call
+       * 
+ * + * string signature = 5; + * @return The signature. + */ + public java.lang.String getSignature() { + java.lang.Object ref = signature_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + signature_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Method signature of the call
+       * 
+ * + * string signature = 5; + * @return The bytes for signature. + */ + public com.google.protobuf.ByteString + getSignatureBytes() { + java.lang.Object ref = signature_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + signature_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Method signature of the call
+       * 
+ * + * string signature = 5; + * @param value The signature to set. + * @return This builder for chaining. + */ + public Builder setSignature( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + signature_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + *
+       * Method signature of the call
+       * 
+ * + * string signature = 5; + * @return This builder for chaining. + */ + public Builder clearSignature() { + signature_ = getDefaultInstance().getSignature(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + /** + *
+       * Method signature of the call
+       * 
+ * + * string signature = 5; + * @param value The bytes for signature to set. + * @return This builder for chaining. + */ + public Builder setSignatureBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + signature_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + private boolean isExternal_ ; + /** + *
+       * Boolean to indicate if this call belongs to an external method
+       * 
+ * + * bool isExternal = 6; + * @return The isExternal. + */ + @java.lang.Override + public boolean getIsExternal() { + return isExternal_; + } + /** + *
+       * Boolean to indicate if this call belongs to an external method
+       * 
+ * + * bool isExternal = 6; + * @param value The isExternal to set. + * @return This builder for chaining. + */ + public Builder setIsExternal(boolean value) { + + isExternal_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + /** + *
+       * Boolean to indicate if this call belongs to an external method
+       * 
+ * + * bool isExternal = 6; + * @return This builder for chaining. + */ + public Builder clearIsExternal() { + bitField0_ = (bitField0_ & ~0x00000020); + isExternal_ = false; + onChanged(); + return this; + } + + private java.lang.Object code_ = ""; + /** + *
+       * Source code
+       * 
+ * + * string code = 7; + * @return The code. + */ + public java.lang.String getCode() { + java.lang.Object ref = code_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + code_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Source code
+       * 
+ * + * string code = 7; + * @return The bytes for code. + */ + public com.google.protobuf.ByteString + getCodeBytes() { + java.lang.Object ref = code_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + code_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Source code
+       * 
+ * + * string code = 7; + * @param value The code to set. + * @return This builder for chaining. + */ + public Builder setCode( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + code_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + /** + *
+       * Source code
+       * 
+ * + * string code = 7; + * @return This builder for chaining. + */ + public Builder clearCode() { + code_ = getDefaultInstance().getCode(); + bitField0_ = (bitField0_ & ~0x00000040); + onChanged(); + return this; + } + /** + *
+       * Source code
+       * 
+ * + * string code = 7; + * @param value The bytes for code to set. + * @return This builder for chaining. + */ + public Builder setCodeBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + code_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + private java.lang.Object typeFullName_ = ""; + /** + *
+       * Type full name
+       * 
+ * + * string typeFullName = 8; + * @return The typeFullName. + */ + public java.lang.String getTypeFullName() { + java.lang.Object ref = typeFullName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + typeFullName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Type full name
+       * 
+ * + * string typeFullName = 8; + * @return The bytes for typeFullName. + */ + public com.google.protobuf.ByteString + getTypeFullNameBytes() { + java.lang.Object ref = typeFullName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + typeFullName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Type full name
+       * 
+ * + * string typeFullName = 8; + * @param value The typeFullName to set. + * @return This builder for chaining. + */ + public Builder setTypeFullName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + typeFullName_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + /** + *
+       * Type full name
+       * 
+ * + * string typeFullName = 8; + * @return This builder for chaining. + */ + public Builder clearTypeFullName() { + typeFullName_ = getDefaultInstance().getTypeFullName(); + bitField0_ = (bitField0_ & ~0x00000080); + onChanged(); + return this; + } + /** + *
+       * Type full name
+       * 
+ * + * string typeFullName = 8; + * @param value The bytes for typeFullName to set. + * @return This builder for chaining. + */ + public Builder setTypeFullNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + typeFullName_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + private java.lang.Object parentMethodName_ = ""; + /** + *
+       * Parent method name
+       * 
+ * + * string parentMethodName = 9; + * @return The parentMethodName. + */ + public java.lang.String getParentMethodName() { + java.lang.Object ref = parentMethodName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parentMethodName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Parent method name
+       * 
+ * + * string parentMethodName = 9; + * @return The bytes for parentMethodName. + */ + public com.google.protobuf.ByteString + getParentMethodNameBytes() { + java.lang.Object ref = parentMethodName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + parentMethodName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Parent method name
+       * 
+ * + * string parentMethodName = 9; + * @param value The parentMethodName to set. + * @return This builder for chaining. + */ + public Builder setParentMethodName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + parentMethodName_ = value; + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + /** + *
+       * Parent method name
+       * 
+ * + * string parentMethodName = 9; + * @return This builder for chaining. + */ + public Builder clearParentMethodName() { + parentMethodName_ = getDefaultInstance().getParentMethodName(); + bitField0_ = (bitField0_ & ~0x00000100); + onChanged(); + return this; + } + /** + *
+       * Parent method name
+       * 
+ * + * string parentMethodName = 9; + * @param value The bytes for parentMethodName to set. + * @return This builder for chaining. + */ + public Builder setParentMethodNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + parentMethodName_ = value; + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + + private java.lang.Object parentFileName_ = ""; + /** + *
+       * Parent filename
+       * 
+ * + * string parentFileName = 10; + * @return The parentFileName. + */ + public java.lang.String getParentFileName() { + java.lang.Object ref = parentFileName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parentFileName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Parent filename
+       * 
+ * + * string parentFileName = 10; + * @return The bytes for parentFileName. + */ + public com.google.protobuf.ByteString + getParentFileNameBytes() { + java.lang.Object ref = parentFileName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + parentFileName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Parent filename
+       * 
+ * + * string parentFileName = 10; + * @param value The parentFileName to set. + * @return This builder for chaining. + */ + public Builder setParentFileName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + parentFileName_ = value; + bitField0_ |= 0x00000200; + onChanged(); + return this; + } + /** + *
+       * Parent filename
+       * 
+ * + * string parentFileName = 10; + * @return This builder for chaining. + */ + public Builder clearParentFileName() { + parentFileName_ = getDefaultInstance().getParentFileName(); + bitField0_ = (bitField0_ & ~0x00000200); + onChanged(); + return this; + } + /** + *
+       * Parent filename
+       * 
+ * + * string parentFileName = 10; + * @param value The bytes for parentFileName to set. + * @return This builder for chaining. + */ + public Builder setParentFileNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + parentFileName_ = value; + bitField0_ |= 0x00000200; + onChanged(); + return this; + } + + private java.lang.Object parentPackageName_ = ""; + /** + *
+       * Parent package name
+       * 
+ * + * string parentPackageName = 11; + * @return The parentPackageName. + */ + public java.lang.String getParentPackageName() { + java.lang.Object ref = parentPackageName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parentPackageName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Parent package name
+       * 
+ * + * string parentPackageName = 11; + * @return The bytes for parentPackageName. + */ + public com.google.protobuf.ByteString + getParentPackageNameBytes() { + java.lang.Object ref = parentPackageName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + parentPackageName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Parent package name
+       * 
+ * + * string parentPackageName = 11; + * @param value The parentPackageName to set. + * @return This builder for chaining. + */ + public Builder setParentPackageName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + parentPackageName_ = value; + bitField0_ |= 0x00000400; + onChanged(); + return this; + } + /** + *
+       * Parent package name
+       * 
+ * + * string parentPackageName = 11; + * @return This builder for chaining. + */ + public Builder clearParentPackageName() { + parentPackageName_ = getDefaultInstance().getParentPackageName(); + bitField0_ = (bitField0_ & ~0x00000400); + onChanged(); + return this; + } + /** + *
+       * Parent package name
+       * 
+ * + * string parentPackageName = 11; + * @param value The bytes for parentPackageName to set. + * @return This builder for chaining. + */ + public Builder setParentPackageNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + parentPackageName_ = value; + bitField0_ |= 0x00000400; + onChanged(); + return this; + } + + private java.lang.Object parentClassName_ = ""; + /** + *
+       * Parent class name
+       * 
+ * + * string parentClassName = 12; + * @return The parentClassName. + */ + public java.lang.String getParentClassName() { + java.lang.Object ref = parentClassName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parentClassName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Parent class name
+       * 
+ * + * string parentClassName = 12; + * @return The bytes for parentClassName. + */ + public com.google.protobuf.ByteString + getParentClassNameBytes() { + java.lang.Object ref = parentClassName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + parentClassName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Parent class name
+       * 
+ * + * string parentClassName = 12; + * @param value The parentClassName to set. + * @return This builder for chaining. + */ + public Builder setParentClassName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + parentClassName_ = value; + bitField0_ |= 0x00000800; + onChanged(); + return this; + } + /** + *
+       * Parent class name
+       * 
+ * + * string parentClassName = 12; + * @return This builder for chaining. + */ + public Builder clearParentClassName() { + parentClassName_ = getDefaultInstance().getParentClassName(); + bitField0_ = (bitField0_ & ~0x00000800); + onChanged(); + return this; + } + /** + *
+       * Parent class name
+       * 
+ * + * string parentClassName = 12; + * @param value The bytes for parentClassName to set. + * @return This builder for chaining. + */ + public Builder setParentClassNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + parentClassName_ = value; + bitField0_ |= 0x00000800; + onChanged(); + return this; + } + + private int lineNumber_ ; + /** + *
+       * Line number
+       * 
+ * + * uint32 lineNumber = 13; + * @return The lineNumber. + */ + @java.lang.Override + public int getLineNumber() { + return lineNumber_; + } + /** + *
+       * Line number
+       * 
+ * + * uint32 lineNumber = 13; + * @param value The lineNumber to set. + * @return This builder for chaining. + */ + public Builder setLineNumber(int value) { + + lineNumber_ = value; + bitField0_ |= 0x00001000; + onChanged(); + return this; + } + /** + *
+       * Line number
+       * 
+ * + * uint32 lineNumber = 13; + * @return This builder for chaining. + */ + public Builder clearLineNumber() { + bitField0_ = (bitField0_ & ~0x00001000); + lineNumber_ = 0; + onChanged(); + return this; + } + + private int columnNumber_ ; + /** + *
+       * Column number
+       * 
+ * + * uint32 columnNumber = 14; + * @return The columnNumber. + */ + @java.lang.Override + public int getColumnNumber() { + return columnNumber_; + } + /** + *
+       * Column number
+       * 
+ * + * uint32 columnNumber = 14; + * @param value The columnNumber to set. + * @return This builder for chaining. */ - java.lang.String getName(); + public Builder setColumnNumber(int value) { + + columnNumber_ = value; + bitField0_ |= 0x00002000; + onChanged(); + return this; + } /** *
-       * Name of the call or identifier or parameter
+       * Column number
+       * 
+ * + * uint32 columnNumber = 14; + * @return This builder for chaining. + */ + public Builder clearColumnNumber() { + bitField0_ = (bitField0_ & ~0x00002000); + columnNumber_ = 0; + onChanged(); + return this; + } + + private java.lang.Object tags_ = ""; + /** + *
+       * Tags. Can contain simple names including package url
+       * 
+ * + * string tags = 15; + * @return The tags. + */ + public java.lang.String getTags() { + java.lang.Object ref = tags_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + tags_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Tags. Can contain simple names including package url
+       * 
+ * + * string tags = 15; + * @return The bytes for tags. + */ + public com.google.protobuf.ByteString + getTagsBytes() { + java.lang.Object ref = tags_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + tags_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Tags. Can contain simple names including package url
+       * 
+ * + * string tags = 15; + * @param value The tags to set. + * @return This builder for chaining. + */ + public Builder setTags( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + tags_ = value; + bitField0_ |= 0x00004000; + onChanged(); + return this; + } + /** + *
+       * Tags. Can contain simple names including package url
+       * 
+ * + * string tags = 15; + * @return This builder for chaining. + */ + public Builder clearTags() { + tags_ = getDefaultInstance().getTags(); + bitField0_ = (bitField0_ & ~0x00004000); + onChanged(); + return this; + } + /** + *
+       * Tags. Can contain simple names including package url
+       * 
+ * + * string tags = 15; + * @param value The bytes for tags to set. + * @return This builder for chaining. + */ + public Builder setTagsBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + tags_ = value; + bitField0_ |= 0x00004000; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:atom.Nodes) + } + + // @@protoc_insertion_point(class_scope:atom.Nodes) + private static final io.appthreat.atom.Atom.Nodes DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new io.appthreat.atom.Atom.Nodes(); + } + + public static io.appthreat.atom.Atom.Nodes getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Nodes parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public io.appthreat.atom.Atom.Nodes getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DataFlowSliceOrBuilder extends + // @@protoc_insertion_point(interface_extends:atom.DataFlowSlice) + com.google.protobuf.MessageOrBuilder { + + /** + * .atom.DataFlowSlice.Graph graph = 1; + * @return Whether the graph field is set. + */ + boolean hasGraph(); + /** + * .atom.DataFlowSlice.Graph graph = 1; + * @return The graph. + */ + io.appthreat.atom.Atom.DataFlowSlice.Graph getGraph(); + /** + * .atom.DataFlowSlice.Graph graph = 1; + */ + io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder getGraphOrBuilder(); + + /** + * .atom.DataFlowSlice.Paths path = 2; + * @return Whether the path field is set. + */ + boolean hasPath(); + /** + * .atom.DataFlowSlice.Paths path = 2; + * @return The path. + */ + io.appthreat.atom.Atom.DataFlowSlice.Paths getPath(); + /** + * .atom.DataFlowSlice.Paths path = 2; + */ + io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder getPathOrBuilder(); + } + /** + *
+   **
+   * DataFlow slices offers a list of nodes and edges exported from data dependency graph
+   *
+   * ![Data Flow slices overview](./docs/Data%20Flows.png)
+   * 
+ * + * Protobuf type {@code atom.DataFlowSlice} + */ + public static final class DataFlowSlice extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:atom.DataFlowSlice) + DataFlowSliceOrBuilder { + private static final long serialVersionUID = 0L; + // Use DataFlowSlice.newBuilder() to construct. + private DataFlowSlice(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private DataFlowSlice() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new DataFlowSlice(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.appthreat.atom.Atom.DataFlowSlice.class, io.appthreat.atom.Atom.DataFlowSlice.Builder.class); + } + + public interface EdgesOrBuilder extends + // @@protoc_insertion_point(interface_extends:atom.DataFlowSlice.Edges) + com.google.protobuf.MessageOrBuilder { + + /** + *
+       * Source node id
+       * 
+ * + * uint32 src = 1; + * @return The src. + */ + int getSrc(); + + /** + *
+       * Destination node id
+       * 
+ * + * uint32 dst = 2; + * @return The dst. + */ + int getDst(); + + /** + *
+       * Edge type
+       * 
+ * + * .atom.CpgStruct.Edge.EdgeType label = 3; + * @return The enum numeric value on the wire for label. + */ + int getLabelValue(); + /** + *
+       * Edge type
        * 
* - * string name = 3; - * @return The bytes for name. + * .atom.CpgStruct.Edge.EdgeType label = 3; + * @return The label. */ - com.google.protobuf.ByteString - getNameBytes(); + io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType getLabel(); + } + /** + * Protobuf type {@code atom.DataFlowSlice.Edges} + */ + public static final class Edges extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:atom.DataFlowSlice.Edges) + EdgesOrBuilder { + private static final long serialVersionUID = 0L; + // Use Edges.newBuilder() to construct. + private Edges(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Edges() { + label_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Edges(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Edges_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Edges_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.appthreat.atom.Atom.DataFlowSlice.Edges.class, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder.class); + } + public static final int SRC_FIELD_NUMBER = 1; + private int src_ = 0; /** *
-       * Full name of the call
+       * Source node id
        * 
* - * string fullName = 4; - * @return The fullName. + * uint32 src = 1; + * @return The src. */ - java.lang.String getFullName(); + @java.lang.Override + public int getSrc() { + return src_; + } + + public static final int DST_FIELD_NUMBER = 2; + private int dst_ = 0; /** *
-       * Full name of the call
+       * Destination node id
        * 
* - * string fullName = 4; - * @return The bytes for fullName. + * uint32 dst = 2; + * @return The dst. */ - com.google.protobuf.ByteString - getFullNameBytes(); + @java.lang.Override + public int getDst() { + return dst_; + } + public static final int LABEL_FIELD_NUMBER = 3; + private int label_ = 0; /** *
-       * Method signature of the call
+       * Edge type
        * 
* - * string signature = 5; - * @return The signature. + * .atom.CpgStruct.Edge.EdgeType label = 3; + * @return The enum numeric value on the wire for label. */ - java.lang.String getSignature(); + @java.lang.Override public int getLabelValue() { + return label_; + } /** *
-       * Method signature of the call
+       * Edge type
        * 
* - * string signature = 5; - * @return The bytes for signature. + * .atom.CpgStruct.Edge.EdgeType label = 3; + * @return The label. */ - com.google.protobuf.ByteString - getSignatureBytes(); + @java.lang.Override public io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType getLabel() { + io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType result = io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType.forNumber(label_); + return result == null ? io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType.UNRECOGNIZED : result; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (src_ != 0) { + output.writeUInt32(1, src_); + } + if (dst_ != 0) { + output.writeUInt32(2, dst_); + } + if (label_ != io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType.UNKNOWN_EDGE_TYPE.getNumber()) { + output.writeEnum(3, label_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (src_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, src_); + } + if (dst_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(2, dst_); + } + if (label_ != io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType.UNKNOWN_EDGE_TYPE.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(3, label_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof io.appthreat.atom.Atom.DataFlowSlice.Edges)) { + return super.equals(obj); + } + io.appthreat.atom.Atom.DataFlowSlice.Edges other = (io.appthreat.atom.Atom.DataFlowSlice.Edges) obj; + + if (getSrc() + != other.getSrc()) return false; + if (getDst() + != other.getDst()) return false; + if (label_ != other.label_) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SRC_FIELD_NUMBER; + hash = (53 * hash) + getSrc(); + hash = (37 * hash) + DST_FIELD_NUMBER; + hash = (53 * hash) + getDst(); + hash = (37 * hash) + LABEL_FIELD_NUMBER; + hash = (53 * hash) + label_; + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(io.appthreat.atom.Atom.DataFlowSlice.Edges prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } /** - *
-       * Boolean to indicate if this call belongs to an external method
-       * 
- * - * bool isExternal = 6; - * @return The isExternal. + * Protobuf type {@code atom.DataFlowSlice.Edges} */ - boolean getIsExternal(); + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:atom.DataFlowSlice.Edges) + io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Edges_descriptor; + } - /** - *
-       * Source code
-       * 
- * - * string code = 7; - * @return The code. - */ - java.lang.String getCode(); - /** - *
-       * Source code
-       * 
- * - * string code = 7; - * @return The bytes for code. - */ - com.google.protobuf.ByteString - getCodeBytes(); + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Edges_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.appthreat.atom.Atom.DataFlowSlice.Edges.class, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder.class); + } - /** - *
-       * Type full name
-       * 
- * - * string typeFullName = 8; - * @return The typeFullName. - */ - java.lang.String getTypeFullName(); - /** - *
-       * Type full name
-       * 
- * - * string typeFullName = 8; - * @return The bytes for typeFullName. - */ - com.google.protobuf.ByteString - getTypeFullNameBytes(); + // Construct using io.appthreat.atom.Atom.DataFlowSlice.Edges.newBuilder() + private Builder() { - /** - *
-       * Parent method name
-       * 
- * - * string parentMethodName = 9; - * @return The parentMethodName. - */ - java.lang.String getParentMethodName(); - /** - *
-       * Parent method name
-       * 
- * - * string parentMethodName = 9; - * @return The bytes for parentMethodName. - */ - com.google.protobuf.ByteString - getParentMethodNameBytes(); + } - /** - *
-       * Parent filename
-       * 
- * - * string parentFileName = 10; - * @return The parentFileName. - */ - java.lang.String getParentFileName(); - /** - *
-       * Parent filename
-       * 
- * - * string parentFileName = 10; - * @return The bytes for parentFileName. - */ - com.google.protobuf.ByteString - getParentFileNameBytes(); + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); - /** - *
-       * Parent package name
-       * 
- * - * string parentPackageName = 11; - * @return The parentPackageName. - */ - java.lang.String getParentPackageName(); - /** - *
-       * Parent package name
-       * 
- * - * string parentPackageName = 11; - * @return The bytes for parentPackageName. - */ - com.google.protobuf.ByteString - getParentPackageNameBytes(); + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + src_ = 0; + dst_ = 0; + label_ = 0; + return this; + } - /** - *
-       * Parent class name
-       * 
- * - * string parentClassName = 12; - * @return The parentClassName. - */ - java.lang.String getParentClassName(); - /** - *
-       * Parent class name
-       * 
- * - * string parentClassName = 12; - * @return The bytes for parentClassName. - */ - com.google.protobuf.ByteString - getParentClassNameBytes(); + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Edges_descriptor; + } - /** - *
-       * Line number
-       * 
- * - * uint32 lineNumber = 13; - * @return The lineNumber. - */ - int getLineNumber(); + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.Edges getDefaultInstanceForType() { + return io.appthreat.atom.Atom.DataFlowSlice.Edges.getDefaultInstance(); + } - /** - *
-       * Column number
-       * 
- * - * uint32 columnNumber = 14; - * @return The columnNumber. - */ - int getColumnNumber(); - } - /** - * Protobuf type {@code atom.DataFlowSlice.Nodes} - */ - public static final class Nodes extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:atom.DataFlowSlice.Nodes) - NodesOrBuilder { - private static final long serialVersionUID = 0L; - // Use Nodes.newBuilder() to construct. - private Nodes(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private Nodes() { - label_ = 0; - name_ = ""; - fullName_ = ""; - signature_ = ""; - code_ = ""; - typeFullName_ = ""; - parentMethodName_ = ""; - parentFileName_ = ""; - parentPackageName_ = ""; - parentClassName_ = ""; - } + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.Edges build() { + io.appthreat.atom.Atom.DataFlowSlice.Edges result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.Edges buildPartial() { + io.appthreat.atom.Atom.DataFlowSlice.Edges result = new io.appthreat.atom.Atom.DataFlowSlice.Edges(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(io.appthreat.atom.Atom.DataFlowSlice.Edges result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.src_ = src_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.dst_ = dst_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.label_ = label_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.appthreat.atom.Atom.DataFlowSlice.Edges) { + return mergeFrom((io.appthreat.atom.Atom.DataFlowSlice.Edges)other); + } else { + super.mergeFrom(other); + return this; + } + } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new Nodes(); - } + public Builder mergeFrom(io.appthreat.atom.Atom.DataFlowSlice.Edges other) { + if (other == io.appthreat.atom.Atom.DataFlowSlice.Edges.getDefaultInstance()) return this; + if (other.getSrc() != 0) { + setSrc(other.getSrc()); + } + if (other.getDst() != 0) { + setDst(other.getDst()); + } + if (other.label_ != 0) { + setLabelValue(other.getLabelValue()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Nodes_descriptor; - } + @java.lang.Override + public final boolean isInitialized() { + return true; + } - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Nodes_fieldAccessorTable - .ensureFieldAccessorsInitialized( - io.appthreat.atom.Atom.DataFlowSlice.Nodes.class, io.appthreat.atom.Atom.DataFlowSlice.Nodes.Builder.class); - } + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + src_ = input.readUInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + dst_ = input.readUInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: { + label_ = input.readEnum(); + bitField0_ |= 0x00000004; + break; + } // case 24 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; - public static final int ID_FIELD_NUMBER = 1; - private int id_ = 0; - /** - *
-       * Id of the node
-       * 
- * - * uint32 id = 1; - * @return The id. - */ - @java.lang.Override - public int getId() { - return id_; - } + private int src_ ; + /** + *
+         * Source node id
+         * 
+ * + * uint32 src = 1; + * @return The src. + */ + @java.lang.Override + public int getSrc() { + return src_; + } + /** + *
+         * Source node id
+         * 
+ * + * uint32 src = 1; + * @param value The src to set. + * @return This builder for chaining. + */ + public Builder setSrc(int value) { - public static final int LABEL_FIELD_NUMBER = 2; - private int label_ = 0; - /** - *
-       * Label
-       * 
- * - * .atom.NodeType label = 2; - * @return The enum numeric value on the wire for label. - */ - @java.lang.Override public int getLabelValue() { - return label_; - } - /** - *
-       * Label
-       * 
- * - * .atom.NodeType label = 2; - * @return The label. - */ - @java.lang.Override public io.appthreat.atom.Atom.NodeType getLabel() { - io.appthreat.atom.Atom.NodeType result = io.appthreat.atom.Atom.NodeType.forNumber(label_); - return result == null ? io.appthreat.atom.Atom.NodeType.UNRECOGNIZED : result; - } + src_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
+         * Source node id
+         * 
+ * + * uint32 src = 1; + * @return This builder for chaining. + */ + public Builder clearSrc() { + bitField0_ = (bitField0_ & ~0x00000001); + src_ = 0; + onChanged(); + return this; + } - public static final int NAME_FIELD_NUMBER = 3; - @SuppressWarnings("serial") - private volatile java.lang.Object name_ = ""; - /** - *
-       * Name of the call or identifier or parameter
-       * 
- * - * string name = 3; - * @return The name. - */ - @java.lang.Override - public java.lang.String getName() { - java.lang.Object ref = name_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - name_ = s; - return s; + private int dst_ ; + /** + *
+         * Destination node id
+         * 
+ * + * uint32 dst = 2; + * @return The dst. + */ + @java.lang.Override + public int getDst() { + return dst_; } - } - /** - *
-       * Name of the call or identifier or parameter
-       * 
- * - * string name = 3; - * @return The bytes for name. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; + /** + *
+         * Destination node id
+         * 
+ * + * uint32 dst = 2; + * @param value The dst to set. + * @return This builder for chaining. + */ + public Builder setDst(int value) { + + dst_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+         * Destination node id
+         * 
+ * + * uint32 dst = 2; + * @return This builder for chaining. + */ + public Builder clearDst() { + bitField0_ = (bitField0_ & ~0x00000002); + dst_ = 0; + onChanged(); + return this; } - } - public static final int FULLNAME_FIELD_NUMBER = 4; - @SuppressWarnings("serial") - private volatile java.lang.Object fullName_ = ""; - /** - *
-       * Full name of the call
-       * 
- * - * string fullName = 4; - * @return The fullName. - */ - @java.lang.Override - public java.lang.String getFullName() { - java.lang.Object ref = fullName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - fullName_ = s; - return s; + private int label_ = 0; + /** + *
+         * Edge type
+         * 
+ * + * .atom.CpgStruct.Edge.EdgeType label = 3; + * @return The enum numeric value on the wire for label. + */ + @java.lang.Override public int getLabelValue() { + return label_; } - } - /** - *
-       * Full name of the call
-       * 
- * - * string fullName = 4; - * @return The bytes for fullName. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getFullNameBytes() { - java.lang.Object ref = fullName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - fullName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; + /** + *
+         * Edge type
+         * 
+ * + * .atom.CpgStruct.Edge.EdgeType label = 3; + * @param value The enum numeric value on the wire for label to set. + * @return This builder for chaining. + */ + public Builder setLabelValue(int value) { + label_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; } - } - - public static final int SIGNATURE_FIELD_NUMBER = 5; - @SuppressWarnings("serial") - private volatile java.lang.Object signature_ = ""; - /** - *
-       * Method signature of the call
-       * 
- * - * string signature = 5; - * @return The signature. - */ - @java.lang.Override - public java.lang.String getSignature() { - java.lang.Object ref = signature_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - signature_ = s; - return s; + /** + *
+         * Edge type
+         * 
+ * + * .atom.CpgStruct.Edge.EdgeType label = 3; + * @return The label. + */ + @java.lang.Override + public io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType getLabel() { + io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType result = io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType.forNumber(label_); + return result == null ? io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType.UNRECOGNIZED : result; } - } - /** - *
-       * Method signature of the call
-       * 
- * - * string signature = 5; - * @return The bytes for signature. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getSignatureBytes() { - java.lang.Object ref = signature_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - signature_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; + /** + *
+         * Edge type
+         * 
+ * + * .atom.CpgStruct.Edge.EdgeType label = 3; + * @param value The label to set. + * @return This builder for chaining. + */ + public Builder setLabel(io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + label_ = value.getNumber(); + onChanged(); + return this; + } + /** + *
+         * Edge type
+         * 
+ * + * .atom.CpgStruct.Edge.EdgeType label = 3; + * @return This builder for chaining. + */ + public Builder clearLabel() { + bitField0_ = (bitField0_ & ~0x00000004); + label_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); } + + + // @@protoc_insertion_point(builder_scope:atom.DataFlowSlice.Edges) } - public static final int ISEXTERNAL_FIELD_NUMBER = 6; - private boolean isExternal_ = false; - /** - *
-       * Boolean to indicate if this call belongs to an external method
-       * 
- * - * bool isExternal = 6; - * @return The isExternal. - */ - @java.lang.Override - public boolean getIsExternal() { - return isExternal_; + // @@protoc_insertion_point(class_scope:atom.DataFlowSlice.Edges) + private static final io.appthreat.atom.Atom.DataFlowSlice.Edges DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new io.appthreat.atom.Atom.DataFlowSlice.Edges(); } - public static final int CODE_FIELD_NUMBER = 7; - @SuppressWarnings("serial") - private volatile java.lang.Object code_ = ""; - /** - *
-       * Source code
-       * 
- * - * string code = 7; - * @return The code. - */ - @java.lang.Override - public java.lang.String getCode() { - java.lang.Object ref = code_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - code_ = s; - return s; - } + public static io.appthreat.atom.Atom.DataFlowSlice.Edges getDefaultInstance() { + return DEFAULT_INSTANCE; } - /** - *
-       * Source code
-       * 
- * - * string code = 7; - * @return The bytes for code. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getCodeBytes() { - java.lang.Object ref = code_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - code_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Edges parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; } - public static final int TYPEFULLNAME_FIELD_NUMBER = 8; - @SuppressWarnings("serial") - private volatile java.lang.Object typeFullName_ = ""; - /** - *
-       * Type full name
-       * 
- * - * string typeFullName = 8; - * @return The typeFullName. - */ @java.lang.Override - public java.lang.String getTypeFullName() { - java.lang.Object ref = typeFullName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - typeFullName_ = s; - return s; - } + public com.google.protobuf.Parser getParserForType() { + return PARSER; } - /** - *
-       * Type full name
-       * 
- * - * string typeFullName = 8; - * @return The bytes for typeFullName. - */ + @java.lang.Override - public com.google.protobuf.ByteString - getTypeFullNameBytes() { - java.lang.Object ref = typeFullName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - typeFullName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + public io.appthreat.atom.Atom.DataFlowSlice.Edges getDefaultInstanceForType() { + return DEFAULT_INSTANCE; } - public static final int PARENTMETHODNAME_FIELD_NUMBER = 9; - @SuppressWarnings("serial") - private volatile java.lang.Object parentMethodName_ = ""; + } + + public interface FlowsOrBuilder extends + // @@protoc_insertion_point(interface_extends:atom.DataFlowSlice.Flows) + com.google.protobuf.MessageOrBuilder { + /** *
-       * Parent method name
+       * Node id
        * 
* - * string parentMethodName = 9; - * @return The parentMethodName. + * repeated uint32 id = 1; + * @return A list containing the id. */ - @java.lang.Override - public java.lang.String getParentMethodName() { - java.lang.Object ref = parentMethodName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - parentMethodName_ = s; - return s; - } - } + java.util.List getIdList(); /** *
-       * Parent method name
+       * Node id
        * 
* - * string parentMethodName = 9; - * @return The bytes for parentMethodName. + * repeated uint32 id = 1; + * @return The count of id. */ - @java.lang.Override - public com.google.protobuf.ByteString - getParentMethodNameBytes() { - java.lang.Object ref = parentMethodName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - parentMethodName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int PARENTFILENAME_FIELD_NUMBER = 10; - @SuppressWarnings("serial") - private volatile java.lang.Object parentFileName_ = ""; + int getIdCount(); /** *
-       * Parent filename
+       * Node id
        * 
* - * string parentFileName = 10; - * @return The parentFileName. + * repeated uint32 id = 1; + * @param index The index of the element to return. + * @return The id at the given index. */ - @java.lang.Override - public java.lang.String getParentFileName() { - java.lang.Object ref = parentFileName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - parentFileName_ = s; - return s; - } + int getId(int index); + } + /** + * Protobuf type {@code atom.DataFlowSlice.Flows} + */ + public static final class Flows extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:atom.DataFlowSlice.Flows) + FlowsOrBuilder { + private static final long serialVersionUID = 0L; + // Use Flows.newBuilder() to construct. + private Flows(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); } - /** - *
-       * Parent filename
-       * 
- * - * string parentFileName = 10; - * @return The bytes for parentFileName. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getParentFileNameBytes() { - java.lang.Object ref = parentFileName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - parentFileName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + private Flows() { + id_ = emptyIntList(); } - public static final int PARENTPACKAGENAME_FIELD_NUMBER = 11; - @SuppressWarnings("serial") - private volatile java.lang.Object parentPackageName_ = ""; - /** - *
-       * Parent package name
-       * 
- * - * string parentPackageName = 11; - * @return The parentPackageName. - */ @java.lang.Override - public java.lang.String getParentPackageName() { - java.lang.Object ref = parentPackageName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - parentPackageName_ = s; - return s; - } + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Flows(); } - /** - *
-       * Parent package name
-       * 
- * - * string parentPackageName = 11; - * @return The bytes for parentPackageName. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getParentPackageNameBytes() { - java.lang.Object ref = parentPackageName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - parentPackageName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Flows_descriptor; } - public static final int PARENTCLASSNAME_FIELD_NUMBER = 12; - @SuppressWarnings("serial") - private volatile java.lang.Object parentClassName_ = ""; - /** - *
-       * Parent class name
-       * 
- * - * string parentClassName = 12; - * @return The parentClassName. - */ @java.lang.Override - public java.lang.String getParentClassName() { - java.lang.Object ref = parentClassName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - parentClassName_ = s; - return s; - } + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Flows_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.appthreat.atom.Atom.DataFlowSlice.Flows.class, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder.class); } + + public static final int ID_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private com.google.protobuf.Internal.IntList id_; /** *
-       * Parent class name
+       * Node id
        * 
* - * string parentClassName = 12; - * @return The bytes for parentClassName. + * repeated uint32 id = 1; + * @return A list containing the id. */ @java.lang.Override - public com.google.protobuf.ByteString - getParentClassNameBytes() { - java.lang.Object ref = parentClassName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - parentClassName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + public java.util.List + getIdList() { + return id_; } - - public static final int LINENUMBER_FIELD_NUMBER = 13; - private int lineNumber_ = 0; /** *
-       * Line number
+       * Node id
        * 
* - * uint32 lineNumber = 13; - * @return The lineNumber. + * repeated uint32 id = 1; + * @return The count of id. */ - @java.lang.Override - public int getLineNumber() { - return lineNumber_; + public int getIdCount() { + return id_.size(); } - - public static final int COLUMNNUMBER_FIELD_NUMBER = 14; - private int columnNumber_ = 0; /** *
-       * Column number
+       * Node id
        * 
* - * uint32 columnNumber = 14; - * @return The columnNumber. + * repeated uint32 id = 1; + * @param index The index of the element to return. + * @return The id at the given index. */ - @java.lang.Override - public int getColumnNumber() { - return columnNumber_; + public int getId(int index) { + return id_.getInt(index); } + private int idMemoizedSerializedSize = -1; private byte memoizedIsInitialized = -1; @java.lang.Override @@ -40414,47 +43210,13 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (id_ != 0) { - output.writeUInt32(1, id_); - } - if (label_ != io.appthreat.atom.Atom.NodeType.UNKNOWN_NODE_TYPE.getNumber()) { - output.writeEnum(2, label_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, name_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(fullName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, fullName_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(signature_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, signature_); - } - if (isExternal_ != false) { - output.writeBool(6, isExternal_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(code_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 7, code_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(typeFullName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 8, typeFullName_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentMethodName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 9, parentMethodName_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentFileName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 10, parentFileName_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentPackageName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 11, parentPackageName_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentClassName_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 12, parentClassName_); - } - if (lineNumber_ != 0) { - output.writeUInt32(13, lineNumber_); + getSerializedSize(); + if (getIdList().size() > 0) { + output.writeUInt32NoTag(10); + output.writeUInt32NoTag(idMemoizedSerializedSize); } - if (columnNumber_ != 0) { - output.writeUInt32(14, columnNumber_); + for (int i = 0; i < id_.size(); i++) { + output.writeUInt32NoTag(id_.getInt(i)); } getUnknownFields().writeTo(output); } @@ -40465,52 +43227,19 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (id_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(1, id_); - } - if (label_ != io.appthreat.atom.Atom.NodeType.UNKNOWN_NODE_TYPE.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(2, label_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, name_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(fullName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, fullName_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(signature_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, signature_); - } - if (isExternal_ != false) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(6, isExternal_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(code_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, code_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(typeFullName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, typeFullName_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentMethodName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, parentMethodName_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentFileName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, parentFileName_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentPackageName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(11, parentPackageName_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(parentClassName_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, parentClassName_); - } - if (lineNumber_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(13, lineNumber_); - } - if (columnNumber_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(14, columnNumber_); + { + int dataSize = 0; + for (int i = 0; i < id_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeUInt32SizeNoTag(id_.getInt(i)); + } + size += dataSize; + if (!getIdList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + idMemoizedSerializedSize = dataSize; } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -40522,38 +43251,13 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.appthreat.atom.Atom.DataFlowSlice.Nodes)) { + if (!(obj instanceof io.appthreat.atom.Atom.DataFlowSlice.Flows)) { return super.equals(obj); } - io.appthreat.atom.Atom.DataFlowSlice.Nodes other = (io.appthreat.atom.Atom.DataFlowSlice.Nodes) obj; + io.appthreat.atom.Atom.DataFlowSlice.Flows other = (io.appthreat.atom.Atom.DataFlowSlice.Flows) obj; - if (getId() - != other.getId()) return false; - if (label_ != other.label_) return false; - if (!getName() - .equals(other.getName())) return false; - if (!getFullName() - .equals(other.getFullName())) return false; - if (!getSignature() - .equals(other.getSignature())) return false; - if (getIsExternal() - != other.getIsExternal()) return false; - if (!getCode() - .equals(other.getCode())) return false; - if (!getTypeFullName() - .equals(other.getTypeFullName())) return false; - if (!getParentMethodName() - .equals(other.getParentMethodName())) return false; - if (!getParentFileName() - .equals(other.getParentFileName())) return false; - if (!getParentPackageName() - .equals(other.getParentPackageName())) return false; - if (!getParentClassName() - .equals(other.getParentClassName())) return false; - if (getLineNumber() - != other.getLineNumber()) return false; - if (getColumnNumber() - != other.getColumnNumber()) return false; + if (!getIdList() + .equals(other.getIdList())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -40565,78 +43269,53 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + ID_FIELD_NUMBER; - hash = (53 * hash) + getId(); - hash = (37 * hash) + LABEL_FIELD_NUMBER; - hash = (53 * hash) + label_; - hash = (37 * hash) + NAME_FIELD_NUMBER; - hash = (53 * hash) + getName().hashCode(); - hash = (37 * hash) + FULLNAME_FIELD_NUMBER; - hash = (53 * hash) + getFullName().hashCode(); - hash = (37 * hash) + SIGNATURE_FIELD_NUMBER; - hash = (53 * hash) + getSignature().hashCode(); - hash = (37 * hash) + ISEXTERNAL_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( - getIsExternal()); - hash = (37 * hash) + CODE_FIELD_NUMBER; - hash = (53 * hash) + getCode().hashCode(); - hash = (37 * hash) + TYPEFULLNAME_FIELD_NUMBER; - hash = (53 * hash) + getTypeFullName().hashCode(); - hash = (37 * hash) + PARENTMETHODNAME_FIELD_NUMBER; - hash = (53 * hash) + getParentMethodName().hashCode(); - hash = (37 * hash) + PARENTFILENAME_FIELD_NUMBER; - hash = (53 * hash) + getParentFileName().hashCode(); - hash = (37 * hash) + PARENTPACKAGENAME_FIELD_NUMBER; - hash = (53 * hash) + getParentPackageName().hashCode(); - hash = (37 * hash) + PARENTCLASSNAME_FIELD_NUMBER; - hash = (53 * hash) + getParentClassName().hashCode(); - hash = (37 * hash) + LINENUMBER_FIELD_NUMBER; - hash = (53 * hash) + getLineNumber(); - hash = (37 * hash) + COLUMNNUMBER_FIELD_NUMBER; - hash = (53 * hash) + getColumnNumber(); + if (getIdCount() > 0) { + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getIdList().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseFrom(byte[] data) + public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseFrom(java.io.InputStream input) + public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -40644,26 +43323,26 @@ public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseFrom( .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseDelimitedFrom(java.io.InputStream input) + public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseDelimitedFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -40676,7 +43355,7 @@ public static io.appthreat.atom.Atom.DataFlowSlice.Nodes parseFrom( public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.appthreat.atom.Atom.DataFlowSlice.Nodes prototype) { + public static Builder newBuilder(io.appthreat.atom.Atom.DataFlowSlice.Flows prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -40692,26 +43371,26 @@ protected Builder newBuilderForType( return builder; } /** - * Protobuf type {@code atom.DataFlowSlice.Nodes} + * Protobuf type {@code atom.DataFlowSlice.Flows} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:atom.DataFlowSlice.Nodes) - io.appthreat.atom.Atom.DataFlowSlice.NodesOrBuilder { + // @@protoc_insertion_point(builder_implements:atom.DataFlowSlice.Flows) + io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Nodes_descriptor; + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Flows_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Nodes_fieldAccessorTable + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Flows_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.appthreat.atom.Atom.DataFlowSlice.Nodes.class, io.appthreat.atom.Atom.DataFlowSlice.Nodes.Builder.class); + io.appthreat.atom.Atom.DataFlowSlice.Flows.class, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder.class); } - // Construct using io.appthreat.atom.Atom.DataFlowSlice.Nodes.newBuilder() + // Construct using io.appthreat.atom.Atom.DataFlowSlice.Flows.newBuilder() private Builder() { } @@ -40725,37 +43404,24 @@ private Builder( public Builder clear() { super.clear(); bitField0_ = 0; - id_ = 0; - label_ = 0; - name_ = ""; - fullName_ = ""; - signature_ = ""; - isExternal_ = false; - code_ = ""; - typeFullName_ = ""; - parentMethodName_ = ""; - parentFileName_ = ""; - parentPackageName_ = ""; - parentClassName_ = ""; - lineNumber_ = 0; - columnNumber_ = 0; + id_ = emptyIntList(); return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Nodes_descriptor; + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Flows_descriptor; } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Nodes getDefaultInstanceForType() { - return io.appthreat.atom.Atom.DataFlowSlice.Nodes.getDefaultInstance(); + public io.appthreat.atom.Atom.DataFlowSlice.Flows getDefaultInstanceForType() { + return io.appthreat.atom.Atom.DataFlowSlice.Flows.getDefaultInstance(); } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Nodes build() { - io.appthreat.atom.Atom.DataFlowSlice.Nodes result = buildPartial(); + public io.appthreat.atom.Atom.DataFlowSlice.Flows build() { + io.appthreat.atom.Atom.DataFlowSlice.Flows result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -40763,57 +43429,24 @@ public io.appthreat.atom.Atom.DataFlowSlice.Nodes build() { } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Nodes buildPartial() { - io.appthreat.atom.Atom.DataFlowSlice.Nodes result = new io.appthreat.atom.Atom.DataFlowSlice.Nodes(this); + public io.appthreat.atom.Atom.DataFlowSlice.Flows buildPartial() { + io.appthreat.atom.Atom.DataFlowSlice.Flows result = new io.appthreat.atom.Atom.DataFlowSlice.Flows(this); + buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.appthreat.atom.Atom.DataFlowSlice.Nodes result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.id_ = id_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.label_ = label_; - } - if (((from_bitField0_ & 0x00000004) != 0)) { - result.name_ = name_; - } - if (((from_bitField0_ & 0x00000008) != 0)) { - result.fullName_ = fullName_; - } - if (((from_bitField0_ & 0x00000010) != 0)) { - result.signature_ = signature_; - } - if (((from_bitField0_ & 0x00000020) != 0)) { - result.isExternal_ = isExternal_; - } - if (((from_bitField0_ & 0x00000040) != 0)) { - result.code_ = code_; - } - if (((from_bitField0_ & 0x00000080) != 0)) { - result.typeFullName_ = typeFullName_; - } - if (((from_bitField0_ & 0x00000100) != 0)) { - result.parentMethodName_ = parentMethodName_; - } - if (((from_bitField0_ & 0x00000200) != 0)) { - result.parentFileName_ = parentFileName_; - } - if (((from_bitField0_ & 0x00000400) != 0)) { - result.parentPackageName_ = parentPackageName_; - } - if (((from_bitField0_ & 0x00000800) != 0)) { - result.parentClassName_ = parentClassName_; - } - if (((from_bitField0_ & 0x00001000) != 0)) { - result.lineNumber_ = lineNumber_; - } - if (((from_bitField0_ & 0x00002000) != 0)) { - result.columnNumber_ = columnNumber_; + private void buildPartialRepeatedFields(io.appthreat.atom.Atom.DataFlowSlice.Flows result) { + if (((bitField0_ & 0x00000001) != 0)) { + id_.makeImmutable(); + bitField0_ = (bitField0_ & ~0x00000001); } + result.id_ = id_; + } + + private void buildPartial0(io.appthreat.atom.Atom.DataFlowSlice.Flows result) { + int from_bitField0_ = bitField0_; } @java.lang.Override @@ -40850,75 +43483,25 @@ public Builder addRepeatedField( } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.appthreat.atom.Atom.DataFlowSlice.Nodes) { - return mergeFrom((io.appthreat.atom.Atom.DataFlowSlice.Nodes)other); + if (other instanceof io.appthreat.atom.Atom.DataFlowSlice.Flows) { + return mergeFrom((io.appthreat.atom.Atom.DataFlowSlice.Flows)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.appthreat.atom.Atom.DataFlowSlice.Nodes other) { - if (other == io.appthreat.atom.Atom.DataFlowSlice.Nodes.getDefaultInstance()) return this; - if (other.getId() != 0) { - setId(other.getId()); - } - if (other.label_ != 0) { - setLabelValue(other.getLabelValue()); - } - if (!other.getName().isEmpty()) { - name_ = other.name_; - bitField0_ |= 0x00000004; - onChanged(); - } - if (!other.getFullName().isEmpty()) { - fullName_ = other.fullName_; - bitField0_ |= 0x00000008; - onChanged(); - } - if (!other.getSignature().isEmpty()) { - signature_ = other.signature_; - bitField0_ |= 0x00000010; - onChanged(); - } - if (other.getIsExternal() != false) { - setIsExternal(other.getIsExternal()); - } - if (!other.getCode().isEmpty()) { - code_ = other.code_; - bitField0_ |= 0x00000040; - onChanged(); - } - if (!other.getTypeFullName().isEmpty()) { - typeFullName_ = other.typeFullName_; - bitField0_ |= 0x00000080; - onChanged(); - } - if (!other.getParentMethodName().isEmpty()) { - parentMethodName_ = other.parentMethodName_; - bitField0_ |= 0x00000100; - onChanged(); - } - if (!other.getParentFileName().isEmpty()) { - parentFileName_ = other.parentFileName_; - bitField0_ |= 0x00000200; - onChanged(); - } - if (!other.getParentPackageName().isEmpty()) { - parentPackageName_ = other.parentPackageName_; - bitField0_ |= 0x00000400; - onChanged(); - } - if (!other.getParentClassName().isEmpty()) { - parentClassName_ = other.parentClassName_; - bitField0_ |= 0x00000800; - onChanged(); - } - if (other.getLineNumber() != 0) { - setLineNumber(other.getLineNumber()); - } - if (other.getColumnNumber() != 0) { - setColumnNumber(other.getColumnNumber()); + public Builder mergeFrom(io.appthreat.atom.Atom.DataFlowSlice.Flows other) { + if (other == io.appthreat.atom.Atom.DataFlowSlice.Flows.getDefaultInstance()) return this; + if (!other.id_.isEmpty()) { + if (id_.isEmpty()) { + id_ = other.id_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureIdIsMutable(); + id_.addAll(other.id_); + } + onChanged(); } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); @@ -40947,75 +43530,21 @@ public Builder mergeFrom( done = true; break; case 8: { - id_ = input.readUInt32(); - bitField0_ |= 0x00000001; + int v = input.readUInt32(); + ensureIdIsMutable(); + id_.addInt(v); break; } // case 8 - case 16: { - label_ = input.readEnum(); - bitField0_ |= 0x00000002; - break; - } // case 16 - case 26: { - name_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000004; - break; - } // case 26 - case 34: { - fullName_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000008; - break; - } // case 34 - case 42: { - signature_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000010; - break; - } // case 42 - case 48: { - isExternal_ = input.readBool(); - bitField0_ |= 0x00000020; - break; - } // case 48 - case 58: { - code_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000040; - break; - } // case 58 - case 66: { - typeFullName_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000080; - break; - } // case 66 - case 74: { - parentMethodName_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000100; - break; - } // case 74 - case 82: { - parentFileName_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000200; - break; - } // case 82 - case 90: { - parentPackageName_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000400; - break; - } // case 90 - case 98: { - parentClassName_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000800; - break; - } // case 98 - case 104: { - lineNumber_ = input.readUInt32(); - bitField0_ |= 0x00001000; - break; - } // case 104 - case 112: { - columnNumber_ = input.readUInt32(); - bitField0_ |= 0x00002000; + case 10: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + ensureIdIsMutable(); + while (input.getBytesUntilLimit() > 0) { + id_.addInt(input.readUInt32()); + } + input.popLimit(limit); break; - } // case 112 + } // case 10 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { done = true; // was an endgroup tag @@ -41033,1081 +43562,1007 @@ public Builder mergeFrom( } private int bitField0_; - private int id_ ; - /** - *
-         * Id of the node
-         * 
- * - * uint32 id = 1; - * @return The id. - */ - @java.lang.Override - public int getId() { - return id_; - } - /** - *
-         * Id of the node
-         * 
- * - * uint32 id = 1; - * @param value The id to set. - * @return This builder for chaining. - */ - public Builder setId(int value) { - - id_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - *
-         * Id of the node
-         * 
- * - * uint32 id = 1; - * @return This builder for chaining. - */ - public Builder clearId() { - bitField0_ = (bitField0_ & ~0x00000001); - id_ = 0; - onChanged(); - return this; - } - - private int label_ = 0; - /** - *
-         * Label
-         * 
- * - * .atom.NodeType label = 2; - * @return The enum numeric value on the wire for label. - */ - @java.lang.Override public int getLabelValue() { - return label_; - } - /** - *
-         * Label
-         * 
- * - * .atom.NodeType label = 2; - * @param value The enum numeric value on the wire for label to set. - * @return This builder for chaining. - */ - public Builder setLabelValue(int value) { - label_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - *
-         * Label
-         * 
- * - * .atom.NodeType label = 2; - * @return The label. - */ - @java.lang.Override - public io.appthreat.atom.Atom.NodeType getLabel() { - io.appthreat.atom.Atom.NodeType result = io.appthreat.atom.Atom.NodeType.forNumber(label_); - return result == null ? io.appthreat.atom.Atom.NodeType.UNRECOGNIZED : result; - } - /** - *
-         * Label
-         * 
- * - * .atom.NodeType label = 2; - * @param value The label to set. - * @return This builder for chaining. - */ - public Builder setLabel(io.appthreat.atom.Atom.NodeType value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - label_ = value.getNumber(); - onChanged(); - return this; - } - /** - *
-         * Label
-         * 
- * - * .atom.NodeType label = 2; - * @return This builder for chaining. - */ - public Builder clearLabel() { - bitField0_ = (bitField0_ & ~0x00000002); - label_ = 0; - onChanged(); - return this; - } - - private java.lang.Object name_ = ""; - /** - *
-         * Name of the call or identifier or parameter
-         * 
- * - * string name = 3; - * @return The name. - */ - public java.lang.String getName() { - java.lang.Object ref = name_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - name_ = s; - return s; - } else { - return (java.lang.String) ref; + private com.google.protobuf.Internal.IntList id_ = emptyIntList(); + private void ensureIdIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + id_ = mutableCopy(id_); + bitField0_ |= 0x00000001; } } /** *
-         * Name of the call or identifier or parameter
+         * Node id
          * 
* - * string name = 3; - * @return The bytes for name. + * repeated uint32 id = 1; + * @return A list containing the id. */ - public com.google.protobuf.ByteString - getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + public java.util.List + getIdList() { + return ((bitField0_ & 0x00000001) != 0) ? + java.util.Collections.unmodifiableList(id_) : id_; } /** *
-         * Name of the call or identifier or parameter
+         * Node id
          * 
* - * string name = 3; - * @param value The name to set. - * @return This builder for chaining. + * repeated uint32 id = 1; + * @return The count of id. */ - public Builder setName( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - name_ = value; - bitField0_ |= 0x00000004; - onChanged(); - return this; + public int getIdCount() { + return id_.size(); } /** *
-         * Name of the call or identifier or parameter
+         * Node id
          * 
* - * string name = 3; - * @return This builder for chaining. + * repeated uint32 id = 1; + * @param index The index of the element to return. + * @return The id at the given index. */ - public Builder clearName() { - name_ = getDefaultInstance().getName(); - bitField0_ = (bitField0_ & ~0x00000004); - onChanged(); - return this; + public int getId(int index) { + return id_.getInt(index); } /** *
-         * Name of the call or identifier or parameter
+         * Node id
          * 
* - * string name = 3; - * @param value The bytes for name to set. + * repeated uint32 id = 1; + * @param index The index to set the value at. + * @param value The id to set. * @return This builder for chaining. */ - public Builder setNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - name_ = value; - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - - private java.lang.Object fullName_ = ""; - /** - *
-         * Full name of the call
-         * 
- * - * string fullName = 4; - * @return The fullName. - */ - public java.lang.String getFullName() { - java.lang.Object ref = fullName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - fullName_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - *
-         * Full name of the call
-         * 
- * - * string fullName = 4; - * @return The bytes for fullName. - */ - public com.google.protobuf.ByteString - getFullNameBytes() { - java.lang.Object ref = fullName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - fullName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + public Builder setId( + int index, int value) { + + ensureIdIsMutable(); + id_.setInt(index, value); + onChanged(); + return this; } /** *
-         * Full name of the call
+         * Node id
          * 
* - * string fullName = 4; - * @param value The fullName to set. + * repeated uint32 id = 1; + * @param value The id to add. * @return This builder for chaining. */ - public Builder setFullName( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - fullName_ = value; - bitField0_ |= 0x00000008; + public Builder addId(int value) { + + ensureIdIsMutable(); + id_.addInt(value); onChanged(); return this; } /** *
-         * Full name of the call
+         * Node id
          * 
* - * string fullName = 4; + * repeated uint32 id = 1; + * @param values The id to add. * @return This builder for chaining. */ - public Builder clearFullName() { - fullName_ = getDefaultInstance().getFullName(); - bitField0_ = (bitField0_ & ~0x00000008); + public Builder addAllId( + java.lang.Iterable values) { + ensureIdIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, id_); onChanged(); return this; } /** *
-         * Full name of the call
+         * Node id
          * 
* - * string fullName = 4; - * @param value The bytes for fullName to set. + * repeated uint32 id = 1; * @return This builder for chaining. */ - public Builder setFullNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - fullName_ = value; - bitField0_ |= 0x00000008; + public Builder clearId() { + id_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000001); onChanged(); return this; } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:atom.DataFlowSlice.Flows) + } + + // @@protoc_insertion_point(class_scope:atom.DataFlowSlice.Flows) + private static final io.appthreat.atom.Atom.DataFlowSlice.Flows DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new io.appthreat.atom.Atom.DataFlowSlice.Flows(); + } + + public static io.appthreat.atom.Atom.DataFlowSlice.Flows getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Flows parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.Flows getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface PathsOrBuilder extends + // @@protoc_insertion_point(interface_extends:atom.DataFlowSlice.Paths) + com.google.protobuf.MessageOrBuilder { + + /** + *
+       * Flows from source to sink
+       * 
+ * + * repeated .atom.DataFlowSlice.Flows flows = 1; + */ + java.util.List + getFlowsList(); + /** + *
+       * Flows from source to sink
+       * 
+ * + * repeated .atom.DataFlowSlice.Flows flows = 1; + */ + io.appthreat.atom.Atom.DataFlowSlice.Flows getFlows(int index); + /** + *
+       * Flows from source to sink
+       * 
+ * + * repeated .atom.DataFlowSlice.Flows flows = 1; + */ + int getFlowsCount(); + /** + *
+       * Flows from source to sink
+       * 
+ * + * repeated .atom.DataFlowSlice.Flows flows = 1; + */ + java.util.List + getFlowsOrBuilderList(); + /** + *
+       * Flows from source to sink
+       * 
+ * + * repeated .atom.DataFlowSlice.Flows flows = 1; + */ + io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder getFlowsOrBuilder( + int index); + } + /** + * Protobuf type {@code atom.DataFlowSlice.Paths} + */ + public static final class Paths extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:atom.DataFlowSlice.Paths) + PathsOrBuilder { + private static final long serialVersionUID = 0L; + // Use Paths.newBuilder() to construct. + private Paths(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Paths() { + flows_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Paths(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Paths_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Paths_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.appthreat.atom.Atom.DataFlowSlice.Paths.class, io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder.class); + } + + public static final int FLOWS_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private java.util.List flows_; + /** + *
+       * Flows from source to sink
+       * 
+ * + * repeated .atom.DataFlowSlice.Flows flows = 1; + */ + @java.lang.Override + public java.util.List getFlowsList() { + return flows_; + } + /** + *
+       * Flows from source to sink
+       * 
+ * + * repeated .atom.DataFlowSlice.Flows flows = 1; + */ + @java.lang.Override + public java.util.List + getFlowsOrBuilderList() { + return flows_; + } + /** + *
+       * Flows from source to sink
+       * 
+ * + * repeated .atom.DataFlowSlice.Flows flows = 1; + */ + @java.lang.Override + public int getFlowsCount() { + return flows_.size(); + } + /** + *
+       * Flows from source to sink
+       * 
+ * + * repeated .atom.DataFlowSlice.Flows flows = 1; + */ + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.Flows getFlows(int index) { + return flows_.get(index); + } + /** + *
+       * Flows from source to sink
+       * 
+ * + * repeated .atom.DataFlowSlice.Flows flows = 1; + */ + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder getFlowsOrBuilder( + int index) { + return flows_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < flows_.size(); i++) { + output.writeMessage(1, flows_.get(i)); + } + getUnknownFields().writeTo(output); + } - private java.lang.Object signature_ = ""; - /** - *
-         * Method signature of the call
-         * 
- * - * string signature = 5; - * @return The signature. - */ - public java.lang.String getSignature() { - java.lang.Object ref = signature_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - signature_ = s; - return s; - } else { - return (java.lang.String) ref; - } + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < flows_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, flows_.get(i)); } - /** - *
-         * Method signature of the call
-         * 
- * - * string signature = 5; - * @return The bytes for signature. - */ - public com.google.protobuf.ByteString - getSignatureBytes() { - java.lang.Object ref = signature_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - signature_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; } - /** - *
-         * Method signature of the call
-         * 
- * - * string signature = 5; - * @param value The signature to set. - * @return This builder for chaining. - */ - public Builder setSignature( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - signature_ = value; - bitField0_ |= 0x00000010; - onChanged(); - return this; + if (!(obj instanceof io.appthreat.atom.Atom.DataFlowSlice.Paths)) { + return super.equals(obj); } - /** - *
-         * Method signature of the call
-         * 
- * - * string signature = 5; - * @return This builder for chaining. - */ - public Builder clearSignature() { - signature_ = getDefaultInstance().getSignature(); - bitField0_ = (bitField0_ & ~0x00000010); - onChanged(); - return this; + io.appthreat.atom.Atom.DataFlowSlice.Paths other = (io.appthreat.atom.Atom.DataFlowSlice.Paths) obj; + + if (!getFlowsList() + .equals(other.getFlowsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; } - /** - *
-         * Method signature of the call
-         * 
- * - * string signature = 5; - * @param value The bytes for signature to set. - * @return This builder for chaining. - */ - public Builder setSignatureBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - signature_ = value; - bitField0_ |= 0x00000010; - onChanged(); - return this; + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getFlowsCount() > 0) { + hash = (37 * hash) + FLOWS_FIELD_NUMBER; + hash = (53 * hash) + getFlowsList().hashCode(); } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } - private boolean isExternal_ ; - /** - *
-         * Boolean to indicate if this call belongs to an external method
-         * 
- * - * bool isExternal = 6; - * @return The isExternal. - */ - @java.lang.Override - public boolean getIsExternal() { - return isExternal_; + public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(io.appthreat.atom.Atom.DataFlowSlice.Paths prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code atom.DataFlowSlice.Paths} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:atom.DataFlowSlice.Paths) + io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Paths_descriptor; } - /** - *
-         * Boolean to indicate if this call belongs to an external method
-         * 
- * - * bool isExternal = 6; - * @param value The isExternal to set. - * @return This builder for chaining. - */ - public Builder setIsExternal(boolean value) { - isExternal_ = value; - bitField0_ |= 0x00000020; - onChanged(); - return this; + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Paths_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.appthreat.atom.Atom.DataFlowSlice.Paths.class, io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder.class); } - /** - *
-         * Boolean to indicate if this call belongs to an external method
-         * 
- * - * bool isExternal = 6; - * @return This builder for chaining. - */ - public Builder clearIsExternal() { - bitField0_ = (bitField0_ & ~0x00000020); - isExternal_ = false; - onChanged(); - return this; + + // Construct using io.appthreat.atom.Atom.DataFlowSlice.Paths.newBuilder() + private Builder() { + } - private java.lang.Object code_ = ""; - /** - *
-         * Source code
-         * 
- * - * string code = 7; - * @return The code. - */ - public java.lang.String getCode() { - java.lang.Object ref = code_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - code_ = s; - return s; - } else { - return (java.lang.String) ref; - } + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } - /** - *
-         * Source code
-         * 
- * - * string code = 7; - * @return The bytes for code. - */ - public com.google.protobuf.ByteString - getCodeBytes() { - java.lang.Object ref = code_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - code_ = b; - return b; + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (flowsBuilder_ == null) { + flows_ = java.util.Collections.emptyList(); } else { - return (com.google.protobuf.ByteString) ref; + flows_ = null; + flowsBuilder_.clear(); } - } - /** - *
-         * Source code
-         * 
- * - * string code = 7; - * @param value The code to set. - * @return This builder for chaining. - */ - public Builder setCode( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - code_ = value; - bitField0_ |= 0x00000040; - onChanged(); + bitField0_ = (bitField0_ & ~0x00000001); return this; } - /** - *
-         * Source code
-         * 
- * - * string code = 7; - * @return This builder for chaining. - */ - public Builder clearCode() { - code_ = getDefaultInstance().getCode(); - bitField0_ = (bitField0_ & ~0x00000040); - onChanged(); - return this; + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Paths_descriptor; } - /** - *
-         * Source code
-         * 
- * - * string code = 7; - * @param value The bytes for code to set. - * @return This builder for chaining. - */ - public Builder setCodeBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - code_ = value; - bitField0_ |= 0x00000040; - onChanged(); - return this; + + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.Paths getDefaultInstanceForType() { + return io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance(); } - private java.lang.Object typeFullName_ = ""; - /** - *
-         * Type full name
-         * 
- * - * string typeFullName = 8; - * @return The typeFullName. - */ - public java.lang.String getTypeFullName() { - java.lang.Object ref = typeFullName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - typeFullName_ = s; - return s; - } else { - return (java.lang.String) ref; + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.Paths build() { + io.appthreat.atom.Atom.DataFlowSlice.Paths result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); } + return result; } - /** - *
-         * Type full name
-         * 
- * - * string typeFullName = 8; - * @return The bytes for typeFullName. - */ - public com.google.protobuf.ByteString - getTypeFullNameBytes() { - java.lang.Object ref = typeFullName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - typeFullName_ = b; - return b; + + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.Paths buildPartial() { + io.appthreat.atom.Atom.DataFlowSlice.Paths result = new io.appthreat.atom.Atom.DataFlowSlice.Paths(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(io.appthreat.atom.Atom.DataFlowSlice.Paths result) { + if (flowsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + flows_ = java.util.Collections.unmodifiableList(flows_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.flows_ = flows_; } else { - return (com.google.protobuf.ByteString) ref; + result.flows_ = flowsBuilder_.build(); } } - /** - *
-         * Type full name
-         * 
- * - * string typeFullName = 8; - * @param value The typeFullName to set. - * @return This builder for chaining. - */ - public Builder setTypeFullName( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - typeFullName_ = value; - bitField0_ |= 0x00000080; - onChanged(); - return this; + + private void buildPartial0(io.appthreat.atom.Atom.DataFlowSlice.Paths result) { + int from_bitField0_ = bitField0_; } - /** - *
-         * Type full name
-         * 
- * - * string typeFullName = 8; - * @return This builder for chaining. - */ - public Builder clearTypeFullName() { - typeFullName_ = getDefaultInstance().getTypeFullName(); - bitField0_ = (bitField0_ & ~0x00000080); - onChanged(); - return this; + + @java.lang.Override + public Builder clone() { + return super.clone(); } - /** - *
-         * Type full name
-         * 
- * - * string typeFullName = 8; - * @param value The bytes for typeFullName to set. - * @return This builder for chaining. - */ - public Builder setTypeFullNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - typeFullName_ = value; - bitField0_ |= 0x00000080; - onChanged(); - return this; + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); } - - private java.lang.Object parentMethodName_ = ""; - /** - *
-         * Parent method name
-         * 
- * - * string parentMethodName = 9; - * @return The parentMethodName. - */ - public java.lang.String getParentMethodName() { - java.lang.Object ref = parentMethodName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - parentMethodName_ = s; - return s; + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.appthreat.atom.Atom.DataFlowSlice.Paths) { + return mergeFrom((io.appthreat.atom.Atom.DataFlowSlice.Paths)other); } else { - return (java.lang.String) ref; + super.mergeFrom(other); + return this; } } - /** - *
-         * Parent method name
-         * 
- * - * string parentMethodName = 9; - * @return The bytes for parentMethodName. - */ - public com.google.protobuf.ByteString - getParentMethodNameBytes() { - java.lang.Object ref = parentMethodName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - parentMethodName_ = b; - return b; + + public Builder mergeFrom(io.appthreat.atom.Atom.DataFlowSlice.Paths other) { + if (other == io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance()) return this; + if (flowsBuilder_ == null) { + if (!other.flows_.isEmpty()) { + if (flows_.isEmpty()) { + flows_ = other.flows_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureFlowsIsMutable(); + flows_.addAll(other.flows_); + } + onChanged(); + } } else { - return (com.google.protobuf.ByteString) ref; + if (!other.flows_.isEmpty()) { + if (flowsBuilder_.isEmpty()) { + flowsBuilder_.dispose(); + flowsBuilder_ = null; + flows_ = other.flows_; + bitField0_ = (bitField0_ & ~0x00000001); + flowsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getFlowsFieldBuilder() : null; + } else { + flowsBuilder_.addAllMessages(other.flows_); + } + } } - } - /** - *
-         * Parent method name
-         * 
- * - * string parentMethodName = 9; - * @param value The parentMethodName to set. - * @return This builder for chaining. - */ - public Builder setParentMethodName( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - parentMethodName_ = value; - bitField0_ |= 0x00000100; + this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; } - /** - *
-         * Parent method name
-         * 
- * - * string parentMethodName = 9; - * @return This builder for chaining. - */ - public Builder clearParentMethodName() { - parentMethodName_ = getDefaultInstance().getParentMethodName(); - bitField0_ = (bitField0_ & ~0x00000100); - onChanged(); - return this; + + @java.lang.Override + public final boolean isInitialized() { + return true; } - /** - *
-         * Parent method name
-         * 
- * - * string parentMethodName = 9; - * @param value The bytes for parentMethodName to set. - * @return This builder for chaining. - */ - public Builder setParentMethodNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - parentMethodName_ = value; - bitField0_ |= 0x00000100; - onChanged(); + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + io.appthreat.atom.Atom.DataFlowSlice.Flows m = + input.readMessage( + io.appthreat.atom.Atom.DataFlowSlice.Flows.parser(), + extensionRegistry); + if (flowsBuilder_ == null) { + ensureFlowsIsMutable(); + flows_.add(m); + } else { + flowsBuilder_.addMessage(m); + } + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally return this; } + private int bitField0_; + + private java.util.List flows_ = + java.util.Collections.emptyList(); + private void ensureFlowsIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + flows_ = new java.util.ArrayList(flows_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + io.appthreat.atom.Atom.DataFlowSlice.Flows, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder, io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder> flowsBuilder_; - private java.lang.Object parentFileName_ = ""; /** *
-         * Parent filename
+         * Flows from source to sink
          * 
* - * string parentFileName = 10; - * @return The parentFileName. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public java.lang.String getParentFileName() { - java.lang.Object ref = parentFileName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - parentFileName_ = s; - return s; + public java.util.List getFlowsList() { + if (flowsBuilder_ == null) { + return java.util.Collections.unmodifiableList(flows_); } else { - return (java.lang.String) ref; + return flowsBuilder_.getMessageList(); } } /** *
-         * Parent filename
+         * Flows from source to sink
          * 
* - * string parentFileName = 10; - * @return The bytes for parentFileName. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public com.google.protobuf.ByteString - getParentFileNameBytes() { - java.lang.Object ref = parentFileName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - parentFileName_ = b; - return b; + public int getFlowsCount() { + if (flowsBuilder_ == null) { + return flows_.size(); } else { - return (com.google.protobuf.ByteString) ref; + return flowsBuilder_.getCount(); } } /** *
-         * Parent filename
-         * 
- * - * string parentFileName = 10; - * @param value The parentFileName to set. - * @return This builder for chaining. - */ - public Builder setParentFileName( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - parentFileName_ = value; - bitField0_ |= 0x00000200; - onChanged(); - return this; - } - /** - *
-         * Parent filename
-         * 
- * - * string parentFileName = 10; - * @return This builder for chaining. - */ - public Builder clearParentFileName() { - parentFileName_ = getDefaultInstance().getParentFileName(); - bitField0_ = (bitField0_ & ~0x00000200); - onChanged(); - return this; - } - /** - *
-         * Parent filename
-         * 
- * - * string parentFileName = 10; - * @param value The bytes for parentFileName to set. - * @return This builder for chaining. - */ - public Builder setParentFileNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - parentFileName_ = value; - bitField0_ |= 0x00000200; - onChanged(); - return this; - } - - private java.lang.Object parentPackageName_ = ""; - /** - *
-         * Parent package name
+         * Flows from source to sink
          * 
* - * string parentPackageName = 11; - * @return The parentPackageName. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public java.lang.String getParentPackageName() { - java.lang.Object ref = parentPackageName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - parentPackageName_ = s; - return s; + public io.appthreat.atom.Atom.DataFlowSlice.Flows getFlows(int index) { + if (flowsBuilder_ == null) { + return flows_.get(index); } else { - return (java.lang.String) ref; + return flowsBuilder_.getMessage(index); } } /** *
-         * Parent package name
+         * Flows from source to sink
          * 
* - * string parentPackageName = 11; - * @return The bytes for parentPackageName. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public com.google.protobuf.ByteString - getParentPackageNameBytes() { - java.lang.Object ref = parentPackageName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - parentPackageName_ = b; - return b; + public Builder setFlows( + int index, io.appthreat.atom.Atom.DataFlowSlice.Flows value) { + if (flowsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFlowsIsMutable(); + flows_.set(index, value); + onChanged(); } else { - return (com.google.protobuf.ByteString) ref; + flowsBuilder_.setMessage(index, value); } + return this; } /** *
-         * Parent package name
+         * Flows from source to sink
          * 
* - * string parentPackageName = 11; - * @param value The parentPackageName to set. - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public Builder setParentPackageName( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - parentPackageName_ = value; - bitField0_ |= 0x00000400; - onChanged(); + public Builder setFlows( + int index, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder builderForValue) { + if (flowsBuilder_ == null) { + ensureFlowsIsMutable(); + flows_.set(index, builderForValue.build()); + onChanged(); + } else { + flowsBuilder_.setMessage(index, builderForValue.build()); + } return this; } /** *
-         * Parent package name
+         * Flows from source to sink
          * 
* - * string parentPackageName = 11; - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public Builder clearParentPackageName() { - parentPackageName_ = getDefaultInstance().getParentPackageName(); - bitField0_ = (bitField0_ & ~0x00000400); - onChanged(); + public Builder addFlows(io.appthreat.atom.Atom.DataFlowSlice.Flows value) { + if (flowsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFlowsIsMutable(); + flows_.add(value); + onChanged(); + } else { + flowsBuilder_.addMessage(value); + } return this; } /** *
-         * Parent package name
+         * Flows from source to sink
          * 
* - * string parentPackageName = 11; - * @param value The bytes for parentPackageName to set. - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public Builder setParentPackageNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - parentPackageName_ = value; - bitField0_ |= 0x00000400; - onChanged(); + public Builder addFlows( + int index, io.appthreat.atom.Atom.DataFlowSlice.Flows value) { + if (flowsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFlowsIsMutable(); + flows_.add(index, value); + onChanged(); + } else { + flowsBuilder_.addMessage(index, value); + } return this; } - - private java.lang.Object parentClassName_ = ""; /** *
-         * Parent class name
+         * Flows from source to sink
          * 
* - * string parentClassName = 12; - * @return The parentClassName. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public java.lang.String getParentClassName() { - java.lang.Object ref = parentClassName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - parentClassName_ = s; - return s; + public Builder addFlows( + io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder builderForValue) { + if (flowsBuilder_ == null) { + ensureFlowsIsMutable(); + flows_.add(builderForValue.build()); + onChanged(); } else { - return (java.lang.String) ref; + flowsBuilder_.addMessage(builderForValue.build()); } + return this; } /** *
-         * Parent class name
+         * Flows from source to sink
          * 
* - * string parentClassName = 12; - * @return The bytes for parentClassName. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public com.google.protobuf.ByteString - getParentClassNameBytes() { - java.lang.Object ref = parentClassName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - parentClassName_ = b; - return b; + public Builder addFlows( + int index, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder builderForValue) { + if (flowsBuilder_ == null) { + ensureFlowsIsMutable(); + flows_.add(index, builderForValue.build()); + onChanged(); } else { - return (com.google.protobuf.ByteString) ref; + flowsBuilder_.addMessage(index, builderForValue.build()); } + return this; } /** *
-         * Parent class name
+         * Flows from source to sink
          * 
* - * string parentClassName = 12; - * @param value The parentClassName to set. - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public Builder setParentClassName( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - parentClassName_ = value; - bitField0_ |= 0x00000800; - onChanged(); + public Builder addAllFlows( + java.lang.Iterable values) { + if (flowsBuilder_ == null) { + ensureFlowsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, flows_); + onChanged(); + } else { + flowsBuilder_.addAllMessages(values); + } return this; } /** *
-         * Parent class name
+         * Flows from source to sink
          * 
* - * string parentClassName = 12; - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public Builder clearParentClassName() { - parentClassName_ = getDefaultInstance().getParentClassName(); - bitField0_ = (bitField0_ & ~0x00000800); - onChanged(); + public Builder clearFlows() { + if (flowsBuilder_ == null) { + flows_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + flowsBuilder_.clear(); + } return this; } /** *
-         * Parent class name
+         * Flows from source to sink
          * 
* - * string parentClassName = 12; - * @param value The bytes for parentClassName to set. - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public Builder setParentClassNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - parentClassName_ = value; - bitField0_ |= 0x00000800; - onChanged(); + public Builder removeFlows(int index) { + if (flowsBuilder_ == null) { + ensureFlowsIsMutable(); + flows_.remove(index); + onChanged(); + } else { + flowsBuilder_.remove(index); + } return this; } - - private int lineNumber_ ; /** *
-         * Line number
+         * Flows from source to sink
          * 
* - * uint32 lineNumber = 13; - * @return The lineNumber. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - @java.lang.Override - public int getLineNumber() { - return lineNumber_; + public io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder getFlowsBuilder( + int index) { + return getFlowsFieldBuilder().getBuilder(index); } /** *
-         * Line number
+         * Flows from source to sink
          * 
* - * uint32 lineNumber = 13; - * @param value The lineNumber to set. - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public Builder setLineNumber(int value) { - - lineNumber_ = value; - bitField0_ |= 0x00001000; - onChanged(); - return this; + public io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder getFlowsOrBuilder( + int index) { + if (flowsBuilder_ == null) { + return flows_.get(index); } else { + return flowsBuilder_.getMessageOrBuilder(index); + } } /** *
-         * Line number
+         * Flows from source to sink
          * 
* - * uint32 lineNumber = 13; - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public Builder clearLineNumber() { - bitField0_ = (bitField0_ & ~0x00001000); - lineNumber_ = 0; - onChanged(); - return this; + public java.util.List + getFlowsOrBuilderList() { + if (flowsBuilder_ != null) { + return flowsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(flows_); + } } - - private int columnNumber_ ; /** *
-         * Column number
+         * Flows from source to sink
          * 
* - * uint32 columnNumber = 14; - * @return The columnNumber. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - @java.lang.Override - public int getColumnNumber() { - return columnNumber_; + public io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder addFlowsBuilder() { + return getFlowsFieldBuilder().addBuilder( + io.appthreat.atom.Atom.DataFlowSlice.Flows.getDefaultInstance()); } /** *
-         * Column number
+         * Flows from source to sink
          * 
* - * uint32 columnNumber = 14; - * @param value The columnNumber to set. - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public Builder setColumnNumber(int value) { - - columnNumber_ = value; - bitField0_ |= 0x00002000; - onChanged(); - return this; + public io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder addFlowsBuilder( + int index) { + return getFlowsFieldBuilder().addBuilder( + index, io.appthreat.atom.Atom.DataFlowSlice.Flows.getDefaultInstance()); } /** *
-         * Column number
+         * Flows from source to sink
          * 
* - * uint32 columnNumber = 14; - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Flows flows = 1; */ - public Builder clearColumnNumber() { - bitField0_ = (bitField0_ & ~0x00002000); - columnNumber_ = 0; - onChanged(); - return this; + public java.util.List + getFlowsBuilderList() { + return getFlowsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + io.appthreat.atom.Atom.DataFlowSlice.Flows, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder, io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder> + getFlowsFieldBuilder() { + if (flowsBuilder_ == null) { + flowsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + io.appthreat.atom.Atom.DataFlowSlice.Flows, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder, io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder>( + flows_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + flows_ = null; + } + return flowsBuilder_; } @java.lang.Override public final Builder setUnknownFields( @@ -42122,23 +44577,23 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:atom.DataFlowSlice.Nodes) + // @@protoc_insertion_point(builder_scope:atom.DataFlowSlice.Paths) } - // @@protoc_insertion_point(class_scope:atom.DataFlowSlice.Nodes) - private static final io.appthreat.atom.Atom.DataFlowSlice.Nodes DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:atom.DataFlowSlice.Paths) + private static final io.appthreat.atom.Atom.DataFlowSlice.Paths DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.appthreat.atom.Atom.DataFlowSlice.Nodes(); + DEFAULT_INSTANCE = new io.appthreat.atom.Atom.DataFlowSlice.Paths(); } - public static io.appthreat.atom.Atom.DataFlowSlice.Nodes getDefaultInstance() { + public static io.appthreat.atom.Atom.DataFlowSlice.Paths getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public Nodes parsePartialFrom( + public Paths parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -42157,155 +44612,191 @@ public Nodes parsePartialFrom( } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Nodes getDefaultInstanceForType() { + public io.appthreat.atom.Atom.DataFlowSlice.Paths getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface EdgesOrBuilder extends - // @@protoc_insertion_point(interface_extends:atom.DataFlowSlice.Edges) + public interface GraphOrBuilder extends + // @@protoc_insertion_point(interface_extends:atom.DataFlowSlice.Graph) com.google.protobuf.MessageOrBuilder { /** - *
-       * Source node id
-       * 
- * - * uint32 src = 1; - * @return The src. + * repeated .atom.Nodes nodes = 1; */ - int getSrc(); - + java.util.List + getNodesList(); /** - *
-       * Destination node id
-       * 
- * - * uint32 dst = 2; - * @return The dst. + * repeated .atom.Nodes nodes = 1; */ - int getDst(); + io.appthreat.atom.Atom.Nodes getNodes(int index); + /** + * repeated .atom.Nodes nodes = 1; + */ + int getNodesCount(); + /** + * repeated .atom.Nodes nodes = 1; + */ + java.util.List + getNodesOrBuilderList(); + /** + * repeated .atom.Nodes nodes = 1; + */ + io.appthreat.atom.Atom.NodesOrBuilder getNodesOrBuilder( + int index); /** - *
-       * Edge type
-       * 
- * - * .atom.CpgStruct.Edge.EdgeType label = 3; - * @return The enum numeric value on the wire for label. + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + java.util.List + getEdgesList(); + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + io.appthreat.atom.Atom.DataFlowSlice.Edges getEdges(int index); + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + int getEdgesCount(); + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; */ - int getLabelValue(); + java.util.List + getEdgesOrBuilderList(); /** - *
-       * Edge type
-       * 
- * - * .atom.CpgStruct.Edge.EdgeType label = 3; - * @return The label. + * repeated .atom.DataFlowSlice.Edges edges = 2; */ - io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType getLabel(); + io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder getEdgesOrBuilder( + int index); } /** - * Protobuf type {@code atom.DataFlowSlice.Edges} + * Protobuf type {@code atom.DataFlowSlice.Graph} */ - public static final class Edges extends + public static final class Graph extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:atom.DataFlowSlice.Edges) - EdgesOrBuilder { + // @@protoc_insertion_point(message_implements:atom.DataFlowSlice.Graph) + GraphOrBuilder { private static final long serialVersionUID = 0L; - // Use Edges.newBuilder() to construct. - private Edges(com.google.protobuf.GeneratedMessageV3.Builder builder) { + // Use Graph.newBuilder() to construct. + private Graph(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); } - private Edges() { - label_ = 0; + private Graph() { + nodes_ = java.util.Collections.emptyList(); + edges_ = java.util.Collections.emptyList(); } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new Edges(); + return new Graph(); } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Edges_descriptor; + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Graph_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Edges_fieldAccessorTable + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Graph_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.appthreat.atom.Atom.DataFlowSlice.Edges.class, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder.class); + io.appthreat.atom.Atom.DataFlowSlice.Graph.class, io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder.class); } - public static final int SRC_FIELD_NUMBER = 1; - private int src_ = 0; + public static final int NODES_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private java.util.List nodes_; /** - *
-       * Source node id
-       * 
- * - * uint32 src = 1; - * @return The src. + * repeated .atom.Nodes nodes = 1; */ @java.lang.Override - public int getSrc() { - return src_; + public java.util.List getNodesList() { + return nodes_; } - - public static final int DST_FIELD_NUMBER = 2; - private int dst_ = 0; /** - *
-       * Destination node id
-       * 
- * - * uint32 dst = 2; - * @return The dst. + * repeated .atom.Nodes nodes = 1; */ @java.lang.Override - public int getDst() { - return dst_; + public java.util.List + getNodesOrBuilderList() { + return nodes_; + } + /** + * repeated .atom.Nodes nodes = 1; + */ + @java.lang.Override + public int getNodesCount() { + return nodes_.size(); + } + /** + * repeated .atom.Nodes nodes = 1; + */ + @java.lang.Override + public io.appthreat.atom.Atom.Nodes getNodes(int index) { + return nodes_.get(index); + } + /** + * repeated .atom.Nodes nodes = 1; + */ + @java.lang.Override + public io.appthreat.atom.Atom.NodesOrBuilder getNodesOrBuilder( + int index) { + return nodes_.get(index); } - public static final int LABEL_FIELD_NUMBER = 3; - private int label_ = 0; + public static final int EDGES_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private java.util.List edges_; /** - *
-       * Edge type
-       * 
- * - * .atom.CpgStruct.Edge.EdgeType label = 3; - * @return The enum numeric value on the wire for label. + * repeated .atom.DataFlowSlice.Edges edges = 2; */ - @java.lang.Override public int getLabelValue() { - return label_; + @java.lang.Override + public java.util.List getEdgesList() { + return edges_; } /** - *
-       * Edge type
-       * 
- * - * .atom.CpgStruct.Edge.EdgeType label = 3; - * @return The label. + * repeated .atom.DataFlowSlice.Edges edges = 2; */ - @java.lang.Override public io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType getLabel() { - io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType result = io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType.forNumber(label_); - return result == null ? io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType.UNRECOGNIZED : result; + @java.lang.Override + public java.util.List + getEdgesOrBuilderList() { + return edges_; + } + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + @java.lang.Override + public int getEdgesCount() { + return edges_.size(); + } + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.Edges getEdges(int index) { + return edges_.get(index); + } + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder getEdgesOrBuilder( + int index) { + return edges_.get(index); } private byte memoizedIsInitialized = -1; @@ -42322,14 +44813,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (src_ != 0) { - output.writeUInt32(1, src_); - } - if (dst_ != 0) { - output.writeUInt32(2, dst_); + for (int i = 0; i < nodes_.size(); i++) { + output.writeMessage(1, nodes_.get(i)); } - if (label_ != io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType.UNKNOWN_EDGE_TYPE.getNumber()) { - output.writeEnum(3, label_); + for (int i = 0; i < edges_.size(); i++) { + output.writeMessage(2, edges_.get(i)); } getUnknownFields().writeTo(output); } @@ -42340,17 +44828,13 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (src_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(1, src_); - } - if (dst_ != 0) { + for (int i = 0; i < nodes_.size(); i++) { size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(2, dst_); + .computeMessageSize(1, nodes_.get(i)); } - if (label_ != io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType.UNKNOWN_EDGE_TYPE.getNumber()) { + for (int i = 0; i < edges_.size(); i++) { size += com.google.protobuf.CodedOutputStream - .computeEnumSize(3, label_); + .computeMessageSize(2, edges_.get(i)); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -42362,16 +44846,15 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.appthreat.atom.Atom.DataFlowSlice.Edges)) { + if (!(obj instanceof io.appthreat.atom.Atom.DataFlowSlice.Graph)) { return super.equals(obj); } - io.appthreat.atom.Atom.DataFlowSlice.Edges other = (io.appthreat.atom.Atom.DataFlowSlice.Edges) obj; + io.appthreat.atom.Atom.DataFlowSlice.Graph other = (io.appthreat.atom.Atom.DataFlowSlice.Graph) obj; - if (getSrc() - != other.getSrc()) return false; - if (getDst() - != other.getDst()) return false; - if (label_ != other.label_) return false; + if (!getNodesList() + .equals(other.getNodesList())) return false; + if (!getEdgesList() + .equals(other.getEdgesList())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -42383,55 +44866,57 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SRC_FIELD_NUMBER; - hash = (53 * hash) + getSrc(); - hash = (37 * hash) + DST_FIELD_NUMBER; - hash = (53 * hash) + getDst(); - hash = (37 * hash) + LABEL_FIELD_NUMBER; - hash = (53 * hash) + label_; + if (getNodesCount() > 0) { + hash = (37 * hash) + NODES_FIELD_NUMBER; + hash = (53 * hash) + getNodesList().hashCode(); + } + if (getEdgesCount() > 0) { + hash = (37 * hash) + EDGES_FIELD_NUMBER; + hash = (53 * hash) + getEdgesList().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; } - public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom(byte[] data) + public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom(java.io.InputStream input) + public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -42439,26 +44924,26 @@ public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseDelimitedFrom(java.io.InputStream input) + public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseDelimitedFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( + public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -42471,7 +44956,7 @@ public static io.appthreat.atom.Atom.DataFlowSlice.Edges parseFrom( public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.appthreat.atom.Atom.DataFlowSlice.Edges prototype) { + public static Builder newBuilder(io.appthreat.atom.Atom.DataFlowSlice.Graph prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -42487,26 +44972,26 @@ protected Builder newBuilderForType( return builder; } /** - * Protobuf type {@code atom.DataFlowSlice.Edges} + * Protobuf type {@code atom.DataFlowSlice.Graph} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:atom.DataFlowSlice.Edges) - io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder { + // @@protoc_insertion_point(builder_implements:atom.DataFlowSlice.Graph) + io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Edges_descriptor; + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Graph_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Edges_fieldAccessorTable + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Graph_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.appthreat.atom.Atom.DataFlowSlice.Edges.class, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder.class); + io.appthreat.atom.Atom.DataFlowSlice.Graph.class, io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder.class); } - // Construct using io.appthreat.atom.Atom.DataFlowSlice.Edges.newBuilder() + // Construct using io.appthreat.atom.Atom.DataFlowSlice.Graph.newBuilder() private Builder() { } @@ -42520,26 +45005,37 @@ private Builder( public Builder clear() { super.clear(); bitField0_ = 0; - src_ = 0; - dst_ = 0; - label_ = 0; + if (nodesBuilder_ == null) { + nodes_ = java.util.Collections.emptyList(); + } else { + nodes_ = null; + nodesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + if (edgesBuilder_ == null) { + edges_ = java.util.Collections.emptyList(); + } else { + edges_ = null; + edgesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Edges_descriptor; + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Graph_descriptor; } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Edges getDefaultInstanceForType() { - return io.appthreat.atom.Atom.DataFlowSlice.Edges.getDefaultInstance(); + public io.appthreat.atom.Atom.DataFlowSlice.Graph getDefaultInstanceForType() { + return io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance(); } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Edges build() { - io.appthreat.atom.Atom.DataFlowSlice.Edges result = buildPartial(); + public io.appthreat.atom.Atom.DataFlowSlice.Graph build() { + io.appthreat.atom.Atom.DataFlowSlice.Graph result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -42547,26 +45043,39 @@ public io.appthreat.atom.Atom.DataFlowSlice.Edges build() { } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Edges buildPartial() { - io.appthreat.atom.Atom.DataFlowSlice.Edges result = new io.appthreat.atom.Atom.DataFlowSlice.Edges(this); + public io.appthreat.atom.Atom.DataFlowSlice.Graph buildPartial() { + io.appthreat.atom.Atom.DataFlowSlice.Graph result = new io.appthreat.atom.Atom.DataFlowSlice.Graph(this); + buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.appthreat.atom.Atom.DataFlowSlice.Edges result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.src_ = src_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.dst_ = dst_; + private void buildPartialRepeatedFields(io.appthreat.atom.Atom.DataFlowSlice.Graph result) { + if (nodesBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + nodes_ = java.util.Collections.unmodifiableList(nodes_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.nodes_ = nodes_; + } else { + result.nodes_ = nodesBuilder_.build(); } - if (((from_bitField0_ & 0x00000004) != 0)) { - result.label_ = label_; + if (edgesBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0)) { + edges_ = java.util.Collections.unmodifiableList(edges_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.edges_ = edges_; + } else { + result.edges_ = edgesBuilder_.build(); } } + private void buildPartial0(io.appthreat.atom.Atom.DataFlowSlice.Graph result) { + int from_bitField0_ = bitField0_; + } + @java.lang.Override public Builder clone() { return super.clone(); @@ -42601,2020 +45110,1593 @@ public Builder addRepeatedField( } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.appthreat.atom.Atom.DataFlowSlice.Edges) { - return mergeFrom((io.appthreat.atom.Atom.DataFlowSlice.Edges)other); + if (other instanceof io.appthreat.atom.Atom.DataFlowSlice.Graph) { + return mergeFrom((io.appthreat.atom.Atom.DataFlowSlice.Graph)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.appthreat.atom.Atom.DataFlowSlice.Edges other) { - if (other == io.appthreat.atom.Atom.DataFlowSlice.Edges.getDefaultInstance()) return this; - if (other.getSrc() != 0) { - setSrc(other.getSrc()); - } - if (other.getDst() != 0) { - setDst(other.getDst()); - } - if (other.label_ != 0) { - setLabelValue(other.getLabelValue()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - src_ = input.readUInt32(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 16: { - dst_ = input.readUInt32(); - bitField0_ |= 0x00000002; - break; - } // case 16 - case 24: { - label_ = input.readEnum(); - bitField0_ |= 0x00000004; - break; - } // case 24 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int bitField0_; - - private int src_ ; - /** - *
-         * Source node id
-         * 
- * - * uint32 src = 1; - * @return The src. - */ - @java.lang.Override - public int getSrc() { - return src_; - } - /** - *
-         * Source node id
-         * 
- * - * uint32 src = 1; - * @param value The src to set. - * @return This builder for chaining. - */ - public Builder setSrc(int value) { - - src_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - *
-         * Source node id
-         * 
- * - * uint32 src = 1; - * @return This builder for chaining. - */ - public Builder clearSrc() { - bitField0_ = (bitField0_ & ~0x00000001); - src_ = 0; - onChanged(); - return this; - } - - private int dst_ ; - /** - *
-         * Destination node id
-         * 
- * - * uint32 dst = 2; - * @return The dst. - */ - @java.lang.Override - public int getDst() { - return dst_; - } - /** - *
-         * Destination node id
-         * 
- * - * uint32 dst = 2; - * @param value The dst to set. - * @return This builder for chaining. - */ - public Builder setDst(int value) { - - dst_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - *
-         * Destination node id
-         * 
- * - * uint32 dst = 2; - * @return This builder for chaining. - */ - public Builder clearDst() { - bitField0_ = (bitField0_ & ~0x00000002); - dst_ = 0; - onChanged(); - return this; - } - - private int label_ = 0; - /** - *
-         * Edge type
-         * 
- * - * .atom.CpgStruct.Edge.EdgeType label = 3; - * @return The enum numeric value on the wire for label. - */ - @java.lang.Override public int getLabelValue() { - return label_; - } - /** - *
-         * Edge type
-         * 
- * - * .atom.CpgStruct.Edge.EdgeType label = 3; - * @param value The enum numeric value on the wire for label to set. - * @return This builder for chaining. - */ - public Builder setLabelValue(int value) { - label_ = value; - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - /** - *
-         * Edge type
-         * 
- * - * .atom.CpgStruct.Edge.EdgeType label = 3; - * @return The label. - */ - @java.lang.Override - public io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType getLabel() { - io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType result = io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType.forNumber(label_); - return result == null ? io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType.UNRECOGNIZED : result; - } - /** - *
-         * Edge type
-         * 
- * - * .atom.CpgStruct.Edge.EdgeType label = 3; - * @param value The label to set. - * @return This builder for chaining. - */ - public Builder setLabel(io.appthreat.atom.Atom.CpgStruct.Edge.EdgeType value) { - if (value == null) { - throw new NullPointerException(); + public Builder mergeFrom(io.appthreat.atom.Atom.DataFlowSlice.Graph other) { + if (other == io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance()) return this; + if (nodesBuilder_ == null) { + if (!other.nodes_.isEmpty()) { + if (nodes_.isEmpty()) { + nodes_ = other.nodes_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureNodesIsMutable(); + nodes_.addAll(other.nodes_); + } + onChanged(); + } + } else { + if (!other.nodes_.isEmpty()) { + if (nodesBuilder_.isEmpty()) { + nodesBuilder_.dispose(); + nodesBuilder_ = null; + nodes_ = other.nodes_; + bitField0_ = (bitField0_ & ~0x00000001); + nodesBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getNodesFieldBuilder() : null; + } else { + nodesBuilder_.addAllMessages(other.nodes_); + } + } } - bitField0_ |= 0x00000004; - label_ = value.getNumber(); - onChanged(); - return this; - } - /** - *
-         * Edge type
-         * 
- * - * .atom.CpgStruct.Edge.EdgeType label = 3; - * @return This builder for chaining. - */ - public Builder clearLabel() { - bitField0_ = (bitField0_ & ~0x00000004); - label_ = 0; + if (edgesBuilder_ == null) { + if (!other.edges_.isEmpty()) { + if (edges_.isEmpty()) { + edges_ = other.edges_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureEdgesIsMutable(); + edges_.addAll(other.edges_); + } + onChanged(); + } + } else { + if (!other.edges_.isEmpty()) { + if (edgesBuilder_.isEmpty()) { + edgesBuilder_.dispose(); + edgesBuilder_ = null; + edges_ = other.edges_; + bitField0_ = (bitField0_ & ~0x00000002); + edgesBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getEdgesFieldBuilder() : null; + } else { + edgesBuilder_.addAllMessages(other.edges_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + public final boolean isInitialized() { + return true; } - - // @@protoc_insertion_point(builder_scope:atom.DataFlowSlice.Edges) - } - - // @@protoc_insertion_point(class_scope:atom.DataFlowSlice.Edges) - private static final io.appthreat.atom.Atom.DataFlowSlice.Edges DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new io.appthreat.atom.Atom.DataFlowSlice.Edges(); - } - - public static io.appthreat.atom.Atom.DataFlowSlice.Edges getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public Edges parsePartialFrom( + public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Edges getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface FlowsOrBuilder extends - // @@protoc_insertion_point(interface_extends:atom.DataFlowSlice.Flows) - com.google.protobuf.MessageOrBuilder { - - /** - *
-       * Node id
-       * 
- * - * repeated uint32 id = 1; - * @return A list containing the id. - */ - java.util.List getIdList(); - /** - *
-       * Node id
-       * 
- * - * repeated uint32 id = 1; - * @return The count of id. - */ - int getIdCount(); - /** - *
-       * Node id
-       * 
- * - * repeated uint32 id = 1; - * @param index The index of the element to return. - * @return The id at the given index. - */ - int getId(int index); - } - /** - * Protobuf type {@code atom.DataFlowSlice.Flows} - */ - public static final class Flows extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:atom.DataFlowSlice.Flows) - FlowsOrBuilder { - private static final long serialVersionUID = 0L; - // Use Flows.newBuilder() to construct. - private Flows(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private Flows() { - id_ = emptyIntList(); - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new Flows(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Flows_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Flows_fieldAccessorTable - .ensureFieldAccessorsInitialized( - io.appthreat.atom.Atom.DataFlowSlice.Flows.class, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder.class); - } - - public static final int ID_FIELD_NUMBER = 1; - @SuppressWarnings("serial") - private com.google.protobuf.Internal.IntList id_; - /** - *
-       * Node id
-       * 
- * - * repeated uint32 id = 1; - * @return A list containing the id. - */ - @java.lang.Override - public java.util.List - getIdList() { - return id_; - } - /** - *
-       * Node id
-       * 
- * - * repeated uint32 id = 1; - * @return The count of id. - */ - public int getIdCount() { - return id_.size(); - } - /** - *
-       * Node id
-       * 
- * - * repeated uint32 id = 1; - * @param index The index of the element to return. - * @return The id at the given index. - */ - public int getId(int index) { - return id_.getInt(index); - } - private int idMemoizedSerializedSize = -1; - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (getIdList().size() > 0) { - output.writeUInt32NoTag(10); - output.writeUInt32NoTag(idMemoizedSerializedSize); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + io.appthreat.atom.Atom.Nodes m = + input.readMessage( + io.appthreat.atom.Atom.Nodes.parser(), + extensionRegistry); + if (nodesBuilder_ == null) { + ensureNodesIsMutable(); + nodes_.add(m); + } else { + nodesBuilder_.addMessage(m); + } + break; + } // case 10 + case 18: { + io.appthreat.atom.Atom.DataFlowSlice.Edges m = + input.readMessage( + io.appthreat.atom.Atom.DataFlowSlice.Edges.parser(), + extensionRegistry); + if (edgesBuilder_ == null) { + ensureEdgesIsMutable(); + edges_.add(m); + } else { + edgesBuilder_.addMessage(m); + } + break; + } // case 18 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; } - for (int i = 0; i < id_.size(); i++) { - output.writeUInt32NoTag(id_.getInt(i)); + private int bitField0_; + + private java.util.List nodes_ = + java.util.Collections.emptyList(); + private void ensureNodesIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + nodes_ = new java.util.ArrayList(nodes_); + bitField0_ |= 0x00000001; + } } - getUnknownFields().writeTo(output); - } - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; + private com.google.protobuf.RepeatedFieldBuilderV3< + io.appthreat.atom.Atom.Nodes, io.appthreat.atom.Atom.Nodes.Builder, io.appthreat.atom.Atom.NodesOrBuilder> nodesBuilder_; - size = 0; - { - int dataSize = 0; - for (int i = 0; i < id_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeUInt32SizeNoTag(id_.getInt(i)); - } - size += dataSize; - if (!getIdList().isEmpty()) { - size += 1; - size += com.google.protobuf.CodedOutputStream - .computeInt32SizeNoTag(dataSize); + /** + * repeated .atom.Nodes nodes = 1; + */ + public java.util.List getNodesList() { + if (nodesBuilder_ == null) { + return java.util.Collections.unmodifiableList(nodes_); + } else { + return nodesBuilder_.getMessageList(); } - idMemoizedSerializedSize = dataSize; } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; + /** + * repeated .atom.Nodes nodes = 1; + */ + public int getNodesCount() { + if (nodesBuilder_ == null) { + return nodes_.size(); + } else { + return nodesBuilder_.getCount(); + } } - if (!(obj instanceof io.appthreat.atom.Atom.DataFlowSlice.Flows)) { - return super.equals(obj); + /** + * repeated .atom.Nodes nodes = 1; + */ + public io.appthreat.atom.Atom.Nodes getNodes(int index) { + if (nodesBuilder_ == null) { + return nodes_.get(index); + } else { + return nodesBuilder_.getMessage(index); + } } - io.appthreat.atom.Atom.DataFlowSlice.Flows other = (io.appthreat.atom.Atom.DataFlowSlice.Flows) obj; - - if (!getIdList() - .equals(other.getIdList())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; + /** + * repeated .atom.Nodes nodes = 1; + */ + public Builder setNodes( + int index, io.appthreat.atom.Atom.Nodes value) { + if (nodesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureNodesIsMutable(); + nodes_.set(index, value); + onChanged(); + } else { + nodesBuilder_.setMessage(index, value); + } + return this; } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getIdCount() > 0) { - hash = (37 * hash) + ID_FIELD_NUMBER; - hash = (53 * hash) + getIdList().hashCode(); + /** + * repeated .atom.Nodes nodes = 1; + */ + public Builder setNodes( + int index, io.appthreat.atom.Atom.Nodes.Builder builderForValue) { + if (nodesBuilder_ == null) { + ensureNodesIsMutable(); + nodes_.set(index, builderForValue.build()); + onChanged(); + } else { + nodesBuilder_.setMessage(index, builderForValue.build()); + } + return this; } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Flows parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(io.appthreat.atom.Atom.DataFlowSlice.Flows prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code atom.DataFlowSlice.Flows} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:atom.DataFlowSlice.Flows) - io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Flows_descriptor; + /** + * repeated .atom.Nodes nodes = 1; + */ + public Builder addNodes(io.appthreat.atom.Atom.Nodes value) { + if (nodesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureNodesIsMutable(); + nodes_.add(value); + onChanged(); + } else { + nodesBuilder_.addMessage(value); + } + return this; } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Flows_fieldAccessorTable - .ensureFieldAccessorsInitialized( - io.appthreat.atom.Atom.DataFlowSlice.Flows.class, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder.class); + /** + * repeated .atom.Nodes nodes = 1; + */ + public Builder addNodes( + int index, io.appthreat.atom.Atom.Nodes value) { + if (nodesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureNodesIsMutable(); + nodes_.add(index, value); + onChanged(); + } else { + nodesBuilder_.addMessage(index, value); + } + return this; } - - // Construct using io.appthreat.atom.Atom.DataFlowSlice.Flows.newBuilder() - private Builder() { - + /** + * repeated .atom.Nodes nodes = 1; + */ + public Builder addNodes( + io.appthreat.atom.Atom.Nodes.Builder builderForValue) { + if (nodesBuilder_ == null) { + ensureNodesIsMutable(); + nodes_.add(builderForValue.build()); + onChanged(); + } else { + nodesBuilder_.addMessage(builderForValue.build()); + } + return this; } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - + /** + * repeated .atom.Nodes nodes = 1; + */ + public Builder addNodes( + int index, io.appthreat.atom.Atom.Nodes.Builder builderForValue) { + if (nodesBuilder_ == null) { + ensureNodesIsMutable(); + nodes_.add(index, builderForValue.build()); + onChanged(); + } else { + nodesBuilder_.addMessage(index, builderForValue.build()); + } + return this; } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - id_ = emptyIntList(); + /** + * repeated .atom.Nodes nodes = 1; + */ + public Builder addAllNodes( + java.lang.Iterable values) { + if (nodesBuilder_ == null) { + ensureNodesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, nodes_); + onChanged(); + } else { + nodesBuilder_.addAllMessages(values); + } return this; } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Flows_descriptor; + /** + * repeated .atom.Nodes nodes = 1; + */ + public Builder clearNodes() { + if (nodesBuilder_ == null) { + nodes_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + nodesBuilder_.clear(); + } + return this; } - - @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Flows getDefaultInstanceForType() { - return io.appthreat.atom.Atom.DataFlowSlice.Flows.getDefaultInstance(); + /** + * repeated .atom.Nodes nodes = 1; + */ + public Builder removeNodes(int index) { + if (nodesBuilder_ == null) { + ensureNodesIsMutable(); + nodes_.remove(index); + onChanged(); + } else { + nodesBuilder_.remove(index); + } + return this; } - - @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Flows build() { - io.appthreat.atom.Atom.DataFlowSlice.Flows result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); + /** + * repeated .atom.Nodes nodes = 1; + */ + public io.appthreat.atom.Atom.Nodes.Builder getNodesBuilder( + int index) { + return getNodesFieldBuilder().getBuilder(index); + } + /** + * repeated .atom.Nodes nodes = 1; + */ + public io.appthreat.atom.Atom.NodesOrBuilder getNodesOrBuilder( + int index) { + if (nodesBuilder_ == null) { + return nodes_.get(index); } else { + return nodesBuilder_.getMessageOrBuilder(index); } - return result; } - - @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Flows buildPartial() { - io.appthreat.atom.Atom.DataFlowSlice.Flows result = new io.appthreat.atom.Atom.DataFlowSlice.Flows(this); - buildPartialRepeatedFields(result); - if (bitField0_ != 0) { buildPartial0(result); } - onBuilt(); - return result; + /** + * repeated .atom.Nodes nodes = 1; + */ + public java.util.List + getNodesOrBuilderList() { + if (nodesBuilder_ != null) { + return nodesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(nodes_); + } } - - private void buildPartialRepeatedFields(io.appthreat.atom.Atom.DataFlowSlice.Flows result) { - if (((bitField0_ & 0x00000001) != 0)) { - id_.makeImmutable(); - bitField0_ = (bitField0_ & ~0x00000001); + /** + * repeated .atom.Nodes nodes = 1; + */ + public io.appthreat.atom.Atom.Nodes.Builder addNodesBuilder() { + return getNodesFieldBuilder().addBuilder( + io.appthreat.atom.Atom.Nodes.getDefaultInstance()); + } + /** + * repeated .atom.Nodes nodes = 1; + */ + public io.appthreat.atom.Atom.Nodes.Builder addNodesBuilder( + int index) { + return getNodesFieldBuilder().addBuilder( + index, io.appthreat.atom.Atom.Nodes.getDefaultInstance()); + } + /** + * repeated .atom.Nodes nodes = 1; + */ + public java.util.List + getNodesBuilderList() { + return getNodesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + io.appthreat.atom.Atom.Nodes, io.appthreat.atom.Atom.Nodes.Builder, io.appthreat.atom.Atom.NodesOrBuilder> + getNodesFieldBuilder() { + if (nodesBuilder_ == null) { + nodesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + io.appthreat.atom.Atom.Nodes, io.appthreat.atom.Atom.Nodes.Builder, io.appthreat.atom.Atom.NodesOrBuilder>( + nodes_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + nodes_ = null; } - result.id_ = id_; + return nodesBuilder_; } - private void buildPartial0(io.appthreat.atom.Atom.DataFlowSlice.Flows result) { - int from_bitField0_ = bitField0_; + private java.util.List edges_ = + java.util.Collections.emptyList(); + private void ensureEdgesIsMutable() { + if (!((bitField0_ & 0x00000002) != 0)) { + edges_ = new java.util.ArrayList(edges_); + bitField0_ |= 0x00000002; + } } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); + private com.google.protobuf.RepeatedFieldBuilderV3< + io.appthreat.atom.Atom.DataFlowSlice.Edges, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder, io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder> edgesBuilder_; + + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + public java.util.List getEdgesList() { + if (edgesBuilder_ == null) { + return java.util.Collections.unmodifiableList(edges_); + } else { + return edgesBuilder_.getMessageList(); + } } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + public int getEdgesCount() { + if (edgesBuilder_ == null) { + return edges_.size(); + } else { + return edgesBuilder_.getCount(); + } } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + public io.appthreat.atom.Atom.DataFlowSlice.Edges getEdges(int index) { + if (edgesBuilder_ == null) { + return edges_.get(index); + } else { + return edgesBuilder_.getMessage(index); + } } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + public Builder setEdges( + int index, io.appthreat.atom.Atom.DataFlowSlice.Edges value) { + if (edgesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureEdgesIsMutable(); + edges_.set(index, value); + onChanged(); + } else { + edgesBuilder_.setMessage(index, value); + } + return this; } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.appthreat.atom.Atom.DataFlowSlice.Flows) { - return mergeFrom((io.appthreat.atom.Atom.DataFlowSlice.Flows)other); + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + public Builder setEdges( + int index, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder builderForValue) { + if (edgesBuilder_ == null) { + ensureEdgesIsMutable(); + edges_.set(index, builderForValue.build()); + onChanged(); } else { - super.mergeFrom(other); - return this; + edgesBuilder_.setMessage(index, builderForValue.build()); } + return this; } - - public Builder mergeFrom(io.appthreat.atom.Atom.DataFlowSlice.Flows other) { - if (other == io.appthreat.atom.Atom.DataFlowSlice.Flows.getDefaultInstance()) return this; - if (!other.id_.isEmpty()) { - if (id_.isEmpty()) { - id_ = other.id_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureIdIsMutable(); - id_.addAll(other.id_); + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + public Builder addEdges(io.appthreat.atom.Atom.DataFlowSlice.Edges value) { + if (edgesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); } + ensureEdgesIsMutable(); + edges_.add(value); onChanged(); + } else { + edgesBuilder_.addMessage(value); } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); return this; } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - int v = input.readUInt32(); - ensureIdIsMutable(); - id_.addInt(v); - break; - } // case 8 - case 10: { - int length = input.readRawVarint32(); - int limit = input.pushLimit(length); - ensureIdIsMutable(); - while (input.getBytesUntilLimit() > 0) { - id_.addInt(input.readUInt32()); - } - input.popLimit(limit); - break; - } // case 10 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + public Builder addEdges( + int index, io.appthreat.atom.Atom.DataFlowSlice.Edges value) { + if (edgesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureEdgesIsMutable(); + edges_.add(index, value); onChanged(); - } // finally + } else { + edgesBuilder_.addMessage(index, value); + } return this; } - private int bitField0_; - - private com.google.protobuf.Internal.IntList id_ = emptyIntList(); - private void ensureIdIsMutable() { - if (!((bitField0_ & 0x00000001) != 0)) { - id_ = mutableCopy(id_); - bitField0_ |= 0x00000001; + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + public Builder addEdges( + io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder builderForValue) { + if (edgesBuilder_ == null) { + ensureEdgesIsMutable(); + edges_.add(builderForValue.build()); + onChanged(); + } else { + edgesBuilder_.addMessage(builderForValue.build()); } + return this; } /** - *
-         * Node id
-         * 
- * - * repeated uint32 id = 1; - * @return A list containing the id. + * repeated .atom.DataFlowSlice.Edges edges = 2; */ - public java.util.List - getIdList() { - return ((bitField0_ & 0x00000001) != 0) ? - java.util.Collections.unmodifiableList(id_) : id_; + public Builder addEdges( + int index, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder builderForValue) { + if (edgesBuilder_ == null) { + ensureEdgesIsMutable(); + edges_.add(index, builderForValue.build()); + onChanged(); + } else { + edgesBuilder_.addMessage(index, builderForValue.build()); + } + return this; } /** - *
-         * Node id
-         * 
- * - * repeated uint32 id = 1; - * @return The count of id. + * repeated .atom.DataFlowSlice.Edges edges = 2; */ - public int getIdCount() { - return id_.size(); + public Builder addAllEdges( + java.lang.Iterable values) { + if (edgesBuilder_ == null) { + ensureEdgesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, edges_); + onChanged(); + } else { + edgesBuilder_.addAllMessages(values); + } + return this; } /** - *
-         * Node id
-         * 
- * - * repeated uint32 id = 1; - * @param index The index of the element to return. - * @return The id at the given index. + * repeated .atom.DataFlowSlice.Edges edges = 2; */ - public int getId(int index) { - return id_.getInt(index); + public Builder clearEdges() { + if (edgesBuilder_ == null) { + edges_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + edgesBuilder_.clear(); + } + return this; } /** - *
-         * Node id
-         * 
- * - * repeated uint32 id = 1; - * @param index The index to set the value at. - * @param value The id to set. - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Edges edges = 2; */ - public Builder setId( - int index, int value) { - - ensureIdIsMutable(); - id_.setInt(index, value); - onChanged(); + public Builder removeEdges(int index) { + if (edgesBuilder_ == null) { + ensureEdgesIsMutable(); + edges_.remove(index); + onChanged(); + } else { + edgesBuilder_.remove(index); + } return this; } /** - *
-         * Node id
-         * 
- * - * repeated uint32 id = 1; - * @param value The id to add. - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Edges edges = 2; */ - public Builder addId(int value) { - - ensureIdIsMutable(); - id_.addInt(value); - onChanged(); - return this; + public io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder getEdgesBuilder( + int index) { + return getEdgesFieldBuilder().getBuilder(index); } /** - *
-         * Node id
-         * 
- * - * repeated uint32 id = 1; - * @param values The id to add. - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Edges edges = 2; */ - public Builder addAllId( - java.lang.Iterable values) { - ensureIdIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, id_); - onChanged(); - return this; + public io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder getEdgesOrBuilder( + int index) { + if (edgesBuilder_ == null) { + return edges_.get(index); } else { + return edgesBuilder_.getMessageOrBuilder(index); + } } /** - *
-         * Node id
-         * 
- * - * repeated uint32 id = 1; - * @return This builder for chaining. + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + public java.util.List + getEdgesOrBuilderList() { + if (edgesBuilder_ != null) { + return edgesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(edges_); + } + } + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; */ - public Builder clearId() { - id_ = emptyIntList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - return this; + public io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder addEdgesBuilder() { + return getEdgesFieldBuilder().addBuilder( + io.appthreat.atom.Atom.DataFlowSlice.Edges.getDefaultInstance()); } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + public io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder addEdgesBuilder( + int index) { + return getEdgesFieldBuilder().addBuilder( + index, io.appthreat.atom.Atom.DataFlowSlice.Edges.getDefaultInstance()); } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * repeated .atom.DataFlowSlice.Edges edges = 2; + */ + public java.util.List + getEdgesBuilderList() { + return getEdgesFieldBuilder().getBuilderList(); } - - - // @@protoc_insertion_point(builder_scope:atom.DataFlowSlice.Flows) - } - - // @@protoc_insertion_point(class_scope:atom.DataFlowSlice.Flows) - private static final io.appthreat.atom.Atom.DataFlowSlice.Flows DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new io.appthreat.atom.Atom.DataFlowSlice.Flows(); - } - - public static io.appthreat.atom.Atom.DataFlowSlice.Flows getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public Flows parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); + private com.google.protobuf.RepeatedFieldBuilderV3< + io.appthreat.atom.Atom.DataFlowSlice.Edges, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder, io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder> + getEdgesFieldBuilder() { + if (edgesBuilder_ == null) { + edgesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + io.appthreat.atom.Atom.DataFlowSlice.Edges, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder, io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder>( + edges_, + ((bitField0_ & 0x00000002) != 0), + getParentForChildren(), + isClean()); + edges_ = null; } - return builder.buildPartial(); + return edgesBuilder_; } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Flows getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface PathsOrBuilder extends - // @@protoc_insertion_point(interface_extends:atom.DataFlowSlice.Paths) - com.google.protobuf.MessageOrBuilder { - - /** - *
-       * Flows from source to sink
-       * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - java.util.List - getFlowsList(); - /** - *
-       * Flows from source to sink
-       * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - io.appthreat.atom.Atom.DataFlowSlice.Flows getFlows(int index); - /** - *
-       * Flows from source to sink
-       * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - int getFlowsCount(); - /** - *
-       * Flows from source to sink
-       * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - java.util.List - getFlowsOrBuilderList(); - /** - *
-       * Flows from source to sink
-       * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder getFlowsOrBuilder( - int index); - } - /** - * Protobuf type {@code atom.DataFlowSlice.Paths} - */ - public static final class Paths extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:atom.DataFlowSlice.Paths) - PathsOrBuilder { - private static final long serialVersionUID = 0L; - // Use Paths.newBuilder() to construct. - private Paths(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private Paths() { - flows_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new Paths(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Paths_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Paths_fieldAccessorTable - .ensureFieldAccessorsInitialized( - io.appthreat.atom.Atom.DataFlowSlice.Paths.class, io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder.class); - } - - public static final int FLOWS_FIELD_NUMBER = 1; - @SuppressWarnings("serial") - private java.util.List flows_; - /** - *
-       * Flows from source to sink
-       * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - @java.lang.Override - public java.util.List getFlowsList() { - return flows_; - } - /** - *
-       * Flows from source to sink
-       * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - @java.lang.Override - public java.util.List - getFlowsOrBuilderList() { - return flows_; - } - /** - *
-       * Flows from source to sink
-       * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - @java.lang.Override - public int getFlowsCount() { - return flows_.size(); - } - /** - *
-       * Flows from source to sink
-       * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Flows getFlows(int index) { - return flows_.get(index); - } - /** - *
-       * Flows from source to sink
-       * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder getFlowsOrBuilder( - int index) { - return flows_.get(index); - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - for (int i = 0; i < flows_.size(); i++) { - output.writeMessage(1, flows_.get(i)); + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - size = 0; - for (int i = 0; i < flows_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, flows_.get(i)); + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof io.appthreat.atom.Atom.DataFlowSlice.Paths)) { - return super.equals(obj); - } - io.appthreat.atom.Atom.DataFlowSlice.Paths other = (io.appthreat.atom.Atom.DataFlowSlice.Paths) obj; - if (!getFlowsList() - .equals(other.getFlowsList())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; + // @@protoc_insertion_point(builder_scope:atom.DataFlowSlice.Graph) } - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getFlowsCount() > 0) { - hash = (37 * hash) + FLOWS_FIELD_NUMBER; - hash = (53 * hash) + getFlowsList().hashCode(); - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; + // @@protoc_insertion_point(class_scope:atom.DataFlowSlice.Graph) + private static final io.appthreat.atom.Atom.DataFlowSlice.Graph DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new io.appthreat.atom.Atom.DataFlowSlice.Graph(); } - public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); + public static io.appthreat.atom.Atom.DataFlowSlice.Graph getDefaultInstance() { + return DEFAULT_INSTANCE; } - public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Graph parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; - public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static io.appthreat.atom.Atom.DataFlowSlice.Paths parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); + public static com.google.protobuf.Parser parser() { + return PARSER; } @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(io.appthreat.atom.Atom.DataFlowSlice.Paths prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); + public com.google.protobuf.Parser getParserForType() { + return PARSER; } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; + public io.appthreat.atom.Atom.DataFlowSlice.Graph getDefaultInstanceForType() { + return DEFAULT_INSTANCE; } - /** - * Protobuf type {@code atom.DataFlowSlice.Paths} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:atom.DataFlowSlice.Paths) - io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Paths_descriptor; - } - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Paths_fieldAccessorTable - .ensureFieldAccessorsInitialized( - io.appthreat.atom.Atom.DataFlowSlice.Paths.class, io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder.class); - } - - // Construct using io.appthreat.atom.Atom.DataFlowSlice.Paths.newBuilder() - private Builder() { - - } + } - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); + public static final int GRAPH_FIELD_NUMBER = 1; + private io.appthreat.atom.Atom.DataFlowSlice.Graph graph_; + /** + * .atom.DataFlowSlice.Graph graph = 1; + * @return Whether the graph field is set. + */ + @java.lang.Override + public boolean hasGraph() { + return graph_ != null; + } + /** + * .atom.DataFlowSlice.Graph graph = 1; + * @return The graph. + */ + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.Graph getGraph() { + return graph_ == null ? io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance() : graph_; + } + /** + * .atom.DataFlowSlice.Graph graph = 1; + */ + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder getGraphOrBuilder() { + return graph_ == null ? io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance() : graph_; + } - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - if (flowsBuilder_ == null) { - flows_ = java.util.Collections.emptyList(); - } else { - flows_ = null; - flowsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } + public static final int PATH_FIELD_NUMBER = 2; + private io.appthreat.atom.Atom.DataFlowSlice.Paths path_; + /** + * .atom.DataFlowSlice.Paths path = 2; + * @return Whether the path field is set. + */ + @java.lang.Override + public boolean hasPath() { + return path_ != null; + } + /** + * .atom.DataFlowSlice.Paths path = 2; + * @return The path. + */ + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.Paths getPath() { + return path_ == null ? io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance() : path_; + } + /** + * .atom.DataFlowSlice.Paths path = 2; + */ + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder getPathOrBuilder() { + return path_ == null ? io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance() : path_; + } - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Paths_descriptor; - } + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; - @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Paths getDefaultInstanceForType() { - return io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance(); - } + memoizedIsInitialized = 1; + return true; + } - @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Paths build() { - io.appthreat.atom.Atom.DataFlowSlice.Paths result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (graph_ != null) { + output.writeMessage(1, getGraph()); + } + if (path_ != null) { + output.writeMessage(2, getPath()); + } + getUnknownFields().writeTo(output); + } - @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Paths buildPartial() { - io.appthreat.atom.Atom.DataFlowSlice.Paths result = new io.appthreat.atom.Atom.DataFlowSlice.Paths(this); - buildPartialRepeatedFields(result); - if (bitField0_ != 0) { buildPartial0(result); } - onBuilt(); - return result; - } + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; - private void buildPartialRepeatedFields(io.appthreat.atom.Atom.DataFlowSlice.Paths result) { - if (flowsBuilder_ == null) { - if (((bitField0_ & 0x00000001) != 0)) { - flows_ = java.util.Collections.unmodifiableList(flows_); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.flows_ = flows_; - } else { - result.flows_ = flowsBuilder_.build(); - } - } + size = 0; + if (graph_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getGraph()); + } + if (path_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getPath()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } - private void buildPartial0(io.appthreat.atom.Atom.DataFlowSlice.Paths result) { - int from_bitField0_ = bitField0_; - } + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof io.appthreat.atom.Atom.DataFlowSlice)) { + return super.equals(obj); + } + io.appthreat.atom.Atom.DataFlowSlice other = (io.appthreat.atom.Atom.DataFlowSlice) obj; - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.appthreat.atom.Atom.DataFlowSlice.Paths) { - return mergeFrom((io.appthreat.atom.Atom.DataFlowSlice.Paths)other); - } else { - super.mergeFrom(other); - return this; - } - } + if (hasGraph() != other.hasGraph()) return false; + if (hasGraph()) { + if (!getGraph() + .equals(other.getGraph())) return false; + } + if (hasPath() != other.hasPath()) return false; + if (hasPath()) { + if (!getPath() + .equals(other.getPath())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } - public Builder mergeFrom(io.appthreat.atom.Atom.DataFlowSlice.Paths other) { - if (other == io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance()) return this; - if (flowsBuilder_ == null) { - if (!other.flows_.isEmpty()) { - if (flows_.isEmpty()) { - flows_ = other.flows_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureFlowsIsMutable(); - flows_.addAll(other.flows_); - } - onChanged(); - } - } else { - if (!other.flows_.isEmpty()) { - if (flowsBuilder_.isEmpty()) { - flowsBuilder_.dispose(); - flowsBuilder_ = null; - flows_ = other.flows_; - bitField0_ = (bitField0_ & ~0x00000001); - flowsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getFlowsFieldBuilder() : null; - } else { - flowsBuilder_.addAllMessages(other.flows_); - } - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasGraph()) { + hash = (37 * hash) + GRAPH_FIELD_NUMBER; + hash = (53 * hash) + getGraph().hashCode(); + } + if (hasPath()) { + hash = (37 * hash) + PATH_FIELD_NUMBER; + hash = (53 * hash) + getPath().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.DataFlowSlice parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.DataFlowSlice parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static io.appthreat.atom.Atom.DataFlowSlice parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static io.appthreat.atom.Atom.DataFlowSlice parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } - @java.lang.Override - public final boolean isInitialized() { - return true; - } + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(io.appthreat.atom.Atom.DataFlowSlice prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - io.appthreat.atom.Atom.DataFlowSlice.Flows m = - input.readMessage( - io.appthreat.atom.Atom.DataFlowSlice.Flows.parser(), - extensionRegistry); - if (flowsBuilder_ == null) { - ensureFlowsIsMutable(); - flows_.add(m); - } else { - flowsBuilder_.addMessage(m); - } - break; - } // case 10 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int bitField0_; + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     **
+     * DataFlow slices offers a list of nodes and edges exported from data dependency graph
+     *
+     * ![Data Flow slices overview](./docs/Data%20Flows.png)
+     * 
+ * + * Protobuf type {@code atom.DataFlowSlice} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:atom.DataFlowSlice) + io.appthreat.atom.Atom.DataFlowSliceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_descriptor; + } - private java.util.List flows_ = - java.util.Collections.emptyList(); - private void ensureFlowsIsMutable() { - if (!((bitField0_ & 0x00000001) != 0)) { - flows_ = new java.util.ArrayList(flows_); - bitField0_ |= 0x00000001; - } - } + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.appthreat.atom.Atom.DataFlowSlice.class, io.appthreat.atom.Atom.DataFlowSlice.Builder.class); + } - private com.google.protobuf.RepeatedFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Flows, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder, io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder> flowsBuilder_; + // Construct using io.appthreat.atom.Atom.DataFlowSlice.newBuilder() + private Builder() { - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public java.util.List getFlowsList() { - if (flowsBuilder_ == null) { - return java.util.Collections.unmodifiableList(flows_); - } else { - return flowsBuilder_.getMessageList(); - } - } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public int getFlowsCount() { - if (flowsBuilder_ == null) { - return flows_.size(); - } else { - return flowsBuilder_.getCount(); - } - } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public io.appthreat.atom.Atom.DataFlowSlice.Flows getFlows(int index) { - if (flowsBuilder_ == null) { - return flows_.get(index); - } else { - return flowsBuilder_.getMessage(index); - } + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + graph_ = null; + if (graphBuilder_ != null) { + graphBuilder_.dispose(); + graphBuilder_ = null; } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public Builder setFlows( - int index, io.appthreat.atom.Atom.DataFlowSlice.Flows value) { - if (flowsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFlowsIsMutable(); - flows_.set(index, value); - onChanged(); - } else { - flowsBuilder_.setMessage(index, value); - } - return this; + path_ = null; + if (pathBuilder_ != null) { + pathBuilder_.dispose(); + pathBuilder_ = null; } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public Builder setFlows( - int index, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder builderForValue) { - if (flowsBuilder_ == null) { - ensureFlowsIsMutable(); - flows_.set(index, builderForValue.build()); - onChanged(); - } else { - flowsBuilder_.setMessage(index, builderForValue.build()); - } - return this; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_descriptor; + } + + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice getDefaultInstanceForType() { + return io.appthreat.atom.Atom.DataFlowSlice.getDefaultInstance(); + } + + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice build() { + io.appthreat.atom.Atom.DataFlowSlice result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public Builder addFlows(io.appthreat.atom.Atom.DataFlowSlice.Flows value) { - if (flowsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFlowsIsMutable(); - flows_.add(value); - onChanged(); - } else { - flowsBuilder_.addMessage(value); - } - return this; + return result; + } + + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice buildPartial() { + io.appthreat.atom.Atom.DataFlowSlice result = new io.appthreat.atom.Atom.DataFlowSlice(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(io.appthreat.atom.Atom.DataFlowSlice result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.graph_ = graphBuilder_ == null + ? graph_ + : graphBuilder_.build(); } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public Builder addFlows( - int index, io.appthreat.atom.Atom.DataFlowSlice.Flows value) { - if (flowsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureFlowsIsMutable(); - flows_.add(index, value); - onChanged(); - } else { - flowsBuilder_.addMessage(index, value); - } - return this; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.path_ = pathBuilder_ == null + ? path_ + : pathBuilder_.build(); } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public Builder addFlows( - io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder builderForValue) { - if (flowsBuilder_ == null) { - ensureFlowsIsMutable(); - flows_.add(builderForValue.build()); - onChanged(); - } else { - flowsBuilder_.addMessage(builderForValue.build()); - } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.appthreat.atom.Atom.DataFlowSlice) { + return mergeFrom((io.appthreat.atom.Atom.DataFlowSlice)other); + } else { + super.mergeFrom(other); return this; } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public Builder addFlows( - int index, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder builderForValue) { - if (flowsBuilder_ == null) { - ensureFlowsIsMutable(); - flows_.add(index, builderForValue.build()); - onChanged(); - } else { - flowsBuilder_.addMessage(index, builderForValue.build()); - } - return this; + } + + public Builder mergeFrom(io.appthreat.atom.Atom.DataFlowSlice other) { + if (other == io.appthreat.atom.Atom.DataFlowSlice.getDefaultInstance()) return this; + if (other.hasGraph()) { + mergeGraph(other.getGraph()); } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public Builder addAllFlows( - java.lang.Iterable values) { - if (flowsBuilder_ == null) { - ensureFlowsIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, flows_); - onChanged(); - } else { - flowsBuilder_.addAllMessages(values); - } - return this; + if (other.hasPath()) { + mergePath(other.getPath()); } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public Builder clearFlows() { - if (flowsBuilder_ == null) { - flows_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - } else { - flowsBuilder_.clear(); + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + input.readMessage( + getGraphFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + input.readMessage( + getPathFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private io.appthreat.atom.Atom.DataFlowSlice.Graph graph_; + private com.google.protobuf.SingleFieldBuilderV3< + io.appthreat.atom.Atom.DataFlowSlice.Graph, io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder, io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder> graphBuilder_; + /** + * .atom.DataFlowSlice.Graph graph = 1; + * @return Whether the graph field is set. + */ + public boolean hasGraph() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * .atom.DataFlowSlice.Graph graph = 1; + * @return The graph. + */ + public io.appthreat.atom.Atom.DataFlowSlice.Graph getGraph() { + if (graphBuilder_ == null) { + return graph_ == null ? io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance() : graph_; + } else { + return graphBuilder_.getMessage(); + } + } + /** + * .atom.DataFlowSlice.Graph graph = 1; + */ + public Builder setGraph(io.appthreat.atom.Atom.DataFlowSlice.Graph value) { + if (graphBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); } - return this; + graph_ = value; + } else { + graphBuilder_.setMessage(value); } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public Builder removeFlows(int index) { - if (flowsBuilder_ == null) { - ensureFlowsIsMutable(); - flows_.remove(index); - onChanged(); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * .atom.DataFlowSlice.Graph graph = 1; + */ + public Builder setGraph( + io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder builderForValue) { + if (graphBuilder_ == null) { + graph_ = builderForValue.build(); + } else { + graphBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * .atom.DataFlowSlice.Graph graph = 1; + */ + public Builder mergeGraph(io.appthreat.atom.Atom.DataFlowSlice.Graph value) { + if (graphBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) && + graph_ != null && + graph_ != io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance()) { + getGraphBuilder().mergeFrom(value); } else { - flowsBuilder_.remove(index); + graph_ = value; } - return this; + } else { + graphBuilder_.mergeFrom(value); } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder getFlowsBuilder( - int index) { - return getFlowsFieldBuilder().getBuilder(index); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * .atom.DataFlowSlice.Graph graph = 1; + */ + public Builder clearGraph() { + bitField0_ = (bitField0_ & ~0x00000001); + graph_ = null; + if (graphBuilder_ != null) { + graphBuilder_.dispose(); + graphBuilder_ = null; } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder getFlowsOrBuilder( - int index) { - if (flowsBuilder_ == null) { - return flows_.get(index); } else { - return flowsBuilder_.getMessageOrBuilder(index); - } + onChanged(); + return this; + } + /** + * .atom.DataFlowSlice.Graph graph = 1; + */ + public io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder getGraphBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getGraphFieldBuilder().getBuilder(); + } + /** + * .atom.DataFlowSlice.Graph graph = 1; + */ + public io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder getGraphOrBuilder() { + if (graphBuilder_ != null) { + return graphBuilder_.getMessageOrBuilder(); + } else { + return graph_ == null ? + io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance() : graph_; } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public java.util.List - getFlowsOrBuilderList() { - if (flowsBuilder_ != null) { - return flowsBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(flows_); - } + } + /** + * .atom.DataFlowSlice.Graph graph = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + io.appthreat.atom.Atom.DataFlowSlice.Graph, io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder, io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder> + getGraphFieldBuilder() { + if (graphBuilder_ == null) { + graphBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + io.appthreat.atom.Atom.DataFlowSlice.Graph, io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder, io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder>( + getGraph(), + getParentForChildren(), + isClean()); + graph_ = null; } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder addFlowsBuilder() { - return getFlowsFieldBuilder().addBuilder( - io.appthreat.atom.Atom.DataFlowSlice.Flows.getDefaultInstance()); + return graphBuilder_; + } + + private io.appthreat.atom.Atom.DataFlowSlice.Paths path_; + private com.google.protobuf.SingleFieldBuilderV3< + io.appthreat.atom.Atom.DataFlowSlice.Paths, io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder, io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder> pathBuilder_; + /** + * .atom.DataFlowSlice.Paths path = 2; + * @return Whether the path field is set. + */ + public boolean hasPath() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * .atom.DataFlowSlice.Paths path = 2; + * @return The path. + */ + public io.appthreat.atom.Atom.DataFlowSlice.Paths getPath() { + if (pathBuilder_ == null) { + return path_ == null ? io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance() : path_; + } else { + return pathBuilder_.getMessage(); } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder addFlowsBuilder( - int index) { - return getFlowsFieldBuilder().addBuilder( - index, io.appthreat.atom.Atom.DataFlowSlice.Flows.getDefaultInstance()); + } + /** + * .atom.DataFlowSlice.Paths path = 2; + */ + public Builder setPath(io.appthreat.atom.Atom.DataFlowSlice.Paths value) { + if (pathBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + path_ = value; + } else { + pathBuilder_.setMessage(value); } - /** - *
-         * Flows from source to sink
-         * 
- * - * repeated .atom.DataFlowSlice.Flows flows = 1; - */ - public java.util.List - getFlowsBuilderList() { - return getFlowsFieldBuilder().getBuilderList(); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * .atom.DataFlowSlice.Paths path = 2; + */ + public Builder setPath( + io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder builderForValue) { + if (pathBuilder_ == null) { + path_ = builderForValue.build(); + } else { + pathBuilder_.setMessage(builderForValue.build()); } - private com.google.protobuf.RepeatedFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Flows, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder, io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder> - getFlowsFieldBuilder() { - if (flowsBuilder_ == null) { - flowsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Flows, io.appthreat.atom.Atom.DataFlowSlice.Flows.Builder, io.appthreat.atom.Atom.DataFlowSlice.FlowsOrBuilder>( - flows_, - ((bitField0_ & 0x00000001) != 0), - getParentForChildren(), - isClean()); - flows_ = null; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * .atom.DataFlowSlice.Paths path = 2; + */ + public Builder mergePath(io.appthreat.atom.Atom.DataFlowSlice.Paths value) { + if (pathBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) && + path_ != null && + path_ != io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance()) { + getPathBuilder().mergeFrom(value); + } else { + path_ = value; } - return flowsBuilder_; + } else { + pathBuilder_.mergeFrom(value); } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * .atom.DataFlowSlice.Paths path = 2; + */ + public Builder clearPath() { + bitField0_ = (bitField0_ & ~0x00000002); + path_ = null; + if (pathBuilder_ != null) { + pathBuilder_.dispose(); + pathBuilder_ = null; } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + onChanged(); + return this; + } + /** + * .atom.DataFlowSlice.Paths path = 2; + */ + public io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder getPathBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getPathFieldBuilder().getBuilder(); + } + /** + * .atom.DataFlowSlice.Paths path = 2; + */ + public io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder getPathOrBuilder() { + if (pathBuilder_ != null) { + return pathBuilder_.getMessageOrBuilder(); + } else { + return path_ == null ? + io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance() : path_; + } + } + /** + * .atom.DataFlowSlice.Paths path = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + io.appthreat.atom.Atom.DataFlowSlice.Paths, io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder, io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder> + getPathFieldBuilder() { + if (pathBuilder_ == null) { + pathBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + io.appthreat.atom.Atom.DataFlowSlice.Paths, io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder, io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder>( + getPath(), + getParentForChildren(), + isClean()); + path_ = null; } - - - // @@protoc_insertion_point(builder_scope:atom.DataFlowSlice.Paths) + return pathBuilder_; } - - // @@protoc_insertion_point(class_scope:atom.DataFlowSlice.Paths) - private static final io.appthreat.atom.Atom.DataFlowSlice.Paths DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new io.appthreat.atom.Atom.DataFlowSlice.Paths(); + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); } - public static io.appthreat.atom.Atom.DataFlowSlice.Paths getDefaultInstance() { - return DEFAULT_INSTANCE; + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public Paths parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - public static com.google.protobuf.Parser parser() { - return PARSER; - } + // @@protoc_insertion_point(builder_scope:atom.DataFlowSlice) + } - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } + // @@protoc_insertion_point(class_scope:atom.DataFlowSlice) + private static final io.appthreat.atom.Atom.DataFlowSlice DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new io.appthreat.atom.Atom.DataFlowSlice(); + } + + public static io.appthreat.atom.Atom.DataFlowSlice getDefaultInstance() { + return DEFAULT_INSTANCE; + } + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Paths getDefaultInstanceForType() { - return DEFAULT_INSTANCE; + public DataFlowSlice parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); } + }; + public static com.google.protobuf.Parser parser() { + return PARSER; } - public interface GraphOrBuilder extends - // @@protoc_insertion_point(interface_extends:atom.DataFlowSlice.Graph) + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public io.appthreat.atom.Atom.DataFlowSlice getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ReachableSliceOrBuilder extends + // @@protoc_insertion_point(interface_extends:atom.ReachableSlice) + com.google.protobuf.MessageOrBuilder { + + /** + * .atom.ReachableSlice.Reachables reachables = 1; + * @return Whether the reachables field is set. + */ + boolean hasReachables(); + /** + * .atom.ReachableSlice.Reachables reachables = 1; + * @return The reachables. + */ + io.appthreat.atom.Atom.ReachableSlice.Reachables getReachables(); + /** + * .atom.ReachableSlice.Reachables reachables = 1; + */ + io.appthreat.atom.Atom.ReachableSlice.ReachablesOrBuilder getReachablesOrBuilder(); + + /** + * .atom.ReachableSlice.Purls purls = 2; + * @return Whether the purls field is set. + */ + boolean hasPurls(); + /** + * .atom.ReachableSlice.Purls purls = 2; + * @return The purls. + */ + io.appthreat.atom.Atom.ReachableSlice.Purls getPurls(); + /** + * .atom.ReachableSlice.Purls purls = 2; + */ + io.appthreat.atom.Atom.ReachableSlice.PurlsOrBuilder getPurlsOrBuilder(); + } + /** + *
+   **
+   * Reachables slices offers a list of reachable nodes based on automated tags exported from data dependency graph
+   * 
+ * + * Protobuf type {@code atom.ReachableSlice} + */ + public static final class ReachableSlice extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:atom.ReachableSlice) + ReachableSliceOrBuilder { + private static final long serialVersionUID = 0L; + // Use ReachableSlice.newBuilder() to construct. + private ReachableSlice(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ReachableSlice() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ReachableSlice(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.appthreat.atom.Atom.ReachableSlice.class, io.appthreat.atom.Atom.ReachableSlice.Builder.class); + } + + public interface ReachablesOrBuilder extends + // @@protoc_insertion_point(interface_extends:atom.ReachableSlice.Reachables) com.google.protobuf.MessageOrBuilder { /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ - java.util.List + java.util.List getNodesList(); /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ - io.appthreat.atom.Atom.DataFlowSlice.Nodes getNodes(int index); + io.appthreat.atom.Atom.Nodes getNodes(int index); /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ int getNodesCount(); /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ - java.util.List + java.util.List getNodesOrBuilderList(); /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; - */ - io.appthreat.atom.Atom.DataFlowSlice.NodesOrBuilder getNodesOrBuilder( - int index); - - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - java.util.List - getEdgesList(); - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - io.appthreat.atom.Atom.DataFlowSlice.Edges getEdges(int index); - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - int getEdgesCount(); - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - java.util.List - getEdgesOrBuilderList(); - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; + * repeated .atom.Nodes nodes = 1; */ - io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder getEdgesOrBuilder( + io.appthreat.atom.Atom.NodesOrBuilder getNodesOrBuilder( int index); } /** - * Protobuf type {@code atom.DataFlowSlice.Graph} + * Protobuf type {@code atom.ReachableSlice.Reachables} */ - public static final class Graph extends + public static final class Reachables extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:atom.DataFlowSlice.Graph) - GraphOrBuilder { + // @@protoc_insertion_point(message_implements:atom.ReachableSlice.Reachables) + ReachablesOrBuilder { private static final long serialVersionUID = 0L; - // Use Graph.newBuilder() to construct. - private Graph(com.google.protobuf.GeneratedMessageV3.Builder builder) { + // Use Reachables.newBuilder() to construct. + private Reachables(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); } - private Graph() { + private Reachables() { nodes_ = java.util.Collections.emptyList(); - edges_ = java.util.Collections.emptyList(); } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new Graph(); + return new Reachables(); } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Graph_descriptor; + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_Reachables_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Graph_fieldAccessorTable + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_Reachables_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.appthreat.atom.Atom.DataFlowSlice.Graph.class, io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder.class); + io.appthreat.atom.Atom.ReachableSlice.Reachables.class, io.appthreat.atom.Atom.ReachableSlice.Reachables.Builder.class); } public static final int NODES_FIELD_NUMBER = 1; @SuppressWarnings("serial") - private java.util.List nodes_; + private java.util.List nodes_; /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ @java.lang.Override - public java.util.List getNodesList() { + public java.util.List getNodesList() { return nodes_; } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ @java.lang.Override - public java.util.List + public java.util.List getNodesOrBuilderList() { return nodes_; } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ @java.lang.Override public int getNodesCount() { return nodes_.size(); } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Nodes getNodes(int index) { + public io.appthreat.atom.Atom.Nodes getNodes(int index) { return nodes_.get(index); } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.NodesOrBuilder getNodesOrBuilder( + public io.appthreat.atom.Atom.NodesOrBuilder getNodesOrBuilder( int index) { return nodes_.get(index); } - public static final int EDGES_FIELD_NUMBER = 2; - @SuppressWarnings("serial") - private java.util.List edges_; - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - @java.lang.Override - public java.util.List getEdgesList() { - return edges_; - } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - @java.lang.Override - public java.util.List - getEdgesOrBuilderList() { - return edges_; - } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - @java.lang.Override - public int getEdgesCount() { - return edges_.size(); - } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Edges getEdges(int index) { - return edges_.get(index); - } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder getEdgesOrBuilder( - int index) { - return edges_.get(index); - } - private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -44632,9 +46714,6 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) for (int i = 0; i < nodes_.size(); i++) { output.writeMessage(1, nodes_.get(i)); } - for (int i = 0; i < edges_.size(); i++) { - output.writeMessage(2, edges_.get(i)); - } getUnknownFields().writeTo(output); } @@ -44648,10 +46727,6 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(1, nodes_.get(i)); } - for (int i = 0; i < edges_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, edges_.get(i)); - } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -44662,15 +46737,13 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.appthreat.atom.Atom.DataFlowSlice.Graph)) { + if (!(obj instanceof io.appthreat.atom.Atom.ReachableSlice.Reachables)) { return super.equals(obj); } - io.appthreat.atom.Atom.DataFlowSlice.Graph other = (io.appthreat.atom.Atom.DataFlowSlice.Graph) obj; + io.appthreat.atom.Atom.ReachableSlice.Reachables other = (io.appthreat.atom.Atom.ReachableSlice.Reachables) obj; if (!getNodesList() .equals(other.getNodesList())) return false; - if (!getEdgesList() - .equals(other.getEdgesList())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -44686,53 +46759,49 @@ public int hashCode() { hash = (37 * hash) + NODES_FIELD_NUMBER; hash = (53 * hash) + getNodesList().hashCode(); } - if (getEdgesCount() > 0) { - hash = (37 * hash) + EDGES_FIELD_NUMBER; - hash = (53 * hash) + getEdgesList().hashCode(); - } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice.Reachables parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice.Reachables parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice.Reachables parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice.Reachables parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom(byte[] data) + public static io.appthreat.atom.Atom.ReachableSlice.Reachables parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice.Reachables parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom(java.io.InputStream input) + public static io.appthreat.atom.Atom.ReachableSlice.Reachables parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice.Reachables parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -44740,26 +46809,26 @@ public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseDelimitedFrom(java.io.InputStream input) + public static io.appthreat.atom.Atom.ReachableSlice.Reachables parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseDelimitedFrom( + public static io.appthreat.atom.Atom.ReachableSlice.Reachables parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice.Reachables parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice.Reachables parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -44772,7 +46841,7 @@ public static io.appthreat.atom.Atom.DataFlowSlice.Graph parseFrom( public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.appthreat.atom.Atom.DataFlowSlice.Graph prototype) { + public static Builder newBuilder(io.appthreat.atom.Atom.ReachableSlice.Reachables prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -44788,26 +46857,26 @@ protected Builder newBuilderForType( return builder; } /** - * Protobuf type {@code atom.DataFlowSlice.Graph} + * Protobuf type {@code atom.ReachableSlice.Reachables} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:atom.DataFlowSlice.Graph) - io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder { + // @@protoc_insertion_point(builder_implements:atom.ReachableSlice.Reachables) + io.appthreat.atom.Atom.ReachableSlice.ReachablesOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Graph_descriptor; + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_Reachables_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Graph_fieldAccessorTable + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_Reachables_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.appthreat.atom.Atom.DataFlowSlice.Graph.class, io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder.class); + io.appthreat.atom.Atom.ReachableSlice.Reachables.class, io.appthreat.atom.Atom.ReachableSlice.Reachables.Builder.class); } - // Construct using io.appthreat.atom.Atom.DataFlowSlice.Graph.newBuilder() + // Construct using io.appthreat.atom.Atom.ReachableSlice.Reachables.newBuilder() private Builder() { } @@ -44828,30 +46897,23 @@ public Builder clear() { nodesBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000001); - if (edgesBuilder_ == null) { - edges_ = java.util.Collections.emptyList(); - } else { - edges_ = null; - edgesBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_Graph_descriptor; + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_Reachables_descriptor; } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Graph getDefaultInstanceForType() { - return io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance(); + public io.appthreat.atom.Atom.ReachableSlice.Reachables getDefaultInstanceForType() { + return io.appthreat.atom.Atom.ReachableSlice.Reachables.getDefaultInstance(); } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Graph build() { - io.appthreat.atom.Atom.DataFlowSlice.Graph result = buildPartial(); + public io.appthreat.atom.Atom.ReachableSlice.Reachables build() { + io.appthreat.atom.Atom.ReachableSlice.Reachables result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -44859,15 +46921,15 @@ public io.appthreat.atom.Atom.DataFlowSlice.Graph build() { } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Graph buildPartial() { - io.appthreat.atom.Atom.DataFlowSlice.Graph result = new io.appthreat.atom.Atom.DataFlowSlice.Graph(this); + public io.appthreat.atom.Atom.ReachableSlice.Reachables buildPartial() { + io.appthreat.atom.Atom.ReachableSlice.Reachables result = new io.appthreat.atom.Atom.ReachableSlice.Reachables(this); buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartialRepeatedFields(io.appthreat.atom.Atom.DataFlowSlice.Graph result) { + private void buildPartialRepeatedFields(io.appthreat.atom.Atom.ReachableSlice.Reachables result) { if (nodesBuilder_ == null) { if (((bitField0_ & 0x00000001) != 0)) { nodes_ = java.util.Collections.unmodifiableList(nodes_); @@ -44877,18 +46939,9 @@ private void buildPartialRepeatedFields(io.appthreat.atom.Atom.DataFlowSlice.Gra } else { result.nodes_ = nodesBuilder_.build(); } - if (edgesBuilder_ == null) { - if (((bitField0_ & 0x00000002) != 0)) { - edges_ = java.util.Collections.unmodifiableList(edges_); - bitField0_ = (bitField0_ & ~0x00000002); - } - result.edges_ = edges_; - } else { - result.edges_ = edgesBuilder_.build(); - } } - private void buildPartial0(io.appthreat.atom.Atom.DataFlowSlice.Graph result) { + private void buildPartial0(io.appthreat.atom.Atom.ReachableSlice.Reachables result) { int from_bitField0_ = bitField0_; } @@ -44926,16 +46979,16 @@ public Builder addRepeatedField( } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.appthreat.atom.Atom.DataFlowSlice.Graph) { - return mergeFrom((io.appthreat.atom.Atom.DataFlowSlice.Graph)other); + if (other instanceof io.appthreat.atom.Atom.ReachableSlice.Reachables) { + return mergeFrom((io.appthreat.atom.Atom.ReachableSlice.Reachables)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.appthreat.atom.Atom.DataFlowSlice.Graph other) { - if (other == io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance()) return this; + public Builder mergeFrom(io.appthreat.atom.Atom.ReachableSlice.Reachables other) { + if (other == io.appthreat.atom.Atom.ReachableSlice.Reachables.getDefaultInstance()) return this; if (nodesBuilder_ == null) { if (!other.nodes_.isEmpty()) { if (nodes_.isEmpty()) { @@ -44962,32 +47015,6 @@ public Builder mergeFrom(io.appthreat.atom.Atom.DataFlowSlice.Graph other) { } } } - if (edgesBuilder_ == null) { - if (!other.edges_.isEmpty()) { - if (edges_.isEmpty()) { - edges_ = other.edges_; - bitField0_ = (bitField0_ & ~0x00000002); - } else { - ensureEdgesIsMutable(); - edges_.addAll(other.edges_); - } - onChanged(); - } - } else { - if (!other.edges_.isEmpty()) { - if (edgesBuilder_.isEmpty()) { - edgesBuilder_.dispose(); - edgesBuilder_ = null; - edges_ = other.edges_; - bitField0_ = (bitField0_ & ~0x00000002); - edgesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getEdgesFieldBuilder() : null; - } else { - edgesBuilder_.addAllMessages(other.edges_); - } - } - } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -45015,9 +47042,9 @@ public Builder mergeFrom( done = true; break; case 10: { - io.appthreat.atom.Atom.DataFlowSlice.Nodes m = + io.appthreat.atom.Atom.Nodes m = input.readMessage( - io.appthreat.atom.Atom.DataFlowSlice.Nodes.parser(), + io.appthreat.atom.Atom.Nodes.parser(), extensionRegistry); if (nodesBuilder_ == null) { ensureNodesIsMutable(); @@ -45027,19 +47054,6 @@ public Builder mergeFrom( } break; } // case 10 - case 18: { - io.appthreat.atom.Atom.DataFlowSlice.Edges m = - input.readMessage( - io.appthreat.atom.Atom.DataFlowSlice.Edges.parser(), - extensionRegistry); - if (edgesBuilder_ == null) { - ensureEdgesIsMutable(); - edges_.add(m); - } else { - edgesBuilder_.addMessage(m); - } - break; - } // case 18 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { done = true; // was an endgroup tag @@ -45057,22 +47071,22 @@ public Builder mergeFrom( } private int bitField0_; - private java.util.List nodes_ = + private java.util.List nodes_ = java.util.Collections.emptyList(); private void ensureNodesIsMutable() { if (!((bitField0_ & 0x00000001) != 0)) { - nodes_ = new java.util.ArrayList(nodes_); + nodes_ = new java.util.ArrayList(nodes_); bitField0_ |= 0x00000001; } } private com.google.protobuf.RepeatedFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Nodes, io.appthreat.atom.Atom.DataFlowSlice.Nodes.Builder, io.appthreat.atom.Atom.DataFlowSlice.NodesOrBuilder> nodesBuilder_; + io.appthreat.atom.Atom.Nodes, io.appthreat.atom.Atom.Nodes.Builder, io.appthreat.atom.Atom.NodesOrBuilder> nodesBuilder_; /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ - public java.util.List getNodesList() { + public java.util.List getNodesList() { if (nodesBuilder_ == null) { return java.util.Collections.unmodifiableList(nodes_); } else { @@ -45080,7 +47094,7 @@ public java.util.List getNodesList() } } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ public int getNodesCount() { if (nodesBuilder_ == null) { @@ -45090,9 +47104,9 @@ public int getNodesCount() { } } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ - public io.appthreat.atom.Atom.DataFlowSlice.Nodes getNodes(int index) { + public io.appthreat.atom.Atom.Nodes getNodes(int index) { if (nodesBuilder_ == null) { return nodes_.get(index); } else { @@ -45100,10 +47114,10 @@ public io.appthreat.atom.Atom.DataFlowSlice.Nodes getNodes(int index) { } } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ public Builder setNodes( - int index, io.appthreat.atom.Atom.DataFlowSlice.Nodes value) { + int index, io.appthreat.atom.Atom.Nodes value) { if (nodesBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -45117,10 +47131,10 @@ public Builder setNodes( return this; } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ public Builder setNodes( - int index, io.appthreat.atom.Atom.DataFlowSlice.Nodes.Builder builderForValue) { + int index, io.appthreat.atom.Atom.Nodes.Builder builderForValue) { if (nodesBuilder_ == null) { ensureNodesIsMutable(); nodes_.set(index, builderForValue.build()); @@ -45131,9 +47145,9 @@ public Builder setNodes( return this; } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ - public Builder addNodes(io.appthreat.atom.Atom.DataFlowSlice.Nodes value) { + public Builder addNodes(io.appthreat.atom.Atom.Nodes value) { if (nodesBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -45147,10 +47161,10 @@ public Builder addNodes(io.appthreat.atom.Atom.DataFlowSlice.Nodes value) { return this; } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ public Builder addNodes( - int index, io.appthreat.atom.Atom.DataFlowSlice.Nodes value) { + int index, io.appthreat.atom.Atom.Nodes value) { if (nodesBuilder_ == null) { if (value == null) { throw new NullPointerException(); @@ -45164,10 +47178,10 @@ public Builder addNodes( return this; } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ public Builder addNodes( - io.appthreat.atom.Atom.DataFlowSlice.Nodes.Builder builderForValue) { + io.appthreat.atom.Atom.Nodes.Builder builderForValue) { if (nodesBuilder_ == null) { ensureNodesIsMutable(); nodes_.add(builderForValue.build()); @@ -45178,10 +47192,10 @@ public Builder addNodes( return this; } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ public Builder addNodes( - int index, io.appthreat.atom.Atom.DataFlowSlice.Nodes.Builder builderForValue) { + int index, io.appthreat.atom.Atom.Nodes.Builder builderForValue) { if (nodesBuilder_ == null) { ensureNodesIsMutable(); nodes_.add(index, builderForValue.build()); @@ -45192,10 +47206,10 @@ public Builder addNodes( return this; } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ public Builder addAllNodes( - java.lang.Iterable values) { + java.lang.Iterable values) { if (nodesBuilder_ == null) { ensureNodesIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( @@ -45207,7 +47221,7 @@ public Builder addAllNodes( return this; } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ public Builder clearNodes() { if (nodesBuilder_ == null) { @@ -45220,7 +47234,7 @@ public Builder clearNodes() { return this; } /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; + * repeated .atom.Nodes nodes = 1; */ public Builder removeNodes(int index) { if (nodesBuilder_ == null) { @@ -45230,311 +47244,689 @@ public Builder removeNodes(int index) { } else { nodesBuilder_.remove(index); } - return this; + return this; + } + /** + * repeated .atom.Nodes nodes = 1; + */ + public io.appthreat.atom.Atom.Nodes.Builder getNodesBuilder( + int index) { + return getNodesFieldBuilder().getBuilder(index); + } + /** + * repeated .atom.Nodes nodes = 1; + */ + public io.appthreat.atom.Atom.NodesOrBuilder getNodesOrBuilder( + int index) { + if (nodesBuilder_ == null) { + return nodes_.get(index); } else { + return nodesBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .atom.Nodes nodes = 1; + */ + public java.util.List + getNodesOrBuilderList() { + if (nodesBuilder_ != null) { + return nodesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(nodes_); + } + } + /** + * repeated .atom.Nodes nodes = 1; + */ + public io.appthreat.atom.Atom.Nodes.Builder addNodesBuilder() { + return getNodesFieldBuilder().addBuilder( + io.appthreat.atom.Atom.Nodes.getDefaultInstance()); + } + /** + * repeated .atom.Nodes nodes = 1; + */ + public io.appthreat.atom.Atom.Nodes.Builder addNodesBuilder( + int index) { + return getNodesFieldBuilder().addBuilder( + index, io.appthreat.atom.Atom.Nodes.getDefaultInstance()); + } + /** + * repeated .atom.Nodes nodes = 1; + */ + public java.util.List + getNodesBuilderList() { + return getNodesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + io.appthreat.atom.Atom.Nodes, io.appthreat.atom.Atom.Nodes.Builder, io.appthreat.atom.Atom.NodesOrBuilder> + getNodesFieldBuilder() { + if (nodesBuilder_ == null) { + nodesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + io.appthreat.atom.Atom.Nodes, io.appthreat.atom.Atom.Nodes.Builder, io.appthreat.atom.Atom.NodesOrBuilder>( + nodes_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + nodes_ = null; + } + return nodesBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:atom.ReachableSlice.Reachables) + } + + // @@protoc_insertion_point(class_scope:atom.ReachableSlice.Reachables) + private static final io.appthreat.atom.Atom.ReachableSlice.Reachables DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new io.appthreat.atom.Atom.ReachableSlice.Reachables(); + } + + public static io.appthreat.atom.Atom.ReachableSlice.Reachables getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Reachables parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public io.appthreat.atom.Atom.ReachableSlice.Reachables getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface PurlsOrBuilder extends + // @@protoc_insertion_point(interface_extends:atom.ReachableSlice.Purls) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated string purls = 1; + * @return A list containing the purls. + */ + java.util.List + getPurlsList(); + /** + * repeated string purls = 1; + * @return The count of purls. + */ + int getPurlsCount(); + /** + * repeated string purls = 1; + * @param index The index of the element to return. + * @return The purls at the given index. + */ + java.lang.String getPurls(int index); + /** + * repeated string purls = 1; + * @param index The index of the value to return. + * @return The bytes of the purls at the given index. + */ + com.google.protobuf.ByteString + getPurlsBytes(int index); + } + /** + * Protobuf type {@code atom.ReachableSlice.Purls} + */ + public static final class Purls extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:atom.ReachableSlice.Purls) + PurlsOrBuilder { + private static final long serialVersionUID = 0L; + // Use Purls.newBuilder() to construct. + private Purls(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Purls() { + purls_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Purls(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_Purls_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_Purls_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.appthreat.atom.Atom.ReachableSlice.Purls.class, io.appthreat.atom.Atom.ReachableSlice.Purls.Builder.class); + } + + public static final int PURLS_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList purls_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + /** + * repeated string purls = 1; + * @return A list containing the purls. + */ + public com.google.protobuf.ProtocolStringList + getPurlsList() { + return purls_; + } + /** + * repeated string purls = 1; + * @return The count of purls. + */ + public int getPurlsCount() { + return purls_.size(); + } + /** + * repeated string purls = 1; + * @param index The index of the element to return. + * @return The purls at the given index. + */ + public java.lang.String getPurls(int index) { + return purls_.get(index); + } + /** + * repeated string purls = 1; + * @param index The index of the value to return. + * @return The bytes of the purls at the given index. + */ + public com.google.protobuf.ByteString + getPurlsBytes(int index) { + return purls_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < purls_.size(); i++) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, purls_.getRaw(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < purls_.size(); i++) { + dataSize += computeStringSizeNoTag(purls_.getRaw(i)); + } + size += dataSize; + size += 1 * getPurlsList().size(); } - /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; - */ - public io.appthreat.atom.Atom.DataFlowSlice.Nodes.Builder getNodesBuilder( - int index) { - return getNodesFieldBuilder().getBuilder(index); + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; } - /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; - */ - public io.appthreat.atom.Atom.DataFlowSlice.NodesOrBuilder getNodesOrBuilder( - int index) { - if (nodesBuilder_ == null) { - return nodes_.get(index); } else { - return nodesBuilder_.getMessageOrBuilder(index); - } + if (!(obj instanceof io.appthreat.atom.Atom.ReachableSlice.Purls)) { + return super.equals(obj); } - /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; - */ - public java.util.List - getNodesOrBuilderList() { - if (nodesBuilder_ != null) { - return nodesBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(nodes_); - } + io.appthreat.atom.Atom.ReachableSlice.Purls other = (io.appthreat.atom.Atom.ReachableSlice.Purls) obj; + + if (!getPurlsList() + .equals(other.getPurlsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; } - /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; - */ - public io.appthreat.atom.Atom.DataFlowSlice.Nodes.Builder addNodesBuilder() { - return getNodesFieldBuilder().addBuilder( - io.appthreat.atom.Atom.DataFlowSlice.Nodes.getDefaultInstance()); + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getPurlsCount() > 0) { + hash = (37 * hash) + PURLS_FIELD_NUMBER; + hash = (53 * hash) + getPurlsList().hashCode(); } - /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; - */ - public io.appthreat.atom.Atom.DataFlowSlice.Nodes.Builder addNodesBuilder( - int index) { - return getNodesFieldBuilder().addBuilder( - index, io.appthreat.atom.Atom.DataFlowSlice.Nodes.getDefaultInstance()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static io.appthreat.atom.Atom.ReachableSlice.Purls parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.ReachableSlice.Purls parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.ReachableSlice.Purls parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.ReachableSlice.Purls parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.ReachableSlice.Purls parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.appthreat.atom.Atom.ReachableSlice.Purls parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.appthreat.atom.Atom.ReachableSlice.Purls parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static io.appthreat.atom.Atom.ReachableSlice.Purls parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static io.appthreat.atom.Atom.ReachableSlice.Purls parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static io.appthreat.atom.Atom.ReachableSlice.Purls parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static io.appthreat.atom.Atom.ReachableSlice.Purls parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static io.appthreat.atom.Atom.ReachableSlice.Purls parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(io.appthreat.atom.Atom.ReachableSlice.Purls prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code atom.ReachableSlice.Purls} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:atom.ReachableSlice.Purls) + io.appthreat.atom.Atom.ReachableSlice.PurlsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_Purls_descriptor; } - /** - * repeated .atom.DataFlowSlice.Nodes nodes = 1; - */ - public java.util.List - getNodesBuilderList() { - return getNodesFieldBuilder().getBuilderList(); + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_Purls_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.appthreat.atom.Atom.ReachableSlice.Purls.class, io.appthreat.atom.Atom.ReachableSlice.Purls.Builder.class); } - private com.google.protobuf.RepeatedFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Nodes, io.appthreat.atom.Atom.DataFlowSlice.Nodes.Builder, io.appthreat.atom.Atom.DataFlowSlice.NodesOrBuilder> - getNodesFieldBuilder() { - if (nodesBuilder_ == null) { - nodesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Nodes, io.appthreat.atom.Atom.DataFlowSlice.Nodes.Builder, io.appthreat.atom.Atom.DataFlowSlice.NodesOrBuilder>( - nodes_, - ((bitField0_ & 0x00000001) != 0), - getParentForChildren(), - isClean()); - nodes_ = null; - } - return nodesBuilder_; + + // Construct using io.appthreat.atom.Atom.ReachableSlice.Purls.newBuilder() + private Builder() { + } - private java.util.List edges_ = - java.util.Collections.emptyList(); - private void ensureEdgesIsMutable() { - if (!((bitField0_ & 0x00000002) != 0)) { - edges_ = new java.util.ArrayList(edges_); - bitField0_ |= 0x00000002; - } + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + purls_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + return this; } - private com.google.protobuf.RepeatedFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Edges, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder, io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder> edgesBuilder_; + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_Purls_descriptor; + } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - public java.util.List getEdgesList() { - if (edgesBuilder_ == null) { - return java.util.Collections.unmodifiableList(edges_); - } else { - return edgesBuilder_.getMessageList(); - } + @java.lang.Override + public io.appthreat.atom.Atom.ReachableSlice.Purls getDefaultInstanceForType() { + return io.appthreat.atom.Atom.ReachableSlice.Purls.getDefaultInstance(); } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - public int getEdgesCount() { - if (edgesBuilder_ == null) { - return edges_.size(); - } else { - return edgesBuilder_.getCount(); + + @java.lang.Override + public io.appthreat.atom.Atom.ReachableSlice.Purls build() { + io.appthreat.atom.Atom.ReachableSlice.Purls result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); } + return result; } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - public io.appthreat.atom.Atom.DataFlowSlice.Edges getEdges(int index) { - if (edgesBuilder_ == null) { - return edges_.get(index); - } else { - return edgesBuilder_.getMessage(index); + + @java.lang.Override + public io.appthreat.atom.Atom.ReachableSlice.Purls buildPartial() { + io.appthreat.atom.Atom.ReachableSlice.Purls result = new io.appthreat.atom.Atom.ReachableSlice.Purls(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(io.appthreat.atom.Atom.ReachableSlice.Purls result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + purls_.makeImmutable(); + result.purls_ = purls_; } } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - public Builder setEdges( - int index, io.appthreat.atom.Atom.DataFlowSlice.Edges value) { - if (edgesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureEdgesIsMutable(); - edges_.set(index, value); - onChanged(); - } else { - edgesBuilder_.setMessage(index, value); - } - return this; + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - public Builder setEdges( - int index, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder builderForValue) { - if (edgesBuilder_ == null) { - ensureEdgesIsMutable(); - edges_.set(index, builderForValue.build()); - onChanged(); - } else { - edgesBuilder_.setMessage(index, builderForValue.build()); - } - return this; + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - public Builder addEdges(io.appthreat.atom.Atom.DataFlowSlice.Edges value) { - if (edgesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureEdgesIsMutable(); - edges_.add(value); - onChanged(); + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.appthreat.atom.Atom.ReachableSlice.Purls) { + return mergeFrom((io.appthreat.atom.Atom.ReachableSlice.Purls)other); } else { - edgesBuilder_.addMessage(value); + super.mergeFrom(other); + return this; } - return this; } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - public Builder addEdges( - int index, io.appthreat.atom.Atom.DataFlowSlice.Edges value) { - if (edgesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); + + public Builder mergeFrom(io.appthreat.atom.Atom.ReachableSlice.Purls other) { + if (other == io.appthreat.atom.Atom.ReachableSlice.Purls.getDefaultInstance()) return this; + if (!other.purls_.isEmpty()) { + if (purls_.isEmpty()) { + purls_ = other.purls_; + bitField0_ |= 0x00000001; + } else { + ensurePurlsIsMutable(); + purls_.addAll(other.purls_); } - ensureEdgesIsMutable(); - edges_.add(index, value); onChanged(); - } else { - edgesBuilder_.addMessage(index, value); } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); return this; } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - public Builder addEdges( - io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder builderForValue) { - if (edgesBuilder_ == null) { - ensureEdgesIsMutable(); - edges_.add(builderForValue.build()); - onChanged(); - } else { - edgesBuilder_.addMessage(builderForValue.build()); + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + ensurePurlsIsMutable(); + purls_.add(s); + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally return this; } - /** - * repeated .atom.DataFlowSlice.Edges edges = 2; - */ - public Builder addEdges( - int index, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder builderForValue) { - if (edgesBuilder_ == null) { - ensureEdgesIsMutable(); - edges_.add(index, builderForValue.build()); - onChanged(); - } else { - edgesBuilder_.addMessage(index, builderForValue.build()); + private int bitField0_; + + private com.google.protobuf.LazyStringArrayList purls_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + private void ensurePurlsIsMutable() { + if (!purls_.isModifiable()) { + purls_ = new com.google.protobuf.LazyStringArrayList(purls_); } - return this; + bitField0_ |= 0x00000001; } /** - * repeated .atom.DataFlowSlice.Edges edges = 2; + * repeated string purls = 1; + * @return A list containing the purls. */ - public Builder addAllEdges( - java.lang.Iterable values) { - if (edgesBuilder_ == null) { - ensureEdgesIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, edges_); - onChanged(); - } else { - edgesBuilder_.addAllMessages(values); - } - return this; + public com.google.protobuf.ProtocolStringList + getPurlsList() { + purls_.makeImmutable(); + return purls_; } /** - * repeated .atom.DataFlowSlice.Edges edges = 2; + * repeated string purls = 1; + * @return The count of purls. */ - public Builder clearEdges() { - if (edgesBuilder_ == null) { - edges_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - } else { - edgesBuilder_.clear(); - } - return this; + public int getPurlsCount() { + return purls_.size(); } /** - * repeated .atom.DataFlowSlice.Edges edges = 2; + * repeated string purls = 1; + * @param index The index of the element to return. + * @return The purls at the given index. */ - public Builder removeEdges(int index) { - if (edgesBuilder_ == null) { - ensureEdgesIsMutable(); - edges_.remove(index); - onChanged(); - } else { - edgesBuilder_.remove(index); - } - return this; + public java.lang.String getPurls(int index) { + return purls_.get(index); } /** - * repeated .atom.DataFlowSlice.Edges edges = 2; + * repeated string purls = 1; + * @param index The index of the value to return. + * @return The bytes of the purls at the given index. */ - public io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder getEdgesBuilder( - int index) { - return getEdgesFieldBuilder().getBuilder(index); + public com.google.protobuf.ByteString + getPurlsBytes(int index) { + return purls_.getByteString(index); } /** - * repeated .atom.DataFlowSlice.Edges edges = 2; + * repeated string purls = 1; + * @param index The index to set the value at. + * @param value The purls to set. + * @return This builder for chaining. */ - public io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder getEdgesOrBuilder( - int index) { - if (edgesBuilder_ == null) { - return edges_.get(index); } else { - return edgesBuilder_.getMessageOrBuilder(index); - } + public Builder setPurls( + int index, java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + ensurePurlsIsMutable(); + purls_.set(index, value); + bitField0_ |= 0x00000001; + onChanged(); + return this; } /** - * repeated .atom.DataFlowSlice.Edges edges = 2; + * repeated string purls = 1; + * @param value The purls to add. + * @return This builder for chaining. */ - public java.util.List - getEdgesOrBuilderList() { - if (edgesBuilder_ != null) { - return edgesBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(edges_); - } + public Builder addPurls( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + ensurePurlsIsMutable(); + purls_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; } /** - * repeated .atom.DataFlowSlice.Edges edges = 2; + * repeated string purls = 1; + * @param values The purls to add. + * @return This builder for chaining. */ - public io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder addEdgesBuilder() { - return getEdgesFieldBuilder().addBuilder( - io.appthreat.atom.Atom.DataFlowSlice.Edges.getDefaultInstance()); + public Builder addAllPurls( + java.lang.Iterable values) { + ensurePurlsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, purls_); + bitField0_ |= 0x00000001; + onChanged(); + return this; } /** - * repeated .atom.DataFlowSlice.Edges edges = 2; + * repeated string purls = 1; + * @return This builder for chaining. */ - public io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder addEdgesBuilder( - int index) { - return getEdgesFieldBuilder().addBuilder( - index, io.appthreat.atom.Atom.DataFlowSlice.Edges.getDefaultInstance()); + public Builder clearPurls() { + purls_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001);; + onChanged(); + return this; } /** - * repeated .atom.DataFlowSlice.Edges edges = 2; + * repeated string purls = 1; + * @param value The bytes of the purls to add. + * @return This builder for chaining. */ - public java.util.List - getEdgesBuilderList() { - return getEdgesFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Edges, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder, io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder> - getEdgesFieldBuilder() { - if (edgesBuilder_ == null) { - edgesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Edges, io.appthreat.atom.Atom.DataFlowSlice.Edges.Builder, io.appthreat.atom.Atom.DataFlowSlice.EdgesOrBuilder>( - edges_, - ((bitField0_ & 0x00000002) != 0), - getParentForChildren(), - isClean()); - edges_ = null; - } - return edgesBuilder_; + public Builder addPurlsBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + ensurePurlsIsMutable(); + purls_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; } @java.lang.Override public final Builder setUnknownFields( @@ -45549,23 +47941,23 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:atom.DataFlowSlice.Graph) + // @@protoc_insertion_point(builder_scope:atom.ReachableSlice.Purls) } - // @@protoc_insertion_point(class_scope:atom.DataFlowSlice.Graph) - private static final io.appthreat.atom.Atom.DataFlowSlice.Graph DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:atom.ReachableSlice.Purls) + private static final io.appthreat.atom.Atom.ReachableSlice.Purls DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.appthreat.atom.Atom.DataFlowSlice.Graph(); + DEFAULT_INSTANCE = new io.appthreat.atom.Atom.ReachableSlice.Purls(); } - public static io.appthreat.atom.Atom.DataFlowSlice.Graph getDefaultInstance() { + public static io.appthreat.atom.Atom.ReachableSlice.Purls getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public Graph parsePartialFrom( + public Purls parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -45584,72 +47976,72 @@ public Graph parsePartialFrom( } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Graph getDefaultInstanceForType() { + public io.appthreat.atom.Atom.ReachableSlice.Purls getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public static final int GRAPH_FIELD_NUMBER = 1; - private io.appthreat.atom.Atom.DataFlowSlice.Graph graph_; + public static final int REACHABLES_FIELD_NUMBER = 1; + private io.appthreat.atom.Atom.ReachableSlice.Reachables reachables_; /** - * .atom.DataFlowSlice.Graph graph = 1; - * @return Whether the graph field is set. + * .atom.ReachableSlice.Reachables reachables = 1; + * @return Whether the reachables field is set. */ @java.lang.Override - public boolean hasGraph() { - return graph_ != null; + public boolean hasReachables() { + return reachables_ != null; } /** - * .atom.DataFlowSlice.Graph graph = 1; - * @return The graph. + * .atom.ReachableSlice.Reachables reachables = 1; + * @return The reachables. */ @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Graph getGraph() { - return graph_ == null ? io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance() : graph_; + public io.appthreat.atom.Atom.ReachableSlice.Reachables getReachables() { + return reachables_ == null ? io.appthreat.atom.Atom.ReachableSlice.Reachables.getDefaultInstance() : reachables_; } /** - * .atom.DataFlowSlice.Graph graph = 1; + * .atom.ReachableSlice.Reachables reachables = 1; */ @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder getGraphOrBuilder() { - return graph_ == null ? io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance() : graph_; + public io.appthreat.atom.Atom.ReachableSlice.ReachablesOrBuilder getReachablesOrBuilder() { + return reachables_ == null ? io.appthreat.atom.Atom.ReachableSlice.Reachables.getDefaultInstance() : reachables_; } - public static final int PATH_FIELD_NUMBER = 2; - private io.appthreat.atom.Atom.DataFlowSlice.Paths path_; + public static final int PURLS_FIELD_NUMBER = 2; + private io.appthreat.atom.Atom.ReachableSlice.Purls purls_; /** - * .atom.DataFlowSlice.Paths path = 2; - * @return Whether the path field is set. + * .atom.ReachableSlice.Purls purls = 2; + * @return Whether the purls field is set. */ @java.lang.Override - public boolean hasPath() { - return path_ != null; + public boolean hasPurls() { + return purls_ != null; } /** - * .atom.DataFlowSlice.Paths path = 2; - * @return The path. + * .atom.ReachableSlice.Purls purls = 2; + * @return The purls. */ @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.Paths getPath() { - return path_ == null ? io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance() : path_; + public io.appthreat.atom.Atom.ReachableSlice.Purls getPurls() { + return purls_ == null ? io.appthreat.atom.Atom.ReachableSlice.Purls.getDefaultInstance() : purls_; } /** - * .atom.DataFlowSlice.Paths path = 2; + * .atom.ReachableSlice.Purls purls = 2; */ @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder getPathOrBuilder() { - return path_ == null ? io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance() : path_; + public io.appthreat.atom.Atom.ReachableSlice.PurlsOrBuilder getPurlsOrBuilder() { + return purls_ == null ? io.appthreat.atom.Atom.ReachableSlice.Purls.getDefaultInstance() : purls_; } private byte memoizedIsInitialized = -1; @@ -45666,11 +48058,11 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (graph_ != null) { - output.writeMessage(1, getGraph()); + if (reachables_ != null) { + output.writeMessage(1, getReachables()); } - if (path_ != null) { - output.writeMessage(2, getPath()); + if (purls_ != null) { + output.writeMessage(2, getPurls()); } getUnknownFields().writeTo(output); } @@ -45681,13 +48073,13 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (graph_ != null) { + if (reachables_ != null) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, getGraph()); + .computeMessageSize(1, getReachables()); } - if (path_ != null) { + if (purls_ != null) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, getPath()); + .computeMessageSize(2, getPurls()); } size += getUnknownFields().getSerializedSize(); memoizedSize = size; @@ -45699,20 +48091,20 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof io.appthreat.atom.Atom.DataFlowSlice)) { + if (!(obj instanceof io.appthreat.atom.Atom.ReachableSlice)) { return super.equals(obj); } - io.appthreat.atom.Atom.DataFlowSlice other = (io.appthreat.atom.Atom.DataFlowSlice) obj; + io.appthreat.atom.Atom.ReachableSlice other = (io.appthreat.atom.Atom.ReachableSlice) obj; - if (hasGraph() != other.hasGraph()) return false; - if (hasGraph()) { - if (!getGraph() - .equals(other.getGraph())) return false; + if (hasReachables() != other.hasReachables()) return false; + if (hasReachables()) { + if (!getReachables() + .equals(other.getReachables())) return false; } - if (hasPath() != other.hasPath()) return false; - if (hasPath()) { - if (!getPath() - .equals(other.getPath())) return false; + if (hasPurls() != other.hasPurls()) return false; + if (hasPurls()) { + if (!getPurls() + .equals(other.getPurls())) return false; } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; @@ -45725,57 +48117,57 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - if (hasGraph()) { - hash = (37 * hash) + GRAPH_FIELD_NUMBER; - hash = (53 * hash) + getGraph().hashCode(); + if (hasReachables()) { + hash = (37 * hash) + REACHABLES_FIELD_NUMBER; + hash = (53 * hash) + getReachables().hashCode(); } - if (hasPath()) { - hash = (37 * hash) + PATH_FIELD_NUMBER; - hash = (53 * hash) + getPath().hashCode(); + if (hasPurls()) { + hash = (37 * hash) + PURLS_FIELD_NUMBER; + hash = (53 * hash) + getPurls().hashCode(); } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; } - public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice parseFrom(byte[] data) + public static io.appthreat.atom.Atom.ReachableSlice parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice parseFrom(java.io.InputStream input) + public static io.appthreat.atom.Atom.ReachableSlice parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -45783,26 +48175,26 @@ public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( .parseWithIOException(PARSER, input, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice parseDelimitedFrom(java.io.InputStream input) + public static io.appthreat.atom.Atom.ReachableSlice parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static io.appthreat.atom.Atom.DataFlowSlice parseDelimitedFrom( + public static io.appthreat.atom.Atom.ReachableSlice parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( + public static io.appthreat.atom.Atom.ReachableSlice parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -45815,7 +48207,7 @@ public static io.appthreat.atom.Atom.DataFlowSlice parseFrom( public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(io.appthreat.atom.Atom.DataFlowSlice prototype) { + public static Builder newBuilder(io.appthreat.atom.Atom.ReachableSlice prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -45833,31 +48225,29 @@ protected Builder newBuilderForType( /** *
      **
-     * DataFlow slices offers a list of nodes and edges exported from data dependency graph
-     *
-     * ![Data Flow slices overview](./docs/Data%20Flows.png)
+     * Reachables slices offers a list of reachable nodes based on automated tags exported from data dependency graph
      * 
* - * Protobuf type {@code atom.DataFlowSlice} + * Protobuf type {@code atom.ReachableSlice} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:atom.DataFlowSlice) - io.appthreat.atom.Atom.DataFlowSliceOrBuilder { + // @@protoc_insertion_point(builder_implements:atom.ReachableSlice) + io.appthreat.atom.Atom.ReachableSliceOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_descriptor; + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_fieldAccessorTable + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_fieldAccessorTable .ensureFieldAccessorsInitialized( - io.appthreat.atom.Atom.DataFlowSlice.class, io.appthreat.atom.Atom.DataFlowSlice.Builder.class); + io.appthreat.atom.Atom.ReachableSlice.class, io.appthreat.atom.Atom.ReachableSlice.Builder.class); } - // Construct using io.appthreat.atom.Atom.DataFlowSlice.newBuilder() + // Construct using io.appthreat.atom.Atom.ReachableSlice.newBuilder() private Builder() { } @@ -45871,15 +48261,15 @@ private Builder( public Builder clear() { super.clear(); bitField0_ = 0; - graph_ = null; - if (graphBuilder_ != null) { - graphBuilder_.dispose(); - graphBuilder_ = null; + reachables_ = null; + if (reachablesBuilder_ != null) { + reachablesBuilder_.dispose(); + reachablesBuilder_ = null; } - path_ = null; - if (pathBuilder_ != null) { - pathBuilder_.dispose(); - pathBuilder_ = null; + purls_ = null; + if (purlsBuilder_ != null) { + purlsBuilder_.dispose(); + purlsBuilder_ = null; } return this; } @@ -45887,17 +48277,17 @@ public Builder clear() { @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return io.appthreat.atom.Atom.internal_static_atom_DataFlowSlice_descriptor; + return io.appthreat.atom.Atom.internal_static_atom_ReachableSlice_descriptor; } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice getDefaultInstanceForType() { - return io.appthreat.atom.Atom.DataFlowSlice.getDefaultInstance(); + public io.appthreat.atom.Atom.ReachableSlice getDefaultInstanceForType() { + return io.appthreat.atom.Atom.ReachableSlice.getDefaultInstance(); } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice build() { - io.appthreat.atom.Atom.DataFlowSlice result = buildPartial(); + public io.appthreat.atom.Atom.ReachableSlice build() { + io.appthreat.atom.Atom.ReachableSlice result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -45905,24 +48295,24 @@ public io.appthreat.atom.Atom.DataFlowSlice build() { } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice buildPartial() { - io.appthreat.atom.Atom.DataFlowSlice result = new io.appthreat.atom.Atom.DataFlowSlice(this); + public io.appthreat.atom.Atom.ReachableSlice buildPartial() { + io.appthreat.atom.Atom.ReachableSlice result = new io.appthreat.atom.Atom.ReachableSlice(this); if (bitField0_ != 0) { buildPartial0(result); } onBuilt(); return result; } - private void buildPartial0(io.appthreat.atom.Atom.DataFlowSlice result) { + private void buildPartial0(io.appthreat.atom.Atom.ReachableSlice result) { int from_bitField0_ = bitField0_; if (((from_bitField0_ & 0x00000001) != 0)) { - result.graph_ = graphBuilder_ == null - ? graph_ - : graphBuilder_.build(); + result.reachables_ = reachablesBuilder_ == null + ? reachables_ + : reachablesBuilder_.build(); } if (((from_bitField0_ & 0x00000002) != 0)) { - result.path_ = pathBuilder_ == null - ? path_ - : pathBuilder_.build(); + result.purls_ = purlsBuilder_ == null + ? purls_ + : purlsBuilder_.build(); } } @@ -45960,21 +48350,21 @@ public Builder addRepeatedField( } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof io.appthreat.atom.Atom.DataFlowSlice) { - return mergeFrom((io.appthreat.atom.Atom.DataFlowSlice)other); + if (other instanceof io.appthreat.atom.Atom.ReachableSlice) { + return mergeFrom((io.appthreat.atom.Atom.ReachableSlice)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(io.appthreat.atom.Atom.DataFlowSlice other) { - if (other == io.appthreat.atom.Atom.DataFlowSlice.getDefaultInstance()) return this; - if (other.hasGraph()) { - mergeGraph(other.getGraph()); + public Builder mergeFrom(io.appthreat.atom.Atom.ReachableSlice other) { + if (other == io.appthreat.atom.Atom.ReachableSlice.getDefaultInstance()) return this; + if (other.hasReachables()) { + mergeReachables(other.getReachables()); } - if (other.hasPath()) { - mergePath(other.getPath()); + if (other.hasPurls()) { + mergePurls(other.getPurls()); } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); @@ -46004,14 +48394,14 @@ public Builder mergeFrom( break; case 10: { input.readMessage( - getGraphFieldBuilder().getBuilder(), + getReachablesFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000001; break; } // case 10 case 18: { input.readMessage( - getPathFieldBuilder().getBuilder(), + getPurlsFieldBuilder().getBuilder(), extensionRegistry); bitField0_ |= 0x00000002; break; @@ -46033,242 +48423,242 @@ public Builder mergeFrom( } private int bitField0_; - private io.appthreat.atom.Atom.DataFlowSlice.Graph graph_; + private io.appthreat.atom.Atom.ReachableSlice.Reachables reachables_; private com.google.protobuf.SingleFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Graph, io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder, io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder> graphBuilder_; + io.appthreat.atom.Atom.ReachableSlice.Reachables, io.appthreat.atom.Atom.ReachableSlice.Reachables.Builder, io.appthreat.atom.Atom.ReachableSlice.ReachablesOrBuilder> reachablesBuilder_; /** - * .atom.DataFlowSlice.Graph graph = 1; - * @return Whether the graph field is set. + * .atom.ReachableSlice.Reachables reachables = 1; + * @return Whether the reachables field is set. */ - public boolean hasGraph() { + public boolean hasReachables() { return ((bitField0_ & 0x00000001) != 0); } /** - * .atom.DataFlowSlice.Graph graph = 1; - * @return The graph. + * .atom.ReachableSlice.Reachables reachables = 1; + * @return The reachables. */ - public io.appthreat.atom.Atom.DataFlowSlice.Graph getGraph() { - if (graphBuilder_ == null) { - return graph_ == null ? io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance() : graph_; + public io.appthreat.atom.Atom.ReachableSlice.Reachables getReachables() { + if (reachablesBuilder_ == null) { + return reachables_ == null ? io.appthreat.atom.Atom.ReachableSlice.Reachables.getDefaultInstance() : reachables_; } else { - return graphBuilder_.getMessage(); + return reachablesBuilder_.getMessage(); } } /** - * .atom.DataFlowSlice.Graph graph = 1; + * .atom.ReachableSlice.Reachables reachables = 1; */ - public Builder setGraph(io.appthreat.atom.Atom.DataFlowSlice.Graph value) { - if (graphBuilder_ == null) { + public Builder setReachables(io.appthreat.atom.Atom.ReachableSlice.Reachables value) { + if (reachablesBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - graph_ = value; + reachables_ = value; } else { - graphBuilder_.setMessage(value); + reachablesBuilder_.setMessage(value); } bitField0_ |= 0x00000001; onChanged(); return this; } /** - * .atom.DataFlowSlice.Graph graph = 1; + * .atom.ReachableSlice.Reachables reachables = 1; */ - public Builder setGraph( - io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder builderForValue) { - if (graphBuilder_ == null) { - graph_ = builderForValue.build(); + public Builder setReachables( + io.appthreat.atom.Atom.ReachableSlice.Reachables.Builder builderForValue) { + if (reachablesBuilder_ == null) { + reachables_ = builderForValue.build(); } else { - graphBuilder_.setMessage(builderForValue.build()); + reachablesBuilder_.setMessage(builderForValue.build()); } bitField0_ |= 0x00000001; onChanged(); return this; } /** - * .atom.DataFlowSlice.Graph graph = 1; + * .atom.ReachableSlice.Reachables reachables = 1; */ - public Builder mergeGraph(io.appthreat.atom.Atom.DataFlowSlice.Graph value) { - if (graphBuilder_ == null) { + public Builder mergeReachables(io.appthreat.atom.Atom.ReachableSlice.Reachables value) { + if (reachablesBuilder_ == null) { if (((bitField0_ & 0x00000001) != 0) && - graph_ != null && - graph_ != io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance()) { - getGraphBuilder().mergeFrom(value); + reachables_ != null && + reachables_ != io.appthreat.atom.Atom.ReachableSlice.Reachables.getDefaultInstance()) { + getReachablesBuilder().mergeFrom(value); } else { - graph_ = value; + reachables_ = value; } } else { - graphBuilder_.mergeFrom(value); + reachablesBuilder_.mergeFrom(value); } bitField0_ |= 0x00000001; onChanged(); return this; } /** - * .atom.DataFlowSlice.Graph graph = 1; + * .atom.ReachableSlice.Reachables reachables = 1; */ - public Builder clearGraph() { + public Builder clearReachables() { bitField0_ = (bitField0_ & ~0x00000001); - graph_ = null; - if (graphBuilder_ != null) { - graphBuilder_.dispose(); - graphBuilder_ = null; + reachables_ = null; + if (reachablesBuilder_ != null) { + reachablesBuilder_.dispose(); + reachablesBuilder_ = null; } onChanged(); return this; } /** - * .atom.DataFlowSlice.Graph graph = 1; + * .atom.ReachableSlice.Reachables reachables = 1; */ - public io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder getGraphBuilder() { + public io.appthreat.atom.Atom.ReachableSlice.Reachables.Builder getReachablesBuilder() { bitField0_ |= 0x00000001; onChanged(); - return getGraphFieldBuilder().getBuilder(); + return getReachablesFieldBuilder().getBuilder(); } /** - * .atom.DataFlowSlice.Graph graph = 1; + * .atom.ReachableSlice.Reachables reachables = 1; */ - public io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder getGraphOrBuilder() { - if (graphBuilder_ != null) { - return graphBuilder_.getMessageOrBuilder(); + public io.appthreat.atom.Atom.ReachableSlice.ReachablesOrBuilder getReachablesOrBuilder() { + if (reachablesBuilder_ != null) { + return reachablesBuilder_.getMessageOrBuilder(); } else { - return graph_ == null ? - io.appthreat.atom.Atom.DataFlowSlice.Graph.getDefaultInstance() : graph_; + return reachables_ == null ? + io.appthreat.atom.Atom.ReachableSlice.Reachables.getDefaultInstance() : reachables_; } } /** - * .atom.DataFlowSlice.Graph graph = 1; + * .atom.ReachableSlice.Reachables reachables = 1; */ private com.google.protobuf.SingleFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Graph, io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder, io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder> - getGraphFieldBuilder() { - if (graphBuilder_ == null) { - graphBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Graph, io.appthreat.atom.Atom.DataFlowSlice.Graph.Builder, io.appthreat.atom.Atom.DataFlowSlice.GraphOrBuilder>( - getGraph(), + io.appthreat.atom.Atom.ReachableSlice.Reachables, io.appthreat.atom.Atom.ReachableSlice.Reachables.Builder, io.appthreat.atom.Atom.ReachableSlice.ReachablesOrBuilder> + getReachablesFieldBuilder() { + if (reachablesBuilder_ == null) { + reachablesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + io.appthreat.atom.Atom.ReachableSlice.Reachables, io.appthreat.atom.Atom.ReachableSlice.Reachables.Builder, io.appthreat.atom.Atom.ReachableSlice.ReachablesOrBuilder>( + getReachables(), getParentForChildren(), isClean()); - graph_ = null; + reachables_ = null; } - return graphBuilder_; + return reachablesBuilder_; } - private io.appthreat.atom.Atom.DataFlowSlice.Paths path_; + private io.appthreat.atom.Atom.ReachableSlice.Purls purls_; private com.google.protobuf.SingleFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Paths, io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder, io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder> pathBuilder_; + io.appthreat.atom.Atom.ReachableSlice.Purls, io.appthreat.atom.Atom.ReachableSlice.Purls.Builder, io.appthreat.atom.Atom.ReachableSlice.PurlsOrBuilder> purlsBuilder_; /** - * .atom.DataFlowSlice.Paths path = 2; - * @return Whether the path field is set. + * .atom.ReachableSlice.Purls purls = 2; + * @return Whether the purls field is set. */ - public boolean hasPath() { + public boolean hasPurls() { return ((bitField0_ & 0x00000002) != 0); } /** - * .atom.DataFlowSlice.Paths path = 2; - * @return The path. + * .atom.ReachableSlice.Purls purls = 2; + * @return The purls. */ - public io.appthreat.atom.Atom.DataFlowSlice.Paths getPath() { - if (pathBuilder_ == null) { - return path_ == null ? io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance() : path_; + public io.appthreat.atom.Atom.ReachableSlice.Purls getPurls() { + if (purlsBuilder_ == null) { + return purls_ == null ? io.appthreat.atom.Atom.ReachableSlice.Purls.getDefaultInstance() : purls_; } else { - return pathBuilder_.getMessage(); + return purlsBuilder_.getMessage(); } } /** - * .atom.DataFlowSlice.Paths path = 2; + * .atom.ReachableSlice.Purls purls = 2; */ - public Builder setPath(io.appthreat.atom.Atom.DataFlowSlice.Paths value) { - if (pathBuilder_ == null) { + public Builder setPurls(io.appthreat.atom.Atom.ReachableSlice.Purls value) { + if (purlsBuilder_ == null) { if (value == null) { throw new NullPointerException(); } - path_ = value; + purls_ = value; } else { - pathBuilder_.setMessage(value); + purlsBuilder_.setMessage(value); } bitField0_ |= 0x00000002; onChanged(); return this; } /** - * .atom.DataFlowSlice.Paths path = 2; + * .atom.ReachableSlice.Purls purls = 2; */ - public Builder setPath( - io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder builderForValue) { - if (pathBuilder_ == null) { - path_ = builderForValue.build(); + public Builder setPurls( + io.appthreat.atom.Atom.ReachableSlice.Purls.Builder builderForValue) { + if (purlsBuilder_ == null) { + purls_ = builderForValue.build(); } else { - pathBuilder_.setMessage(builderForValue.build()); + purlsBuilder_.setMessage(builderForValue.build()); } bitField0_ |= 0x00000002; onChanged(); return this; } /** - * .atom.DataFlowSlice.Paths path = 2; + * .atom.ReachableSlice.Purls purls = 2; */ - public Builder mergePath(io.appthreat.atom.Atom.DataFlowSlice.Paths value) { - if (pathBuilder_ == null) { + public Builder mergePurls(io.appthreat.atom.Atom.ReachableSlice.Purls value) { + if (purlsBuilder_ == null) { if (((bitField0_ & 0x00000002) != 0) && - path_ != null && - path_ != io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance()) { - getPathBuilder().mergeFrom(value); + purls_ != null && + purls_ != io.appthreat.atom.Atom.ReachableSlice.Purls.getDefaultInstance()) { + getPurlsBuilder().mergeFrom(value); } else { - path_ = value; + purls_ = value; } } else { - pathBuilder_.mergeFrom(value); + purlsBuilder_.mergeFrom(value); } bitField0_ |= 0x00000002; onChanged(); return this; } /** - * .atom.DataFlowSlice.Paths path = 2; + * .atom.ReachableSlice.Purls purls = 2; */ - public Builder clearPath() { + public Builder clearPurls() { bitField0_ = (bitField0_ & ~0x00000002); - path_ = null; - if (pathBuilder_ != null) { - pathBuilder_.dispose(); - pathBuilder_ = null; + purls_ = null; + if (purlsBuilder_ != null) { + purlsBuilder_.dispose(); + purlsBuilder_ = null; } onChanged(); return this; } /** - * .atom.DataFlowSlice.Paths path = 2; + * .atom.ReachableSlice.Purls purls = 2; */ - public io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder getPathBuilder() { + public io.appthreat.atom.Atom.ReachableSlice.Purls.Builder getPurlsBuilder() { bitField0_ |= 0x00000002; onChanged(); - return getPathFieldBuilder().getBuilder(); + return getPurlsFieldBuilder().getBuilder(); } /** - * .atom.DataFlowSlice.Paths path = 2; + * .atom.ReachableSlice.Purls purls = 2; */ - public io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder getPathOrBuilder() { - if (pathBuilder_ != null) { - return pathBuilder_.getMessageOrBuilder(); + public io.appthreat.atom.Atom.ReachableSlice.PurlsOrBuilder getPurlsOrBuilder() { + if (purlsBuilder_ != null) { + return purlsBuilder_.getMessageOrBuilder(); } else { - return path_ == null ? - io.appthreat.atom.Atom.DataFlowSlice.Paths.getDefaultInstance() : path_; + return purls_ == null ? + io.appthreat.atom.Atom.ReachableSlice.Purls.getDefaultInstance() : purls_; } } /** - * .atom.DataFlowSlice.Paths path = 2; + * .atom.ReachableSlice.Purls purls = 2; */ private com.google.protobuf.SingleFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Paths, io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder, io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder> - getPathFieldBuilder() { - if (pathBuilder_ == null) { - pathBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - io.appthreat.atom.Atom.DataFlowSlice.Paths, io.appthreat.atom.Atom.DataFlowSlice.Paths.Builder, io.appthreat.atom.Atom.DataFlowSlice.PathsOrBuilder>( - getPath(), + io.appthreat.atom.Atom.ReachableSlice.Purls, io.appthreat.atom.Atom.ReachableSlice.Purls.Builder, io.appthreat.atom.Atom.ReachableSlice.PurlsOrBuilder> + getPurlsFieldBuilder() { + if (purlsBuilder_ == null) { + purlsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + io.appthreat.atom.Atom.ReachableSlice.Purls, io.appthreat.atom.Atom.ReachableSlice.Purls.Builder, io.appthreat.atom.Atom.ReachableSlice.PurlsOrBuilder>( + getPurls(), getParentForChildren(), isClean()); - path_ = null; + purls_ = null; } - return pathBuilder_; + return purlsBuilder_; } @java.lang.Override public final Builder setUnknownFields( @@ -46283,23 +48673,23 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:atom.DataFlowSlice) + // @@protoc_insertion_point(builder_scope:atom.ReachableSlice) } - // @@protoc_insertion_point(class_scope:atom.DataFlowSlice) - private static final io.appthreat.atom.Atom.DataFlowSlice DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:atom.ReachableSlice) + private static final io.appthreat.atom.Atom.ReachableSlice DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new io.appthreat.atom.Atom.DataFlowSlice(); + DEFAULT_INSTANCE = new io.appthreat.atom.Atom.ReachableSlice(); } - public static io.appthreat.atom.Atom.DataFlowSlice getDefaultInstance() { + public static io.appthreat.atom.Atom.ReachableSlice getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public DataFlowSlice parsePartialFrom( + public ReachableSlice parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -46318,17 +48708,17 @@ public DataFlowSlice parsePartialFrom( } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public io.appthreat.atom.Atom.DataFlowSlice getDefaultInstanceForType() { + public io.appthreat.atom.Atom.ReachableSlice getDefaultInstanceForType() { return DEFAULT_INSTANCE; } @@ -46495,15 +48885,15 @@ public io.appthreat.atom.Atom.DataFlowSlice getDefaultInstanceForType() { com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_atom_UsageSlice_UserDefinedTypes_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor - internal_static_atom_DataFlowSlice_descriptor; + internal_static_atom_Nodes_descriptor; private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_atom_DataFlowSlice_fieldAccessorTable; + internal_static_atom_Nodes_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor - internal_static_atom_DataFlowSlice_Nodes_descriptor; + internal_static_atom_DataFlowSlice_descriptor; private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_atom_DataFlowSlice_Nodes_fieldAccessorTable; + internal_static_atom_DataFlowSlice_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor internal_static_atom_DataFlowSlice_Edges_descriptor; private static final @@ -46524,6 +48914,21 @@ public io.appthreat.atom.Atom.DataFlowSlice getDefaultInstanceForType() { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_atom_DataFlowSlice_Graph_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_atom_ReachableSlice_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_atom_ReachableSlice_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_atom_ReachableSlice_Reachables_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_atom_ReachableSlice_Reachables_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_atom_ReachableSlice_Purls_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_atom_ReachableSlice_Purls_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -46651,91 +49056,95 @@ public io.appthreat.atom.Atom.DataFlowSlice getDefaultInstanceForType() { "ber\030\005 \001(\r\022\024\n\014columnNumber\030\006 \001(\r\"l\n\tLabel" + "Type\022\007\n\003ANY\020\000\022\t\n\005LOCAL\020\001\022\013\n\007LITERAL\020\002\022\t\n" + "\005PARAM\020\003\022\010\n\004CALL\020\004\022\016\n\nIDENTIFIER\020\005\022\014\n\010TY" + - "PE_REF\020\006\022\013\n\007UNKNOWN\020\n\"\210\005\n\rDataFlowSlice\022" + - "(\n\005graph\030\001 \001(\0132\031.atom.DataFlowSlice.Grap" + - "h\022\'\n\004path\030\002 \001(\0132\031.atom.DataFlowSlice.Pat" + - "hs\032\255\002\n\005Nodes\022\n\n\002id\030\001 \001(\r\022\035\n\005label\030\002 \001(\0162" + - "\016.atom.NodeType\022\014\n\004name\030\003 \001(\t\022\020\n\010fullNam" + - "e\030\004 \001(\t\022\021\n\tsignature\030\005 \001(\t\022\022\n\nisExternal" + - "\030\006 \001(\010\022\014\n\004code\030\007 \001(\t\022\024\n\014typeFullName\030\010 \001" + - "(\t\022\030\n\020parentMethodName\030\t \001(\t\022\026\n\016parentFi" + - "leName\030\n \001(\t\022\031\n\021parentPackageName\030\013 \001(\t\022" + - "\027\n\017parentClassName\030\014 \001(\t\022\022\n\nlineNumber\030\r" + - " \001(\r\022\024\n\014columnNumber\030\016 \001(\r\032O\n\005Edges\022\013\n\003s" + - "rc\030\001 \001(\r\022\013\n\003dst\030\002 \001(\r\022,\n\005label\030\003 \001(\0162\035.a" + - "tom.CpgStruct.Edge.EdgeType\032\023\n\005Flows\022\n\n\002" + - "id\030\001 \003(\r\0321\n\005Paths\022(\n\005flows\030\001 \003(\0132\031.atom." + - "DataFlowSlice.Flows\032[\n\005Graph\022(\n\005nodes\030\001 " + - "\003(\0132\031.atom.DataFlowSlice.Nodes\022(\n\005edges\030" + - "\002 \003(\0132\031.atom.DataFlowSlice.Edges*\245\007\n\020Nod" + - "ePropertyName\022\031\n\025UNKNOWN_NODE_PROPERTY\020\000" + - "\022\017\n\013LINE_NUMBER\020\002\022\024\n\020PARSER_TYPE_NAME\020\003\022" + - "\t\n\005ORDER\020\004\022\010\n\004NAME\020\005\022\r\n\tFULL_NAME\020\006\022\017\n\013I" + - "S_EXTERNAL\020\007\022\t\n\005VALUE\020\010\022\021\n\rCOLUMN_NUMBER" + - "\020\013\022\023\n\017LINE_NUMBER_END\020\014\022\013\n\007VERSION\020\r\022\027\n\023" + - "EVALUATION_STRATEGY\020\017\022\025\n\021COLUMN_NUMBER_E" + - "ND\020\020\022\014\n\010LANGUAGE\020\023\022\013\n\007CONTENT\020\024\022\010\n\004CODE\020" + - "\025\022\r\n\tSIGNATURE\020\026\022\021\n\rDISPATCH_TYPE\020\031\022\021\n\rM" + - "ODIFIER_TYPE\020\032\022\032\n\026CONTROL_STRUCTURE_TYPE" + - "\020\033\022\022\n\016ARGUMENT_INDEX\020(\022\026\n\022CLOSURE_BINDIN" + - "G_ID\0202\022\022\n\016TYPE_FULL_NAME\0203\022\027\n\023TYPE_DECL_" + - "FULL_NAME\0204\022 \n\034INHERITS_FROM_TYPE_FULL_N" + - "AME\0205\022\024\n\020METHOD_FULL_NAME\0206\022\023\n\017AST_PAREN" + - "T_TYPE\0208\022\030\n\024AST_PARENT_FULL_NAME\0209\022\027\n\023DE" + - "PENDENCY_GROUP_ID\020:\022\n\n\006SYMBOL\020d\022\025\n\021METHO" + - "D_SHORT_NAME\020f\022\020\n\014PACKAGE_NAME\020g\022\016\n\nCLAS" + - "S_NAME\020h\022\016\n\nNODE_LABEL\020i\022\014\n\010FILENAME\020j\022\014" + - "\n\010OVERLAYS\020v\022\010\n\004HASH\020x\022\022\n\rARGUMENT_NAME\020" + - "\202\001\022\010\n\003KEY\020\203\001\022\025\n\020CLASS_SHORT_NAME\020\204\001\022\031\n\024A" + - "LIAS_TYPE_FULL_NAME\020\236\001\022\032\n\025CLOSURE_ORIGIN" + - "AL_NAME\020\237\001\022\020\n\013IS_VARIADIC\020\335\001\022\t\n\004ROOT\020\257\t\022" + - " \n\033DYNAMIC_TYPE_HINT_FULL_NAME\020\267\014\022\n\n\005IND" + - "EX\020\257\021\022\024\n\016CANONICAL_NAME\020\304\221z\022\023\n\rCONTAINED" + - "_REF\020\371\300z*;\n\020EdgePropertyName\022\031\n\025UNKNOWN_" + - "EDGE_PROPERTY\020\000\022\014\n\010VARIABLE\020\013*\275\001\n\rModifi" + - "erTypes\022\031\n\025UNKNOWN_MODIFIER_TYPE\020\000\022\n\n\006ST" + - "ATIC\020\001\022\n\n\006PUBLIC\020\002\022\r\n\tPROTECTED\020\003\022\013\n\007PRI" + - "VATE\020\004\022\014\n\010ABSTRACT\020\005\022\n\n\006NATIVE\020\006\022\017\n\013CONS" + - "TRUCTOR\020\007\022\013\n\007VIRTUAL\020\010\022\014\n\010INTERNAL\020\t\022\t\n\005" + - "FINAL\020\n\022\014\n\010READONLY\020\013*\362\001\n\tLANGUAGES\022\024\n\020U" + - "NKNOWN_LANGUAGE\020\000\022\010\n\004JAVA\020\001\022\016\n\nJAVASCRIP" + - "T\020\002\022\n\n\006GOLANG\020\003\022\n\n\006CSHARP\020\004\022\005\n\001C\020\005\022\n\n\006PY" + - "THON\020\006\022\010\n\004LLVM\020\007\022\007\n\003PHP\020\010\022\023\n\017FUZZY_TEST_" + - "LANG\020\t\022\n\n\006GHIDRA\020\n\022\n\n\006KOTLIN\020\013\022\010\n\004NEWC\020\014" + - "\022\013\n\007JAVASRC\020\r\022\r\n\tPYTHONSRC\020\016\022\t\n\005JSSRC\020\017\022" + - "\014\n\010SOLIDITY\020\020\022\013\n\007RUBYSRC\020\021*g\n\024Evaluation" + - "Strategies\022\037\n\033UNKNOWN_EVALUATION_STRATEG" + - "Y\020\000\022\020\n\014BY_REFERENCE\020\001\022\016\n\nBY_SHARING\020\002\022\014\n" + - "\010BY_VALUE\020\003*b\n\rDispatchTypes\022\031\n\025UNKNOWN_" + - "DISPATCH_TYPE\020\000\022\023\n\017STATIC_DISPATCH\020\001\022\024\n\020" + - "DYNAMIC_DISPATCH\020\002\022\013\n\007INLINED\020\003*\304\001\n\027CONT" + - "ROL_STRUCTURE_TYPES\022\"\n\036UNKNOWN_CONTROL_S" + - "TRUCTURE_TYPE\020\000\022\t\n\005BREAK\020\001\022\014\n\010CONTINUE\020\002" + - "\022\t\n\005WHILE\020\003\022\006\n\002DO\020\004\022\007\n\003FOR\020\005\022\010\n\004GOTO\020\006\022\006" + - "\n\002IF\020\007\022\010\n\004ELSE\020\010\022\n\n\006SWITCH\020\t\022\007\n\003TRY\020\n\022\t\n" + - "\005THROW\020\013\022\t\n\005MATCH\020\014\022\t\n\005YIELD\020\r*\202\006\n\010NodeT" + - "ype\022\025\n\021UNKNOWN_NODE_TYPE\020\000\022\n\n\006METHOD\020\001\022\021" + - "\n\rMETHOD_RETURN\020\003\022\016\n\nANNOTATION\020\005\022\037\n\033ANN" + - "OTATION_PARAMETER_ASSIGN\020\006\022\030\n\024ANNOTATION" + - "_PARAMETER\020\007\022\013\n\007LITERAL\020\010\022\n\n\006MEMBER\020\t\022\025\n" + - "\021ARRAY_INITIALIZER\020\016\022\010\n\004CALL\020\017\022\t\n\005LOCAL\020" + - "\027\022\007\n\003TAG\020\030\022\014\n\010LOCATION\020\031\022\016\n\nIDENTIFIER\020\033" + - "\022\n\n\006RETURN\020\036\022\t\n\005BLOCK\020\037\022\030\n\024METHOD_PARAME" + - "TER_OUT\020!\022\027\n\023METHOD_PARAMETER_IN\020\"\022\016\n\nDE" + - "PENDENCY\020#\022\010\n\004FILE\020&\022\r\n\tMETA_DATA\020\'\022\r\n\tN" + - "AMESPACE\020(\022\023\n\017NAMESPACE_BLOCK\020)\022\013\n\007UNKNO" + - "WN\020,\022\010\n\004TYPE\020-\022\r\n\tTYPE_DECL\020.\022\022\n\016TYPE_PA" + - "RAMETER\020/\022\021\n\rTYPE_ARGUMENT\0200\022\026\n\022ANNOTATI" + - "ON_LITERAL\0201\022\017\n\013CONFIG_FILE\0202\022\014\n\007BINDING" + - "\020\222\001\022\022\n\rTAG_NODE_PAIR\020\320\001\022\014\n\007FINDING\020\326\001\022\023\n" + - "\016KEY_VALUE_PAIR\020\331\001\022\r\n\010MODIFIER\020\254\002\022\017\n\nMET" + - "HOD_REF\020\315\002\022\024\n\017CLOSURE_BINDING\020\316\002\022\r\n\010TYPE" + - "_REF\020\317\002\022\026\n\021CONTROL_STRUCTURE\020\323\002\022\020\n\013JUMP_" + - "TARGET\020\324\002\022\017\n\nJUMP_LABEL\020\325\002\022\021\n\014TEMPLATE_D" + - "OM\020\241\003\022\014\n\007COMMENT\020\377\003\022\026\n\020FIELD_IDENTIFIER\020" + - "\271\221zBH\n\021io.appthreat.atomB\004AtomZ\031github.c" + - "om/AppThreat/atom\252\002\021io.appthreat.atomb\006p" + - "roto3" + "PE_REF\020\006\022\013\n\007UNKNOWN\020\n\"\273\002\n\005Nodes\022\n\n\002id\030\001 " + + "\001(\r\022\035\n\005label\030\002 \001(\0162\016.atom.NodeType\022\014\n\004na" + + "me\030\003 \001(\t\022\020\n\010fullName\030\004 \001(\t\022\021\n\tsignature\030" + + "\005 \001(\t\022\022\n\nisExternal\030\006 \001(\010\022\014\n\004code\030\007 \001(\t\022" + + "\024\n\014typeFullName\030\010 \001(\t\022\030\n\020parentMethodNam" + + "e\030\t \001(\t\022\026\n\016parentFileName\030\n \001(\t\022\031\n\021paren" + + "tPackageName\030\013 \001(\t\022\027\n\017parentClassName\030\014 " + + "\001(\t\022\022\n\nlineNumber\030\r \001(\r\022\024\n\014columnNumber\030" + + "\016 \001(\r\022\014\n\004tags\030\017 \001(\t\"\312\002\n\rDataFlowSlice\022(\n" + + "\005graph\030\001 \001(\0132\031.atom.DataFlowSlice.Graph\022" + + "\'\n\004path\030\002 \001(\0132\031.atom.DataFlowSlice.Paths" + + "\032O\n\005Edges\022\013\n\003src\030\001 \001(\r\022\013\n\003dst\030\002 \001(\r\022,\n\005l" + + "abel\030\003 \001(\0162\035.atom.CpgStruct.Edge.EdgeTyp" + + "e\032\023\n\005Flows\022\n\n\002id\030\001 \003(\r\0321\n\005Paths\022(\n\005flows" + + "\030\001 \003(\0132\031.atom.DataFlowSlice.Flows\032M\n\005Gra" + + "ph\022\032\n\005nodes\030\001 \003(\0132\013.atom.Nodes\022(\n\005edges\030" + + "\002 \003(\0132\031.atom.DataFlowSlice.Edges\"\262\001\n\016Rea" + + "chableSlice\0223\n\nreachables\030\001 \001(\0132\037.atom.R" + + "eachableSlice.Reachables\022)\n\005purls\030\002 \001(\0132" + + "\032.atom.ReachableSlice.Purls\032(\n\nReachable" + + "s\022\032\n\005nodes\030\001 \003(\0132\013.atom.Nodes\032\026\n\005Purls\022\r" + + "\n\005purls\030\001 \003(\t*\245\007\n\020NodePropertyName\022\031\n\025UN" + + "KNOWN_NODE_PROPERTY\020\000\022\017\n\013LINE_NUMBER\020\002\022\024" + + "\n\020PARSER_TYPE_NAME\020\003\022\t\n\005ORDER\020\004\022\010\n\004NAME\020" + + "\005\022\r\n\tFULL_NAME\020\006\022\017\n\013IS_EXTERNAL\020\007\022\t\n\005VAL" + + "UE\020\010\022\021\n\rCOLUMN_NUMBER\020\013\022\023\n\017LINE_NUMBER_E" + + "ND\020\014\022\013\n\007VERSION\020\r\022\027\n\023EVALUATION_STRATEGY" + + "\020\017\022\025\n\021COLUMN_NUMBER_END\020\020\022\014\n\010LANGUAGE\020\023\022" + + "\013\n\007CONTENT\020\024\022\010\n\004CODE\020\025\022\r\n\tSIGNATURE\020\026\022\021\n" + + "\rDISPATCH_TYPE\020\031\022\021\n\rMODIFIER_TYPE\020\032\022\032\n\026C" + + "ONTROL_STRUCTURE_TYPE\020\033\022\022\n\016ARGUMENT_INDE" + + "X\020(\022\026\n\022CLOSURE_BINDING_ID\0202\022\022\n\016TYPE_FULL" + + "_NAME\0203\022\027\n\023TYPE_DECL_FULL_NAME\0204\022 \n\034INHE" + + "RITS_FROM_TYPE_FULL_NAME\0205\022\024\n\020METHOD_FUL" + + "L_NAME\0206\022\023\n\017AST_PARENT_TYPE\0208\022\030\n\024AST_PAR" + + "ENT_FULL_NAME\0209\022\027\n\023DEPENDENCY_GROUP_ID\020:" + + "\022\n\n\006SYMBOL\020d\022\025\n\021METHOD_SHORT_NAME\020f\022\020\n\014P" + + "ACKAGE_NAME\020g\022\016\n\nCLASS_NAME\020h\022\016\n\nNODE_LA" + + "BEL\020i\022\014\n\010FILENAME\020j\022\014\n\010OVERLAYS\020v\022\010\n\004HAS" + + "H\020x\022\022\n\rARGUMENT_NAME\020\202\001\022\010\n\003KEY\020\203\001\022\025\n\020CLA" + + "SS_SHORT_NAME\020\204\001\022\031\n\024ALIAS_TYPE_FULL_NAME" + + "\020\236\001\022\032\n\025CLOSURE_ORIGINAL_NAME\020\237\001\022\020\n\013IS_VA" + + "RIADIC\020\335\001\022\t\n\004ROOT\020\257\t\022 \n\033DYNAMIC_TYPE_HIN" + + "T_FULL_NAME\020\267\014\022\n\n\005INDEX\020\257\021\022\024\n\016CANONICAL_" + + "NAME\020\304\221z\022\023\n\rCONTAINED_REF\020\371\300z*;\n\020EdgePro" + + "pertyName\022\031\n\025UNKNOWN_EDGE_PROPERTY\020\000\022\014\n\010" + + "VARIABLE\020\013*\275\001\n\rModifierTypes\022\031\n\025UNKNOWN_" + + "MODIFIER_TYPE\020\000\022\n\n\006STATIC\020\001\022\n\n\006PUBLIC\020\002\022" + + "\r\n\tPROTECTED\020\003\022\013\n\007PRIVATE\020\004\022\014\n\010ABSTRACT\020" + + "\005\022\n\n\006NATIVE\020\006\022\017\n\013CONSTRUCTOR\020\007\022\013\n\007VIRTUA" + + "L\020\010\022\014\n\010INTERNAL\020\t\022\t\n\005FINAL\020\n\022\014\n\010READONLY" + + "\020\013*\362\001\n\tLANGUAGES\022\024\n\020UNKNOWN_LANGUAGE\020\000\022\010" + + "\n\004JAVA\020\001\022\016\n\nJAVASCRIPT\020\002\022\n\n\006GOLANG\020\003\022\n\n\006" + + "CSHARP\020\004\022\005\n\001C\020\005\022\n\n\006PYTHON\020\006\022\010\n\004LLVM\020\007\022\007\n" + + "\003PHP\020\010\022\023\n\017FUZZY_TEST_LANG\020\t\022\n\n\006GHIDRA\020\n\022" + + "\n\n\006KOTLIN\020\013\022\010\n\004NEWC\020\014\022\013\n\007JAVASRC\020\r\022\r\n\tPY" + + "THONSRC\020\016\022\t\n\005JSSRC\020\017\022\014\n\010SOLIDITY\020\020\022\013\n\007RU" + + "BYSRC\020\021*g\n\024EvaluationStrategies\022\037\n\033UNKNO" + + "WN_EVALUATION_STRATEGY\020\000\022\020\n\014BY_REFERENCE" + + "\020\001\022\016\n\nBY_SHARING\020\002\022\014\n\010BY_VALUE\020\003*b\n\rDisp" + + "atchTypes\022\031\n\025UNKNOWN_DISPATCH_TYPE\020\000\022\023\n\017" + + "STATIC_DISPATCH\020\001\022\024\n\020DYNAMIC_DISPATCH\020\002\022" + + "\013\n\007INLINED\020\003*\304\001\n\027CONTROL_STRUCTURE_TYPES" + + "\022\"\n\036UNKNOWN_CONTROL_STRUCTURE_TYPE\020\000\022\t\n\005" + + "BREAK\020\001\022\014\n\010CONTINUE\020\002\022\t\n\005WHILE\020\003\022\006\n\002DO\020\004" + + "\022\007\n\003FOR\020\005\022\010\n\004GOTO\020\006\022\006\n\002IF\020\007\022\010\n\004ELSE\020\010\022\n\n" + + "\006SWITCH\020\t\022\007\n\003TRY\020\n\022\t\n\005THROW\020\013\022\t\n\005MATCH\020\014" + + "\022\t\n\005YIELD\020\r*\202\006\n\010NodeType\022\025\n\021UNKNOWN_NODE" + + "_TYPE\020\000\022\n\n\006METHOD\020\001\022\021\n\rMETHOD_RETURN\020\003\022\016" + + "\n\nANNOTATION\020\005\022\037\n\033ANNOTATION_PARAMETER_A" + + "SSIGN\020\006\022\030\n\024ANNOTATION_PARAMETER\020\007\022\013\n\007LIT" + + "ERAL\020\010\022\n\n\006MEMBER\020\t\022\025\n\021ARRAY_INITIALIZER\020" + + "\016\022\010\n\004CALL\020\017\022\t\n\005LOCAL\020\027\022\007\n\003TAG\020\030\022\014\n\010LOCAT" + + "ION\020\031\022\016\n\nIDENTIFIER\020\033\022\n\n\006RETURN\020\036\022\t\n\005BLO" + + "CK\020\037\022\030\n\024METHOD_PARAMETER_OUT\020!\022\027\n\023METHOD" + + "_PARAMETER_IN\020\"\022\016\n\nDEPENDENCY\020#\022\010\n\004FILE\020" + + "&\022\r\n\tMETA_DATA\020\'\022\r\n\tNAMESPACE\020(\022\023\n\017NAMES" + + "PACE_BLOCK\020)\022\013\n\007UNKNOWN\020,\022\010\n\004TYPE\020-\022\r\n\tT" + + "YPE_DECL\020.\022\022\n\016TYPE_PARAMETER\020/\022\021\n\rTYPE_A" + + "RGUMENT\0200\022\026\n\022ANNOTATION_LITERAL\0201\022\017\n\013CON" + + "FIG_FILE\0202\022\014\n\007BINDING\020\222\001\022\022\n\rTAG_NODE_PAI" + + "R\020\320\001\022\014\n\007FINDING\020\326\001\022\023\n\016KEY_VALUE_PAIR\020\331\001\022" + + "\r\n\010MODIFIER\020\254\002\022\017\n\nMETHOD_REF\020\315\002\022\024\n\017CLOSU" + + "RE_BINDING\020\316\002\022\r\n\010TYPE_REF\020\317\002\022\026\n\021CONTROL_" + + "STRUCTURE\020\323\002\022\020\n\013JUMP_TARGET\020\324\002\022\017\n\nJUMP_L" + + "ABEL\020\325\002\022\021\n\014TEMPLATE_DOM\020\241\003\022\014\n\007COMMENT\020\377\003" + + "\022\026\n\020FIELD_IDENTIFIER\020\271\221zBH\n\021io.appthreat" + + ".atomB\004AtomZ\031github.com/AppThreat/atom\252\002" + + "\021io.appthreat.atomb\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -46933,42 +49342,60 @@ public io.appthreat.atom.Atom.DataFlowSlice getDefaultInstanceForType() { com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_atom_UsageSlice_UserDefinedTypes_descriptor, new java.lang.String[] { "Name", "Fields", "Procedures", "FileName", "LineNumber", "ColumnNumber", }); - internal_static_atom_DataFlowSlice_descriptor = + internal_static_atom_Nodes_descriptor = getDescriptor().getMessageTypes().get(14); + internal_static_atom_Nodes_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_atom_Nodes_descriptor, + new java.lang.String[] { "Id", "Label", "Name", "FullName", "Signature", "IsExternal", "Code", "TypeFullName", "ParentMethodName", "ParentFileName", "ParentPackageName", "ParentClassName", "LineNumber", "ColumnNumber", "Tags", }); + internal_static_atom_DataFlowSlice_descriptor = + getDescriptor().getMessageTypes().get(15); internal_static_atom_DataFlowSlice_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_atom_DataFlowSlice_descriptor, new java.lang.String[] { "Graph", "Path", }); - internal_static_atom_DataFlowSlice_Nodes_descriptor = - internal_static_atom_DataFlowSlice_descriptor.getNestedTypes().get(0); - internal_static_atom_DataFlowSlice_Nodes_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_atom_DataFlowSlice_Nodes_descriptor, - new java.lang.String[] { "Id", "Label", "Name", "FullName", "Signature", "IsExternal", "Code", "TypeFullName", "ParentMethodName", "ParentFileName", "ParentPackageName", "ParentClassName", "LineNumber", "ColumnNumber", }); internal_static_atom_DataFlowSlice_Edges_descriptor = - internal_static_atom_DataFlowSlice_descriptor.getNestedTypes().get(1); + internal_static_atom_DataFlowSlice_descriptor.getNestedTypes().get(0); internal_static_atom_DataFlowSlice_Edges_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_atom_DataFlowSlice_Edges_descriptor, new java.lang.String[] { "Src", "Dst", "Label", }); internal_static_atom_DataFlowSlice_Flows_descriptor = - internal_static_atom_DataFlowSlice_descriptor.getNestedTypes().get(2); + internal_static_atom_DataFlowSlice_descriptor.getNestedTypes().get(1); internal_static_atom_DataFlowSlice_Flows_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_atom_DataFlowSlice_Flows_descriptor, new java.lang.String[] { "Id", }); internal_static_atom_DataFlowSlice_Paths_descriptor = - internal_static_atom_DataFlowSlice_descriptor.getNestedTypes().get(3); + internal_static_atom_DataFlowSlice_descriptor.getNestedTypes().get(2); internal_static_atom_DataFlowSlice_Paths_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_atom_DataFlowSlice_Paths_descriptor, new java.lang.String[] { "Flows", }); internal_static_atom_DataFlowSlice_Graph_descriptor = - internal_static_atom_DataFlowSlice_descriptor.getNestedTypes().get(4); + internal_static_atom_DataFlowSlice_descriptor.getNestedTypes().get(3); internal_static_atom_DataFlowSlice_Graph_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_atom_DataFlowSlice_Graph_descriptor, new java.lang.String[] { "Nodes", "Edges", }); + internal_static_atom_ReachableSlice_descriptor = + getDescriptor().getMessageTypes().get(16); + internal_static_atom_ReachableSlice_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_atom_ReachableSlice_descriptor, + new java.lang.String[] { "Reachables", "Purls", }); + internal_static_atom_ReachableSlice_Reachables_descriptor = + internal_static_atom_ReachableSlice_descriptor.getNestedTypes().get(0); + internal_static_atom_ReachableSlice_Reachables_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_atom_ReachableSlice_Reachables_descriptor, + new java.lang.String[] { "Nodes", }); + internal_static_atom_ReachableSlice_Purls_descriptor = + internal_static_atom_ReachableSlice_descriptor.getNestedTypes().get(1); + internal_static_atom_ReachableSlice_Purls_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_atom_ReachableSlice_Purls_descriptor, + new java.lang.String[] { "Purls", }); } // @@protoc_insertion_point(outer_class_scope) diff --git a/specification/bindings/python/atom.py b/specification/bindings/python/atom.py index 394b0ee..df852d5 100644 --- a/specification/bindings/python/atom.py +++ b/specification/bindings/python/atom.py @@ -1019,18 +1019,7 @@ class UsageSliceUserDefinedTypes(betterproto.Message): @dataclass -class DataFlowSlice(betterproto.Message): - """ - * DataFlow slices offers a list of nodes and edges exported from data - dependency graph ![Data Flow slices overview](./docs/Data%20Flows.png) - """ - - graph: "DataFlowSliceGraph" = betterproto.message_field(1) - path: "DataFlowSlicePaths" = betterproto.message_field(2) - - -@dataclass -class DataFlowSliceNodes(betterproto.Message): +class Nodes(betterproto.Message): # Id of the node id: int = betterproto.uint32_field(1) # Label @@ -1059,6 +1048,19 @@ class DataFlowSliceNodes(betterproto.Message): line_number: int = betterproto.uint32_field(13) # Column number column_number: int = betterproto.uint32_field(14) + # Tags. Can contain simple names including package url + tags: str = betterproto.string_field(15) + + +@dataclass +class DataFlowSlice(betterproto.Message): + """ + * DataFlow slices offers a list of nodes and edges exported from data + dependency graph ![Data Flow slices overview](./docs/Data%20Flows.png) + """ + + graph: "DataFlowSliceGraph" = betterproto.message_field(1) + path: "DataFlowSlicePaths" = betterproto.message_field(2) @dataclass @@ -1085,5 +1087,26 @@ class DataFlowSlicePaths(betterproto.Message): @dataclass class DataFlowSliceGraph(betterproto.Message): - nodes: List["DataFlowSliceNodes"] = betterproto.message_field(1) + nodes: List["Nodes"] = betterproto.message_field(1) edges: List["DataFlowSliceEdges"] = betterproto.message_field(2) + + +@dataclass +class ReachableSlice(betterproto.Message): + """ + * Reachables slices offers a list of reachable nodes based on automated + tags exported from data dependency graph + """ + + reachables: "ReachableSliceReachables" = betterproto.message_field(1) + purls: "ReachableSlicePurls" = betterproto.message_field(2) + + +@dataclass +class ReachableSliceReachables(betterproto.Message): + nodes: List["Nodes"] = betterproto.message_field(1) + + +@dataclass +class ReachableSlicePurls(betterproto.Message): + purls: List[str] = betterproto.string_field(1) diff --git a/specification/docs/spec.docbook b/specification/docs/spec.docbook index a7d8025..8c16b14 100644 --- a/specification/docs/spec.docbook +++ b/specification/docs/spec.docbook @@ -624,7 +624,7 @@ nodes - DataFlowSlice.Nodes + Nodes repeated @@ -641,132 +641,6 @@ - - -
- DataFlowSlice.Nodes - - - - <classname>DataFlowSlice.Nodes</classname> Fields - - - - - - - - Field - Type - Label - Description - - - - - - id - uint32 - - Id of the node - - - - label - NodeType - - Label - - - - name - string - - Name of the call or identifier or parameter - - - - fullName - string - - Full name of the call - - - - signature - string - - Method signature of the call - - - - isExternal - bool - - Boolean to indicate if this call belongs to an external method - - - - code - string - - Source code - - - - typeFullName - string - - Type full name - - - - parentMethodName - string - - Parent method name - - - - parentFileName - string - - Parent filename - - - - parentPackageName - string - - Parent package name - - - - parentClassName - string - - Parent class name - - - - lineNumber - uint32 - - Line number - - - - columnNumber - uint32 - - Column number - - - - -
- -
@@ -1264,6 +1138,139 @@ +
+ +
+ Nodes + + + + <classname>Nodes</classname> Fields + + + + + + + + Field + Type + Label + Description + + + + + + id + uint32 + + Id of the node + + + + label + NodeType + + Label + + + + name + string + + Name of the call or identifier or parameter + + + + fullName + string + + Full name of the call + + + + signature + string + + Method signature of the call + + + + isExternal + bool + + Boolean to indicate if this call belongs to an external method + + + + code + string + + Source code + + + + typeFullName + string + + Type full name + + + + parentMethodName + string + + Parent method name + + + + parentFileName + string + + Parent filename + + + + parentPackageName + string + + Parent package name + + + + parentClassName + string + + Parent class name + + + + lineNumber + uint32 + + Line number + + + + columnNumber + uint32 + + Column number + + + + tags + string + + Tags. Can contain simple names including package url + + + + +
+ +
@@ -1383,6 +1390,118 @@ +
+ +
+ ReachableSlice + Reachables slices offers a list of reachable nodes based on automated tags exported from data dependency graph + + + <classname>ReachableSlice</classname> Fields + + + + + + + + Field + Type + Label + Description + + + + + + reachables + ReachableSlice.Reachables + + + + + + purls + ReachableSlice.Purls + + + + + + +
+ + +
+ +
+ ReachableSlice.Purls + + + + <classname>ReachableSlice.Purls</classname> Fields + + + + + + + + Field + Type + Label + Description + + + + + + purls + string + repeated + + + + + +
+ + +
+ +
+ ReachableSlice.Reachables + + + + <classname>ReachableSlice.Reachables</classname> Fields + + + + + + + + Field + Type + Label + Description + + + + + + nodes + Nodes + repeated + + + + + +
+ +
diff --git a/specification/docs/spec.html b/specification/docs/spec.html index ba7890d..8208284 100644 --- a/specification/docs/spec.html +++ b/specification/docs/spec.html @@ -234,10 +234,6 @@

Table of Contents

MDataFlowSlice.Graph -
  • - MDataFlowSlice.Nodes -
  • -
  • MDataFlowSlice.Paths
  • @@ -282,10 +278,26 @@

    Table of Contents

    MLongList +
  • + MNodes +
  • +
  • MPropertyValue
  • +
  • + MReachableSlice +
  • + +
  • + MReachableSlice.Purls +
  • + +
  • + MReachableSlice.Reachables +
  • +
  • MStringList
  • @@ -852,7 +864,7 @@

    DataFlowSlice.Graph

    nodes - DataFlowSlice.Nodes + Nodes repeated

    @@ -871,121 +883,6 @@

    DataFlowSlice.Graph

    -

    DataFlowSlice.Nodes

    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    iduint32

    Id of the node

    labelNodeType

    Label

    namestring

    Name of the call or identifier or parameter

    fullNamestring

    Full name of the call

    signaturestring

    Method signature of the call

    isExternalbool

    Boolean to indicate if this call belongs to an external method

    codestring

    Source code

    typeFullNamestring

    Type full name

    parentMethodNamestring

    Parent method name

    parentFileNamestring

    Parent filename

    parentPackageNamestring

    Parent package name

    parentClassNamestring

    Parent class name

    lineNumberuint32

    Line number

    columnNumberuint32

    Column number

    - - - - -

    DataFlowSlice.Paths

    @@ -1362,6 +1259,128 @@

    LongList

    +

    Nodes

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    iduint32

    Id of the node

    labelNodeType

    Label

    namestring

    Name of the call or identifier or parameter

    fullNamestring

    Full name of the call

    signaturestring

    Method signature of the call

    isExternalbool

    Boolean to indicate if this call belongs to an external method

    codestring

    Source code

    typeFullNamestring

    Type full name

    parentMethodNamestring

    Parent method name

    parentFileNamestring

    Parent filename

    parentPackageNamestring

    Parent package name

    parentClassNamestring

    Parent class name

    lineNumberuint32

    Line number

    columnNumberuint32

    Column number

    tagsstring

    Tags. Can contain simple names including package url

    + + + + +

    PropertyValue

    Message to store the property values such as string or int values

    @@ -1470,6 +1489,85 @@

    PropertyValue

    +

    ReachableSlice

    +

    Reachables slices offers a list of reachable nodes based on automated tags exported from data dependency graph

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    reachablesReachableSlice.Reachables

    purlsReachableSlice.Purls

    + + + + + +

    ReachableSlice.Purls

    +

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    purlsstringrepeated

    + + + + + +

    ReachableSlice.Reachables

    +

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    nodesNodesrepeated

    + + + + +

    StringList

    diff --git a/specification/docs/spec.md b/specification/docs/spec.md index 113393d..4c9f6d7 100644 --- a/specification/docs/spec.md +++ b/specification/docs/spec.md @@ -1,129 +1,164 @@ # Protocol Documentation - ## Table of Contents - [atom.proto](#atom-proto) + - [AdditionalEdgeProperty](#atom-AdditionalEdgeProperty) + - [AdditionalNodeProperty](#atom-AdditionalNodeProperty) + - [BoolList](#atom-BoolList) + - [ContainedRefs](#atom-ContainedRefs) + - [CpgOverlay](#atom-CpgOverlay) + - [CpgStruct](#atom-CpgStruct) + - [CpgStruct.Edge](#atom-CpgStruct-Edge) + - [CpgStruct.Edge.Property](#atom-CpgStruct-Edge-Property) + - [CpgStruct.Node](#atom-CpgStruct-Node) + - [CpgStruct.Node.Property](#atom-CpgStruct-Node-Property) + - [DataFlowSlice](#atom-DataFlowSlice) + - [DataFlowSlice.Edges](#atom-DataFlowSlice-Edges) + - [DataFlowSlice.Flows](#atom-DataFlowSlice-Flows) + - [DataFlowSlice.Graph](#atom-DataFlowSlice-Graph) + - [DataFlowSlice.Paths](#atom-DataFlowSlice-Paths) + - [DiffGraph](#atom-DiffGraph) + - [DiffGraph.Entry](#atom-DiffGraph-Entry) + - [DiffGraph.RemoveEdge](#atom-DiffGraph-RemoveEdge) + - [DiffGraph.RemoveEdgeProperty](#atom-DiffGraph-RemoveEdgeProperty) + - [DiffGraph.RemoveNode](#atom-DiffGraph-RemoveNode) + - [DiffGraph.RemoveNodeProperty](#atom-DiffGraph-RemoveNodeProperty) + - [DoubleList](#atom-DoubleList) + - [FloatList](#atom-FloatList) + - [IntList](#atom-IntList) + - [LongList](#atom-LongList) + - [Nodes](#atom-Nodes) + - [PropertyValue](#atom-PropertyValue) + - [ReachableSlice](#atom-ReachableSlice) + - [ReachableSlice.Purls](#atom-ReachableSlice-Purls) + - [ReachableSlice.Reachables](#atom-ReachableSlice-Reachables) + - [StringList](#atom-StringList) + - [UsageSlice](#atom-UsageSlice) + - [UsageSlice.ArgToCalls](#atom-UsageSlice-ArgToCalls) + - [UsageSlice.DefinedBy](#atom-UsageSlice-DefinedBy) + - [UsageSlice.Fields](#atom-UsageSlice-Fields) + - [UsageSlice.InvokedCalls](#atom-UsageSlice-InvokedCalls) + - [UsageSlice.MethodUsageSlice](#atom-UsageSlice-MethodUsageSlice) + - [UsageSlice.ObjectUsageSlice](#atom-UsageSlice-ObjectUsageSlice) + - [UsageSlice.Procedures](#atom-UsageSlice-Procedures) + - [UsageSlice.TargetObj](#atom-UsageSlice-TargetObj) + - [UsageSlice.UserDefinedTypes](#atom-UsageSlice-UserDefinedTypes) + + - [CONTROL_STRUCTURE_TYPES](#atom-CONTROL_STRUCTURE_TYPES) + - [CpgStruct.Edge.EdgeType](#atom-CpgStruct-Edge-EdgeType) + - [DispatchTypes](#atom-DispatchTypes) + - [EdgePropertyName](#atom-EdgePropertyName) + - [EvaluationStrategies](#atom-EvaluationStrategies) + - [LANGUAGES](#atom-LANGUAGES) + - [ModifierTypes](#atom-ModifierTypes) + - [NodePropertyName](#atom-NodePropertyName) + - [NodeType](#atom-NodeType) + - [UsageSlice.LabelType](#atom-UsageSlice-LabelType) + +- [Scalar Value Types](#scalar-value-types) - - [AdditionalEdgeProperty](#atom-AdditionalEdgeProperty) - - [AdditionalNodeProperty](#atom-AdditionalNodeProperty) - - [BoolList](#atom-BoolList) - - [ContainedRefs](#atom-ContainedRefs) - - [CpgOverlay](#atom-CpgOverlay) - - [CpgStruct](#atom-CpgStruct) - - [CpgStruct.Edge](#atom-CpgStruct-Edge) - - [CpgStruct.Edge.Property](#atom-CpgStruct-Edge-Property) - - [CpgStruct.Node](#atom-CpgStruct-Node) - - [CpgStruct.Node.Property](#atom-CpgStruct-Node-Property) - - [DataFlowSlice](#atom-DataFlowSlice) - - [DataFlowSlice.Edges](#atom-DataFlowSlice-Edges) - - [DataFlowSlice.Flows](#atom-DataFlowSlice-Flows) - - [DataFlowSlice.Graph](#atom-DataFlowSlice-Graph) - - [DataFlowSlice.Nodes](#atom-DataFlowSlice-Nodes) - - [DataFlowSlice.Paths](#atom-DataFlowSlice-Paths) - - [DiffGraph](#atom-DiffGraph) - - [DiffGraph.Entry](#atom-DiffGraph-Entry) - - [DiffGraph.RemoveEdge](#atom-DiffGraph-RemoveEdge) - - [DiffGraph.RemoveEdgeProperty](#atom-DiffGraph-RemoveEdgeProperty) - - [DiffGraph.RemoveNode](#atom-DiffGraph-RemoveNode) - - [DiffGraph.RemoveNodeProperty](#atom-DiffGraph-RemoveNodeProperty) - - [DoubleList](#atom-DoubleList) - - [FloatList](#atom-FloatList) - - [IntList](#atom-IntList) - - [LongList](#atom-LongList) - - [PropertyValue](#atom-PropertyValue) - - [StringList](#atom-StringList) - - [UsageSlice](#atom-UsageSlice) - - [UsageSlice.ArgToCalls](#atom-UsageSlice-ArgToCalls) - - [UsageSlice.DefinedBy](#atom-UsageSlice-DefinedBy) - - [UsageSlice.Fields](#atom-UsageSlice-Fields) - - [UsageSlice.InvokedCalls](#atom-UsageSlice-InvokedCalls) - - [UsageSlice.MethodUsageSlice](#atom-UsageSlice-MethodUsageSlice) - - [UsageSlice.ObjectUsageSlice](#atom-UsageSlice-ObjectUsageSlice) - - [UsageSlice.Procedures](#atom-UsageSlice-Procedures) - - [UsageSlice.TargetObj](#atom-UsageSlice-TargetObj) - - [UsageSlice.UserDefinedTypes](#atom-UsageSlice-UserDefinedTypes) - - - [CONTROL_STRUCTURE_TYPES](#atom-CONTROL_STRUCTURE_TYPES) - - [CpgStruct.Edge.EdgeType](#atom-CpgStruct-Edge-EdgeType) - - [DispatchTypes](#atom-DispatchTypes) - - [EdgePropertyName](#atom-EdgePropertyName) - - [EvaluationStrategies](#atom-EvaluationStrategies) - - [LANGUAGES](#atom-LANGUAGES) - - [ModifierTypes](#atom-ModifierTypes) - - [NodePropertyName](#atom-NodePropertyName) - - [NodeType](#atom-NodeType) - - [UsageSlice.LabelType](#atom-UsageSlice-LabelType) -- [Scalar Value Types](#scalar-value-types) -

    Top

    ## atom.proto + + ### AdditionalEdgeProperty -| Field | Type | Label | Description | -| ------------ | -------------------------------------------------------- | ----- | ----------- | -| edge_id | [int64](#int64) | | | -| property | [CpgStruct.Edge.Property](#atom-CpgStruct-Edge-Property) | | | -| out_node_key | [int64](#int64) | | | -| in_node_key | [int64](#int64) | | | -| edge_type | [CpgStruct.Edge.EdgeType](#atom-CpgStruct-Edge-EdgeType) | | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| edge_id | [int64](#int64) | | | +| property | [CpgStruct.Edge.Property](#atom-CpgStruct-Edge-Property) | | | +| out_node_key | [int64](#int64) | | | +| in_node_key | [int64](#int64) | | | +| edge_type | [CpgStruct.Edge.EdgeType](#atom-CpgStruct-Edge-EdgeType) | | | + + + + + ### AdditionalNodeProperty -| Field | Type | Label | Description | -| -------- | -------------------------------------------------------- | ----- | ----------- | -| node_id | [int64](#int64) | | | -| property | [CpgStruct.Node.Property](#atom-CpgStruct-Node-Property) | | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| node_id | [int64](#int64) | | | +| property | [CpgStruct.Node.Property](#atom-CpgStruct-Node-Property) | | | + + + + + ### BoolList -| Field | Type | Label | Description | -| ------ | ------------- | -------- | ----------- | -| values | [bool](#bool) | repeated | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| values | [bool](#bool) | repeated | | + + + + + ### ContainedRefs -| Field | Type | Label | Description | -| ---------- | ----------------- | -------- | ----------- | -| local_name | [string](#string) | | | -| refs | [int64](#int64) | repeated | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| local_name | [string](#string) | | | +| refs | [int64](#int64) | repeated | | + + + + + ### CpgOverlay - Overlays can be stacked onto each other, therefor their node ids must be globally unique. -| Field | Type | Label | Description | -| ------------- | ------------------------------------------------------ | -------- | ----------- | -| node | [CpgStruct.Node](#atom-CpgStruct-Node) | repeated | | -| edge | [CpgStruct.Edge](#atom-CpgStruct-Edge) | repeated | | -| node_property | [AdditionalNodeProperty](#atom-AdditionalNodeProperty) | repeated | | -| edge_property | [AdditionalEdgeProperty](#atom-AdditionalEdgeProperty) | repeated | | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| node | [CpgStruct.Node](#atom-CpgStruct-Node) | repeated | | +| edge | [CpgStruct.Edge](#atom-CpgStruct-Edge) | repeated | | +| node_property | [AdditionalNodeProperty](#atom-AdditionalNodeProperty) | repeated | | +| edge_property | [AdditionalEdgeProperty](#atom-AdditionalEdgeProperty) | repeated | | + + + + + ### CpgStruct - This is the CORE structure that represents a Code Property Graph for the given language This structure must be serialized as bytes and stored in a zip file (such as app.atom) with the name "cpg.proto" Example code snippet in Python - ```python atom_struct = atom.CpgStruct(node=[method]) with ZipFile(file_name, "w") as zip_file: @@ -131,7 +166,6 @@ with ZipFile(file_name, "w") as zip_file: ``` Example code snippet in TypeScript - ```typescript const methodFullName = new atom.CpgStruct.Node.Property({ name: atom.NodePropertyName.FULL_NAME, @@ -146,640 +180,894 @@ const atomStruct = new atom.CpgStruct({ node: [method] }); const serializedBytes = atomStruct.serialize(); ``` -| Field | Type | Label | Description | -| ----- | -------------------------------------- | -------- | ----------- | -| node | [CpgStruct.Node](#atom-CpgStruct-Node) | repeated | | -| edge | [CpgStruct.Edge](#atom-CpgStruct-Edge) | repeated | | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| node | [CpgStruct.Node](#atom-CpgStruct-Node) | repeated | | +| edge | [CpgStruct.Edge](#atom-CpgStruct-Edge) | repeated | | + + + + + ### CpgStruct.Edge - Represents a directed edge of a graph -| Field | Type | Label | Description | -| -------- | -------------------------------------------------------- | -------- | ----------------- | -| src | [int64](#int64) | | Source node. | -| dst | [int64](#int64) | | Destination node. | -| type | [CpgStruct.Edge.EdgeType](#atom-CpgStruct-Edge-EdgeType) | | | -| property | [CpgStruct.Edge.Property](#atom-CpgStruct-Edge-Property) | repeated | | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| src | [int64](#int64) | | Source node. | +| dst | [int64](#int64) | | Destination node. | +| type | [CpgStruct.Edge.EdgeType](#atom-CpgStruct-Edge-EdgeType) | | | +| property | [CpgStruct.Edge.Property](#atom-CpgStruct-Edge-Property) | repeated | | + + + + + ### CpgStruct.Edge.Property - Edge properties. -| Field | Type | Label | Description | -| ----- | ------------------------------------------ | ----- | ----------- | -| name | [EdgePropertyName](#atom-EdgePropertyName) | | | -| value | [PropertyValue](#atom-PropertyValue) | | | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| name | [EdgePropertyName](#atom-EdgePropertyName) | | | +| value | [PropertyValue](#atom-PropertyValue) | | | + + + + + ### CpgStruct.Node -| Field | Type | Label | Description | -| -------- | -------------------------------------------------------- | -------- | ----------- | -| key | [int64](#int64) | | | -| type | [NodeType](#atom-NodeType) | | | -| property | [CpgStruct.Node.Property](#atom-CpgStruct-Node-Property) | repeated | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| key | [int64](#int64) | | | +| type | [NodeType](#atom-NodeType) | | | +| property | [CpgStruct.Node.Property](#atom-CpgStruct-Node-Property) | repeated | | + + + + + ### CpgStruct.Node.Property - Node properties. -| Field | Type | Label | Description | -| ----- | ------------------------------------------ | ----- | ----------- | -| name | [NodePropertyName](#atom-NodePropertyName) | | | -| value | [PropertyValue](#atom-PropertyValue) | | | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| name | [NodePropertyName](#atom-NodePropertyName) | | | +| value | [PropertyValue](#atom-PropertyValue) | | | + + + + + ### DataFlowSlice - DataFlow slices offers a list of nodes and edges exported from data dependency graph ![Data Flow slices overview](./docs/Data%20Flows.png) -| Field | Type | Label | Description | -| ----- | ------------------------------------------------ | ----- | ----------- | -| graph | [DataFlowSlice.Graph](#atom-DataFlowSlice-Graph) | | | -| path | [DataFlowSlice.Paths](#atom-DataFlowSlice-Paths) | | | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| graph | [DataFlowSlice.Graph](#atom-DataFlowSlice-Graph) | | | +| path | [DataFlowSlice.Paths](#atom-DataFlowSlice-Paths) | | | + + + + + ### DataFlowSlice.Edges -| Field | Type | Label | Description | -| ----- | -------------------------------------------------------- | ----- | ------------------- | -| src | [uint32](#uint32) | | Source node id | -| dst | [uint32](#uint32) | | Destination node id | -| label | [CpgStruct.Edge.EdgeType](#atom-CpgStruct-Edge-EdgeType) | | Edge type | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| src | [uint32](#uint32) | | Source node id | +| dst | [uint32](#uint32) | | Destination node id | +| label | [CpgStruct.Edge.EdgeType](#atom-CpgStruct-Edge-EdgeType) | | Edge type | + + + + + ### DataFlowSlice.Flows -| Field | Type | Label | Description | -| ----- | ----------------- | -------- | ----------- | -| id | [uint32](#uint32) | repeated | Node id | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [uint32](#uint32) | repeated | Node id | + + + + + ### DataFlowSlice.Graph -| Field | Type | Label | Description | -| ----- | ------------------------------------------------ | -------- | ----------- | -| nodes | [DataFlowSlice.Nodes](#atom-DataFlowSlice-Nodes) | repeated | | -| edges | [DataFlowSlice.Edges](#atom-DataFlowSlice-Edges) | repeated | | - - - -### DataFlowSlice.Nodes - -| Field | Type | Label | Description | -| ----------------- | -------------------------- | ----- | -------------------------------------------------------------- | -| id | [uint32](#uint32) | | Id of the node | -| label | [NodeType](#atom-NodeType) | | Label | -| name | [string](#string) | | Name of the call or identifier or parameter | -| fullName | [string](#string) | | Full name of the call | -| signature | [string](#string) | | Method signature of the call | -| isExternal | [bool](#bool) | | Boolean to indicate if this call belongs to an external method | -| code | [string](#string) | | Source code | -| typeFullName | [string](#string) | | Type full name | -| parentMethodName | [string](#string) | | Parent method name | -| parentFileName | [string](#string) | | Parent filename | -| parentPackageName | [string](#string) | | Parent package name | -| parentClassName | [string](#string) | | Parent class name | -| lineNumber | [uint32](#uint32) | | Line number | -| columnNumber | [uint32](#uint32) | | Column number | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| nodes | [Nodes](#atom-Nodes) | repeated | | +| edges | [DataFlowSlice.Edges](#atom-DataFlowSlice-Edges) | repeated | | + + + + + ### DataFlowSlice.Paths -| Field | Type | Label | Description | -| ----- | ------------------------------------------------ | -------- | ------------------------- | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | | flows | [DataFlowSlice.Flows](#atom-DataFlowSlice-Flows) | repeated | Flows from source to sink | + + + + + ### DiffGraph - DiffGraphs can be created independently of each other and therefor when _adding_ nodes|edges, each DiffGraph has its own ID space. However, when removing nodes|edges, the nodeIds refer to the globally unique graph id space. -| Field | Type | Label | Description | -| ------- | ---------------------------------------- | -------- | ----------- | -| entries | [DiffGraph.Entry](#atom-DiffGraph-Entry) | repeated | | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| entries | [DiffGraph.Entry](#atom-DiffGraph-Entry) | repeated | | + + + + + ### DiffGraph.Entry -| Field | Type | Label | Description | -| -------------------- | ------------------------------------------------------------------ | ----- | ----------- | -| node | [CpgStruct.Node](#atom-CpgStruct-Node) | | | -| edge | [CpgStruct.Edge](#atom-CpgStruct-Edge) | | | -| node_property | [AdditionalNodeProperty](#atom-AdditionalNodeProperty) | | | -| edge_property | [AdditionalEdgeProperty](#atom-AdditionalEdgeProperty) | | | -| remove_node | [DiffGraph.RemoveNode](#atom-DiffGraph-RemoveNode) | | | -| remove_node_property | [DiffGraph.RemoveNodeProperty](#atom-DiffGraph-RemoveNodeProperty) | | | -| remove_edge | [DiffGraph.RemoveEdge](#atom-DiffGraph-RemoveEdge) | | | -| remove_edge_property | [DiffGraph.RemoveEdgeProperty](#atom-DiffGraph-RemoveEdgeProperty) | | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| node | [CpgStruct.Node](#atom-CpgStruct-Node) | | | +| edge | [CpgStruct.Edge](#atom-CpgStruct-Edge) | | | +| node_property | [AdditionalNodeProperty](#atom-AdditionalNodeProperty) | | | +| edge_property | [AdditionalEdgeProperty](#atom-AdditionalEdgeProperty) | | | +| remove_node | [DiffGraph.RemoveNode](#atom-DiffGraph-RemoveNode) | | | +| remove_node_property | [DiffGraph.RemoveNodeProperty](#atom-DiffGraph-RemoveNodeProperty) | | | +| remove_edge | [DiffGraph.RemoveEdge](#atom-DiffGraph-RemoveEdge) | | | +| remove_edge_property | [DiffGraph.RemoveEdgeProperty](#atom-DiffGraph-RemoveEdgeProperty) | | | + + + + + ### DiffGraph.RemoveEdge -| Field | Type | Label | Description | -| -------------- | -------------------------------------------------------- | ----- | ----------------------------------------------------------- | -| out_node_key | [int64](#int64) | | | -| in_node_key | [int64](#int64) | | | -| edge_type | [CpgStruct.Edge.EdgeType](#atom-CpgStruct-Edge-EdgeType) | | | -| propertiesHash | [bytes](#bytes) | | used to identify edges (since our edges don't have ids) | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| out_node_key | [int64](#int64) | | | +| in_node_key | [int64](#int64) | | | +| edge_type | [CpgStruct.Edge.EdgeType](#atom-CpgStruct-Edge-EdgeType) | | | +| propertiesHash | [bytes](#bytes) | | used to identify edges (since our edges don't have ids) | + + + + + ### DiffGraph.RemoveEdgeProperty -| Field | Type | Label | Description | -| -------------- | -------------------------------------------------------- | ----- | ----------------------------------------------------------- | -| out_node_key | [int64](#int64) | | | -| in_node_key | [int64](#int64) | | | -| edge_type | [CpgStruct.Edge.EdgeType](#atom-CpgStruct-Edge-EdgeType) | | | -| propertiesHash | [bytes](#bytes) | | used to identify edges (since our edges don't have ids) | -| property_name | [EdgePropertyName](#atom-EdgePropertyName) | | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| out_node_key | [int64](#int64) | | | +| in_node_key | [int64](#int64) | | | +| edge_type | [CpgStruct.Edge.EdgeType](#atom-CpgStruct-Edge-EdgeType) | | | +| propertiesHash | [bytes](#bytes) | | used to identify edges (since our edges don't have ids) | +| property_name | [EdgePropertyName](#atom-EdgePropertyName) | | | + + + + + ### DiffGraph.RemoveNode -| Field | Type | Label | Description | -| ----- | --------------- | ----- | ----------- | -| key | [int64](#int64) | | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| key | [int64](#int64) | | | + + + + + ### DiffGraph.RemoveNodeProperty -| Field | Type | Label | Description | -| ---------- | ------------------------------------------ | ----- | ----------- | -| key | [int64](#int64) | | | -| name | [NodePropertyName](#atom-NodePropertyName) | | | -| local_name | [string](#string) | | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| key | [int64](#int64) | | | +| name | [NodePropertyName](#atom-NodePropertyName) | | | +| local_name | [string](#string) | | | + + + + + ### DoubleList -| Field | Type | Label | Description | -| ------ | ----------------- | -------- | ----------- | -| values | [double](#double) | repeated | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| values | [double](#double) | repeated | | + + + + + ### FloatList -| Field | Type | Label | Description | -| ------ | --------------- | -------- | ----------- | -| values | [float](#float) | repeated | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| values | [float](#float) | repeated | | + + + + + ### IntList -| Field | Type | Label | Description | -| ------ | --------------- | -------- | ----------- | -| values | [int32](#int32) | repeated | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| values | [int32](#int32) | repeated | | + + + + + ### LongList -| Field | Type | Label | Description | -| ------ | --------------- | -------- | ----------- | -| values | [int64](#int64) | repeated | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| values | [int64](#int64) | repeated | | + + + + + + + + +### Nodes + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| id | [uint32](#uint32) | | Id of the node | +| label | [NodeType](#atom-NodeType) | | Label | +| name | [string](#string) | | Name of the call or identifier or parameter | +| fullName | [string](#string) | | Full name of the call | +| signature | [string](#string) | | Method signature of the call | +| isExternal | [bool](#bool) | | Boolean to indicate if this call belongs to an external method | +| code | [string](#string) | | Source code | +| typeFullName | [string](#string) | | Type full name | +| parentMethodName | [string](#string) | | Parent method name | +| parentFileName | [string](#string) | | Parent filename | +| parentPackageName | [string](#string) | | Parent package name | +| parentClassName | [string](#string) | | Parent class name | +| lineNumber | [uint32](#uint32) | | Line number | +| columnNumber | [uint32](#uint32) | | Column number | +| tags | [string](#string) | | Tags. Can contain simple names including package url | + + + + + ### PropertyValue - Message to store the property values such as string or int values -| Field | Type | Label | Description | -| -------------- | ------------------------------------ | ----- | ----------- | -| string_value | [string](#string) | | | -| bool_value | [bool](#bool) | | | -| int_value | [int32](#int32) | | | -| long_value | [int64](#int64) | | | -| float_value | [float](#float) | | | -| double_value | [double](#double) | | | -| string_list | [StringList](#atom-StringList) | | | -| bool_list | [BoolList](#atom-BoolList) | | | -| int_list | [IntList](#atom-IntList) | | | -| long_list | [LongList](#atom-LongList) | | | -| float_list | [FloatList](#atom-FloatList) | | | -| double_list | [DoubleList](#atom-DoubleList) | | | -| contained_refs | [ContainedRefs](#atom-ContainedRefs) | | | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| string_value | [string](#string) | | | +| bool_value | [bool](#bool) | | | +| int_value | [int32](#int32) | | | +| long_value | [int64](#int64) | | | +| float_value | [float](#float) | | | +| double_value | [double](#double) | | | +| string_list | [StringList](#atom-StringList) | | | +| bool_list | [BoolList](#atom-BoolList) | | | +| int_list | [IntList](#atom-IntList) | | | +| long_list | [LongList](#atom-LongList) | | | +| float_list | [FloatList](#atom-FloatList) | | | +| double_list | [DoubleList](#atom-DoubleList) | | | +| contained_refs | [ContainedRefs](#atom-ContainedRefs) | | | + + + + + + + + +### ReachableSlice +Reachables slices offers a list of reachable nodes based on automated tags exported from data dependency graph + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| reachables | [ReachableSlice.Reachables](#atom-ReachableSlice-Reachables) | | | +| purls | [ReachableSlice.Purls](#atom-ReachableSlice-Purls) | | | + + + + + + + + +### ReachableSlice.Purls + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| purls | [string](#string) | repeated | | + + + + + + + + +### ReachableSlice.Reachables + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| nodes | [Nodes](#atom-Nodes) | repeated | | + + + + + ### StringList -| Field | Type | Label | Description | -| ------ | ----------------- | -------- | ----------- | -| values | [string](#string) | repeated | | + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| values | [string](#string) | repeated | | + + + + + ### UsageSlice - The usages slice describes how a variable interacts within its procedure. This is perhaps a more "descriptive" slice in some ways. The variables are locals and parameters and the referencing identifiers are tracked to find what the variable calls and what calls it forms an argument of. There are two lists. There is a list of MethodUsageSlice with key "objectSlices" and a list of UserDefinedTypes with key "userDefinedTypes" ![Usage slices overview](./docs/Library%20Usages.png) -| Field | Type | Label | Description | -| ---------------- | ---------------------------------------------------------------- | -------- | ----------- | -| objectSlices | [UsageSlice.MethodUsageSlice](#atom-UsageSlice-MethodUsageSlice) | repeated | | -| userDefinedTypes | [UsageSlice.UserDefinedTypes](#atom-UsageSlice-UserDefinedTypes) | repeated | | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| objectSlices | [UsageSlice.MethodUsageSlice](#atom-UsageSlice-MethodUsageSlice) | repeated | | +| userDefinedTypes | [UsageSlice.UserDefinedTypes](#atom-UsageSlice-UserDefinedTypes) | repeated | | + + + + + ### UsageSlice.ArgToCalls - The calls this object is observed to be an argument of. -| Field | Type | Label | Description | -| -------------- | ----------------- | -------- | ------------------------------------------------------------- | -| callName | [string](#string) | | Call method name | -| resolvedMethod | [string](#string) | | Full name of the resolved method | -| paramTypes | [string](#string) | repeated | Types of the parameters | -| returnType | [string](#string) | | Return type | -| position | [uint32](#uint32) | | Argument position | -| isExternal | [bool](#bool) | | Boolean to indicate if the call belongs to an external method | -| lineNumber | [uint32](#uint32) | | Line number | -| columnNumber | [uint32](#uint32) | | Column number | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| callName | [string](#string) | | Call method name | +| resolvedMethod | [string](#string) | | Full name of the resolved method | +| paramTypes | [string](#string) | repeated | Types of the parameters | +| returnType | [string](#string) | | Return type | +| position | [uint32](#uint32) | | Argument position | +| isExternal | [bool](#bool) | | Boolean to indicate if the call belongs to an external method | +| lineNumber | [uint32](#uint32) | | Line number | +| columnNumber | [uint32](#uint32) | | Column number | + + + + + ### UsageSlice.DefinedBy - Places where the given symbol is defined -| Field | Type | Label | Description | -| -------------- | ----------------- | ----- | ------------------------------------------------------------------------- | -| name | [string](#string) | | variable or parameter name | -| typeFullName | [string](#string) | | Fullname of the data type | -| resolvedMethod | [string](#string) | | Method name | -| position | [uint32](#uint32) | | Position | -| isExternal | [bool](#bool) | | Boolean to indicate if the call belongs to an external method. label=CALL | -| lineNumber | [uint32](#uint32) | | Line number | -| columnNumber | [uint32](#uint32) | | Column number | -| label | [string](#string) | | Label describing the resolved method or position | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| name | [string](#string) | | variable or parameter name | +| typeFullName | [string](#string) | | Fullname of the data type | +| resolvedMethod | [string](#string) | | Method name | +| position | [uint32](#uint32) | | Position | +| isExternal | [bool](#bool) | | Boolean to indicate if the call belongs to an external method. label=CALL | +| lineNumber | [uint32](#uint32) | | Line number | +| columnNumber | [uint32](#uint32) | | Column number | +| label | [string](#string) | | Label describing the resolved method or position | + + + + + ### UsageSlice.Fields - Represents a local transfer of data via aliasing. The data defined is via some alias. -| Field | Type | Label | Description | -| ------------ | -------------------------------------------------- | ----- | ------------------------------------- | -| name | [string](#string) | | Name of the local variable | -| typeFullName | [string](#string) | | Full name of the type | -| lineNumber | [uint32](#uint32) | | Line number | -| columnNumber | [uint32](#uint32) | | Column number | -| label | [UsageSlice.LabelType](#atom-UsageSlice-LabelType) | | Type of the definition. Usually LOCAL | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| name | [string](#string) | | Name of the local variable | +| typeFullName | [string](#string) | | Full name of the type | +| lineNumber | [uint32](#uint32) | | Line number | +| columnNumber | [uint32](#uint32) | | Column number | +| label | [UsageSlice.LabelType](#atom-UsageSlice-LabelType) | | Type of the definition. Usually LOCAL | + + + + + ### UsageSlice.InvokedCalls - The calls this object is observed to call. -| Field | Type | Label | Description | -| -------------- | ----------------- | -------- | ------------------------------------------------------------- | -| callName | [string](#string) | | Call method name | -| resolvedMethod | [string](#string) | | Full name of the resolved method | -| paramTypes | [string](#string) | repeated | Types of the parameters | -| returnType | [string](#string) | | Return type | -| isExternal | [bool](#bool) | | Boolean to indicate if the call belongs to an external method | -| lineNumber | [uint32](#uint32) | | Line number | -| columnNumber | [uint32](#uint32) | | Column number | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| callName | [string](#string) | | Call method name | +| resolvedMethod | [string](#string) | | Full name of the resolved method | +| paramTypes | [string](#string) | repeated | Types of the parameters | +| returnType | [string](#string) | | Return type | +| isExternal | [bool](#bool) | | Boolean to indicate if the call belongs to an external method | +| lineNumber | [uint32](#uint32) | | Line number | +| columnNumber | [uint32](#uint32) | | Column number | + + + + + ### UsageSlice.MethodUsageSlice - Packages the object usage slices along with location and an optional method source code. -| Field | Type | Label | Description | -| ------------ | ---------------------------------------------------------------- | -------- | ----------------------------- | -| code | [string](#string) | | Raw source code of the method | -| fullName | [string](#string) | | Method full name | -| fileName | [string](#string) | | File name | -| lineNumber | [uint32](#uint32) | | Line number | -| columnNumber | [uint32](#uint32) | | Column number | -| usages | [UsageSlice.ObjectUsageSlice](#atom-UsageSlice-ObjectUsageSlice) | repeated | | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| code | [string](#string) | | Raw source code of the method | +| fullName | [string](#string) | | Method full name | +| fileName | [string](#string) | | File name | +| lineNumber | [uint32](#uint32) | | Line number | +| columnNumber | [uint32](#uint32) | | Column number | +| usages | [UsageSlice.ObjectUsageSlice](#atom-UsageSlice-ObjectUsageSlice) | repeated | | + + + + + ### UsageSlice.ObjectUsageSlice - Describes where and how the given external object/type is used -| Field | Type | Label | Description | -| ------------ | -------------------------------------------------------- | -------- | ----------- | -| targetObj | [UsageSlice.TargetObj](#atom-UsageSlice-TargetObj) | | | -| definedBy | [UsageSlice.DefinedBy](#atom-UsageSlice-DefinedBy) | | | -| invokedCalls | [UsageSlice.InvokedCalls](#atom-UsageSlice-InvokedCalls) | repeated | | -| argToCalls | [UsageSlice.ArgToCalls](#atom-UsageSlice-ArgToCalls) | repeated | | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| targetObj | [UsageSlice.TargetObj](#atom-UsageSlice-TargetObj) | | | +| definedBy | [UsageSlice.DefinedBy](#atom-UsageSlice-DefinedBy) | | | +| invokedCalls | [UsageSlice.InvokedCalls](#atom-UsageSlice-InvokedCalls) | repeated | | +| argToCalls | [UsageSlice.ArgToCalls](#atom-UsageSlice-ArgToCalls) | repeated | | + + + + + ### UsageSlice.Procedures - Details related to an observed call. -| Field | Type | Label | Description | -| -------------- | ----------------- | -------- | -------------------------------- | -| callName | [string](#string) | | Name of the method or call | -| resolvedMethod | [string](#string) | | Full name of the resolved method | -| paramTypes | [string](#string) | repeated | Types of the parameters | -| returnType | [string](#string) | | Type of the return value | -| lineNumber | [uint32](#uint32) | | Line number | -| columnNumber | [uint32](#uint32) | | Column number | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| callName | [string](#string) | | Name of the method or call | +| resolvedMethod | [string](#string) | | Full name of the resolved method | +| paramTypes | [string](#string) | repeated | Types of the parameters | +| returnType | [string](#string) | | Type of the return value | +| lineNumber | [uint32](#uint32) | | Line number | +| columnNumber | [uint32](#uint32) | | Column number | + + + + + ### UsageSlice.TargetObj - Represents a source of data-generation, i.e., where data is defined and can be assigned to some variable or used in an argument. -| Field | Type | Label | Description | -| ------------ | -------------------------------------------------- | ----- | ------------------------------------------------------------------------- | -| name | [string](#string) | | variable or parameter name | -| typeFullName | [string](#string) | | Fullname of the data type | -| position | [uint32](#uint32) | | Position of the parameter or argument | -| isExternal | [bool](#bool) | | Boolean to indicate if the call belongs to an external method. label=CALL | -| lineNumber | [uint32](#uint32) | | Line number in the file | -| columnNumber | [uint32](#uint32) | | Column number | -| label | [UsageSlice.LabelType](#atom-UsageSlice-LabelType) | | | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| name | [string](#string) | | variable or parameter name | +| typeFullName | [string](#string) | | Fullname of the data type | +| position | [uint32](#uint32) | | Position of the parameter or argument | +| isExternal | [bool](#bool) | | Boolean to indicate if the call belongs to an external method. label=CALL | +| lineNumber | [uint32](#uint32) | | Line number in the file | +| columnNumber | [uint32](#uint32) | | Column number | +| label | [UsageSlice.LabelType](#atom-UsageSlice-LabelType) | | | + + + + + ### UsageSlice.UserDefinedTypes - Describes custom types defined within the application. -| Field | Type | Label | Description | -| ------------ | ---------------------------------------------------- | -------- | ---------------- | -| name | [string](#string) | | Name of the type | -| fields | [UsageSlice.Fields](#atom-UsageSlice-Fields) | repeated | | -| procedures | [UsageSlice.Procedures](#atom-UsageSlice-Procedures) | repeated | | -| fileName | [string](#string) | | File name | -| lineNumber | [uint32](#uint32) | | Line number | -| columnNumber | [uint32](#uint32) | | Column number | + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| name | [string](#string) | | Name of the type | +| fields | [UsageSlice.Fields](#atom-UsageSlice-Fields) | repeated | | +| procedures | [UsageSlice.Procedures](#atom-UsageSlice-Procedures) | repeated | | +| fileName | [string](#string) | | File name | +| lineNumber | [uint32](#uint32) | | Line number | +| columnNumber | [uint32](#uint32) | | Column number | + + + + + + + ### CONTROL_STRUCTURE_TYPES - Enum representing the control structure types -| Name | Number | Description | -| ------------------------------ | ------ | ---------------------------------------------------------------------------------------------------------------- | -| UNKNOWN_CONTROL_STRUCTURE_TYPE | 0 | | -| BREAK | 1 | Represents a break statement. Labeled breaks are expected to have a JUMP_LABEL node AST child with ORDER 1 | -| CONTINUE | 2 | Represents a continue statement. Labeled continues are expected to have a JUMP_LABEL node AST child with ORDER 1 | -| WHILE | 3 | Represents a while statement | -| DO | 4 | Represents a do statement | -| FOR | 5 | Represents a for statement | -| GOTO | 6 | Represents a goto statement | -| IF | 7 | Represents an if statement | -| ELSE | 8 | Represents an else statement | -| SWITCH | 9 | Represents a switch statement | -| TRY | 10 | Represents a try statement | -| THROW | 11 | Represents a throw statement | -| MATCH | 12 | Represents a match expression | -| YIELD | 13 | Represents a yield expression | +| Name | Number | Description | +| ---- | ------ | ----------- | +| UNKNOWN_CONTROL_STRUCTURE_TYPE | 0 | | +| BREAK | 1 | Represents a break statement. Labeled breaks are expected to have a JUMP_LABEL node AST child with ORDER 1 | +| CONTINUE | 2 | Represents a continue statement. Labeled continues are expected to have a JUMP_LABEL node AST child with ORDER 1 | +| WHILE | 3 | Represents a while statement | +| DO | 4 | Represents a do statement | +| FOR | 5 | Represents a for statement | +| GOTO | 6 | Represents a goto statement | +| IF | 7 | Represents an if statement | +| ELSE | 8 | Represents an else statement | +| SWITCH | 9 | Represents a switch statement | +| TRY | 10 | Represents a try statement | +| THROW | 11 | Represents a throw statement | +| MATCH | 12 | Represents a match expression | +| YIELD | 13 | Represents a yield expression | + + ### CpgStruct.Edge.EdgeType - Edge type. -| Name | Number | Description | -| ------------------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UNKNOWN_EDGE_TYPE | 0 | | -| AST | 3 | This edge connects a parent node to its child in the syntax tree. | -| CALL | 6 | This edge connects call sites, i.e., nodes with the type `CALL`, to the method node that represent the method they invoke. The frontend MAY create `CALL` edges but is not required to do so. Instead, of the `METHOD_FULL_NAME` field of the `CALL` node is set correctly, `CALL` edges are created automatically as the CPG is first loaded. | -| REF | 10 | This edge indicates that the source node is an identifier that denotes access to the destination node. For example, an identifier may reference a local variable. | -| TAGGED_BY | 11 | Edges from nodes to the tags they are tagged by. | -| PARAMETER_LINK | 12 | This edge connects a method input parameter to the corresponding method output parameter. | -| CFG | 19 | This edge indicates control flow from the source to the destination node. | -| EVAL_TYPE | 21 | This edge connects a node to its evaluation type. | -| BINDS_TO | 22 | This edge connects type arguments to type parameters to indicate that the type argument is used to instantiate the type parameter. | -| INHERITS_FROM | 23 | Inheritance relation between a type declaration and a type. This edge MUST NOT be created by the language frontend as it is automatically created from `INHERITS_FROM_TYPE_FULL_NAME` fields then the CPG is first loaded. | -| CONTAINS | 28 | This edge connects a node to the method that contains it. | -| CAPTURE | 40 | Represents the capturing of a variable into a closure | -| CAPTURED_BY | 41 | Connection between a captured LOCAL and the corresponding CLOSURE_BINDING | -| RECEIVER | 55 | Similar to `ARGUMENT` edges, `RECEIVER` edges connect call sites to their receiver arguments. A receiver argument is the object on which a method operates, that is, it is the expression that is assigned to the `this` pointer as control is transferred to the method. | -| CONDITION | 56 | The edge connects control structure nodes to the expressions that holds their conditions. | -| REACHING_DEF | 137 | A reaching definition edge indicates that a variable produced at the source node reaches the destination node without being reassigned on the way. The `VARIABLE` property indicates which variable is propagated. | -| ALIAS_OF | 138 | This edge represents an alias relation between a type declaration and a type. The language frontend MUST NOT create `ALIAS_OF` edges as they are created automatically based on `ALIAS_TYPE_FULL_NAME` fields when the CPG is first loaded. | -| BINDS | 155 | This edge connects a type declaration (`TYPE_DECL`) with a binding node (`BINDING`) and indicates that the type declaration has the binding represented by the binding node, in other words, there is a (name, signature) pair that can be resolved for the type declaration as stored in the binding node. | -| ARGUMENT | 156 | Argument edges connect call sites (node type `CALL`) to their arguments (node type `EXPRESSION`) as well as `RETURN` nodes to the expressions that return. | -| SOURCE_FILE | 157 | This edge connects a node to the node that represents its source file. These edges MUST not be created by the language frontend but are automatically created based on `FILENAME` fields. | -| DOMINATE | 181 | This edge indicates that the source node immediately dominates the destination node. | -| POST_DOMINATE | 182 | This edge indicates that the source node immediately post dominates the destination node. | -| CDG | 183 | A CDG edge expresses that the destination node is control dependent on the source node. | -| IMPORTS | 23663 | Edge from imports to dependencies | -| IS_CALL_FOR_IMPORT | 23664 | Edge from CALL statement in the AST to the IMPORT. We use this edge to traverse from the logical representation of the IMPORT to the corresponding import statement in the AST. | +| Name | Number | Description | +| ---- | ------ | ----------- | +| UNKNOWN_EDGE_TYPE | 0 | | +| AST | 3 | This edge connects a parent node to its child in the syntax tree. | +| CALL | 6 | This edge connects call sites, i.e., nodes with the type `CALL`, to the method node that represent the method they invoke. The frontend MAY create `CALL` edges but is not required to do so. Instead, of the `METHOD_FULL_NAME` field of the `CALL` node is set correctly, `CALL` edges are created automatically as the CPG is first loaded. | +| REF | 10 | This edge indicates that the source node is an identifier that denotes access to the destination node. For example, an identifier may reference a local variable. | +| TAGGED_BY | 11 | Edges from nodes to the tags they are tagged by. | +| PARAMETER_LINK | 12 | This edge connects a method input parameter to the corresponding method output parameter. | +| CFG | 19 | This edge indicates control flow from the source to the destination node. | +| EVAL_TYPE | 21 | This edge connects a node to its evaluation type. | +| BINDS_TO | 22 | This edge connects type arguments to type parameters to indicate that the type argument is used to instantiate the type parameter. | +| INHERITS_FROM | 23 | Inheritance relation between a type declaration and a type. This edge MUST NOT be created by the language frontend as it is automatically created from `INHERITS_FROM_TYPE_FULL_NAME` fields then the CPG is first loaded. | +| CONTAINS | 28 | This edge connects a node to the method that contains it. | +| CAPTURE | 40 | Represents the capturing of a variable into a closure | +| CAPTURED_BY | 41 | Connection between a captured LOCAL and the corresponding CLOSURE_BINDING | +| RECEIVER | 55 | Similar to `ARGUMENT` edges, `RECEIVER` edges connect call sites to their receiver arguments. A receiver argument is the object on which a method operates, that is, it is the expression that is assigned to the `this` pointer as control is transferred to the method. | +| CONDITION | 56 | The edge connects control structure nodes to the expressions that holds their conditions. | +| REACHING_DEF | 137 | A reaching definition edge indicates that a variable produced at the source node reaches the destination node without being reassigned on the way. The `VARIABLE` property indicates which variable is propagated. | +| ALIAS_OF | 138 | This edge represents an alias relation between a type declaration and a type. The language frontend MUST NOT create `ALIAS_OF` edges as they are created automatically based on `ALIAS_TYPE_FULL_NAME` fields when the CPG is first loaded. | +| BINDS | 155 | This edge connects a type declaration (`TYPE_DECL`) with a binding node (`BINDING`) and indicates that the type declaration has the binding represented by the binding node, in other words, there is a (name, signature) pair that can be resolved for the type declaration as stored in the binding node. | +| ARGUMENT | 156 | Argument edges connect call sites (node type `CALL`) to their arguments (node type `EXPRESSION`) as well as `RETURN` nodes to the expressions that return. | +| SOURCE_FILE | 157 | This edge connects a node to the node that represents its source file. These edges MUST not be created by the language frontend but are automatically created based on `FILENAME` fields. | +| DOMINATE | 181 | This edge indicates that the source node immediately dominates the destination node. | +| POST_DOMINATE | 182 | This edge indicates that the source node immediately post dominates the destination node. | +| CDG | 183 | A CDG edge expresses that the destination node is control dependent on the source node. | +| IMPORTS | 23663 | Edge from imports to dependencies | +| IS_CALL_FOR_IMPORT | 23664 | Edge from CALL statement in the AST to the IMPORT. We use this edge to traverse from the logical representation of the IMPORT to the corresponding import statement in the AST. | + + ### DispatchTypes - Enum representing the dispatch types -| Name | Number | Description | -| --------------------- | ------ | --------------------------------------------------------------------------------- | -| UNKNOWN_DISPATCH_TYPE | 0 | | -| STATIC_DISPATCH | 1 | For statically dispatched calls the call target is known before program execution | -| DYNAMIC_DISPATCH | 2 | For dynamically dispatched calls the target is determined during runtime | -| INLINED | 3 | For macro expansions, code is inlined. | +| Name | Number | Description | +| ---- | ------ | ----------- | +| UNKNOWN_DISPATCH_TYPE | 0 | | +| STATIC_DISPATCH | 1 | For statically dispatched calls the call target is known before program execution | +| DYNAMIC_DISPATCH | 2 | For dynamically dispatched calls the target is determined during runtime | +| INLINED | 3 | For macro expansions, code is inlined. | + + ### EdgePropertyName - Enum for the name of an edge -| Name | Number | Description | -| --------------------- | ------ | ------------------------------------------------------------------------------------ | -| UNKNOWN_EDGE_PROPERTY | 0 | | -| VARIABLE | 11 | This edge property represents the variable propagated by a reaching definition edge. | +| Name | Number | Description | +| ---- | ------ | ----------- | +| UNKNOWN_EDGE_PROPERTY | 0 | | +| VARIABLE | 11 | This edge property represents the variable propagated by a reaching definition edge. | + + ### EvaluationStrategies - Enum representing the evaluation strategy of the underlying parameter or method or literal. -| Name | Number | Description | -| --------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| UNKNOWN_EVALUATION_STRATEGY | 0 | | -| BY_REFERENCE | 1 | A parameter or return of a function is passed by reference which means an address is used behind the scenes | -| BY_SHARING | 2 | Only applicable to object parameter or return values. The pointer to the object is passed by value but the object itself is not copied and changes to it are thus propagated out of the method context | -| BY_VALUE | 3 | A parameter or return of a function passed by value which means a flat copy is used | +| Name | Number | Description | +| ---- | ------ | ----------- | +| UNKNOWN_EVALUATION_STRATEGY | 0 | | +| BY_REFERENCE | 1 | A parameter or return of a function is passed by reference which means an address is used behind the scenes | +| BY_SHARING | 2 | Only applicable to object parameter or return values. The pointer to the object is passed by value but the object itself is not copied and changes to it are thus propagated out of the method context | +| BY_VALUE | 3 | A parameter or return of a function passed by value which means a flat copy is used | + + ### LANGUAGES - Enum to represent the frontend language -| Name | Number | Description | -| ---------------- | ------ | ------------------------------------------ | -| UNKNOWN_LANGUAGE | 0 | Unknown language | -| JAVA | 1 | Java | -| JAVASCRIPT | 2 | JavaScript and TypeScript | -| GOLANG | 3 | Go | -| CSHARP | 4 | csharp / dotnet | -| C | 5 | C/C++ | -| PYTHON | 6 | Python | -| LLVM | 7 | llvm | -| PHP | 8 | PHP | -| FUZZY_TEST_LANG | 9 | Test | -| GHIDRA | 10 | generic reverse engineering framework | -| KOTLIN | 11 | Kotlin | -| NEWC | 12 | Eclipse CDT based parser for C/C++ | -| JAVASRC | 13 | Source-based front-end for Java | -| PYTHONSRC | 14 | Source-based front-end for Python | -| JSSRC | 15 | Source-based JS frontend based on Babel | -| SOLIDITY | 16 | Solidity language frontend | -| RUBYSRC | 17 | Source-based frontend for Ruby | +| Name | Number | Description | +| ---- | ------ | ----------- | +| UNKNOWN_LANGUAGE | 0 | Unknown language | +| JAVA | 1 | Java | +| JAVASCRIPT | 2 | JavaScript and TypeScript | +| GOLANG | 3 | Go | +| CSHARP | 4 | csharp / dotnet | +| C | 5 | C/C++ | +| PYTHON | 6 | Python | +| LLVM | 7 | llvm | +| PHP | 8 | PHP | +| FUZZY_TEST_LANG | 9 | Test | +| GHIDRA | 10 | generic reverse engineering framework | +| KOTLIN | 11 | Kotlin | +| NEWC | 12 | Eclipse CDT based parser for C/C++ | +| JAVASRC | 13 | Source-based front-end for Java | +| PYTHONSRC | 14 | Source-based front-end for Python | +| JSSRC | 15 | Source-based JS frontend based on Babel | +| SOLIDITY | 16 | Solidity language frontend | +| RUBYSRC | 17 | Source-based frontend for Ruby | + + ### ModifierTypes - Enum for the possible modifier types for symbols, methods and class nodes -| Name | Number | Description | -| --------------------- | ------ | ------------------------ | -| UNKNOWN_MODIFIER_TYPE | 0 | | -| STATIC | 1 | The static modifier | -| PUBLIC | 2 | The public modifier | -| PROTECTED | 3 | The protected modifier | -| PRIVATE | 4 | The private modifier | -| ABSTRACT | 5 | The abstract modifier | -| NATIVE | 6 | The native modifier | -| CONSTRUCTOR | 7 | The constructor modifier | -| VIRTUAL | 8 | The virtual modifier | -| INTERNAL | 9 | The internal modifier | -| FINAL | 10 | The final modifier | -| READONLY | 11 | The readonly modifier | +| Name | Number | Description | +| ---- | ------ | ----------- | +| UNKNOWN_MODIFIER_TYPE | 0 | | +| STATIC | 1 | The static modifier | +| PUBLIC | 2 | The public modifier | +| PROTECTED | 3 | The protected modifier | +| PRIVATE | 4 | The private modifier | +| ABSTRACT | 5 | The abstract modifier | +| NATIVE | 6 | The native modifier | +| CONSTRUCTOR | 7 | The constructor modifier | +| VIRTUAL | 8 | The virtual modifier | +| INTERNAL | 9 | The internal modifier | +| FINAL | 10 | The final modifier | +| READONLY | 11 | The readonly modifier | + + ### NodePropertyName - Enum for the name of a node property -| Name | Number | Description | -| ---------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UNKNOWN_NODE_PROPERTY | 0 | | -| LINE_NUMBER | 2 | This optional field provides the line number of the program construct represented by the node. | -| PARSER_TYPE_NAME | 3 | AST node type name emitted by parser. | -| ORDER | 4 | This integer indicates the position of the node among its siblings in the AST. The left-most child has an order of 0. | -| NAME | 5 | Name of represented object, e.g., method name (e.g. "run") | -| FULL_NAME | 6 | 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. | -| IS_EXTERNAL | 7 | 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) | -| VALUE | 8 | This property denotes a string value as used in a key-value pair. | -| COLUMN_NUMBER | 11 | This optional fields provides the column number of the program construct represented by the node. | -| LINE_NUMBER_END | 12 | This optional fields provides the line number at which the program construct represented by the node ends. | -| VERSION | 13 | 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. | -| EVALUATION_STRATEGY | 15 | 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. | -| COLUMN_NUMBER_END | 16 | This optional fields provides the column number at which the program construct represented by the node ends. | -| LANGUAGE | 19 | 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. | -| CONTENT | 20 | Certain files, e.g., configuration files, may be included in the CPG as-is. For such files, the `CONTENT` field contains the files content. | -| CODE | 21 | This field holds the code snippet that the node represents. | -| SIGNATURE | 22 | 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. | -| DISPATCH_TYPE | 25 | 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. | -| MODIFIER_TYPE | 26 | The modifier type is a free-form string. The following are known modifier types: `STATIC`, `PUBLIC`, `PROTECTED`, `PRIVATE`, `ABSTRACT`, `NATIVE`, `CONSTRUCTOR`, `VIRTUAL`. | -| CONTROL_STRUCTURE_TYPE | 27 | 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. | -| ARGUMENT_INDEX | 40 | 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. | -| CLOSURE_BINDING_ID | 50 | Identifier which uniquely describes a CLOSURE_BINDING. This property is used to match captured LOCAL nodes with the corresponding CLOSURE_BINDING nodes. | -| TYPE_FULL_NAME | 51 | 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<Integer>`, rather than `java.util.List[T]`. If the type cannot be determined, this field should be set to the empty string. | -| TYPE_DECL_FULL_NAME | 52 | 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. | -| INHERITS_FROM_TYPE_FULL_NAME | 53 | 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. | -| METHOD_FULL_NAME | 54 | 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. | -| AST_PARENT_TYPE | 56 | 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. | -| AST_PARENT_FULL_NAME | 57 | This field holds the FULL_NAME of the AST parent of an entity. | -| DEPENDENCY_GROUP_ID | 58 | The group ID for a dependency | -| SYMBOL | 100 | Symbols | -| METHOD_SHORT_NAME | 102 | Method short name. | -| PACKAGE_NAME | 103 | Method package name. | -| CLASS_NAME | 104 | Method class name. | -| NODE_LABEL | 105 | Label for the node which could be code. | -| FILENAME | 106 | 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 `<unknown>` 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. | -| OVERLAYS | 118 | 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. | -| HASH | 120 | 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. | -| ARGUMENT_NAME | 130 | 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. | -| KEY | 131 | This property denotes a key of a key-value pair. | -| CLASS_SHORT_NAME | 132 | Class short name | -| ALIAS_TYPE_FULL_NAME | 158 | This property holds the fully qualified name of the type that the node is a type alias of. | -| CLOSURE_ORIGINAL_NAME | 159 | The original name of the (potentially mangled) captured variable | -| IS_VARIADIC | 221 | 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. | -| ROOT | 1199 | The path to the root directory of the source/binary this CPG is generated from. | -| DYNAMIC_TYPE_HINT_FULL_NAME | 1591 | Type hint for the dynamic type. | -| INDEX | 2223 | 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. | -| CANONICAL_NAME | 2001092 | 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). | -| CONTAINED_REF | 2007161 | 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. | +| Name | Number | Description | +| ---- | ------ | ----------- | +| UNKNOWN_NODE_PROPERTY | 0 | | +| LINE_NUMBER | 2 | This optional field provides the line number of the program construct represented by the node. | +| PARSER_TYPE_NAME | 3 | AST node type name emitted by parser. | +| ORDER | 4 | This integer indicates the position of the node among its siblings in the AST. The left-most child has an order of 0. | +| NAME | 5 | Name of represented object, e.g., method name (e.g. "run") | +| FULL_NAME | 6 | 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. | +| IS_EXTERNAL | 7 | 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) | +| VALUE | 8 | This property denotes a string value as used in a key-value pair. | +| COLUMN_NUMBER | 11 | This optional fields provides the column number of the program construct represented by the node. | +| LINE_NUMBER_END | 12 | This optional fields provides the line number at which the program construct represented by the node ends. | +| VERSION | 13 | 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. | +| EVALUATION_STRATEGY | 15 | 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. | +| COLUMN_NUMBER_END | 16 | This optional fields provides the column number at which the program construct represented by the node ends. | +| LANGUAGE | 19 | 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. | +| CONTENT | 20 | Certain files, e.g., configuration files, may be included in the CPG as-is. For such files, the `CONTENT` field contains the files content. | +| CODE | 21 | This field holds the code snippet that the node represents. | +| SIGNATURE | 22 | 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. | +| DISPATCH_TYPE | 25 | 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. | +| MODIFIER_TYPE | 26 | The modifier type is a free-form string. The following are known modifier types: `STATIC`, `PUBLIC`, `PROTECTED`, `PRIVATE`, `ABSTRACT`, `NATIVE`, `CONSTRUCTOR`, `VIRTUAL`. | +| CONTROL_STRUCTURE_TYPE | 27 | 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. | +| ARGUMENT_INDEX | 40 | 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. | +| CLOSURE_BINDING_ID | 50 | Identifier which uniquely describes a CLOSURE_BINDING. This property is used to match captured LOCAL nodes with the corresponding CLOSURE_BINDING nodes. | +| TYPE_FULL_NAME | 51 | 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<Integer>`, rather than `java.util.List[T]`. If the type cannot be determined, this field should be set to the empty string. | +| TYPE_DECL_FULL_NAME | 52 | 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. | +| INHERITS_FROM_TYPE_FULL_NAME | 53 | 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. | +| METHOD_FULL_NAME | 54 | 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. | +| AST_PARENT_TYPE | 56 | 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. | +| AST_PARENT_FULL_NAME | 57 | This field holds the FULL_NAME of the AST parent of an entity. | +| DEPENDENCY_GROUP_ID | 58 | The group ID for a dependency | +| SYMBOL | 100 | Symbols | +| METHOD_SHORT_NAME | 102 | Method short name. | +| PACKAGE_NAME | 103 | Method package name. | +| CLASS_NAME | 104 | Method class name. | +| NODE_LABEL | 105 | Label for the node which could be code. | +| FILENAME | 106 | 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 `<unknown>` 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. | +| OVERLAYS | 118 | 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. | +| HASH | 120 | 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. | +| ARGUMENT_NAME | 130 | 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. | +| KEY | 131 | This property denotes a key of a key-value pair. | +| CLASS_SHORT_NAME | 132 | Class short name | +| ALIAS_TYPE_FULL_NAME | 158 | This property holds the fully qualified name of the type that the node is a type alias of. | +| CLOSURE_ORIGINAL_NAME | 159 | The original name of the (potentially mangled) captured variable | +| IS_VARIADIC | 221 | 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. | +| ROOT | 1199 | The path to the root directory of the source/binary this CPG is generated from. | +| DYNAMIC_TYPE_HINT_FULL_NAME | 1591 | Type hint for the dynamic type. | +| INDEX | 2223 | 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. | +| CANONICAL_NAME | 2001092 | 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). | +| CONTAINED_REF | 2007161 | 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. | + + ### NodeType - 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. 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`. -| Name | Number | Description | -| --------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| UNKNOWN_NODE_TYPE | 0 | | -| METHOD | 1 | Method Nodes | -| METHOD_RETURN | 3 | 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. | -| ANNOTATION | 5 | 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. | -| ANNOTATION_PARAMETER_ASSIGN | 6 | Assignment of annotation argument to annotation parameter | -| ANNOTATION_PARAMETER | 7 | Formal annotation parameter | -| LITERAL | 8 | 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`. | -| MEMBER | 9 | 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`. | -| ARRAY_INITIALIZER | 14 | Initialization construct for arrays | -| CALL | 15 | 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. | -| LOCAL | 23 | 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`. | -| TAG | 24 | This node represents a tag. | -| LOCATION | 25 | A location node summarizes a source code location. | -| IDENTIFIER | 27 | 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`. | -| RETURN | 30 | 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. | -| BLOCK | 31 | 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". | -| METHOD_PARAMETER_OUT | 33 | 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. | -| METHOD_PARAMETER_IN | 34 | 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. | -| DEPENDENCY | 35 | This node represents a dependency | -| FILE | 38 | 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 MUST contain exactly one File node. 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. Each CPG MUST contain a special file node with name set to `<unknown>`. This node is a placeholder used in cases where a file cannot be determined at compile time. As an example, consider external library functions. As their code is not available on CPG construction, the file name is unknown. File nodes MUST NOT be created by the language frontend. Instead, the language frontend is assumed to fill out the `FILENAME` field wherever possible, allowing File nodes to be created automatically upon first loading the CPG. | -| META_DATA | 39 | 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. | -| NAMESPACE | 40 | 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. | -| NAMESPACE_BLOCK | 41 | 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. | +| Name | Number | Description | +| ---- | ------ | ----------- | +| UNKNOWN_NODE_TYPE | 0 | | +| METHOD | 1 | Method Nodes | +| METHOD_RETURN | 3 | 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. | +| ANNOTATION | 5 | 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. | +| ANNOTATION_PARAMETER_ASSIGN | 6 | Assignment of annotation argument to annotation parameter | +| ANNOTATION_PARAMETER | 7 | Formal annotation parameter | +| LITERAL | 8 | 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`. | +| MEMBER | 9 | 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`. | +| ARRAY_INITIALIZER | 14 | Initialization construct for arrays | +| CALL | 15 | 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. | +| LOCAL | 23 | 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`. | +| TAG | 24 | This node represents a tag. | +| LOCATION | 25 | A location node summarizes a source code location. | +| IDENTIFIER | 27 | 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`. | +| RETURN | 30 | 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. | +| BLOCK | 31 | 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". | +| METHOD_PARAMETER_OUT | 33 | 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. | +| METHOD_PARAMETER_IN | 34 | 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. | +| DEPENDENCY | 35 | This node represents a dependency | +| FILE | 38 | 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 MUST contain exactly one File node. 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. Each CPG MUST contain a special file node with name set to `<unknown>`. This node is a placeholder used in cases where a file cannot be determined at compile time. As an example, consider external library functions. As their code is not available on CPG construction, the file name is unknown. File nodes MUST NOT be created by the language frontend. Instead, the language frontend is assumed to fill out the `FILENAME` field wherever possible, allowing File nodes to be created automatically upon first loading the CPG. | +| META_DATA | 39 | 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. | +| NAMESPACE | 40 | 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. | +| NAMESPACE_BLOCK | 41 | 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`. | | UNKNOWN | 44 | 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`. | @@ -804,39 +1092,50 @@ The `NAME` field contains the namespace name in a human-readable format. The nam | COMMENT | 511 | A source code comment | | FIELD_IDENTIFIER | 2001081 | 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. | + + ### UsageSlice.LabelType - Label type. -| Name | Number | Description | -| ---------- | ------ | ------------------------------------------------------------------------------------- | -| ANY | 0 | Any is used to represent multiple mechanisms | -| LOCAL | 1 | Represents a local transfer of data via aliasing. The data defined is via some alias. | -| LITERAL | 2 | Represents a literal. | -| PARAM | 3 | Represents data introduced via a parameter. | -| CALL | 4 | Represents data introduced by the return value of a call. | -| IDENTIFIER | 5 | Identifier | -| TYPE_REF | 6 | Type ref | -| UNKNOWN | 10 | Represents data introduced by an unhandled data structure. | +| Name | Number | Description | +| ---- | ------ | ----------- | +| ANY | 0 | Any is used to represent multiple mechanisms | +| LOCAL | 1 | Represents a local transfer of data via aliasing. The data defined is via some alias. | +| LITERAL | 2 | Represents a literal. | +| PARAM | 3 | Represents data introduced via a parameter. | +| CALL | 4 | Represents data introduced by the return value of a call. | +| IDENTIFIER | 5 | Identifier | +| TYPE_REF | 6 | Type ref | +| UNKNOWN | 10 | Represents data introduced by an unhandled data structure. | + + + + + + + + + ## Scalar Value Types -| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby | -| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ---------- | ----------- | ------- | ---------- | -------------- | ------------------------------ | -| double | | double | double | float | float64 | double | float | Float | -| float | | float | float | float | float32 | float | float | Float | -| int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | -| int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum | -| uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) | -| uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) | -| sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | -| sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum | -| fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) | -| fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum | -| sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | -| sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum | -| bool | | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass | -| string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) | -| bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) | +| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby | +| ----------- | ----- | --- | ---- | ------ | -- | -- | --- | ---- | +| double | | double | double | float | float64 | double | float | Float | +| float | | float | float | float | float32 | float | float | Float | +| int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | +| int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum | +| uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) | +| uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) | +| sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | +| sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum | +| fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) | +| fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum | +| sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | +| sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum | +| bool | | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass | +| string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) | +| bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) | + diff --git a/specification/gen-bindings.sh b/specification/gen-bindings.sh index bf467e2..fe11102 100644 --- a/specification/gen-bindings.sh +++ b/specification/gen-bindings.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash pip install "betterproto[compiler]" -curl -LO https://github.com/join-com/protoc-gen-ts/releases/download/0.7.1/protoc-gen-ts.linux.amd64 -chmod +x protoc-gen-ts.linux.amd64 -mv protoc-gen-ts.linux.amd64 /usr/local/bin/protoc-gen-ts +curl -LO https://github.com/join-com/protoc-gen-ts/releases/download/2.3.0/protoc-gen-tsx.linux.amd64 +chmod +x protoc-gen-tsx.linux.amd64 +sudo mv protoc-gen-tsx.linux.amd64 /usr/local/bin/protoc-gen-tsx protoc -I . --python_betterproto_out=bindings/python atom.proto -protoc -I . --ts_out=bindings/ts atom.proto +protoc -I . --tsx_out=bindings/ts atom.proto protoc -I . --java_out=bindings/java atom.proto protoc -I . --go_out=bindings/go atom.proto diff --git a/specification/schemas/DataFlowSlice.json b/specification/schemas/DataFlowSlice.json index 0d2b18c..c4c3ac7 100644 --- a/specification/schemas/DataFlowSlice.json +++ b/specification/schemas/DataFlowSlice.json @@ -115,7 +115,7 @@ "properties": { "nodes": { "items": { - "$ref": "#/definitions/atom.DataFlowSlice.Nodes" + "$ref": "#/definitions/atom.Nodes" }, "additionalProperties": false, "type": "array" @@ -132,7 +132,22 @@ "type": "object", "title": "Graph" }, - "atom.DataFlowSlice.Nodes": { + "atom.DataFlowSlice.Paths": { + "properties": { + "flows": { + "items": { + "$ref": "#/definitions/atom.DataFlowSlice.Flows" + }, + "additionalProperties": false, + "type": "array", + "description": "Flows from source to sink" + } + }, + "additionalProperties": false, + "type": "object", + "title": "Paths" + }, + "atom.Nodes": { "properties": { "id": { "type": "integer", @@ -287,26 +302,15 @@ "columnNumber": { "type": "integer", "description": "Column number" + }, + "tags": { + "type": "string", + "description": "Tags. Can contain simple names including package url" } }, "additionalProperties": false, "type": "object", "title": "Nodes" - }, - "atom.DataFlowSlice.Paths": { - "properties": { - "flows": { - "items": { - "$ref": "#/definitions/atom.DataFlowSlice.Flows" - }, - "additionalProperties": false, - "type": "array", - "description": "Flows from source to sink" - } - }, - "additionalProperties": false, - "type": "object", - "title": "Paths" } } } \ No newline at end of file diff --git a/specification/schemas/Nodes.json b/specification/schemas/Nodes.json new file mode 100644 index 0000000..71df312 --- /dev/null +++ b/specification/schemas/Nodes.json @@ -0,0 +1,171 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/Nodes", + "definitions": { + "Nodes": { + "properties": { + "id": { + "type": "integer", + "description": "Id of the node" + }, + "label": { + "enum": [ + "UNKNOWN_NODE_TYPE", + 0, + "METHOD", + 1, + "METHOD_RETURN", + 3, + "ANNOTATION", + 5, + "ANNOTATION_PARAMETER_ASSIGN", + 6, + "ANNOTATION_PARAMETER", + 7, + "LITERAL", + 8, + "MEMBER", + 9, + "ARRAY_INITIALIZER", + 14, + "CALL", + 15, + "LOCAL", + 23, + "TAG", + 24, + "LOCATION", + 25, + "IDENTIFIER", + 27, + "RETURN", + 30, + "BLOCK", + 31, + "METHOD_PARAMETER_OUT", + 33, + "METHOD_PARAMETER_IN", + 34, + "DEPENDENCY", + 35, + "FILE", + 38, + "META_DATA", + 39, + "NAMESPACE", + 40, + "NAMESPACE_BLOCK", + 41, + "UNKNOWN", + 44, + "TYPE", + 45, + "TYPE_DECL", + 46, + "TYPE_PARAMETER", + 47, + "TYPE_ARGUMENT", + 48, + "ANNOTATION_LITERAL", + 49, + "CONFIG_FILE", + 50, + "BINDING", + 146, + "TAG_NODE_PAIR", + 208, + "FINDING", + 214, + "KEY_VALUE_PAIR", + 217, + "MODIFIER", + 300, + "METHOD_REF", + 333, + "CLOSURE_BINDING", + 334, + "TYPE_REF", + 335, + "CONTROL_STRUCTURE", + 339, + "JUMP_TARGET", + 340, + "JUMP_LABEL", + 341, + "TEMPLATE_DOM", + 417, + "COMMENT", + 511, + "FIELD_IDENTIFIER", + 2001081 + ], + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "title": "Node Type", + "description": "* 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. 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`." + }, + "name": { + "type": "string", + "description": "Name of the call or identifier or parameter" + }, + "fullName": { + "type": "string", + "description": "Full name of the call" + }, + "signature": { + "type": "string", + "description": "Method signature of the call" + }, + "isExternal": { + "type": "boolean", + "description": "Boolean to indicate if this call belongs to an external method" + }, + "code": { + "type": "string", + "description": "Source code" + }, + "typeFullName": { + "type": "string", + "description": "Type full name" + }, + "parentMethodName": { + "type": "string", + "description": "Parent method name" + }, + "parentFileName": { + "type": "string", + "description": "Parent filename" + }, + "parentPackageName": { + "type": "string", + "description": "Parent package name" + }, + "parentClassName": { + "type": "string", + "description": "Parent class name" + }, + "lineNumber": { + "type": "integer", + "description": "Line number" + }, + "columnNumber": { + "type": "integer", + "description": "Column number" + }, + "tags": { + "type": "string", + "description": "Tags. Can contain simple names including package url" + } + }, + "additionalProperties": false, + "type": "object", + "title": "Nodes" + } + } +} \ No newline at end of file diff --git a/specification/schemas/ReachableSlice.json b/specification/schemas/ReachableSlice.json new file mode 100644 index 0000000..1371417 --- /dev/null +++ b/specification/schemas/ReachableSlice.json @@ -0,0 +1,214 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/ReachableSlice", + "definitions": { + "ReachableSlice": { + "properties": { + "reachables": { + "$ref": "#/definitions/atom.ReachableSlice.Reachables", + "additionalProperties": false + }, + "purls": { + "$ref": "#/definitions/atom.ReachableSlice.Purls", + "additionalProperties": false + } + }, + "additionalProperties": false, + "type": "object", + "title": "Reachable Slice", + "description": "* Reachables slices offers a list of reachable nodes based on automated tags exported from data dependency graph" + }, + "atom.Nodes": { + "properties": { + "id": { + "type": "integer", + "description": "Id of the node" + }, + "label": { + "enum": [ + "UNKNOWN_NODE_TYPE", + 0, + "METHOD", + 1, + "METHOD_RETURN", + 3, + "ANNOTATION", + 5, + "ANNOTATION_PARAMETER_ASSIGN", + 6, + "ANNOTATION_PARAMETER", + 7, + "LITERAL", + 8, + "MEMBER", + 9, + "ARRAY_INITIALIZER", + 14, + "CALL", + 15, + "LOCAL", + 23, + "TAG", + 24, + "LOCATION", + 25, + "IDENTIFIER", + 27, + "RETURN", + 30, + "BLOCK", + 31, + "METHOD_PARAMETER_OUT", + 33, + "METHOD_PARAMETER_IN", + 34, + "DEPENDENCY", + 35, + "FILE", + 38, + "META_DATA", + 39, + "NAMESPACE", + 40, + "NAMESPACE_BLOCK", + 41, + "UNKNOWN", + 44, + "TYPE", + 45, + "TYPE_DECL", + 46, + "TYPE_PARAMETER", + 47, + "TYPE_ARGUMENT", + 48, + "ANNOTATION_LITERAL", + 49, + "CONFIG_FILE", + 50, + "BINDING", + 146, + "TAG_NODE_PAIR", + 208, + "FINDING", + 214, + "KEY_VALUE_PAIR", + 217, + "MODIFIER", + 300, + "METHOD_REF", + 333, + "CLOSURE_BINDING", + 334, + "TYPE_REF", + 335, + "CONTROL_STRUCTURE", + 339, + "JUMP_TARGET", + 340, + "JUMP_LABEL", + 341, + "TEMPLATE_DOM", + 417, + "COMMENT", + 511, + "FIELD_IDENTIFIER", + 2001081 + ], + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "title": "Node Type", + "description": "* 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. 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`." + }, + "name": { + "type": "string", + "description": "Name of the call or identifier or parameter" + }, + "fullName": { + "type": "string", + "description": "Full name of the call" + }, + "signature": { + "type": "string", + "description": "Method signature of the call" + }, + "isExternal": { + "type": "boolean", + "description": "Boolean to indicate if this call belongs to an external method" + }, + "code": { + "type": "string", + "description": "Source code" + }, + "typeFullName": { + "type": "string", + "description": "Type full name" + }, + "parentMethodName": { + "type": "string", + "description": "Parent method name" + }, + "parentFileName": { + "type": "string", + "description": "Parent filename" + }, + "parentPackageName": { + "type": "string", + "description": "Parent package name" + }, + "parentClassName": { + "type": "string", + "description": "Parent class name" + }, + "lineNumber": { + "type": "integer", + "description": "Line number" + }, + "columnNumber": { + "type": "integer", + "description": "Column number" + }, + "tags": { + "type": "string", + "description": "Tags. Can contain simple names including package url" + } + }, + "additionalProperties": false, + "type": "object", + "title": "Nodes" + }, + "atom.ReachableSlice.Purls": { + "properties": { + "purls": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "additionalProperties": false, + "type": "object", + "title": "Purls" + }, + "atom.ReachableSlice.Reachables": { + "properties": { + "nodes": { + "items": { + "$ref": "#/definitions/atom.Nodes" + }, + "additionalProperties": false, + "type": "array" + } + }, + "additionalProperties": false, + "type": "object", + "title": "Reachables" + } + } +} \ No newline at end of file diff --git a/src/main/scala/io/appthreat/atom/Atom.scala b/src/main/scala/io/appthreat/atom/Atom.scala index e5fce22..0b4049d 100644 --- a/src/main/scala/io/appthreat/atom/Atom.scala +++ b/src/main/scala/io/appthreat/atom/Atom.scala @@ -23,6 +23,7 @@ import io.appthreat.pysrc2cpg.{ } import io.appthreat.x2cpg.passes.base.AstLinkerPass import io.appthreat.x2cpg.passes.frontend.XTypeRecoveryConfig +import io.appthreat.x2cpg.passes.taggers.{CdxPass, ChennaiTagsPass} import io.shiftleft.codepropertygraph.Cpg import io.shiftleft.codepropertygraph.generated.Languages import io.shiftleft.semanticcpg.layers.LayerCreatorContext @@ -37,6 +38,8 @@ object Atom { val DEFAULT_SLICE_OUT_FILE = "slices.json" val DEFAULT_SLICE_DEPTH = 7 val DEFAULT_MAX_DEFS: Int = 2000 + val FRAMEWORK_INPUT_TAG: String = "framework-input" + val FRAMEWORK_OUTPUT_TAG: String = "framework-output" private val TYPE_PROPAGATION_ITERATIONS = 1 private val MAVEN_JAR_PATH: File = File.home / ".m2" / "repository" private val GRADLE_JAR_PATH: File = File.home / ".gradle" / "caches" / "modules-2" / "files-2.1" @@ -199,6 +202,27 @@ object Atom { } ) ) + cmd("reachables") + .text("Extract reachable data-flow slices based on automated framework tags") + .action((_, c) => AtomReachablesConfig()) + .children( + opt[String]("source-tag") + .text(s"source tag - defaults to framework-input.") + .action((x, c) => + c match { + case c: AtomReachablesConfig => c.copy(sourceTag = x) + case _ => c + } + ), + opt[String]("sink-tag") + .text(s"sink tag - defaults to framework-output.") + .action((x, c) => + c match { + case c: AtomReachablesConfig => c.copy(sinkTag = x) + case _ => c + } + ) + ) help("help").text("display this help message") } @@ -239,11 +263,17 @@ object Atom { def sliceCpg(cpg: Cpg): Option[ProgramSlice] = config match { case x: AtomDataFlowConfig => + println("Slicing the atom for data-flow. This might take a while ...") val dataFlowConfig = migrateAtomConfigToSliceConfig(x) - DataFlowSlicing.calculateDataFlowSlice(cpg, dataFlowConfig.asInstanceOf[DataFlowConfig]) + new DataFlowSlicing().calculateDataFlowSlice(cpg, dataFlowConfig.asInstanceOf[DataFlowConfig]) case x: AtomUsagesConfig => + println("Slicing the atom for usages. This might take a few minutes ...") val usagesConfig = migrateAtomConfigToSliceConfig(x) Option(UsageSlicing.calculateUsageSlice(cpg, usagesConfig.asInstanceOf[UsagesConfig])) + case x: AtomReachablesConfig => + println("Slicing the atom for reachables. This might take a few minutes ...") + val reachablesConfig = migrateAtomConfigToSliceConfig(x) + Some(ReachableSlicing.calculateReachableSlice(cpg, reachablesConfig.asInstanceOf[ReachablesConfig])) case _ => None } @@ -257,6 +287,8 @@ object Atom { saveSlice(config.outputSliceFile, atomDataFlowSliceJson) case _: UsagesConfig => saveSlice(config.outputSliceFile, sliceCpg(cpg).map(_.toJson)) + case _: ReachablesConfig => + saveSlice(config.outputSliceFile, sliceCpg(cpg).map(_.toJsonPretty)) case x: AtomParseDepsConfig => parseDependencies(cpg).map(_.toJson) match { case Left(err) => return Left(err) @@ -297,6 +329,8 @@ object Atom { ) case config: AtomUsagesConfig => UsagesConfig(config.minNumCalls, config.excludeOperatorCalls, !config.includeMethodSource) + case config: AtomReachablesConfig => + ReachablesConfig(config.sourceTag, config.sinkTag) case _ => x }).withInputPath(x.inputPath) .withOutputSliceFile(x.outputSliceFile) @@ -401,11 +435,13 @@ object Atom { config match { case x: AtomConfig if x.dataDeps || x.isInstanceOf[AtomDataFlowConfig] => println("Generating data-flow dependencies from atom. Please wait ...") + // Enhance with the BOM from cdxgen + new CdxPass(ag).createAndApply() + new ChennaiTagsPass(ag).createAndApply() new OssDataFlow(new OssDataFlowOptions(maxNumberOfDefinitions = x.maxNumDef)) .run(new LayerCreatorContext(ag)) case _ => } - println("Slicing the atom. Please wait ...") generateSlice(config, ag) ag.close() Right("Atom generation successful") diff --git a/src/main/scala/io/appthreat/atom/package.scala b/src/main/scala/io/appthreat/atom/package.scala index dc088d5..3bb789d 100644 --- a/src/main/scala/io/appthreat/atom/package.scala +++ b/src/main/scala/io/appthreat/atom/package.scala @@ -53,6 +53,9 @@ package object atom { includeMethodSource: Boolean = false ) extends AtomConfig + case class AtomReachablesConfig(sourceTag: String = FRAMEWORK_INPUT_TAG, sinkTag: String = FRAMEWORK_OUTPUT_TAG) + extends AtomConfig + import io.appthreat.atom.slicing._ import io.circe.generic.auto._ import io.circe.syntax.EncoderOps diff --git a/src/main/scala/io/appthreat/atom/slicing/DataFlowSlicing.scala b/src/main/scala/io/appthreat/atom/slicing/DataFlowSlicing.scala index 244a83a..0715006 100644 --- a/src/main/scala/io/appthreat/atom/slicing/DataFlowSlicing.scala +++ b/src/main/scala/io/appthreat/atom/slicing/DataFlowSlicing.scala @@ -10,10 +10,10 @@ import java.util.concurrent.* import java.util.concurrent.atomic.AtomicBoolean import scala.collection.concurrent.TrieMap -object DataFlowSlicing { +class DataFlowSlicing { implicit val resolver: ICallResolver = NoResolve - val exec: ExecutorService = Executors.newWorkStealingPool(Runtime.getRuntime.availableProcessors() / 2) + protected val exec: ExecutorService = Executors.newWorkStealingPool(Runtime.getRuntime.availableProcessors() / 2) private val excludeOperatorCalls = new AtomicBoolean(true) private val nodeCache = new TrieMap[Long, SliceNode]() private var language: Option[String] = _ @@ -42,7 +42,7 @@ object DataFlowSlicing { dataFlowSlice } - private def TimedGet(dsf: Future[Option[DataFlowSlice]]) = { + protected def TimedGet(dsf: Future[Option[DataFlowSlice]]) = { try { dsf.get(5, TimeUnit.SECONDS) } catch { @@ -52,11 +52,11 @@ object DataFlowSlicing { /** Convert cfg node to a sliceable node with backing cache */ - private def fromCfgNode(cfgNode: CfgNode): SliceNode = { + protected def fromCfgNode(cfgNode: CfgNode): SliceNode = { nodeCache.getOrElseUpdate(cfgNode.id(), cfgNodeToSliceNode(cfgNode)) } - private def cfgNodeToSliceNode(cfgNode: CfgNode): SliceNode = { + protected def cfgNodeToSliceNode(cfgNode: CfgNode): SliceNode = { val sliceNode = SliceNode( cfgNode.id(), cfgNode.label, @@ -67,7 +67,8 @@ object DataFlowSlicing { parentPackageName = cfgNode.method.location.packageName, parentClassName = cfgNode.method.location.className, lineNumber = cfgNode.lineNumber, - columnNumber = cfgNode.columnNumber + columnNumber = cfgNode.columnNumber, + tags = if (cfgNode.tag.nonEmpty) cfgNode.tag.name.mkString(", ") else "" ) cfgNode match { case n: Call => diff --git a/src/main/scala/io/appthreat/atom/slicing/ReachableSlicing.scala b/src/main/scala/io/appthreat/atom/slicing/ReachableSlicing.scala new file mode 100644 index 0000000..4b92c82 --- /dev/null +++ b/src/main/scala/io/appthreat/atom/slicing/ReachableSlicing.scala @@ -0,0 +1,170 @@ +package io.appthreat.atom.slicing + +import io.shiftleft.codepropertygraph.Cpg +import io.shiftleft.codepropertygraph.generated.nodes.* +import io.appthreat.dataflowengineoss.language.* +import io.appthreat.dataflowengineoss.DefaultSemantics +import io.appthreat.dataflowengineoss.language.Path.{maxTrackedWidth, tagAsString} +import io.appthreat.dataflowengineoss.queryengine.{EngineConfig, EngineContext} +import io.appthreat.dataflowengineoss.semanticsloader.Semantics +import io.shiftleft.semanticcpg.language.* +import io.shiftleft.semanticcpg.language.{DefaultNodeExtensionFinder, ICallResolver, NoResolve, NodeExtensionFinder} + +import scala.collection.mutable +import scala.collection.mutable.{ArrayBuffer} + +object ReachableSlicing { + + implicit val semantics: Semantics = DefaultSemantics() + val engineConfig = EngineConfig() + implicit val context: EngineContext = EngineContext(semantics, engineConfig) + private implicit val finder: NodeExtensionFinder = DefaultNodeExtensionFinder + + def calculateReachableSlice(atom: Cpg, config: ReachablesConfig): ReachableSlice = { + def source = atom.tag.name(config.sourceTag).parameter + def sink = atom.ret.where(_.tag.name(config.sinkTag)) + ReachableSlice(sink.reachableByFlows(source).map(toSlice).toList) + } + + private def tagAsString(tag: Iterator[Tag]): String = if (tag.nonEmpty) tag.name.mkString(", ") else "" + private def purlsFromTag(tag: Iterator[Tag]) = + if (tag.nonEmpty) tag.name.filter(_.startsWith("pkg:")).toSet else Set.empty + + private def toSlice(path: Path) = { + val tableRows = ArrayBuffer[SliceNode]() + val addedPaths = mutable.Set[String]() + var purls = mutable.Set[String]() + path.elements.foreach { astNode => + val nodeType = astNode.getClass.getSimpleName + val lineNumber = astNode.lineNumber.getOrElse("").toString + val fileName = astNode.file.name.headOption.getOrElse("").replace("", "") + var fileLocation = s"${fileName}#${lineNumber}" + var tags: String = tagAsString(astNode.tag) + purls ++= purlsFromTag(astNode.tag) + if (fileLocation == "#") fileLocation = "N/A" + var sliceNode = SliceNode( + astNode.id(), + astNode.label, + code = astNode.code, + parentFileName = astNode.file.name.headOption.getOrElse(""), + lineNumber = astNode.lineNumber, + columnNumber = astNode.columnNumber, + tags = tags + ) + astNode match { + case _: MethodReturn => + case methodParameterIn: MethodParameterIn => + val methodName = methodParameterIn.method.name + if (tags.isEmpty && methodParameterIn.method.tag.nonEmpty) { + tags = tagAsString(methodParameterIn.method.tag) + purls ++= purlsFromTag(methodParameterIn.method.tag) + } + if (tags.isEmpty && methodParameterIn.tag.nonEmpty) { + tags = tagAsString(methodParameterIn.tag) + purls ++= purlsFromTag(methodParameterIn.tag) + } + sliceNode = sliceNode.copy( + name = methodParameterIn.name, + code = methodParameterIn.method.fullName, + typeFullName = methodParameterIn.typeFullName, + parentMethodName = methodName, + parentMethodSignature = methodParameterIn.method.signature, + parentPackageName = methodParameterIn.method.location.packageName, + parentClassName = methodParameterIn.method.location.className, + isExternal = methodParameterIn.method.isExternal, + tags = tags + ) + tableRows += sliceNode + case ret: Return => + val methodName = ret.method.name + sliceNode = sliceNode.copy( + name = ret.argumentName.getOrElse(""), + code = ret.code, + parentMethodName = methodName, + parentMethodSignature = ret.method.signature, + parentPackageName = ret.method.location.packageName, + parentClassName = ret.method.location.className + ) + tableRows += sliceNode + case identifier: Identifier => + val methodName = identifier.method.name + if (tags.isEmpty && identifier.inCall.nonEmpty && identifier.inCall.head.tag.nonEmpty) { + tags = tagAsString(identifier.inCall.head.tag) + purls ++= purlsFromTag(identifier.inCall.head.tag) + } + if (!addedPaths.contains(s"${fileName}#${lineNumber}") && identifier.inCall.nonEmpty) { + sliceNode = sliceNode.copy( + name = identifier.name, + code = if (identifier.inCall.nonEmpty) identifier.inCall.head.code else identifier.code, + parentMethodName = methodName, + parentMethodSignature = identifier.method.signature, + parentPackageName = identifier.method.location.packageName, + parentClassName = identifier.method.location.className, + tags = tags + ) + tableRows += sliceNode + } + case member: Member => + val methodName = "" + sliceNode = sliceNode.copy(name = member.name, code = member.code, parentMethodName = methodName) + tableRows += sliceNode + case call: Call => + if (!call.code.startsWith(" + val method = cfgNode.method + if (tags.isEmpty && method.tag.nonEmpty) { + tags = tagAsString(method.tag) + purls ++= purlsFromTag(method.tag) + } + val methodName = method.name + val statement = cfgNode match { + case _: MethodParameterIn => + if (tags.isEmpty && method.parameter.tag.nonEmpty) { + tags = tagAsString(method.parameter.tag) + purls ++= purlsFromTag(method.parameter.tag) + } + val paramsPretty = method.parameter.toList.sortBy(_.index).map(_.code).mkString(", ") + s"$methodName($paramsPretty)" + case _ => + if (tags.isEmpty && cfgNode.statement.tag.nonEmpty) { + tags = tagAsString(cfgNode.statement.tag) + purls ++= purlsFromTag(cfgNode.statement.tag) + } + cfgNode.statement.repr + } + sliceNode = sliceNode.copy(parentMethodName = methodName, code = statement, tags = tags) + tableRows += sliceNode + } + addedPaths += s"${fileName}#${lineNumber}" + } + ReachableFlows(flows = tableRows.toList, purls = purls.toSet) + } +} diff --git a/src/main/scala/io/appthreat/atom/slicing/package.scala b/src/main/scala/io/appthreat/atom/slicing/package.scala index 96fc255..35a5d57 100644 --- a/src/main/scala/io/appthreat/atom/slicing/package.scala +++ b/src/main/scala/io/appthreat/atom/slicing/package.scala @@ -1,6 +1,7 @@ package io.appthreat.atom import better.files.File +import io.appthreat.dataflowengineoss.language.Path import io.circe.{Decoder, Encoder, HCursor, Json} import io.shiftleft.codepropertygraph.generated.PropertyNames import io.shiftleft.codepropertygraph.generated.nodes.* @@ -9,6 +10,7 @@ import overflowdb.PropertyKey import java.util.regex.Pattern import scala.collection.concurrent.TrieMap +import scala.collection.mutable.ArrayBuffer package object slicing { @@ -86,6 +88,8 @@ package object slicing { excludeMethodSource: Boolean = true ) extends BaseConfig + case class ReachablesConfig(sourceTag: String, sinkTag: String) extends BaseConfig + /** Adds extensions to modify a method traversal based on config options */ implicit class MethodFilterExt(trav: Iterator[Method]) { @@ -131,10 +135,18 @@ package object slicing { def toJsonPretty: String = this.asJson.spaces2 } + case class ReachableSlice(reachables: List[ReachableFlows]) extends ProgramSlice { + def toJson: String = this.asJson.toString() + + def toJsonPretty: String = this.asJson.spaces2 + } + implicit val encodeDataFlowSlice: Encoder[DataFlowSlice] = Encoder.instance { case DataFlowSlice(nodes, edges) => Json.obj("nodes" -> nodes.asJson, "edges" -> edges.asJson) } + case class ReachableFlows(flows: List[SliceNode], purls: Set[String]) + case class SliceNode( id: Long, label: String, @@ -150,7 +162,8 @@ package object slicing { parentPackageName: String = "", parentClassName: String = "", lineNumber: Option[Integer] = None, - columnNumber: Option[Integer] = None + columnNumber: Option[Integer] = None, + tags: String = "" ) implicit val encodeSliceNode: Encoder[SliceNode] = Encoder.instance { @@ -169,7 +182,8 @@ package object slicing { parentPackageName, parentClassName, lineNumber, - columnNumber + columnNumber, + tags ) => Json.obj( "id" -> id.asJson, @@ -186,7 +200,8 @@ package object slicing { "parentPackageName" -> parentPackageName.asJson, "parentClassName" -> parentClassName.asJson, "lineNumber" -> lineNumber.asJson, - "columnNumber" -> columnNumber.asJson + "columnNumber" -> columnNumber.asJson, + "tags" -> tags.asJson ) } diff --git a/wrapper/nodejs/index.js b/wrapper/nodejs/index.js index 0f2ca6a..aa9043d 100755 --- a/wrapper/nodejs/index.js +++ b/wrapper/nodejs/index.js @@ -22,7 +22,7 @@ export const JAVA_OPTS = `${ process.env.JAVA_OPTS || "" } -Xmx${freeMemoryGB}G ${JVM_ARGS}`; export const APP_MAIN_CLASS = "io.appthreat.atom.Atom"; -export const ATOM_VERSION = "1.2.5"; +export const ATOM_VERSION = "1.5.0"; export const APP_CLASSPATH = join( APP_LIB_DIR, `io.appthreat.atom-${ATOM_VERSION}-classpath.jar` diff --git a/wrapper/nodejs/package-lock.json b/wrapper/nodejs/package-lock.json index 2febe69..84b4350 100644 --- a/wrapper/nodejs/package-lock.json +++ b/wrapper/nodejs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@appthreat/atom", - "version": "1.2.5", + "version": "1.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@appthreat/atom", - "version": "1.2.5", + "version": "1.5.0", "license": "Apache-2.0", "dependencies": { "@babel/parser": "^7.23.0", diff --git a/wrapper/nodejs/package.json b/wrapper/nodejs/package.json index 59770b1..14b65a1 100644 --- a/wrapper/nodejs/package.json +++ b/wrapper/nodejs/package.json @@ -1,6 +1,6 @@ { "name": "@appthreat/atom", - "version": "1.2.5", + "version": "1.5.0", "description": "Create atom (⚛) representation for your application, packages and libraries", "exports": "./index.js", "type": "module",