class Nashorn::JSError

Constants

PARSER_EXCEPTION

Public Class Methods

new(native) click to toggle source
Calls superclass method
# File lib/nashorn/error.rb, line 5
def initialize(native)
  @native = native # might be a NativeException wrapping a Java Throwable
  if ( value = self.value(true) ) != nil
    if value.is_a?(Exception)
      super "#{value.class.name}: #{value.message}"
    elsif value.is_a?(JS::ScriptObject) # && @native.to_s.index('Error:')
      super normalize_message(@native)
    else
      super value
    end
  else
    if cause = self.cause
      message = normalize_message(cause)
    else
      message = normalize_message(@native)
    end
    super message
  end
end
parse_error?(error) click to toggle source

@private invented for ExceJS

# File lib/nashorn/error.rb, line 120
def self.parse_error?(error)
  PARSER_EXCEPTION.eql? error.class.name
end

Public Instance Methods

backtrace() click to toggle source

The backtrace is constructed using javascript_backtrace + the Ruby part.

Calls superclass method
# File lib/nashorn/error.rb, line 77
def backtrace
  if js_backtrace = javascript_backtrace
    js_backtrace.push(*super)
  else
    super
  end
end
cause() click to toggle source

Returns the (nested) cause of this error if any.

# File lib/nashorn/error.rb, line 32
def cause
  return @cause if defined?(@cause)

  if @native.respond_to?(:cause) && @native.cause
    @cause = @native.cause
  else
    @cause = @native.is_a?(JS::NashornException) ? @native : nil
  end
end
column_number() click to toggle source
# File lib/nashorn/error.rb, line 112
def column_number
  cause.respond_to?(:getColumnNumber) ? cause.getColumnNumber : nil
end
file_name() click to toggle source

jdk.nashorn.internal.runtime::ECMAException < NashornException has these :

# File lib/nashorn/error.rb, line 104
def file_name
  cause.respond_to?(:getFileName) ? cause.getFileName : nil
end
inspect() click to toggle source
# File lib/nashorn/error.rb, line 25
def inspect
  "#<#{self.class.name}: #{message}>"
end
javascript_backtrace(raw_elements = false) click to toggle source

Returns the JavaScript back-trace part for this error (the script stack).

# File lib/nashorn/error.rb, line 86
def javascript_backtrace(raw_elements = false)
  return @javascript_backtrace if (@javascript_backtrace ||= nil) && ! raw_elements

  return nil unless cause.is_a?(JS::NashornException)

  return JS::NashornException.getScriptFrames(cause) if raw_elements

  js_backtrace = []
  js_backtrace << @_trace_trail if defined?(@_trace_trail)

  for element in JS::NashornException.getScriptFrames(cause)
    js_backtrace << element.to_s # element - ScriptStackElement
  end
  @javascript_backtrace = js_backtrace
end
line_number() click to toggle source
# File lib/nashorn/error.rb, line 108
def line_number
  cause.respond_to?(:getLineNumber) ? cause.getLineNumber : nil
end
message() click to toggle source
Calls superclass method
# File lib/nashorn/error.rb, line 29
def message; super.to_s end
thrown(unwrap = nil)
Alias for: value
unwrap() click to toggle source

Attempts to unwrap the (native) JavaScript/Java exception.

# File lib/nashorn/error.rb, line 43
def unwrap
  return @unwrap if defined?(@unwrap)
  cause = self.cause
  if cause && cause.is_a?(JS::NashornException)
    e = cause.getCause
    if e && e.is_a?(Java::OrgJrubyExceptions::RaiseException)
      @unwrap = e.getException
    else
      @unwrap = e
    end
  else
    @unwrap = nil
  end
end
value(unwrap = nil) click to toggle source

Return the thown (native) JavaScript value.

# File lib/nashorn/error.rb, line 59
def value(unwrap = nil) # (unwrap = false)
  # return @value if defined?(@value) && ! unwrap
  # @value = get_thrown unless defined?(@value)
  # return @value.unwrap if unwrap && @value.respond_to?(:unwrap)
  # @value

  return @value if defined?(@value)
  
  if thrown = get_thrown
    # NOTE: thrown sometimes leaks a Nashorn::JS::ScriptObject
    @value = Nashorn.to_rb thrown
  else
    @value = thrown
  end
end
Also aliased as: thrown

Private Instance Methods

get_thrown() click to toggle source
# File lib/nashorn/error.rb, line 126
def get_thrown
  if ( cause = self.cause ) && cause.respond_to?(:thrown)
    cause.thrown  # e.g. NashornException.getThrown
  else
    nil
  end
end
normalize_message(error) click to toggle source
# File lib/nashorn/error.rb, line 134
def normalize_message(error)
  # "<eval>:1:1 Expected an operand but found )\n ())\n^"
  # extract first trace part of message :
  message = error.message
  return message unless JSError.parse_error?(error)
  if match = message.match(/^(.*?\:\d+\:\d+)\s/)
    @_trace_trail = match[1]
    return message[@_trace_trail.length + 1..-1]
  end
  message
end