sofya.apps.atomicity
Class RBAutomata

java.lang.Object
  extended by sofya.apps.atomicity.RBAutomata
All Implemented Interfaces:
EventListener
Direct Known Subclasses:
RBAutomataExt52

public class RBAutomata
extends java.lang.Object
implements EventListener

Atomicity checking automata implementing the simple reduction-based algorithm for a single method invocation on a single thread.

Version:
12/15/2005
Author:
Alex Kinneer

Nested Class Summary
 
Nested classes/interfaces inherited from interface sofya.ed.semantic.EventListener
EventListener.Arguments, EventListener.CallData, EventListener.ExceptionData, EventListener.FieldData, EventListener.MethodData, EventListener.MonitorData, EventListener.NewAllocationData, EventListener.ObjectData, EventListener.ThreadData, EventListener.ThreadStatus
 
Field Summary
protected static int ACCEPT_L
          Constant indicating the automata is the left-mover accepting state.
protected static int ACCEPT_R
          Constant indicating the automata is in the right-mover or non-mover event accepting state.
protected  EventClassifier classifier
          Reference to the global event classifier, so that global classification can be read if necessary.
 MethodSignature method
          Signature of the method for which this automata is checking for atomicity.
protected static int REJECT
          Constant indicating that the automata is in the rejecting state (the regular expression R*N?L* has been violated).
protected  int state
          The current state of the automata.
 
Constructor Summary
RBAutomata(EventClassifier classifier, MethodSignature method)
          Creates a new reduction-based atomicity checking automata.
 
Method Summary
 void callReturnEvent(EventListener.ThreadData td, EventListener.CallData cd, boolean exceptional)
          Notification that a thread has returned from a method call.
 void classPrepareEvent(EventListener.ThreadData td, java.lang.String className)
          Notification that a class was prepared (this is, loaded by the classloader).
 void constructorCallEvent(EventListener.ThreadData td, EventListener.CallData cd)
          Notification that a constructor was invoked.
 void constructorEnterEvent(EventListener.ThreadData td, EventListener.ObjectData od, EventListener.MethodData md)
          Notification that a constructor was entered.
 void constructorExitEvent(EventListener.ThreadData td, EventListener.ObjectData od, EventListener.MethodData md)
          Notification that a constructor was exited.
 void exceptionCatchEvent(EventListener.ThreadData td, EventListener.ExceptionData ed)
          Notification that an exception was caught.
 void exceptionThrowEvent(EventListener.ThreadData td, EventListener.ExceptionData ed)
          Notification that an exception was thrown.
 void executionStarted()
          Notification that the system has begun executing user code.
 void instanceFieldAccessEvent(EventListener.ThreadData td, EventListener.ObjectData od, EventListener.FieldData fd)
          Notification that an instance field was read.
 void instanceFieldWriteEvent(EventListener.ThreadData td, EventListener.ObjectData od, EventListener.FieldData fd)
          Notification that an instance field was written.
 void interfaceCallEvent(EventListener.ThreadData td, EventListener.CallData cd)
          Notification that an interface method was called.
 boolean isAccepting()
          Reports whether the automata accepts the current method invocation as atomic.
 void monitorAcquireEvent(EventListener.ThreadData td, EventListener.ObjectData od, EventListener.MonitorData md)
          Notification that a thread has acquired a monitor.
 void monitorContendEvent(EventListener.ThreadData td, EventListener.ObjectData od, EventListener.MonitorData md)
          Notification that a thread is contending for a monitor.
 void monitorPreReleaseEvent(EventListener.ThreadData td, EventListener.ObjectData od, EventListener.MonitorData md)
          Notification that a thread is about to release a monitor.
 void monitorReleaseEvent(EventListener.ThreadData td, EventListener.ObjectData od, EventListener.MonitorData md)
          Notification that a thread has released a monitor.
 void newAllocationEvent(EventListener.ThreadData td, EventListener.NewAllocationData nad)
          Notification that an object was allocated by a NEW instruction.
 void staticCallEvent(EventListener.ThreadData td, EventListener.CallData cd)
          Notification that a static method was called.
 void staticFieldAccessEvent(EventListener.ThreadData td, EventListener.FieldData fd)
          Notification that a static field was read.
 void staticFieldWriteEvent(EventListener.ThreadData td, EventListener.FieldData fd)
          Notification that a static field was written.
 void staticInitializerEnterEvent(EventListener.ThreadData td, EventListener.MethodData md)
          Notification that a static initializer was entered.
 void staticMethodEnterEvent(EventListener.ThreadData td, EventListener.MethodData md)
          Notification that a static method was entered.
 void staticMethodExitEvent(EventListener.ThreadData td, EventListener.MethodData md)
          Notification that a static method was exited.
 void systemExited()
          Notification that the system has terminated.
 void systemStarted()
          Notification that the target virtual machine has been launched.
 void threadDeathEvent(EventListener.ThreadData td)
          Notification that a thread has terminated.
 void threadStartEvent(EventListener.ThreadData td)
          Notification that a thread has started.
