| 
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.eclipse.ocl.examples.impactanalyzer.instanceScope.traceback.AbstractTracebackStep<E>
public abstract class AbstractTracebackStep<E extends OCLExpression>
| Nested Class Summary | |
|---|---|
static class | 
AbstractTracebackStep.TracebackStepAndScopeChange
Encapsulates the scope change that has to happen before invoking a subsequent traceback step.  | 
protected static class | 
AbstractTracebackStep.TracebackStepAndScopeChangeWithOperationCallExp
When executed using the AbstractTracebackStep.TracebackStepAndScopeChangeWithOperationCallExp.traceback(AnnotatedEObject, UnusedEvaluationRequestSet, TracebackCache, Notification) method,
 results will be keyed with AbstractTracebackStep.TracebackStepAndScopeChangeWithOperationCallExp.callToWhichResultsAreSpecific because the TracebackStep encapsulated by this object
 navigates back to the specified call expression, and there either to the source or an argument expression. | 
| Field Summary | |
|---|---|
protected  OCLFactory | 
oclFactory
 | 
static int | 
provenUnused
 | 
protected  org.eclipse.emf.ecore.EClass | 
requiredType
If set to a non- null class, this step asserts that if the source objects passed to its
 traceback(AnnotatedEObject, UnusedEvaluationRequestSet, org.eclipse.ocl.examples.impactanalyzer.instanceScope.traceback.TracebackCache, Notification) or
 #traceback(Set, UnusedEvaluationRequestSet, org.eclipse.ocl.examples.impactanalyzer.instanceScope.traceback.TracebackCache, Notification) operation are not compatible to that
 type, then the result set will be empty. | 
static int | 
tracebackExecutions
 | 
| Constructor Summary | |
|---|---|
protected  | 
AbstractTracebackStep(E sourceExpression,
                      java.util.Stack<java.lang.String> tupleLiteralNamesToLookFor,
                      OppositeEndFinder oppositeEndFinder,
                      OperationBodyToCallMapper operationBodyToCallMapper,
                      UnusedEvaluationRequestFactory unusedEvaluationRequestFactory,
                      OCLFactory oclFactory)
If the expression's type for which this traceback step is constructed is class-like, requiredType is set to the
 expression's type. | 
| Method Summary | |
|---|---|
protected  java.util.Set<AnnotatedEObject> | 
annotate(AnnotatedEObject fromObject,
         java.util.Set<AnnotatedEObject> newResults)
If in debug mode, creates a new AnnotatedEObject for each
 one in newResults, assuming that there is no "from" object; as an alibi "from" object, the
 annotated objects from newResults are used. | 
protected  AnnotatedEObject | 
annotateEObject(AnnotatedEObject object)
Annotates a non-navigation where object is forwarded unchanged from this step to another. | 
protected  AnnotatedEObject | 
annotateEObject(AnnotatedEObject fromObject,
                org.eclipse.emf.ecore.EObject next)
Annotates a navigation from fromObject to next by taking over fromObject's annotation,
 adding a description of this step and telling at which object the navigation arrived. | 
protected  java.util.Stack<java.lang.String> | 
cloneWithTypeCheck(java.util.Stack<java.lang.String> tupleLiteralNamesToLookFor)
 | 
protected  AbstractTracebackStep.TracebackStepAndScopeChange | 
createTracebackStepAndScopeChange(OCLExpression sourceExpression,
                                  OCLExpression targetExpression,
                                  org.eclipse.emf.ecore.EClass context,
                                  OperationBodyToCallMapper operationBodyToCallMapper,
                                  java.util.Stack<java.lang.String> tupleLiteralNamesToLookFor,
                                  TracebackStepCache tracebackStepCache)
Creates a new AbstractTracebackStep.TracebackStepAndScopeChange} object. | 
protected  AbstractTracebackStep.TracebackStepAndScopeChangeWithOperationCallExp | 
createTracebackStepAndScopeChange(OCLExpression sourceExpression,
                                  OCLExpression targetExpression,
                                  OperationCallExp call,
                                  org.eclipse.emf.ecore.EClass context,
                                  OperationBodyToCallMapper operationBodyToCallMapper,
                                  java.util.Stack<java.lang.String> tupleLiteralNamesToLookFor,
                                  TracebackStepCache tracebackStepCache)
Creates a new AbstractTracebackStep.TracebackStepAndScopeChange} object, remembering an OperationCallExp to which the
 results produced by this step are specific. | 
protected static java.util.Set<Variable> | 
getAllVariablesInScope(OCLExpression e,
                       OperationBodyToCallMapper operationBodyToCallMapper)
Starting from e and ascending its containment hierarchy, adds to the resulting set all variables that are scoped by
 any of the expressions visited. | 
 E | 
getExpression()
 | 
