Class: TreeHaver::Backends::Java::Parser Private
- Inherits:
-
Object
- Object
- TreeHaver::Backends::Java::Parser
- 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 parser wrapper (raw backend parser)
This is a raw backend parser that wraps a jtreesitter Parser object via JRuby's Java interop. It is NOT intended for direct use by application code.
Users should use TreeHaver::Parser which wraps this class and provides:
- Automatic backend selection
- Language wrapper unwrapping
- Tree wrapping with source storage
- Unified API across all backends
Instance Method Summary collapse
-
#initialize ⇒ Parser
constructor
private
Create a new parser instance.
-
#language=(lang) ⇒ void
private
Set the language for this parser.
-
#parse(source) ⇒ Tree
private
Parse source code.
-
#parse_string(old_tree, source) ⇒ Tree
private
Parse source code with optional incremental parsing.
Constructor Details
#initialize ⇒ Parser
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.
Create a new parser instance
499 500 501 502 503 |
# File 'lib/tree_haver/backends/java.rb', line 499 def initialize raise TreeHaver::NotAvailable, 'Java backend not available' unless Java.available? @parser = Java.java_classes[:Parser].new end |
Instance Method Details
#language=(lang) ⇒ 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.
Set the language for this parser
Note: TreeHaver::Parser unwraps language objects before calling this method. This backend receives the Language wrapper's inner impl (java Language object).
512 513 514 515 |
# File 'lib/tree_haver/backends/java.rb', line 512 def language=(lang) # lang is already unwrapped by TreeHaver::Parser @parser.language = lang end |
#parse(source) ⇒ 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.
Parse source code
521 522 523 524 525 526 527 528 |
# File 'lib/tree_haver/backends/java.rb', line 521 def parse(source) java_result = @parser.parse(source) # jtreesitter 0.26.0 returns Optional<Tree> java_tree = unwrap_optional(java_result) raise TreeHaver::Error, 'Parser returned no tree' unless java_tree Tree.new(java_tree) end |
#parse_string(old_tree, source) ⇒ 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.
Parse source code with optional incremental parsing
Note: old_tree is already unwrapped by TreeHaver::Parser before reaching this method. The backend receives the raw Tree wrapper's impl, not a TreeHaver::Tree.
When old_tree is provided and has been edited, tree-sitter will reuse unchanged nodes for better performance.
542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 |
# File 'lib/tree_haver/backends/java.rb', line 542 def parse_string(old_tree, source) # old_tree is already unwrapped to Tree wrapper's impl by TreeHaver::Parser if old_tree # Get the actual Java Tree object java_old_tree = if old_tree.is_a?(Tree) old_tree.impl else unwrap_optional(old_tree) end java_result = if java_old_tree # jtreesitter 0.26.0 API: parse(String source, Tree oldTree) @parser.parse(source, java_old_tree) else @parser.parse(source) end else java_result = @parser.parse(source) end # jtreesitter 0.26.0 returns Optional<Tree> java_tree = unwrap_optional(java_result) raise TreeHaver::Error, 'Parser returned no tree' unless java_tree Tree.new(java_tree) end |