Exception: Roby::LocalizedError

Inherits:
ExceptionBase show all
Includes:
DRoby::V5::LocalizedErrorDumper
Defined in:
lib/roby/standard_errors.rb,
lib/roby/droby/enable.rb

Overview

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.

Instance Attribute Summary collapse

Attributes inherited from ExceptionBase

#original_exceptions

Class Method Summary collapse

Instance Method Summary collapse

Methods included from DRoby::V5::LocalizedErrorDumper

#droby_dump

Methods inherited from ExceptionBase

#each_original_exception, #report_exceptions_from

Methods included from DRoby::V5::ExceptionBaseDumper

#droby_dump

Methods included from DRoby::V5::Builtins::ExceptionDumper

#droby_dump

Constructor Details

#initialize(failure_point) ⇒ LocalizedError

Create a LocalizedError object with the given failure point



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# 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

Instance Attribute Details

#failed_eventObject (readonly)

The objects of the given categories which are related to #failure_point



92
93
94
# File 'lib/roby/standard_errors.rb', line 92

def failed_event
  @failed_event
end

#failed_generatorObject (readonly)

The objects of the given categories which are related to #failure_point



92
93
94
# File 'lib/roby/standard_errors.rb', line 92

def failed_generator
  @failed_generator
end

#failed_taskObject (readonly)

The objects of the given categories which are related to #failure_point



92
93
94
# File 'lib/roby/standard_errors.rb', line 92

def failed_task
  @failed_task
end

#failure_pointObject (readonly)

The object describing the point of failure



89
90
91
# File 'lib/roby/standard_errors.rb', line 89

def failure_point
  @failure_point
end

Class Method Details

.matchQueries::LocalizedErrorMatcher

Create a Queries::LocalizedErrorMatcher that matches this exception



150
151
152
# File 'lib/roby/standard_errors.rb', line 150

def self.match
    Roby::Queries::LocalizedErrorMatcher.new.with_model(self)
end

.to_execution_exception_matcherQueries::ExecutionExceptionMatcher



143
144
145
# File 'lib/roby/standard_errors.rb', line 143

def self.to_execution_exception_matcher
    Roby::Queries::ExecutionExceptionMatcher.new.with_model(self)
end

Instance Method Details

#fatal?Boolean

If true, such an exception causes the execution engine to stop tasks in the hierarchy. Otherwise, it only causes notification(s).

Returns:

  • (Boolean)


80
# File 'lib/roby/standard_errors.rb', line 80

def fatal?; true end

#involved_plan_object?(obj) ⇒ Boolean

True if obj is involved in this error

Returns:

  • (Boolean)


135
136
137
138
139
140
# 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

#pretty_print(pp) ⇒ Object



125
126
127
128
129
130
131
132
# 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

#propagated?Boolean

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

Returns:

  • (Boolean)


87
# File 'lib/roby/standard_errors.rb', line 87

def propagated?; true end

#to_execution_exceptionObject



121
122
123
# File 'lib/roby/standard_errors.rb', line 121

def to_execution_exception
    ExecutionException.new(self)
end