Skip to content

Commit a64ce01

Browse files
authored
use the index for stuff like cpg.method.fullNameExact(a,b,c) (#297)
1 parent fb0570b commit a64ce01

File tree

13 files changed

+156
-64
lines changed

13 files changed

+156
-64
lines changed

domain-classes-generator/src/main/scala/flatgraph/codegen/CodeSnippets.scala

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,18 @@ object CodeSnippets {
126126
|/**
127127
| * Traverse to nodes where $nameCamelCase matches one of the elements in `values` exactly.
128128
| * */
129-
|def ${nameCamelCase}Exact(values: $baseType*): Iterator[NodeType] =
130-
| if(values.length == 1) ${nameCamelCase}Exact(values.head) else {
131-
| val valueSet = values.toSet
132-
| traversal.filter{item => valueSet.contains(item.$nameCamelCase)}
129+
|def ${nameCamelCase}Exact(values: $baseType*): Iterator[NodeType] = {
130+
| if(values.length == 1) return ${nameCamelCase}Exact(values.head)
131+
| traversal match {
132+
| case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext =>
133+
| val someNode = init.next
134+
| values.iterator.flatMap { value =>
135+
| flatgraph.Accessors.getWithInverseIndex(someNode.graph, someNode.nodeKind, $propertyId, value).asInstanceOf[Iterator[NodeType]]
136+
| }
137+
| case _ =>
138+
| val valueSet = values.toSet
139+
| traversal.filter{item => valueSet.contains(item.$nameCamelCase)}
140+
| }
133141
| }
134142
|
135143
|/**

test-schemas-domain-classes/src/main/scala/testdomains/codepropertygraphminified/traversals/TraversalCallBase.scala

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,19 @@ final class TraversalCallBase[NodeType <: nodes.CallBase](val traversal: Iterato
3737

3838
/** Traverse to nodes where dispatchType matches one of the elements in `values` exactly.
3939
*/
40-
def dispatchTypeExact(values: String*): Iterator[NodeType] =
41-
if (values.length == 1) dispatchTypeExact(values.head)
42-
else {
43-
val valueSet = values.toSet
44-
traversal.filter { item => valueSet.contains(item.dispatchType) }
40+
def dispatchTypeExact(values: String*): Iterator[NodeType] = {
41+
if (values.length == 1) return dispatchTypeExact(values.head)
42+
traversal match {
43+
case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext =>
44+
val someNode = init.next
45+
values.iterator.flatMap { v =>
46+
flatgraph.Accessors.getWithInverseIndex(someNode.graph, someNode.nodeKind, 0, v).asInstanceOf[Iterator[NodeType]]
47+
}
48+
case _ =>
49+
val valueSet = values.toSet
50+
traversal.filter { item => valueSet.contains(item.dispatchType) }
4551
}
52+
}
4653

4754
/** Traverse to nodes where dispatchType does not match the regular expression `value`.
4855
*/

test-schemas-domain-classes/src/main/scala/testdomains/codepropertygraphminified/traversals/TraversalCallreprBase.scala

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,19 @@ final class TraversalCallreprBase[NodeType <: nodes.CallReprBase](val traversal:
3737

3838
/** Traverse to nodes where name matches one of the elements in `values` exactly.
3939
*/
40-
def nameExact(values: String*): Iterator[NodeType] =
41-
if (values.length == 1) nameExact(values.head)
42-
else {
43-
val valueSet = values.toSet
44-
traversal.filter { item => valueSet.contains(item.name) }
40+
def nameExact(values: String*): Iterator[NodeType] = {
41+
if (values.length == 1) return nameExact(values.head)
42+
traversal match {
43+
case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext =>
44+
val someNode = init.next
45+
values.iterator.flatMap { v =>
46+
flatgraph.Accessors.getWithInverseIndex(someNode.graph, someNode.nodeKind, 1, v).asInstanceOf[Iterator[NodeType]]
47+
}
48+
case _ =>
49+
val valueSet = values.toSet
50+
traversal.filter { item => valueSet.contains(item.name) }
4551
}
52+
}
4653

4754
/** Traverse to nodes where name does not match the regular expression `value`.
4855
*/

test-schemas-domain-classes/src/main/scala/testdomains/codepropertygraphminified/traversals/TraversalDeclarationBase.scala

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,19 @@ final class TraversalDeclarationBase[NodeType <: nodes.DeclarationBase](val trav
3737

3838
/** Traverse to nodes where name matches one of the elements in `values` exactly.
3939
*/
40-
def nameExact(values: String*): Iterator[NodeType] =
41-
if (values.length == 1) nameExact(values.head)
42-
else {
43-
val valueSet = values.toSet
44-
traversal.filter { item => valueSet.contains(item.name) }
40+
def nameExact(values: String*): Iterator[NodeType] = {
41+
if (values.length == 1) return nameExact(values.head)
42+
traversal match {
43+
case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext =>
44+
val someNode = init.next
45+
values.iterator.flatMap { v =>
46+
flatgraph.Accessors.getWithInverseIndex(someNode.graph, someNode.nodeKind, 1, v).asInstanceOf[Iterator[NodeType]]
47+
}
48+
case _ =>
49+
val valueSet = values.toSet
50+
traversal.filter { item => valueSet.contains(item.name) }
4551
}
52+
}
4653

4754
/** Traverse to nodes where name does not match the regular expression `value`.
4855
*/

test-schemas-domain-classes/src/main/scala/testdomains/codepropertygraphminified/traversals/TraversalPropertyDispatchType.scala

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,19 @@ final class TraversalPropertyDispatchType[NodeType <: nodes.StoredNode & nodes.S
3939

4040
/** Traverse to nodes where dispatchType matches one of the elements in `values` exactly.
4141
*/
42-
def dispatchTypeExact(values: String*): Iterator[NodeType] =
43-
if (values.length == 1) dispatchTypeExact(values.head)
44-
else {
45-
val valueSet = values.toSet
46-
traversal.filter { item => valueSet.contains(item.dispatchType) }
42+
def dispatchTypeExact(values: String*): Iterator[NodeType] = {
43+
if (values.length == 1) return dispatchTypeExact(values.head)
44+
traversal match {
45+
case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext =>
46+
val someNode = init.next
47+
values.iterator.flatMap { v =>
48+
flatgraph.Accessors.getWithInverseIndex(someNode.graph, someNode.nodeKind, 0, v).asInstanceOf[Iterator[NodeType]]
49+
}
50+
case _ =>
51+
val valueSet = values.toSet
52+
traversal.filter { item => valueSet.contains(item.dispatchType) }
4753
}
54+
}
4855

4956
/** Traverse to nodes where dispatchType does not match the regular expression `value`.
5057
*/

test-schemas-domain-classes/src/main/scala/testdomains/codepropertygraphminified/traversals/TraversalPropertyName.scala

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,19 @@ final class TraversalPropertyName[NodeType <: nodes.StoredNode & nodes.StaticTyp
3838

3939
/** Traverse to nodes where name matches one of the elements in `values` exactly.
4040
*/
41-
def nameExact(values: String*): Iterator[NodeType] =
42-
if (values.length == 1) nameExact(values.head)
43-
else {
44-
val valueSet = values.toSet
45-
traversal.filter { item => valueSet.contains(item.name) }
41+
def nameExact(values: String*): Iterator[NodeType] = {
42+
if (values.length == 1) return nameExact(values.head)
43+
traversal match {
44+
case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext =>
45+
val someNode = init.next
46+
values.iterator.flatMap { v =>
47+
flatgraph.Accessors.getWithInverseIndex(someNode.graph, someNode.nodeKind, 1, v).asInstanceOf[Iterator[NodeType]]
48+
}
49+
case _ =>
50+
val valueSet = values.toSet
51+
traversal.filter { item => valueSet.contains(item.name) }
4652
}
53+
}
4754

4855
/** Traverse to nodes where name does not match the regular expression `value`.
4956
*/

test-schemas-domain-classes/src/main/scala/testdomains/generic/traversals/TraversalNodeaBase.scala

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,19 @@ final class TraversalNodeaBase[NodeType <: nodes.NodeABase](val traversal: Itera
157157

158158
/** Traverse to nodes where stringMandatory matches one of the elements in `values` exactly.
159159
*/
160-
def stringMandatoryExact(values: String*): Iterator[NodeType] =
161-
if (values.length == 1) stringMandatoryExact(values.head)
162-
else {
163-
val valueSet = values.toSet
164-
traversal.filter { item => valueSet.contains(item.stringMandatory) }
160+
def stringMandatoryExact(values: String*): Iterator[NodeType] = {
161+
if (values.length == 1) return stringMandatoryExact(values.head)
162+
traversal match {
163+
case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext =>
164+
val someNode = init.next
165+
values.iterator.flatMap { v =>
166+
flatgraph.Accessors.getWithInverseIndex(someNode.graph, someNode.nodeKind, 4, v).asInstanceOf[Iterator[NodeType]]
167+
}
168+
case _ =>
169+
val valueSet = values.toSet
170+
traversal.filter { item => valueSet.contains(item.stringMandatory) }
165171
}
172+
}
166173

167174
/** Traverse to nodes where stringMandatory does not match the regular expression `value`.
168175
*/

test-schemas-domain-classes/src/main/scala/testdomains/generic/traversals/TraversalPropertyStringMandatory.scala

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,19 @@ final class TraversalPropertyStringMandatory[NodeType <: nodes.StoredNode & node
3939

4040
/** Traverse to nodes where stringMandatory matches one of the elements in `values` exactly.
4141
*/
42-
def stringMandatoryExact(values: String*): Iterator[NodeType] =
43-
if (values.length == 1) stringMandatoryExact(values.head)
44-
else {
45-
val valueSet = values.toSet
46-
traversal.filter { item => valueSet.contains(item.stringMandatory) }
42+
def stringMandatoryExact(values: String*): Iterator[NodeType] = {
43+
if (values.length == 1) return stringMandatoryExact(values.head)
44+
traversal match {
45+
case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext =>
46+
val someNode = init.next
47+
values.iterator.flatMap { v =>
48+
flatgraph.Accessors.getWithInverseIndex(someNode.graph, someNode.nodeKind, 4, v).asInstanceOf[Iterator[NodeType]]
49+
}
50+
case _ =>
51+
val valueSet = values.toSet
52+
traversal.filter { item => valueSet.contains(item.stringMandatory) }
4753
}
54+
}
4855

4956
/** Traverse to nodes where stringMandatory does not match the regular expression `value`.
5057
*/

test-schemas-domain-classes/src/main/scala/testdomains/gratefuldead/traversals/TraversalArtistBase.scala

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,19 @@ final class TraversalArtistBase[NodeType <: nodes.ArtistBase](val traversal: Ite
3737

3838
/** Traverse to nodes where name matches one of the elements in `values` exactly.
3939
*/
40-
def nameExact(values: String*): Iterator[NodeType] =
41-
if (values.length == 1) nameExact(values.head)
42-
else {
43-
val valueSet = values.toSet
44-
traversal.filter { item => valueSet.contains(item.name) }
40+
def nameExact(values: String*): Iterator[NodeType] = {
41+
if (values.length == 1) return nameExact(values.head)
42+
traversal match {
43+
case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext =>
44+
val someNode = init.next
45+
values.iterator.flatMap { v =>
46+
flatgraph.Accessors.getWithInverseIndex(someNode.graph, someNode.nodeKind, 0, v).asInstanceOf[Iterator[NodeType]]
47+
}
48+
case _ =>
49+
val valueSet = values.toSet
50+
traversal.filter { item => valueSet.contains(item.name) }
4551
}
52+
}
4653

4754
/** Traverse to nodes where name does not match the regular expression `value`.
4855
*/

test-schemas-domain-classes/src/main/scala/testdomains/gratefuldead/traversals/TraversalPropertyName.scala

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,19 @@ final class TraversalPropertyName[NodeType <: nodes.StoredNode & nodes.StaticTyp
3838

3939
/** Traverse to nodes where name matches one of the elements in `values` exactly.
4040
*/
41-
def nameExact(values: String*): Iterator[NodeType] =
42-
if (values.length == 1) nameExact(values.head)
43-
else {
44-
val valueSet = values.toSet
45-
traversal.filter { item => valueSet.contains(item.name) }
41+
def nameExact(values: String*): Iterator[NodeType] = {
42+
if (values.length == 1) return nameExact(values.head)
43+
traversal match {
44+
case init: flatgraph.misc.InitNodeIterator[flatgraph.GNode @unchecked] if init.isVirgin && init.hasNext =>
45+
val someNode = init.next
46+
values.iterator.flatMap { v =>
47+
flatgraph.Accessors.getWithInverseIndex(someNode.graph, someNode.nodeKind, 0, v).asInstanceOf[Iterator[NodeType]]
48+
}
49+
case _ =>
50+
val valueSet = values.toSet
51+
traversal.filter { item => valueSet.contains(item.name) }
4652
}
53+
}
4754

4855
/** Traverse to nodes where name does not match the regular expression `value`.
4956
*/

0 commit comments

Comments
 (0)