protected  void update(EventClassifier.EventClass eventClass)
          Updates the state of the automata based on the current event.
 void virtualCallEvent(EventListener.ThreadData td, EventListener.CallData cd)
          Notification that a virtual method was called.
 void virtualMethodEnterEvent(EventListener.ThreadData td, EventListener.ObjectData od, EventListener.MethodData md)
          Notification that a virtual method was entered.
 void virtualMethodExitEvent(EventListener.ThreadData td, EventListener.ObjectData od, EventListener.MethodData md)
          Notification that a virtual method was exited.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

state

protected int state
The current state of the automata.


REJECT

protected static final int REJECT
Constant indicating that the automata is in the rejecting state (the regular expression R*N?L* has been violated).

See Also:
Constant Field Values

ACCEPT_R

protected static final int ACCEPT_R
Constant indicating the automata is in the right-mover or non-mover event accepting state.

See Also:
Constant Field Values

ACCEPT_L

protected static final int ACCEPT_L
Constant indicating the automata is the left-mover accepting state.

See Also:
Constant Field Values

classifier

protected final EventClassifier classifier
Reference to the global event classifier, so that global classification can be read if necessary.


method

public final MethodSignature method
Signature of the method for which this automata is checking for atomicity.

Constructor Detail

RBAutomata

public RBAutomata(EventClassifier classifier,
                  MethodSignature method)
Creates a new reduction-based atomicity checking automata.

Parameters:
classifier - Reference to the global event classifier, so that the published global classifications can be accessed if necessary.
method - Signature of the method for which this automata is to check for atomicity.
Method Detail

isAccepting

public boolean isAccepting()
Reports whether the automata accepts the current method invocation as atomic.

Returns:
true if the automata found this invocation of the method to be atomic, false otherwise.

update

protected void update(EventClassifier.EventClass eventClass)
Updates the state of the automata based on the current event.

Parameters:
eventClass - Classification of the event as a left-mover, right-mover, non-mover, or both-mover.

systemStarted

public void systemStarted()
Description copied from interface: EventListener
Notification that the target virtual machine has been launched.

Specified by:
systemStarted in interface EventListener

executionStarted

public void executionStarted()
Description copied from interface: EventListener
Notification that the system has begun executing user code.

This event will be preceded by thread start events.

Specified by:
executionStarted in interface EventListener

threadStartEvent

public void threadStartEvent(EventListener.ThreadData td)
Description copied from interface: EventListener
Notification that a thread has started. These events are not dependent on the module description.

Specified by:
threadStartEvent in interface EventListener
Parameters:
td - Information about the newly started thread.

threadDeathEvent

public void threadDeathEvent(EventListener.ThreadData td)
Description copied from interface: EventListener
Notification that a thread has terminated. These events are not dependent on the module description.

Specified by:
threadDeathEvent in interface EventListener
Parameters:
td - Information about the terminated thread.

classPrepareEvent

public void classPrepareEvent(EventListener.ThreadData td,
                              java.lang.String className)
Description copied from interface: EventListener
Notification that a class was prepared (this is, loaded by the classloader). These events are not dependent on the module description.

Specified by:
classPrepareEvent in interface EventListener
Parameters:
td - Information about the thread which caused the class to be prepared.
className - Name of the class which was prepared.

monitorContendEvent

public void monitorContendEvent(EventListener.ThreadData td,
                                EventListener.ObjectData od,
                                EventListener.MonitorData md)
Description copied from interface: EventListener
Notification that a thread is contending for a monitor.

Specified by:
monitorContendEvent in interface EventListener
Parameters:
td - Information about the thread which is contending for a monitor.
od - Information about the object which owns the monitor.
md - Information about the location of the monitor contention.

monitorAcquireEvent

public void monitorAcquireEvent(EventListener.ThreadData td,
                                EventListener.ObjectData od,
                                EventListener.MonitorData md)
Description copied from interface: EventListener
Notification that a thread has acquired a monitor.