protected  org.eclipse.emf.ecore.EClass | 
getInnermostClass(org.eclipse.emf.ecore.EClassifier type)
We assume a collection, possibly nested, that eventually has elements of a class-like type inside.  | 
protected  org.eclipse.emf.ecore.EClassifier | 
getInnermostElementType(org.eclipse.emf.ecore.EClassifier type)
We assume a collection, possibly nested, that eventually has elements of a class-like type inside.  | 
protected  org.eclipse.emf.ecore.EClass | 
getInnermostTypeConsideringTupleLiteralsLookedFor(java.util.Stack<java.lang.String> tupleLiteralNamesToLookFor,
                                                  org.eclipse.emf.ecore.EClassifier type)
 | 
protected  OppositeEndFinder | 
getOppositeEndFinder()
 | 
protected static java.util.Set<Variable> | 
getVariablesScopedByExpression(OCLExpression e,
                               OperationBodyToCallMapper operationBodyToCallMapper)
 | 
protected abstract  OperationCallExpKeyedSet | 
performSubsequentTraceback(AnnotatedEObject source,
                           UnusedEvaluationRequestSet pendingUnusedEvalRequests,
                           TracebackCache tracebackCache,
                           org.eclipse.emf.common.notify.Notification changeEvent)
This method is used to invoke the TracebackStep#traceback(AnnotatedEObject, Set, org.eclipse.ocl.examples.impactanalyzer.instanceScope.traceback.TracebackCache, Notification) method on all necessary subsequent TracebackSteps and return their results. | 
 OperationCallExpKeyedSet | 
traceback(AnnotatedEObject source,
          UnusedEvaluationRequestSet pendingUnusedEvalRequests,
          TracebackCache tracebackCache,
          org.eclipse.emf.common.notify.Notification changeEvent)
When being executed, the step computes a conservative superset of the objects that, when used as the context for the overall OCLExpression, may cause the expression for which this TracebackStep was created to evaluate to
 source. | 
| Methods inherited from class java.lang.Object | 
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
| Field Detail | 
|---|
protected org.eclipse.emf.ecore.EClass requiredType
null class, this step asserts that if the source objects passed to its
 traceback(AnnotatedEObject, UnusedEvaluationRequestSet, org.eclipse.ocl.examples.impactanalyzer.instanceScope.traceback.TracebackCache, Notification) or
 #traceback(Set, UnusedEvaluationRequestSet, org.eclipse.ocl.examples.impactanalyzer.instanceScope.traceback.TracebackCache, Notification) operation are not compatible to that
 type, then the result set will be empty.
protected final OCLFactory oclFactory
public static int tracebackExecutions
public static int provenUnused
| Constructor Detail | 
|---|
protected AbstractTracebackStep(E sourceExpression,
                                java.util.Stack<java.lang.String> tupleLiteralNamesToLookFor,
                                OppositeEndFinder oppositeEndFinder,
                                OperationBodyToCallMapper operationBodyToCallMapper,
                                UnusedEvaluationRequestFactory unusedEvaluationRequestFactory,
                                OCLFactory oclFactory)
requiredType is set to the
 expression's type.
tupleLiteralNamesToLookFor - if a tuple part is being sought, the expression type will be a tuple type; in this case, extract the sought
            part's type as the requiredType.| Method Detail | 
|---|
public E getExpression()
protected org.eclipse.emf.ecore.EClass getInnermostTypeConsideringTupleLiteralsLookedFor(java.util.Stack<java.lang.String> tupleLiteralNamesToLookFor,
                                                                                         org.eclipse.emf.ecore.EClassifier type)
public OperationCallExpKeyedSet traceback(AnnotatedEObject source,
                                          UnusedEvaluationRequestSet pendingUnusedEvalRequests,
                                          TracebackCache tracebackCache,
                                          org.eclipse.emf.common.notify.Notification changeEvent)
TracebackStepOCLExpression, may cause the expression for which this TracebackStep was created to evaluate to
 source.
traceback in interface TracebackStepsource - the object to which the expression, for which this step was created, shall evaluatependingUnusedEvalRequests - When tracing back a VariableExp expression, this infers a value for the variable referred to by the
            expression. This may trigger a previously delayed "unused" evaluation to be triggered. Those triggerable
            "unused" evaluation requests are passed using this parameter. When triggering one of them proves the location of
            the original change to be unused, an empty set will result from this call. May be null, having the
            same effect as passing a set that contains no requests.tracebackCache - cache in which previous results of
            TracebackStep.traceback(AnnotatedEObject, UnusedEvaluationRequestSet, org.eclipse.ocl.examples.impactanalyzer.instanceScope.traceback.TracebackCache, Notification)
            executions can be foundchangeEvent - the original change event; used for performing pre/post evaluations
