class Roby::LocalizedError
This kind of errors are generated during the plan execution, allowing to blame a fault on a plan object (failure_point
). The precise failure point is categorized in the failed_event
, failed_generator
and failed_task
. It is guaranteed that one of failed_generator
and failed_task
is non-nil.
Attributes
The objects of the given categories which are related to failure_point
The objects of the given categories which are related to failure_point
The objects of the given categories which are related to failure_point
The object describing the point of failure
Public Class Methods
Create a {Queries::LocalizedErrorMatcher} that matches this exception
@return [Queries::LocalizedErrorMatcher]
# File lib/roby/standard_errors.rb, line 150 def self.match Roby::Queries::LocalizedErrorMatcher.new.with_model(self) end
Create a LocalizedError
object with the given failure point
Roby::ExceptionBase::new
# File lib/roby/standard_errors.rb, line 95 def initialize(failure_point) super() @failure_point = failure_point @failed_task, @failed_event, @failed_generator = nil if failure_point.kind_of?(Event) @failed_event = failure_point @failed_generator = failure_point.generator elsif failure_point.kind_of?(EventGenerator) @failed_generator = failure_point elsif failure_point.kind_of?(Task) @failed_task = failure_point end if !@failed_task && @failed_generator && @failed_generator.respond_to?(:task) @failed_task = failed_generator.task end if !@failed_task && !@failed_generator raise ArgumentError, "cannot deduce a task and/or a generator from #{failure_point}" end if failed_event failed_event.protect_all_sources end end
@return [Queries::ExecutionExceptionMatcher]
# File lib/roby/standard_errors.rb, line 143 def self.to_execution_exception_matcher Roby::Queries::ExecutionExceptionMatcher.new.with_model(self) end
Public Instance Methods
If true, such an exception causes the execution engine to stop tasks in the hierarchy. Otherwise, it only causes notification(s).
# File lib/roby/standard_errors.rb, line 80 def fatal?; true end
True if obj
is involved in this error
# File lib/roby/standard_errors.rb, line 135 def involved_plan_object?(obj) obj.kind_of?(PlanObject) && (obj == failed_event || obj == failed_generator || obj == failed_task) end
# File lib/roby/standard_errors.rb, line 125 def pretty_print(pp) pp.text "#{self.class.name}" if !message.empty? pp.text ": #{message}" end pp.breakable failure_point.pretty_print(pp) end
If true, such an exception will be propagated in the plan dependency structure. Otherwise, it's directly reported to the plan itself (which can choose to handle it).
This is usually set to false for exceptions that report global information about the plan, such as e.g. MissionFailedError
# File lib/roby/standard_errors.rb, line 87 def propagated?; true end
# File lib/roby/standard_errors.rb, line 121 def to_execution_exception ExecutionException.new(self) end