Class: TreeHaver::Backends::Java::Tree Private

Inherits:
Object
  • Object
show all
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 a TreeHaver::Node (not raw Java::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

Instance Method Summary collapse

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

#implObject (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

Parameters:

  • start_byte (Integer)

    byte offset where the edit starts

  • old_end_byte (Integer)

    byte offset where the old text ended

  • new_end_byte (Integer)

    byte offset where the new text ends

  • start_point (Hash)

    starting position as ‘{ row:, column: }`

  • old_end_point (Hash)

    old ending position as ‘{ row:, column: }`

  • new_end_point (Hash)

    new ending position as ‘{ row:, column: }`



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_nodeNode

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

Returns:

  • (Node)

    the root node

Raises:



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