source. The resulting objects may additionally be keyed by OperationCallExp expressions in case
         their inference left an operation body through a self or parameter variable. These keys are
         removed again in the OperationCallTracebackStep, keying the results specific to the call being traced
         by the null key. All object reached without leaving an operation body through a self
         or parameter variable are also keyed by the null key.
protected abstract OperationCallExpKeyedSet performSubsequentTraceback(AnnotatedEObject source,
                                                                       UnusedEvaluationRequestSet pendingUnusedEvalRequests,
                                                                       TracebackCache tracebackCache,
                                                                       org.eclipse.emf.common.notify.Notification changeEvent)
TracebackStep#traceback(AnnotatedEObject, Set, org.eclipse.ocl.examples.impactanalyzer.instanceScope.traceback.TracebackCache, Notification) method on all necessary subsequent TracebackSteps and return their results.
 Which subsequent steps are necessary depends on the respective source OCLExpression the TracebackStep was created for.
protected static java.util.Set<Variable> getVariablesScopedByExpression(OCLExpression e,
                                                                        OperationBodyToCallMapper operationBodyToCallMapper)
protected static java.util.Set<Variable> getAllVariablesInScope(OCLExpression e,
                                                                OperationBodyToCallMapper operationBodyToCallMapper)
e and ascending its containment hierarchy, adds to the resulting set all variables that are scoped by
 any of the expressions visited.
protected AbstractTracebackStep.TracebackStepAndScopeChange createTracebackStepAndScopeChange(OCLExpression sourceExpression,
                                                                                              OCLExpression targetExpression,
                                                                                              org.eclipse.emf.ecore.EClass context,
                                                                                              OperationBodyToCallMapper operationBodyToCallMapper,
                                                                                              java.util.Stack<java.lang.String> tupleLiteralNamesToLookFor,
                                                                                              TracebackStepCache tracebackStepCache)
AbstractTracebackStep.TracebackStepAndScopeChange} object. Fetches from the cache or produces the TracebackStep}
 and computes the variable scope changes (see getVariablesChangingScope(OCLExpression, OCLExpression, OperationBodyToCallMapper).
 The results of these two operations are used for the AbstractTracebackStep.TracebackStepAndScopeChange constructor.
protected AbstractTracebackStep.TracebackStepAndScopeChangeWithOperationCallExp createTracebackStepAndScopeChange(OCLExpression sourceExpression,
                                                                                                                  OCLExpression targetExpression,
                                                                                                                  OperationCallExp call,
                                                                                                                  org.eclipse.emf.ecore.EClass context,
                                                                                                                  OperationBodyToCallMapper operationBodyToCallMapper,
                                                                                                                  java.util.Stack<java.lang.String> tupleLiteralNamesToLookFor,
                                                                                                                  TracebackStepCache tracebackStepCache)
AbstractTracebackStep.TracebackStepAndScopeChange} object, remembering an OperationCallExp to which the
 results produced by this step are specific. The results produced by the step returned will all be keyed
 by the call. Fetches from the cache or produces the TracebackStep}
 and computes the variable scope changes (see getVariablesChangingScope(OCLExpression, OCLExpression, OperationBodyToCallMapper).
 The results of these two operations are used for the AbstractTracebackStep.TracebackStepAndScopeChange constructor.
protected org.eclipse.emf.ecore.EClass getInnermostClass(org.eclipse.emf.ecore.EClassifier type)
EClass, null is returned.
protected org.eclipse.emf.ecore.EClassifier getInnermostElementType(org.eclipse.emf.ecore.EClassifier type)
EClass, null is returned.
protected java.util.Stack<java.lang.String> cloneWithTypeCheck(java.util.Stack<java.lang.String> tupleLiteralNamesToLookFor)
protected AnnotatedEObject annotateEObject(AnnotatedEObject fromObject,
                                           org.eclipse.emf.ecore.EObject next)
fromObject to next by taking over fromObject's annotation,
 adding a description of this step and telling at which object the navigation arrived. In case we're not in
 debug mode, a default message (see AnnotatedEObject.NOT_IN_DEBUG_MODE_MESSAGE)
 is used instead to save memory.
protected AnnotatedEObject annotateEObject(AnnotatedEObject object)
object is forwarded unchanged from this step to another. The result is an
 AnnotatedEObject with its from-object and reached object both being set to object, adding a
 description of this step and telling at which object the navigation arrived. In case we're not in
 debug mode, a default message (see
 AnnotatedEObject.NOT_IN_DEBUG_MODE_MESSAGE) is used instead to save memory.
protected java.util.Set<AnnotatedEObject> annotate(AnnotatedEObject fromObject,
                                                   java.util.Set<AnnotatedEObject> newResults)
debug mode, creates a new AnnotatedEObject for each
 one in newResults, assuming that there is no "from" object; as an alibi "from" object, the
 annotated objects from newResults are used.
protected OppositeEndFinder getOppositeEndFinder()
  | 
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||