Skip to content

Commit ce525c5

Browse files
authored
add property labels for NewNode products (mostly for pretty printing) (#108)
1 parent c88dd69 commit ce525c5

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

codegen/src/main/scala/overflowdb/codegen/CodeGen.scala

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1681,10 +1681,15 @@ class CodeGen(schema: Schema) {
16811681

16821682
val classNameNewNode = s"New$nodeClassName"
16831683

1684-
val productElementAccessors = fieldDescriptions.reverse.zipWithIndex.map {
1684+
val productElements = fieldDescriptions.reverse.zipWithIndex
1685+
val productElementAccessors = productElements.map {
16851686
case (fieldDescription, index) =>
16861687
s"case $index => this.${fieldDescription.name}"
16871688
}.mkString("\n")
1689+
val productElementNames = productElements.map {
1690+
case (fieldDescription, index) =>
1691+
s"""case $index => "${fieldDescription.name}""""
1692+
}.mkString("\n")
16881693

16891694
s"""object $classNameNewNode {
16901695
| def apply(): $classNameNewNode = new $classNameNewNode
@@ -1711,6 +1716,12 @@ class CodeGen(schema: Schema) {
17111716
| case _ => null
17121717
| }
17131718
|
1719+
| override def productElementName(n: Int): String =
1720+
| n match {
1721+
| $productElementNames
1722+
| case _ => ""
1723+
| }
1724+
|
17141725
| override def productPrefix = "$classNameNewNode"
17151726
| override def productArity = ${fieldDescriptions.size}
17161727
|

integration-tests/tests/src/test/scala/Schema02Test.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,17 @@ class Schema02Test extends AnyWordSpec with Matchers {
2121
}
2222

2323
"NewNode" can {
24+
"be used as a product, e.g. for pretty printing" in {
25+
val newNode = NewNode1().name("A").order(1)
26+
27+
newNode.productPrefix shouldBe "NewNode1"
28+
newNode.productArity shouldBe 2
29+
newNode.productElementName(0) shouldBe "order"
30+
newNode.productElement(0) shouldBe Some(1)
31+
newNode.productElementName(1) shouldBe "name"
32+
newNode.productElement(1) shouldBe "A"
33+
}
34+
2435
"get copied and mutated" in {
2536
val original = NewNode1().name("A").order(1)
2637

0 commit comments

Comments
 (0)