Specified by:
monitorAcquireEvent in interface EventListener
Parameters:
td - Information about the thread which acquired a monitor.
od - Information about the object which owns the monitor.
md - Information about the location of the monitor acquisition.

monitorPreReleaseEvent

public void monitorPreReleaseEvent(EventListener.ThreadData td,
                                   EventListener.ObjectData od,
                                   EventListener.MonitorData md)
Description copied from interface: EventListener
Notification that a thread is about to release a monitor.

Specified by:
monitorPreReleaseEvent in interface EventListener
Parameters:
td - Information about the thread which is about to release a monitor.
od - Information about the object which owns the monitor.
md - Information about the location of the monitor about to be released event..

monitorReleaseEvent

public void monitorReleaseEvent(EventListener.ThreadData td,
                                EventListener.ObjectData od,
                                EventListener.MonitorData md)
Description copied from interface: EventListener
Notification that a thread has released a monitor.

Specified by:
monitorReleaseEvent in interface EventListener
Parameters:
td - Information about the thread which released a monitor.
od - Information about the object which owns the monitor.
md - Information about the location of the monitor release.

newAllocationEvent

public void newAllocationEvent(EventListener.ThreadData td,
                               EventListener.NewAllocationData nad)
Description copied from interface: EventListener
Notification that an object was allocated by a NEW instruction.

This event cannot yet associate a unique identifier with the object, because this event only represents the allocation of a reference to which an object of a given class may be assigned. In other words, no actual object has yet been created. A unique ID can be obtained once a constructor is executed, which is signaled by the EventListener.constructorEnterEvent(sofya.ed.semantic.EventListener.ThreadData, sofya.ed.semantic.EventListener.ObjectData, sofya.ed.semantic.EventListener.MethodData).

Specified by:
newAllocationEvent in interface EventListener
Parameters:
td - Information about the thread which allocated the object.
nad - Information about the new allocation.

constructorCallEvent

public void constructorCallEvent(EventListener.ThreadData td,
                                 EventListener.CallData cd)
Description copied from interface: EventListener
Notification that a constructor was invoked.

Specified by:
constructorCallEvent in interface EventListener
Parameters:
td - Information about the thread which invoked the constructor.
cd - Information about the particular constructor which was invoked.

constructorEnterEvent

public void constructorEnterEvent(EventListener.ThreadData td,
                                  EventListener.ObjectData od,
                                  EventListener.MethodData md)
Description copied from interface: EventListener
Notification that a constructor was entered.

This is the first point during the object creation process at which the object can be uniquely identified.

Specified by:
constructorEnterEvent in interface EventListener
Parameters:
td - Information about the thread executing the constructor.
od - Information about the object under construction. At the time of this event, only the object ID will be valid.
md - Information about the entered constructor.

constructorExitEvent

public void constructorExitEvent(EventListener.ThreadData td,
                                 EventListener.ObjectData od,
                                 EventListener.MethodData md)
Description copied from interface: EventListener
Notification that a constructor was exited.

NOTE: This event is raised only if the constructor completes normally. If a constructor throws an escaping exception, the object is not successfully created and thus further events related to the object are not possible.

Specified by:
constructorExitEvent in interface EventListener
Parameters:
td - Information about the thread executing the constructor.
od - Information about the object under construction. At the time of this event, only the object ID will be valid.
md - Information about the exited constructor.

staticFieldAccessEvent

public void staticFieldAccessEvent(EventListener.ThreadData td,
                                   EventListener.FieldData fd)
Description copied from interface: EventListener
Notification that a static field was read.

Specified by:
staticFieldAccessEvent in interface EventListener
Parameters:
td - Information about the thread in which the field access occurred.
fd - Information about the accessed field.

instanceFieldAccessEvent

public void instanceFieldAccessEvent(EventListener.ThreadData td,
                                     EventListener.ObjectData od,
                                     EventListener.FieldData fd)
Description copied from interface: EventListener
Notification that an instance field was read.

Specified by:
instanceFieldAccessEvent in interface EventListener
Parameters:
td - Information about the thread in which the field access occurred.
od - Information about the object which owns the accessed field.
fd - Information about the accessed field.

staticFieldWriteEvent

public void staticFieldWriteEvent(EventListener.ThreadData td,
                                  EventListener.FieldData fd)
Description copied from interface: EventListener
Notification that a static field was written.

Specified by:
staticFieldWriteEvent in interface EventListener
Parameters:
td - Information about the thread in which the field write occurred.
fd - Information about the written field.

instanceFieldWriteEvent

