Class: TreeHaver::Backends::Java::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/tree_haver/backends/java.rb

Overview

Wrapper for java-tree-sitter Parser

Instance Method Summary collapse

Constructor Details

#initializeParser

Create a new parser instance

Raises:



423
424
425
426
# File 'lib/tree_haver/backends/java.rb', line 423

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 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).

Parameters:

  • lang (Object)

    the Java language object (already unwrapped)



435
436
437
438
# File 'lib/tree_haver/backends/java.rb', line 435

def language=(lang)
  # lang is already unwrapped by TreeHaver::Parser
  @parser.language = lang
end

#parse(source) ⇒ Tree

Parse source code

Parameters:

  • source (String)

    the source code to parse

Returns:

  • (Tree)

    raw backend tree (wrapping happens in TreeHaver::Parser)



444
445
446
447
448
# File 'lib/tree_haver/backends/java.rb', line 444

def parse(source)
  java_tree = @parser.parse(source)
  # Return raw Java::Tree - TreeHaver::Parser will wrap it
  Tree.new(java_tree)
end

#parse_string(old_tree, source) ⇒ Tree

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.

Parameters:

  • old_tree (Tree, nil)

    previous backend tree for incremental parsing (already unwrapped)

  • source (String)

    the source code to parse

Returns:

  • (Tree)

    raw backend tree (wrapping happens in TreeHaver::Parser)

See Also:



462
463
464
465
466
467
468
469
470
471
472
# File 'lib/tree_haver/backends/java.rb', line 462

def parse_string(old_tree, source)
  # old_tree is already unwrapped to Tree wrapper's impl by TreeHaver::Parser
  if old_tree
    java_old_tree = old_tree.is_a?(Tree) ? old_tree.impl : old_tree
    java_tree = @parser.parse(java_old_tree, source)
  else
    java_tree = @parser.parse(source)
  end
  # Return raw Java::Tree - TreeHaver::Parser will wrap it
  Tree.new(java_tree)
end