From 5754260b18ad3ac8680a1b4a2a91dcd7f0d7d01b Mon Sep 17 00:00:00 2001 From: dabico Date: Tue, 31 Oct 2023 15:25:42 +0100 Subject: [PATCH 1/5] Adding additional overrides to `OffsetTreeCursor$OffsetNode` This is done to curb any more possible SIGSEGV errors --- .../si/seart/treesitter/OffsetTreeCursor.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java b/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java index edba5700..1368c88b 100644 --- a/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java +++ b/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java @@ -116,6 +116,11 @@ public Node getChildByFieldName(@NotNull String name) { return new OffsetNode(node.getChildByFieldName(name)); } + @Override + public int getChildCount() { + return node.getChildCount(); + } + @Override public List getChildren() { return node.getChildren().stream() @@ -151,6 +156,11 @@ public Point getEndPoint() { return node.getEndPoint().add(offset); } + @Override + public String getFieldNameForChild(int child) { + return node.getFieldNameForChild(child); + } + @Override public Node getFirstChildForByte(int offset) { throw new UnsupportedOperationException(UOE_MESSAGE_2); @@ -214,6 +224,41 @@ public Point getStartPoint() { return node.getStartPoint().add(offset); } + @Override + public Symbol getSymbol() { + return node.getSymbol(); + } + + @Override + public String getType() { + return node.getType(); + } + + @Override + public boolean hasError() { + return node.hasError(); + } + + @Override + public boolean isExtra() { + return node.isExtra(); + } + + @Override + public boolean isMissing() { + return node.isMissing(); + } + + @Override + public boolean isNamed() { + return node.isNamed(); + } + + @Override + public boolean isNull() { + return node.isNull(); + } + @Override public TreeCursor walk() { return new OffsetTreeCursor(node, offset); From f15074081b1c772a5853d4e2a46dc07225ab2b97 Mon Sep 17 00:00:00 2001 From: dabico Date: Tue, 31 Oct 2023 15:45:36 +0100 Subject: [PATCH 2/5] Overriding `equals`, `hashCode` and `toString` of `OffsetNode` --- .../si/seart/treesitter/OffsetTreeCursor.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java b/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java index 1368c88b..8e052964 100644 --- a/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java +++ b/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java @@ -268,6 +268,29 @@ public TreeCursor walk() { public QueryCursor walk(@NotNull Query query) { throw new UnsupportedOperationException(UOE_MESSAGE_3); } + + @Override + public boolean equals(Object obj) { + if (obj == this) return true; + if (obj == null || getClass() != obj.getClass()) return false; + OffsetNode other = (OffsetNode) obj; + return node.equals(other.node); + } + + @Override + public int hashCode() { + return Objects.hash(node, offset); + } + + @Override + public String toString() { + String original = node.toString(); + String data = original.substring(5, original.length() - 1); + return String.format( + "OffsetNode(%s, row: %d, column: %d)", + data, offset.getRow(), offset.getColumn() + ); + } } @Override From b8a6273dc363ae39dd1033e2f1e5140fa2d56c56 Mon Sep 17 00:00:00 2001 From: dabico Date: Tue, 31 Oct 2023 15:47:23 +0100 Subject: [PATCH 3/5] `getChildren` of `OffsetNode` now returns unmodifiable list --- .../java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java b/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java index 8e052964..410d23f9 100644 --- a/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java +++ b/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java @@ -5,6 +5,7 @@ import lombok.experimental.FieldDefaults; import org.jetbrains.annotations.NotNull; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.function.Consumer; @@ -125,7 +126,10 @@ public int getChildCount() { public List getChildren() { return node.getChildren().stream() .map(OffsetNode::new) - .collect(Collectors.toList()); + .collect(Collectors.collectingAndThen( + Collectors.toList(), + Collections::unmodifiableList + )); } @Override From 6f541cb1beeacabfbe689ab463ff0546c966b308 Mon Sep 17 00:00:00 2001 From: dabico Date: Tue, 31 Oct 2023 15:56:09 +0100 Subject: [PATCH 4/5] Extracting substring indexes to variables --- .../java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java b/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java index 410d23f9..14014b04 100644 --- a/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java +++ b/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java @@ -289,7 +289,9 @@ public int hashCode() { @Override public String toString() { String original = node.toString(); - String data = original.substring(5, original.length() - 1); + int lower = 5; + int upper = original.length() - 1; + String data = original.substring(lower, upper); return String.format( "OffsetNode(%s, row: %d, column: %d)", data, offset.getRow(), offset.getColumn() From 8fe7c815f4d00318d4c8ddd87920c79ff0b4e56b Mon Sep 17 00:00:00 2001 From: dabico Date: Tue, 31 Oct 2023 15:59:45 +0100 Subject: [PATCH 5/5] This surely makes more sense, right? --- src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java b/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java index 14014b04..e3bb6b94 100644 --- a/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java +++ b/src/main/java/ch/usi/si/seart/treesitter/OffsetTreeCursor.java @@ -289,7 +289,7 @@ public int hashCode() { @Override public String toString() { String original = node.toString(); - int lower = 5; + int lower = Node.class.getSimpleName().length() + 1; int upper = original.length() - 1; String data = original.substring(lower, upper); return String.format(