public void instanceFieldWriteEvent(EventListener.ThreadData td,
                                    EventListener.ObjectData od,
                                    EventListener.FieldData fd)
Description copied from interface: EventListener
Notification that an instance field was written.

Specified by:
instanceFieldWriteEvent in interface EventListener
Parameters:
td - Information about the thread in which the field write occurred.
od - Information about the object which owns the written field.
fd - Information about the written field.

staticCallEvent

public void staticCallEvent(EventListener.ThreadData td,
                            EventListener.CallData cd)
Description copied from interface: EventListener
Notification that a static method was called.

Specified by:
staticCallEvent in interface EventListener
Parameters:
td - Information about the thread which called the method.
cd - Information about the called method.

virtualCallEvent

public void virtualCallEvent(EventListener.ThreadData td,
                             EventListener.CallData cd)
Description copied from interface: EventListener
Notification that a virtual method was called.

Specified by:
virtualCallEvent in interface EventListener
Parameters:
td - Information about the thread which called the method.
cd - Information about the called method.

interfaceCallEvent

public void interfaceCallEvent(EventListener.ThreadData td,
                               EventListener.CallData cd)
Description copied from interface: EventListener
Notification that an interface method was called.

Specified by:
interfaceCallEvent in interface EventListener
Parameters:
td - Information about the thread which called the method.
cd - Information about the called method.

callReturnEvent

public void callReturnEvent(EventListener.ThreadData td,
                            EventListener.CallData cd,
                            boolean exceptional)
Description copied from interface: EventListener
Notification that a thread has returned from a method call.

Specified by:
callReturnEvent in interface EventListener
Parameters:
td - Information about the thread in which the method call returned.
cd - Information about the called method from which control returned.
exceptional - Flag indicating whether the method returned exceptionally.

virtualMethodEnterEvent

public void virtualMethodEnterEvent(EventListener.ThreadData td,
                                    EventListener.ObjectData od,
                                    EventListener.MethodData md)
Description copied from interface: EventListener
Notification that a virtual method was entered.

Specified by:
virtualMethodEnterEvent in interface EventListener
Parameters:
td - Information about the thread executing the method.
od - Information about the object on which the virtual method was called.
md - Information about the entered method.

virtualMethodExitEvent

public void virtualMethodExitEvent(EventListener.ThreadData td,
                                   EventListener.ObjectData od,
                                   EventListener.MethodData md)
Description copied from interface: EventListener
Notification that a virtual method was exited.

Specified by:
virtualMethodExitEvent in interface EventListener
Parameters:
td - Information about the thread executing the method.
od - Information about the object on which the virtual method was called.
md - Information about the exited method.

staticMethodEnterEvent

public void staticMethodEnterEvent(EventListener.ThreadData td,
                                   EventListener.MethodData md)
Description copied from interface: EventListener
Notification that a static method was entered.

Specified by:
staticMethodEnterEvent in interface EventListener
Parameters:
td - Information about the thread executing the method.
md - Information about the entered method.

staticMethodExitEvent

public void staticMethodExitEvent(EventListener.ThreadData td,
                                  EventListener.MethodData md)
Description copied from interface: EventListener
Notification that a static method was exited.

Specified by:
staticMethodExitEvent in interface EventListener
Parameters:
td - Information about the thread executing the method.
md - Information about the exited method.

exceptionThrowEvent

public void exceptionThrowEvent(EventListener.ThreadData td,
                                EventListener.ExceptionData ed)
Description copied from interface: EventListener
Notification that an exception was thrown.

Specified by:
exceptionThrowEvent in interface EventListener
Parameters:
td - Information about the thread in which the exception was thrown.
ed - Information about the thrown exception.

exceptionCatchEvent

public void exceptionCatchEvent(EventListener.ThreadData td,
                                EventListener.ExceptionData ed)
Description copied from interface: EventListener
Notification that an exception was caught.

Specified by:
exceptionCatchEvent in interface EventListener
Parameters:
td - Information about the thread in which the exception was caught.
ed - Information about the caught exception.

staticInitializerEnterEvent

public void staticInitializerEnterEvent(EventListener.ThreadData td,
                                        EventListener.MethodData md)
Description copied from interface: EventListener
Notification that a static initializer was entered.

Specified by:
staticInitializerEnterEvent in interface EventListener
Parameters:
td - Information about the thread executing the static initializer.
md - Information about the entered static initializer.

systemExited

public void systemExited()
Description copied from interface: EventListener
Notification that the system has terminated.

Specified by:
systemExited in interface EventListener