Class: TreeHaver::Backends::Java::Tree Private
- Inherits:
-
Object
- Object
- TreeHaver::Backends::Java::Tree
- Defined in:
- lib/tree_haver/backends/java.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Java backend tree wrapper (raw backend tree)
This is a **raw backend tree** that wraps a jtreesitter Tree object via JRuby’s Java interop. It is NOT intended for direct use by application code.
Architecture Note
Unlike pure-Ruby backends (Citrus, Parslet, Prism, Psych) which define Tree classes that inherit from TreeHaver::Base::Tree, tree-sitter backends (MRI, Rust, FFI, Java) define raw wrapper classes that get wrapped by TreeHaver::Tree.
The wrapping hierarchy is:
Java::Tree (this class)
When you use ‘TreeHaver::Parser#parse`, the returned tree is already wrapped in TreeHaver::Tree, which provides the full unified API including:
-
#source- The original source text -
#root_node- Returns aTreeHaver::Node(not rawJava::Node) -
#errors,#warnings,#comments- Parse diagnostics -
#edit- Mark tree as edited for incremental parsing -
#to_s,#inspect- String representations
This raw class only implements methods that require direct calls to jtreesitter. The wrapper adds Ruby-level conveniences and stores the source text needed for ‘Node#text` extraction.
Instance Attribute Summary collapse
- #impl ⇒ Object readonly private
Instance Method Summary collapse
-
#edit(start_byte:, old_end_byte:, new_end_byte:, start_point:, old_end_point:, new_end_point:) ⇒ void
private
Mark the tree as edited for incremental re-parsing.
-
#initialize(impl) ⇒ Tree
constructor
private
A new instance of Tree.
-
#root_node ⇒ Node
private
Get the root node of the tree.
Constructor Details
#initialize(impl) ⇒ Tree
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Tree.
609 610 611 |
# File 'lib/tree_haver/backends/java.rb', line 609 def initialize(impl) @impl = impl end |
Instance Attribute Details
#impl ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
606 607 608 |
# File 'lib/tree_haver/backends/java.rb', line 606 def impl @impl end |
Instance Method Details
#edit(start_byte:, old_end_byte:, new_end_byte:, start_point:, old_end_point:, new_end_point:) ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Mark the tree as edited for incremental re-parsing
639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 |
# File 'lib/tree_haver/backends/java.rb', line 639 def edit(start_byte:, old_end_byte:, new_end_byte:, start_point:, old_end_point:, new_end_point:) point_class = Java.java_classes[:Point] input_edit_class = Java.java_classes[:InputEdit] start_pt = point_class.new(start_point[:row], start_point[:column]) old_end_pt = point_class.new(old_end_point[:row], old_end_point[:column]) new_end_pt = point_class.new(new_end_point[:row], new_end_point[:column]) input_edit = input_edit_class.new( start_byte, old_end_byte, new_end_byte, start_pt, old_end_pt, new_end_pt, ) @impl.edit(input_edit) end |
#root_node ⇒ Node
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Get the root node of the tree
617 618 619 620 621 622 623 624 625 626 627 628 |
# File 'lib/tree_haver/backends/java.rb', line 617 def root_node result = @impl.rootNode # jtreesitter 0.26.0: rootNode() may return Optional<Node> or Node directly java_node = if result.respond_to?(:isPresent) raise TreeHaver::Error, "Tree has no root node" unless result.isPresent result.get else result end raise TreeHaver::Error, "Tree has no root node" unless java_node Node.new(java_node) end |