Renaming /doc to /docs for use with GitHub Pages
authorVaibhav Sharma <vaibhav@umn.edu>
Tue, 16 Jan 2018 20:33:21 +0000 (14:33 -0600)
committerVaibhav Sharma <vaibhav@umn.edu>
Tue, 16 Jan 2018 20:33:21 +0000 (14:33 -0600)
178 files changed:
doc/devel/attributes.md [deleted file]
doc/devel/bytecode_factory.md [deleted file]
doc/devel/choicegenerator.md [deleted file]
doc/devel/coding_conventions.md [deleted file]
doc/devel/create_project.md [deleted file]
doc/devel/design.md [deleted file]
doc/devel/eclipse_plugin_update.md [deleted file]
doc/devel/embedded.md [deleted file]
doc/devel/index.md [deleted file]
doc/devel/jpf_tests.md [deleted file]
doc/devel/listener.md [deleted file]
doc/devel/logging.md [deleted file]
doc/devel/mercurial.md [deleted file]
doc/devel/mji.md [deleted file]
doc/devel/mji/mangling.md [deleted file]
doc/devel/modules.md [deleted file]
doc/devel/partial_order_reduction.md [deleted file]
doc/devel/report.md [deleted file]
doc/graphics/DFSListener.svg [deleted file]
doc/graphics/app-types.svg [deleted file]
doc/graphics/attributes.svg [deleted file]
doc/graphics/bc-factory.svg [deleted file]
doc/graphics/cg-impl.svg [deleted file]
doc/graphics/cg-motivation.svg [deleted file]
doc/graphics/cg-ontology.svg [deleted file]
doc/graphics/cg-sequence.svg [deleted file]
doc/graphics/choicegen-example.svg [deleted file]
doc/graphics/genpeer.svg [deleted file]
doc/graphics/interleavings.svg [deleted file]
doc/graphics/jpf-abstractions.svg [deleted file]
doc/graphics/jpf-basic.svg [deleted file]
doc/graphics/jpf-intro-new.svg [deleted file]
doc/graphics/jpf-layers.svg [deleted file]
doc/graphics/jpf-project.svg [deleted file]
doc/graphics/listener-overview.svg [deleted file]
doc/graphics/listeners.svg [deleted file]
doc/graphics/mji-call.svg [deleted file]
doc/graphics/mji-functions.svg [deleted file]
doc/graphics/mji-mangling.svg [deleted file]
doc/graphics/new-testing.svg [deleted file]
doc/graphics/por-mark.svg [deleted file]
doc/graphics/por-scheduling-relevance.svg [deleted file]
doc/graphics/properties.svg [deleted file]
doc/graphics/report.svg [deleted file]
doc/graphics/states-mc.svg [deleted file]
doc/graphics/states-testing.svg [deleted file]
doc/graphics/sw-model-checking-2.svg [deleted file]
doc/graphics/sw-model-checking.svg [deleted file]
doc/index.md [deleted file]
doc/install/build.md [deleted file]
doc/install/eclipse-jpf.md [deleted file]
doc/install/eclipse-plugin.md [deleted file]
doc/install/eclipse-plugin/update.md [deleted file]
doc/install/eclipse-plugin/update/features.md [deleted file]
doc/install/eclipse-plugin/update/plugins.md [deleted file]
doc/install/index.md [deleted file]
doc/install/netbeans-jpf.md [deleted file]
doc/install/netbeans-plugin.md [deleted file]
doc/install/repo_shell.md [deleted file]
doc/install/repositories.md [deleted file]
doc/install/requirements.md [deleted file]
doc/install/site-properties.md [deleted file]
doc/install/snapshot.md [deleted file]
doc/intro/classification.md [deleted file]
doc/intro/index.md [deleted file]
doc/intro/race_example.md [deleted file]
doc/intro/random_example.md [deleted file]
doc/intro/testing_vs_model_checking.md [deleted file]
doc/intro/what_is_jpf.md [deleted file]
doc/jpf-core/AssertionProperty.md [deleted file]
doc/jpf-core/ErrorTraceGenerator.md [deleted file]
doc/jpf-core/ExceptionInjector.md [deleted file]
doc/jpf-core/IdleFilter.md [deleted file]
doc/jpf-core/index.md [deleted file]
doc/papers/chicago-author-date.csl [deleted file]
doc/papers/index.md [deleted file]
doc/papers/references.bib [deleted file]
doc/user/api.md [deleted file]
doc/user/application_types.md [deleted file]
doc/user/components.md [deleted file]
doc/user/config.md [deleted file]
doc/user/config/random.md [deleted file]
doc/user/index.md [deleted file]
doc/user/output.md [deleted file]
doc/user/run.md [deleted file]
doc/user/run_eclipse.md [deleted file]
doc/user/run_eclipse_plugin.md [deleted file]
doc/user/run_nb.md [deleted file]
doc/user/run_nb_plugin.md [deleted file]
docs/devel/attributes.md [new file with mode: 0644]
docs/devel/bytecode_factory.md [new file with mode: 0644]
docs/devel/choicegenerator.md [new file with mode: 0644]
docs/devel/coding_conventions.md [new file with mode: 0644]
docs/devel/create_project.md [new file with mode: 0644]
docs/devel/design.md [new file with mode: 0644]
docs/devel/eclipse_plugin_update.md [new file with mode: 0644]
docs/devel/embedded.md [new file with mode: 0644]
docs/devel/index.md [new file with mode: 0644]
docs/devel/jpf_tests.md [new file with mode: 0644]
docs/devel/listener.md [new file with mode: 0644]
docs/devel/logging.md [new file with mode: 0644]
docs/devel/mercurial.md [new file with mode: 0644]
docs/devel/mji.md [new file with mode: 0644]
docs/devel/mji/mangling.md [new file with mode: 0644]
docs/devel/modules.md [new file with mode: 0644]
docs/devel/partial_order_reduction.md [new file with mode: 0644]
docs/devel/report.md [new file with mode: 0644]
docs/graphics/DFSListener.svg [new file with mode: 0644]
docs/graphics/app-types.svg [new file with mode: 0644]
docs/graphics/attributes.svg [new file with mode: 0644]
docs/graphics/bc-factory.svg [new file with mode: 0644]
docs/graphics/cg-impl.svg [new file with mode: 0644]
docs/graphics/cg-motivation.svg [new file with mode: 0644]
docs/graphics/cg-ontology.svg [new file with mode: 0644]
docs/graphics/cg-sequence.svg [new file with mode: 0644]
docs/graphics/choicegen-example.svg [new file with mode: 0644]
docs/graphics/genpeer.svg [new file with mode: 0644]
docs/graphics/interleavings.svg [new file with mode: 0644]
docs/graphics/jpf-abstractions.svg [new file with mode: 0644]
docs/graphics/jpf-basic.svg [new file with mode: 0644]
docs/graphics/jpf-intro-new.svg [new file with mode: 0644]
docs/graphics/jpf-layers.svg [new file with mode: 0644]
docs/graphics/jpf-project.svg [new file with mode: 0644]
docs/graphics/listener-overview.svg [new file with mode: 0644]
docs/graphics/listeners.svg [new file with mode: 0644]
docs/graphics/mji-call.svg [new file with mode: 0644]
docs/graphics/mji-functions.svg [new file with mode: 0644]
docs/graphics/mji-mangling.svg [new file with mode: 0644]
docs/graphics/new-testing.svg [new file with mode: 0644]
docs/graphics/por-mark.svg [new file with mode: 0644]
docs/graphics/por-scheduling-relevance.svg [new file with mode: 0644]
docs/graphics/properties.svg [new file with mode: 0644]
docs/graphics/report.svg [new file with mode: 0644]
docs/graphics/states-mc.svg [new file with mode: 0644]
docs/graphics/states-testing.svg [new file with mode: 0644]
docs/graphics/sw-model-checking-2.svg [new file with mode: 0644]
docs/graphics/sw-model-checking.svg [new file with mode: 0644]
docs/index.md [new file with mode: 0644]
docs/install/build.md [new file with mode: 0644]
docs/install/eclipse-jpf.md [new file with mode: 0644]
docs/install/eclipse-plugin.md [new file with mode: 0644]
docs/install/eclipse-plugin/update.md [new file with mode: 0644]
docs/install/eclipse-plugin/update/features.md [new file with mode: 0644]
docs/install/eclipse-plugin/update/plugins.md [new file with mode: 0644]
docs/install/index.md [new file with mode: 0644]
docs/install/netbeans-jpf.md [new file with mode: 0644]
docs/install/netbeans-plugin.md [new file with mode: 0644]
docs/install/repo_shell.md [new file with mode: 0644]
docs/install/repositories.md [new file with mode: 0644]
docs/install/requirements.md [new file with mode: 0644]
docs/install/site-properties.md [new file with mode: 0644]
docs/install/snapshot.md [new file with mode: 0644]
docs/intro/classification.md [new file with mode: 0644]
docs/intro/index.md [new file with mode: 0644]
docs/intro/race_example.md [new file with mode: 0644]
docs/intro/random_example.md [new file with mode: 0644]
docs/intro/testing_vs_model_checking.md [new file with mode: 0644]
docs/intro/what_is_jpf.md [new file with mode: 0644]
docs/jpf-core/AssertionProperty.md [new file with mode: 0644]
docs/jpf-core/ErrorTraceGenerator.md [new file with mode: 0644]
docs/jpf-core/ExceptionInjector.md [new file with mode: 0644]
docs/jpf-core/IdleFilter.md [new file with mode: 0644]
docs/jpf-core/index.md [new file with mode: 0644]
docs/papers/chicago-author-date.csl [new file with mode: 0644]
docs/papers/index.md [new file with mode: 0644]
docs/papers/references.bib [new file with mode: 0644]
docs/user/api.md [new file with mode: 0644]
docs/user/application_types.md [new file with mode: 0644]
docs/user/components.md [new file with mode: 0644]
docs/user/config.md [new file with mode: 0644]
docs/user/config/random.md [new file with mode: 0644]
docs/user/index.md [new file with mode: 0644]
docs/user/output.md [new file with mode: 0644]
docs/user/run.md [new file with mode: 0644]
docs/user/run_eclipse.md [new file with mode: 0644]
docs/user/run_eclipse_plugin.md [new file with mode: 0644]
docs/user/run_nb.md [new file with mode: 0644]
docs/user/run_nb_plugin.md [new file with mode: 0644]

diff --git a/doc/devel/attributes.md b/doc/devel/attributes.md
deleted file mode 100644 (file)
index 69c7f83..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-# The Attribute System #
-
-While JPF stores values for operands, local variables and fields very similar to a normal VM, it also features a storage extension mechanism that lets you associate arbitrary objects with stack slots (operands and locals), fields, and whole objects (ElementInfos). The attribute objects can be set/used in [native peers](mji) or [listeners](listener) to add state stored/restored information that automatically follows the data flow.
-
-Note that JPF does not restore attribute object values upon backtracking per default, only attribute references. If you need to make sure attribute values are restored, you have to use copy-on-write and then store back when accessing and modifying such attributes. 
-
-![Figure: JPF Attribute System](../graphics/attributes.svg){align=center width=650}
-
-JPF provides an API to set/access these attributes, which is located in `gov.nasa.jpf.vm.Fields` (for field attributes) and `gov.nasa.jpf.vm.StackFrame` (for local variables and operands). Once set, the VM copies the attributes each time it reads/writes the associated field or stackframe slot. 
-
-## Usage ##
-
-For example, such attributes can be used to represent symbolic values or numeric error bounds. It should be noted though that attributes impose additional runtime costs, which is also why we don't treat normal, concrete values just as a special kind of attribute (normal values are still stored separately as builtin types like `int`). The upside of this is that your attributes coexist with normal, concrete values, which for instance allows things like mixed symbolic and concrete execution.
-
-> **Note:** JPF now can associate attributes not only with fields of an object, but with the object as a whole. See the `gov.nasa.jpf.vm.ElementInfo` API for details.
-
-> **Note:** while there is an API to set/retrieve attributes based on type, there is no implementation
-yet that allows multiple attributes to be stored.
\ No newline at end of file
diff --git a/doc/devel/bytecode_factory.md b/doc/devel/bytecode_factory.md
deleted file mode 100644 (file)
index 6fb8c2c..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-# Bytecode Factories #
-Normally, a VM defines the semantics of it's programming language. In case of Java, the corresponding instruction set represents a multi-threaded stack machine, where values are kept on the heap, or inside of local and/or operand slots within stack frames. The effect of Java bytecode instructions with respect to heap, locals and operands are described in [Sun's Java virtual machine specifications](http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html/).
-JPF is different. The VM of JPF and its associated constructs like `ThreadInfo`, `ClassInfo`, `ElementInfo` etc. provide all the necessary means to implement a normal Java interpreter. However, JPF delegates the use of these means to the instructions. Every bytecode that gets executed by JPF is represented by a corresponding `Instruction` object, which normally gets instantiated during class load time. The `Instruction` classes of the standard execution mode can be found in package `gov.nasa.jpf.jvm.bytecode`.
-
-When it comes to executing a bytecode, the VM simply calls the `execute()` method of this `Instruction` instance. The implementation of this method defines the execution semantics.
-
-The trick is now that JPF uses a configurable [abstract factory](http://en.wikipedia.org/wiki/Abstract_factory_pattern) to choose and instantiate the `Instruction` classes. By providing your own concrete `InstructionFactory`, together with a set of related `Instruction` classes, you can change the execution semantics of Java.
-
-![Figure: Bytecode Factories](../graphics/bc-factory.svg){align=center width=850}
-
-## Usages ##
-
-Why would it be useful to change the standard semantics? One reason is to extend normal semantics with additional checks. For example, this is performed by the JPF extension jpf-numeric which overrides numeric bytecode classes with versions that check for over-/underflow and silent NaN propagation (among other things). A much more involved example is the JPF extension jpf-symbc, which implements a symbolic execution mode for Java, e.g. to automatically generate test cases based on the program structure of an application. It does so by overriding branch instructions, turning them into state space branches represented by their own [ChoiceGenerators](choicegenerator), collecting the path conditions on the way, and feeding them to an external SAT solver.
-
-## Implementation ##
-
-Since there is a large number of Java bytecode instructions, it would be tedious having to implement all 250+ Instruction classes in order to override just a couple of them. You can reduce the effort in three ways:
-
-
-### GenericInstructionFactory ###
-
-
-Using the `GenericInstructionFactory` as a base class for your `InstructionFactory`. This only requires you to specify an alternative package where your bytecode classes reside, together with the set of bytecodes that should be overridden. The resulting code can be quite short, as can be seen in the *numeric* extension example:
-
-~~~~~~~~ {.java}
-public class NumericInstructionFactory extends GenericInstructionFactory {
-  // which bytecodes do we replace
-  static final String[] BC_NAMES = {
-    "DCMPG", "DCMPL",  "DADD", "DSUB", "DMUL", "DDIV",
-    "FCMPG", "FCMPL",  "FADD", "FSUB", "FMUL", "FDIV",
-                       "IADD", "ISUB", "IMUL", "IDIV",  "IINC", 
-                       "LADD", "LSUB", "LMUL", "LDIV"   
-  };
-  
-  // where do they reside
-  protected static final String BC_PREFIX = "gov.nasa.jpf.numeric.bytecode.";
-  
-  // what classes should use them
-  protected static final String[] DEFAULT_EXCLUDES = { "java.*", "javax.*" };
-  
-  public  NumericInstructionFactory (Config conf){    
-    super(conf, BC_PREFIX, BC_NAMES, null, DEFAULT_EXCLUDES);
-    
-    NumericUtils.init(conf);
-  }
-}
-~~~~~~~~
-
-
-### Super Delegation ###
-
-You can derive your overriding bytecode classes from the ones in `gov.nasa.jpf.jvm.bytecode`. If you just want to add some checks before or after performing the "normal" operation, you can use the standard `Instruction` classes as base classes, and call `super.execute(..)` from within your derived classes. 
-
-
-### Attributes ###
-
-As your execution semantics get more complex, you probably need to store and restore additional information that is associated with variables. JPF provides an automatically managed [attribute system](attributes) for this purpose. You can attach objects to locals, operands and fields, and JPF takes care of propagating these attribute objects whenever it manipulates stackframes or heap objects.
-
-
-## Configuration ##
-
-
-Configuring your bytecode factory just requires one JPF property, e.g.
-
-~~~~~~~~ {.bash}
-vm.insn_factory.class = gov.nasa.jpf.numeric.NumericInstructionFactory
-~~~~~~~~
-
-which can be either done from the command line or from within a *.jpf property file
diff --git a/doc/devel/choicegenerator.md b/doc/devel/choicegenerator.md
deleted file mode 100644 (file)
index e8272eb..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-# ChoiceGenerators #
-
-The goal of every model checker is to check if certain properties hold in states of the system under test. The way that choices are computed is a fundamental part of model checking, since they determine which states are checked. We refer to the mechanism used by JPF to capture choices as ChoiceGenerators.
-
-ChoiceGenerators can be approached from an application perspective, or from the JPF implementation perspective. In this section, we cover both perspectives.
-
-## Motivation ##
-
-Whenever the model checker reaches non-determinism in code, it needs to compute choices. Non-determinism can be due to thread scheduling or non-deterministic data acquisitions. Here, we present an example including data non-determinism to justify our implementation approach. JPF provides support for "random" data acquisition, using the interface `gov.nasa.jpf.jvm.Verify`.
-
-~~~~~~~~ {.java}
-...
-boolean b = Verify.getBoolean(); // evaluated by JPF for both `true` and `false`
-...
-~~~~~~~~
-
-This worked nicely for small sets of choice values (such as `{true,false}` for boolean), but the mechanism for enumerating all choices from a type specific interval becomes already questionable for large intervals (e.g. `Verify.getInt(0,10000)`), and fails completely if the data type does not allow finite choice sets at all (such as floating point types):
-
-![Figure 1: Motivation behind ChoiceGenerator](../graphics/cg-motivation.svg){align=center width=750}
-
-To handle this case, we have to leave the ideal world of model checking (that considers all possible choices), and make use of what we know about the real world - we have to use heuristics to make the set of choices finite and manageable. However, heuristics are application and domain specific, and it would be a bad idea to hardcode them into the test drivers we give JPF to analyze. This leads to a number of requirements for the JPF choice mechanism:
-
-  * choice mechanisms have to be decoupled (i.e. thread choices should be independent of data choices, double choices from int choices etc.)
-  * choice sets and enumeration should be encapsulated in dedicated, type specific objects. The VM should only know about the most basic types, and otherwise use a generic interface to obtain choices
-  * selection of classes representing (domain specific) heuristics, and parametrization of ChoiceGenerator instances should be possible at runtime, i.e. via JPF's configuration mechanism (properties)
-
-The diagram shown above depicts this with an example that uses a "randomly" chosen velocity value of type double. As an example heuristic we use a threshold model, i.e. we want to know how the system reacts below, at, and above a certain application specific value (threshold). We reduce an infinite set of choices to only three "interesting" ones. Of course, "interesting" is quite subjective, and we probably want to play with the values (delta, threshold, or even used heuristic) efficiently, without having to rebuild the application each time we run JPF.
-
-The code example does not mention the used `ChoiceGenerator` class (`DoubleThresholdGenerator`) at all, it just specifies a symbolic name `"velocity"`, which JPF uses to look up an associated class name from its configuration data (initialized via property files or the command line - see Configuring JPF Runtime Options). But it doesn't stop there. Most heuristics need further parameterization (e.g. threshold, delta), and we provide that by passing the JPF configuration data into the `ChoiceGenerator` constructors (e.g. the `velocity.threshold` property). Each `ChoiceGenerator` instance knows its symbolic name (e.g. `"velocity"`), and can use this name to look up whatever parameters it needs.
-
-## The JPF Perspective ##
-
-Having such a mechanism is nice to avoid test driver modification. But it would be much nicer to consistently use the same mechanism not just for data acquisition choices, but also scheduling choices (i.e. functionality that is not controlled by the test application). JPF's ChoiceGenerator mechanism does just this, but in order to understand it from an implementation perspective we have to take one step back and look at some JPF terminology:
-
-![Figure 2: States, Transitions and Choices](../graphics/cg-ontology.svg){align=center width=650}
-
-
-*State* is a snapshot of the current execution status of the application (mostly thread and heap states), plus the execution history (path) that lead to this state. Every state has a unique id number. State is encapsulated in the `SystemState` instance (almost, there is some execution history which is just kept by the JVM object). This includes three components:
-
-  * KernelState - the application snapshot (threads, heap)
-  * trail - the last Transition (execution history)
-  * current and next ChoiceGenerator - the objects encapsulating the choice enumeration that produces different transitions (but not necessarily new states)
-
-*Transition* is the sequence of instructions that leads from one state to the next. There is no context switch within a transition, it's all in the same thread. There can be multiple transitions leading out of one state (but not necessarily to a new state).
-
-*Choice* is what starts a new transition. This can be a different thread (i.e. scheduling choice), or different "random" data value.
-
-In other words, possible existence of choices is what terminates the last transition, and selection of a choice value precludes the next transition. The first condition corresponds to creating a new `ChoiceGenerator`, and letting the `SystemState` know about it. The second condition means to query the next choice value from this `ChoiceGenerator` (either internally within the VM, or in an instruction or native method).
-
-## How it comes to Life ##
-With this terminology, we are ready to have a look at how it all works. Let's assume we are in a transition that executes a `getfield` bytecode instruction (remember, JPF executes Java bytecode), and the corresponding object that owns this field is shared between threads. For simplicity's sake, let's further assume there is no synchronization when accessing this object, (or we have turned off the property `vm.sync_detection`). Let's also assume there are other runnable threads at this point. Then we have a choice - the outcome of the execution might depend on the order in which we schedule threads, and hence access this field. There might be a data race.
-
-![Figure 3: ChoiceGenerator Sequence](../graphics/cg-sequence.svg){align=center width=550}
-
-Consequently, when JPF executes this `getfield` instruction, the `gov.nasa.jpf.jvm.bytecode.GETFIELD.execute()` method does three things:
-
-  1. create a new `ChoiceGenerator` (`ThreadChoiceGenerator` in this case), that has all runnable threads at this point as possible choices
-  2. registers this `ChoiceGenerator` via calling `SystemState.setNextChoiceGenerator()`
-  3. schedules itself for re-execution (just returns itself as the next instruction to execute within the currently running thread)
-
-At this point, JPF ends this transition (which is basically a loop inside `ThreadInfo.executeStep()`), stores a snapshot of the current State, and then starts the next transition (let's ignore the search and possible backtracks for a moment). The `ChoiceGenerator` created and registered at the end of the previous transition becomes the new current `ChoiceGenerator`. Every state has exactly one current `ChoiceGenerator` object that is associated with it, and every transition has exactly one choice value of this `ChoiceGenerator` that kicks it off. Every transition ends in an instruction that produces the next `ChoiceGenerator`.
-
-The new transition is started by the `SystemState` by setting the previously registered `ChoiceGenerator` as the current one, and calling its `ChoiceGenerator.advance()` method to position it on its next choice. Then the `SystemState` checks if the current `ChoiceGenerator` is a scheduling point (just a `ThreadChoiceGenerator` used to encapsulate threads scheduling), and if so, it gets the next thread to execute from it (i.e. the `SystemState` itself consumes the choice). Then it starts the next transition by calling `ThreadInfo.executeStep()` on it.
-
-The `ThreadInfo.executeStep()` basically loops until an Instruction.execute() returns itself, i.e. has scheduled itself for re-execution with a new `ChoiceGenerator`. When a subsequent `ThreadInfo.executeStep()` re-executes this instruction (e.g. `GETFIELD.execute()`), the instruction notices that it is the first instruction in a new transition, and hence does not have to create a `ChoiceGenerator` but proceeds with it's normal operations.
-
-If there is no next instruction, or the Search determines that the state has been seen before, the VM backtracks. The `SystemState` is restored to the old state, and checks for not-yet-explored choices of its associated ChoiceGenerator by calling `ChoiceGenerator.hasMoreChoices()`. If there are more choices, it positions the `ChoiceGenerator` on the next one by calling `ChoiceGenerator.advance()`. If all choices have been processed, the system backtracks again (until it's first `ChoiceGenerator` is done, at which point we terminate the search).
-
-![Figure 4: ChoiceGenerator Implementation](../graphics/cg-impl.svg){align=center width=850}
-
-The methods that create `ChoiceGenerators` have a particular structure, dividing their bodies into two parts:
-
-  1. *top half* - (potentially) creates and registers a new `ChoiceGenerator`. This marks the end of a transition
-  2. *bottom half* - which does the real work, and might depend on acquiring a new choice value. This is executed at the beginning of the next transition
-
-To determine which branch you are in, you can call `ThreadInfo.isFirstStepInsn()`. This will return `true` if the currently executed instruction is the first one in the transition, which corresponds to the *bottom half* mentioned above.
-
-The only difference between scheduling choices and data acquisition choices is that the first ones are handled internally by the VM (more specifically: used by the `SystemState` to determine the next thread to execute), and the data acquisition is handled in the bottom half of `Instruction.execute()`, native method, or listener callback method (in which case it has to acquire the current `ChoiceGenerator` from the `SystemState`, and then explicitly call `ChoiceGenerator.getNextChoice()` to obtain the choice value). For a real example, look at the `JPF.gov_nasa_jpf_jvm_Verify.getBoolean()` implementation.
-
-As an implementation detail, creation of scheduling points are delegated to a `Scheduler` instance, which encapsulates a scheduling policy by providing a consistent set of `ThreadChoiceGenerators` for the fixed number of instructions that are scheduling relevant (`monitor_enter`, synchronized method calls, `Object.wait()` etc.). Clients of this `Scheduler` therefore have to be aware of that the policy object might not return a new `ChoiceGenerator`, in which case the client directly proceeds with the bottom half execution, and does not break the current transition.
-
-The standard classes and interfaces for the ChoiceGenerator mechanism can be found in package `gov.nasa.jpf.vm`, and include:
-
-  * `ChoiceGenerator`
-  * `BooleanChoiceGenerator`
-  * `IntChoiceGenerator`
-  * `DoublechoiceGenerator`
-  * `ThreadChoiceGenerator`
-  * `SchedulingPoint`
-  * `SchedulerFactory`
-  * `DefaultSchedulerFactory`
-
-Concrete implementations can be found in package `gov.nasa.jpf.vm.choice`, and include classes like:
-
-  * `IntIntervalGenerator`
-  * `IntChoiceFromSet`
-  * `DoubleChoiceFromSet`
-  * `DoubleThresholdGenerator`
-  * `ThreadChoiceFromSet`
-
-As the number of useful generic heuristics increases, we expect this package to be expanded.
-
-
-## Cascaded ChoiceGenerators ##
-There can be more than one `ChoiceGenerator` object associated with a transition. Such ChoiceGenerators are referred to as *cascaded*, since they give us a set of choice combinations for such transitions. 
-
-For example, assume that we want to create a listener that perturbs certain field values, i.e. it replaces the result operand that is pushed by a `getfield` instruction. This is easy to do from a listener, but the VM (more specifically our on-the-fly [partial order reduction](partial_order_reduction)) might already create a `ThreadChoiceGenerator` (scheduling point) for this `getfield` if it refers to a shared object, and the instruction might cause a data race. Without cascaded `ChoiceGenerators` we could only have the perturbation listener **or** the race detection, but not both. This is clearly a limitation we want to overcome, since you might not even know when JPF - or some of the other [listeners](listener) or [bytecode_factories](bytecode_factory) - create `ChoiceGenerators` that would collide with the ones you want to create in your listener.
-
-Using cascaded ChoiceGenerators requires little more than what we have already seen above. It only involves changes to two steps:
-
- 1. ChoiceGenerator creation - you need to identify `ChoiceGenerators` with a `String` id. We can't use the type of the `ChoiceGenerator` - or it's associated choice type - to identify a particular instance, since different listeners might use different `ChoiceGenerator` instances of same types for different purposes. Resolving through unique types would throw us back to where we would have to know about all the other `ChoiceGenerators` created by all the other JPF components. We can't use the associated instruction either, because the whole point is that we can have more than one `ChoiceGenerator` for each of them. So we have to give our `ChoiceGenerator` instances names when we create them, as in
-~~~~~~~~ {.java}
-...
-IntChoiceFromSet cg = new IntChoiceFromSet("fieldPerturbator", 42, 43);
-~~~~~~~~
-
-The name should be reasonably unique, describing the context in which this choice is used. Don't go with "generic" names like "myChoice". In case of doubt, use the method name that creates the `ChoiceGenerator`. The reason why we need the *id* in the first place is that we later-on want to be able to retrieve a specific instance. Which brings us to:
-
- 2. ChoiceGenerator retrieval - at some point we want to process the choice (usually within the *bottom half* of the method that created the `ChoiceGenerator`), so we need to tell JPF all we know about the `ChoiceGenerator` instance, namely id and type. The simple `SystemState.getChoiceGenerator()` we used above will only give us the last registered one, which might or might not be the one we registered ourselves. Retrieval is done with a new method `SystemState.getCurrentChoiceGenerator(id,cgType)`, which in the above case would look like:
-~~~~~~~~ {.java}
-...
-IntChoiceFromSet cg = systemState.getCurrentChoiceGenerator("fieldPerturbator", IntChoiceFromSet.class);
-assert cg != null : "required IntChoiceGenerator not found";
-...
-~~~~~~~~
-
-This method returns `null` if there is no `ChoiceGenerator` of the specified id and type associated with the currently executed instruction. If this is the bottom half of a method that created the instance, this is most likely an error condition that should be checked with an assertion. If the retrieval is in another method, existence of such a `ChoiceGenerator` instance could be optional and you therefore have it checked in an `if (cg != null) {..}' expression.
-
-This is all there is to it in case you don't refer to a particular execution state of an instruction. As an example, assume that you want to add some int choices on top of each `Verify.getInt(..)` call. Your listener would look like this:
-
-~~~~~~~~ {.java}
-  @Override
-  public void instructionExecuted(VM vm, ThreadInfo ti, Instruction nextInsn, Instruction executedInsn) {
-    SystemState ss = vm.getSystemState();
-
-    if (executedInsn instanceof EXECUTENATIVE) { // break on method call
-      EXECUTENATIVE exec = (EXECUTENATIVE) executedInsn;
-
-      if (exec.getExecutedMethodName().equals("getInt")){ // Verify.getInt(..) - this insn did create a CG on its own
-        if (!ti.isFirstStepInsn()){ // top half - first execution
-          IntIntervalGenerator cg = new IntIntervalGenerator("instrumentVerifyGetInt", 3,4);
-          ss.setNextChoiceGenerator(cg);
-          ...
-
-        } else { // bottom half - re-execution at the beginning of the next transition
-          IntIntervalGenerator cg = ss.getCurrentChoiceGenerator("instrumentVerifyGetInt", IntIntervalGenerator.class);
-          assert cg != null : "no 'instrumentVerifyGetInt' IntIntervalGenerator found";
-          int myChoice = cg.getNextChoice();
-          ... // process choice
-        }
-      }
-    }
-  }
-~~~~~~~~
-
-
-Sometimes what you do with your choice depends on the execution state of the instruction this `ChoiceGenerator` was created for, and you have to be aware of that the instruction might get re-executed (e.g. after processing the top half of another `ChoiceGenerator` creating method) before it has done what you depend on for your local choice processing. Consider our previous example of the field perturbation. Simply speaking, all we want to do in our listener is just swap operand stack values after a certain `getfield`. However, the partial order reduction of the VM might get in our way because it reschedules the instruction *before* it pushes the value if execution of this instruction might constitute a data race, and therefore required creation of a `ThreadChoiceGenerator` instance. What is worse is that the VM might do this conditionally - if there is only one runnable thread, there is no need for a scheduling point since there can't be a data race. Our own perturbator listener has to account for all that. Luckily, we can use `SystemState.getCurrentChoiceGenerator(id,type)` to unify all these cases, and we just have to restore execution state in case we want to re-execute the instruction ourselves. Here is an example:
-
-~~~~~~~~ {.java}
-  @Override
-  public void instructionExecuted(VM vm, ThreadInfo ti, Instruction nextInsn, Instruction executedInsn) {
-    SystemState ss = vm.getSystemState();
-
-    if (executedInsn instanceof GETFIELD){
-      GETFIELD getInsn = (GETFIELD) executedInsn;
-      FieldInfo fi = getInsn.getFieldInfo();
-      if (fi.getName().equals("perturbedFieldName")){
-
-        IntChoiceFromSet cg = ss.getCurrentChoiceGenerator("fieldReplace", IntChoiceFromSet.class);
-        StackFrame frame = ti.getModifiableTopFrame();
-        if (cg == null){
-
-          // we might get here after a preceding rescheduling exec, i.e.
-          // partial execution (with successive re-execution), or after
-          // non-rescheduling exec has been completed (only one runnable thread).
-          // In the first case we have to restore the operand stack so that
-          // we can re-execute
-          if (!ti.willReExecuteInstruction()){
-            // restore old operand stack contents
-            frame.pop();
-            frame.push(getInsn.getLastThis());
-          }
-
-          cg = new IntChoiceFromSet("fieldReplace", 42, 43);
-          ss.setNextChoiceGenerator(cg);
-          ti.reExecuteInstruction();
-
-        } else {
-          int v = cg.getNextChoice();
-          int n = frame.pop();
-          frame.push(v);
-        }
-      }
-    }
-  }
-~~~~~~~~
-
-These examples show you that at the beginning of each transition, there is a choice value for all the cascaded `ChoiceGenerators` associated with it. If you would add `choiceGeneratorAdvanced()` notifications to your listener, you would also see that JPF processes all related choice combinations.
-
-If you really want to see the context, there are a number of additional methods in `SystemState` that might help you:
-
- * `getChoiceGenerator()` - returns only the last registered one
- * `getChoiceGenerators()` - returns an array of all `ChoiceGenerators` in the current execution path
- * `getLastChoiceGeneratorOfType(cgType)` - returns the last registered `ChoiceGenerator` in the path that is of the specified type
- * `getCurrentChoiceGenerators()` - returns array of all cascaded `ChoiceGenerators` associated with the current transition
- * `getCurrentChoiceGenerator(id)` - returns last registered `ChoiceGenerator` of cascade with specified *id*
- * `getCurrentChoiceGenerator(id,cgType)` - our workhorse: last registered `ChoiceGenerator` of cascade with specified *id* and *cgType* (which can be a supertype of the actual one)
- * etc.
-
-How does the system detect if a `ChoiceGenerator` is cascaded or not? Very simple - within `SystemState.setNextChoiceGenerator(cg)`, we just check if `SystemState` already had a registered next `ChoiceGenerator`, and if so, we set a cascaded attribute for this one. Other than that, we just maintain normal linear `ChoiceGenerator` linkage, which is accessible through `ChoiceGenerator.getPreviousChoiceGenerator()`. If you want to iterate through a cascade yourself, use the `ChoiceGenerator.getCascadedParent()` method, which returns `null` if there is none. Just be aware of that the last registered `ChoiceGenerator` (i.e. what `SystemState.getChoiceGenerator()` returns) does *not* have the cascaded attribute set (i.e. `ChoiceGenerator.isCascaded()` returns `false`).    
\ No newline at end of file
diff --git a/doc/devel/coding_conventions.md b/doc/devel/coding_conventions.md
deleted file mode 100644 (file)
index fe629e9..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# Coding Conventions #
-JPF is an open system. In order to keep the source format reasonably consistent, we strive to keep the following minimal set of conventions
-
-  * Two space indentation (no tabs)
-  * Opening brackets in same line (class declaration, method declaration, control statements)
-  * No spaces after opening '(', or before closing ')'
-  * Method declaration parameters indent on column
-  * All files start with copyright and license information
-  * All public class and method declarations have preceding Javadoc comments
-  * We use *camelCase* instead of *underscore_names* for identifiers
-  * Type names are upper case 
-
-The following code snippet illustrates these rules.
-
-~~~~~~~~ {.java}
-/* <copyright notice goes here>
- * <license referral goes here>
- */
-
-/**
- * this is my class declaration example
- */
-    
-public class MyClass {
-   
-  /**
-   * this is my public method example
-   */
-  public void foo (int arg1, int arg2,
-                   int arg3) {
-    if (bar) {
-      ..
-    } else {
-      ..
-    }
-  }
-   ..
-}
-~~~~~~~~
-
-We consider modularity to be of greater importance than source format. With its new configuration scheme, there is no need to introduce dependencies of core classes towards optional extensions anymore. If you add something that is optional, and does not seamlessly fit into an existing directory, keep it separate by adding new directories. The core JPF classes should not contain any additional dependencies to external code.
diff --git a/doc/devel/create_project.md b/doc/devel/create_project.md
deleted file mode 100644 (file)
index 1eeb9b0..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-# Creating a New JPF Module #
-
-So what do you have to do to create a new JPF module? For a quick shortcut to setting up *most* things,  use the `create_project` script of the [jpf-template module](wiki:projects/jpf-template).  
-
-However, jpf-template cannot do everything for you, so see below for more information on how to finish setting up your new project.
-
-Several steps are involved:
-
-### 1. get familiar with the JPF configuration ###
-You need to understand how your project will be looked up and initialized during JPF startup, and the place to learn that is the [JPF configuration](../user/config) page. Once you know what *[site properties](../install/site-properties)* and *project properties* are, you can proceed.
-
-### 2. get familiar with the standard JPF project layout ###
-Although this is mostly convention, and you can deviate if you really need to, please try hard not to.
-
-You can get the details from the [JPF Runtime Modules](modules) page, but the essence is that each project has two (possible) major build artifacts:
-
- * `jpf-<module>.jar` - executed by the host (platform) VM (contains main classes and peers)
- * `jpf-<module>-classes.jar` - executed by JPF (contains modeled classes)
-
-Consequently, your sources are kept in `src/main`, `src/peers`, `src/classes`, `src/annotations`, `src/tests` and `src/examples`. You might only have some of these, but please provide regression tests so that people can check if your project works as expected. 
-
-All 3rd party code that is required at runtime goes into a `lib` directory.
-
-We keep potential annotations separate (and provide additional `jpf-<module>-annotations.jar`) so that external projects (systems under test) can use them without relying on all JPF classes to be in their `classpath`. The idea is that this jar does not contain any code which could alter the system under test behavior if you execute it outside of JPF. 
-
-<The `tools` directory contains 3rd party libraries and tools that are used at build-time. For convenience reasons, we usually copy the small `RunJPF.jar` from the jpf-core in here, so that you can easily run JPF from the command line without the need for platform specific scripts or links, but that is completely optional.>
-
-### 3. create a jpf.properties file ###
-Within the root directory of each JPF module a project properties file is needed which is named `jpf.properties`. It contains the path settings the host VM and JPF need to know about at runtime. It looks like this:
-
-~~~~~~~~ {.bash}
-# standard header
-<module-name> = ${config_path}
-
-# classpath elements for the host VM (java)
-<module-name>.native_classpath = build/<module-name>.jar;lib/...
-
-# classpath elements for JPF
-<module-name>.classpath = build/<module-name>-classes.jar;...
-
-# sources JPF should know about when creating traces etc.
-<module-name>.sourcepath = src/classes;...
-~~~~~~~~
-
-You can add other JPF properties, but be aware of that this is always processed during JPF startup if you add your module to the `extensions` list in your [site.properties](../install/site-properties), and might conflict with other JPF modules. For this reason you should only add your module to `extensions` if you know it will always be used.
-
-
-### 4. create your build.xml ###
-Our build process is [Ant](http://ant.apache.org/) based, hence we need a `build.xml` file. The standard targets are
-
- * `clean`
- * `compile`
- * `build` (the default, creates the jars and hence depends on compile)
- * `test` (run JUnit regression tests, depends on build)
- * `dist` (creates a binary-only distribution) 
-
-If you stick to the general layout, you can use a template like the one attached to this page (of course you need to replace `<your-project-name>`).
-
-Please note how `site.properties` and `jpf.properties` can be used from within the `build.xml` (Ant understands a subset of the JPF property syntax), which means you don't have to explicitly add the jars of other JPF components you depend on (at least jpf-core). You can reference them symbolically like this:
-
-~~~~~~~~ {.xml}
-  <property file="${user.home}/.jpf/site.properties"/>
-  <property file="${jpf-core}/jpf.properties"/>
-  ..
-  <!-- generic classpath settings -->
-  <path id="lib.path">
-
-    <!-- our own classes and libs come first -->
-    <pathelement location="build/main"/>
-    ...
-    <fileset dir=".">
-           <include name="lib/*.jar"/>
-    </fileset>
-
-    <!-- add in what we need from the core -->
-    <pathelement path="${jpf-core.native_classpath}"/>
-  </path>
-  ...
-~~~~~~~~
-
-### 5. add your module to your site.properties ###
-This is optional, you only need to do this if you want to be able to run your JPF module outside its own directory. If so, add an entry to your [site properties file](../install/site-properties) that looks like this:
-
-~~~~~~~~ {.bash}
-...
-<module-name> = <path to your JPF extension module>
-...
-~~~~~~~~
-
-### 6. publish your repository ###
-You can publish this wherever you want ([sourceforge](http://sourceforge.net), [bitbucket](http://bitbucket.org), [google code](http://code.google.com), or [github](http://github.com) are suitable free site supporting Mercurial), or ask us to host it on the JPF server. If you decide to use a 3rd party hosting service, please let us/the JPF community know about it (e.g. by posting to the mailing list at [java-pathfinder@googlegroups.com](https://groups.google.com/forum/#!forum/java-pathfinder).
\ No newline at end of file
diff --git a/doc/devel/design.md b/doc/devel/design.md
deleted file mode 100644 (file)
index 60e0fd3..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# JPF Top-level Design #
-
-JPF was designed around two major abstractions: (1) the *VM*, and (2) the *Search* component.
-
-## Virtual Machine (VM) ##
-
-The VM is the state generator. By executing bytecode instructions, the VM generates state representations that can be
-
-  * checked for equality (if a state has been visited before)
-  * queried (thread states, data values etc.)
-  * stored
-  * restored
-
-The main VM parameterizations are classes that implement the state management (matching, storing, backtracking). Most of the execution scheme is delegated to `SystemState`, which in turn uses `Scheduler`  to generate scheduling sequences of interest.
-
-There are three key methods of the VM employed by the Search component:
-
-  * `forward` - generate the next state, report if the generated state has a successor. If yes, store on a backtrack stack for efficient restoration.
-  * `backtrack` - restore the last state on the backtrack stack
-  * `restoreState` - restore an arbitrary state (not necessarily on the backtrack stack)
-
-![Figure: JPF top-level design](../graphics/jpf-abstractions.svg){align=center width=720}
-
-## Search Strategy ##
-
-At any state, the Search component is responsible for selecting the next state from which the VM should proceed, either by directing the VM to generate the next state (`forward`), or by telling it to backtrack to a previously generated one (`backtrack`). The Search component works as a driver for the VM.
-
-The Search component can be configured to check for certain properties by evaluating property objects (e.g. `NotDeadlockedProperty`, `NoAssertionsViolatedProperty`).
-
-The object encapsulating this component includes a search method which implements a strategy used to traverse the state space. The state space exploration continues until it is completely explored, or a property violation is found.
- The Search component can be configured to use different strategies, such as depth-first search (`DFSearch`), and priority-queue based search that can be parameterized to do various search types based on selecting the most interesting state out of the set of all successors of a given state (`HeuristicSearch`).
-
-## Package Structure ##
-
-The implementation of the JPF core is partitioned into the following packages:
-
-### `gov.nasa.jpf` ###
-The main responsibility of this package is configuration and instantiation of the core JPF objects, namely the Search and VM. The configuration itself is encapsulated by the `Config` class, which contains various methods to create objects or read values from a hierarchy of property files and command line options (see Configuring JPF Runtime Options). Beyond the configuration, the JPF object has little own functionality. It is mainly a convenience construct to start JPF from inside a Java application without having to bother with its complex configuration.
-
-### `gov.nasa.jpf.vm` ###
-This package constitutes the main body of the core code, including the various constructs that implement the Java state generator. Conceptually, the major class is VM, but again this class delegates most of the work to a set of second level classes that together implement the major functionality of JPF. These classes can be roughly divided into three categories:
-
-(1) class management - classes are encapsulated by `ClassInfo` which mostly includes invariant information about fields and methods captured by `FieldInfo` and `MethodInfo`, respectively.
-
-(2) object model - all object data in JPF is stored as integer arrays encapsulated by `Fields` objects. The execution specific lock state of objects is captured by `Monitor` instances. `Fields` and `Monitor` instances together form the objects, which are stored as `ElementInfo`. The heap contains a dynamic array of `ElementInfo` objects where the array indices being used as object reference values
-
-(3) bytecode execution - the execution of bytecode instructions is performed through a collaboration of `SystemState` and `ThreadInfo`, which is also delegated to policy objects implementing the partial order reduction (POR). It starts with the `VM` object calling `SystemState.nextSuccessor()`, which descends into `ThreadInfo.executeStep()` (together, these two methods encapsulate the on-the-fly POR), which in turn calls `ThreadInfo.executeInstruction()` to perform the bytecode execution.
-The actual execution is again delegated to bytecode specific Instruction instances that per default reside in a sub-package `gov.nasa.jpf.vm.bytecode` (the set of bytecode classes to use can be configured via a `InstructionFactory` class which allows the user to define a different execution semantics)
-
-### `gov.nasa.jpf.search` ### 
-This package is relatively small and mainly contains the `Search` class, which is an abstract base for search policies. The major method that encapsulates the policy is `Search.search()`, which is the VM driver (that calls the methods`forward`, `backtrack` and `restore`). This package also contains the plain-vanilla depth-first search policy `DFSearch`.
-More policies can be found in the sub-package `gov.nasa.jpf.search.heuristic`, which uses a `HeuristicSearch` class in conjunction with configurable heuristic objects to prioritize a queue of potential successor states.
diff --git a/doc/devel/eclipse_plugin_update.md b/doc/devel/eclipse_plugin_update.md
deleted file mode 100644 (file)
index 35f663f..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-## Hosting an Eclipse plugin update site ##
-
-The first step is to create the local version of the update site.  For example, chapter 18, section 3 of "Eclipse Plug-ins, 3rd edition" will explain how to do this.
-  
-> **Tip:** do not attempt to put the update site in the code repository.  
-
-The plugin and feature files are treated like binaries and bad things will happen.  Here is a sample update site for the mango plugin.
-
-![Local Site](../graphics/localsite.jpg){align=center width=430}
-
-Now you will re-create this directory structure within the wiki.  For the purpose of this discussion, let's pin down the jpf site:
-
-~~~~~~~~ {.bash}
-JPFHOME=http://babelfish.arc.nasa.gov/trac/jpf
-~~~~~~~~
-
-Now chose a home directory, say `HOME`.  For the mango plugin, 
-
-~~~~~~~~ {.bash}
-HOME=wiki/projects/jpf-mango
-~~~~~~~~
-
-Whatever choice of `HOME` you make, the update site you advertise to the world will be `JPFHOME/raw-attachment/HOME/update/`.
-
-
-The `raw-attachment` segment is the *trick* that makes everything work out.  The next step is to create the directory structure for the mirrored update site.  Within `JPFHOME/HOME`, create a link to `JPFHOME/HOME/update`.  Now go to the update page and add the attachments artifacts.jar, content.jar, and site.xml from your local update site.  Create links within `JPFHOME/HOME/update` to `JPFHOME/HOME/update/features` and `JPFHOME/HOME/update/plugins`.  
-
-Attach your feature jar to the features page, and your plugin jar to the plugins page.  That's all there is to it.
-
-> **Tip:** when updating your update site, be sure to sync your plugin and feature with new, higher, revision numbers.  Now rebuild the local site.  Delete all the corresponding attachments in the wiki, and repopulate with the updated versions.
-
-> **Bonus tip:** Once everything is working, you can delete the link to the update site.  This will prevent your visitors from accidentally going to an uninteresting page.  You can always access this page directly from the browser by entering `JPFHOME/HOME/update`.
-
-
-
-
diff --git a/doc/devel/embedded.md b/doc/devel/embedded.md
deleted file mode 100644 (file)
index 0ddd1c3..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# Embedded JPF #
-JPF can also be used embedded, i.e. called from another Java application. A basic code sequence to start JPF looks like this:
-
-~~~~~~~~ {.java}
-import gov.nasa.jpf.JPF;
-import gov.nasa.jpf.Config;
-
-void runJPF (String[] args) {
-   ..
-   MyListener listener = new MyListener(..);
-
-   // [optionally] if you pass through command line args, 
-   // 'null' any consumed args not to be JPF-processed
-   listener.filterArgs( args);
-   ..
-
-   Config config = JPF.createConfig( args);
-   // set special config key/value pairs here..
-
-   JPF jpf = new JPF( config);
-   jpf.addListener( listener);
-   jpf.run();
-   ..
-}
-~~~~~~~~
-
-Of course, you can also call `gov.nasa.jpf.JPF.main(args)` from within your application, if you don't need to control JPF's configuration or process it's output. 
diff --git a/doc/devel/index.md b/doc/devel/index.md
deleted file mode 100644 (file)
index 8394c9c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# JPF Developer Guide #
-
-From the previous two sections, you have learned that JPF has one recurring, major theme: it is not a monolithic system, but rather a configured collection of components that implement different functions like state space search strategies, report generation and much more. Being adaptive is JPF's answer to the scalability problem of software model checking.
-
-This not only makes JPF a suitable system for research, but chances are that if are you serious enough about JPF application, you sooner or later end up extending it. This section includes the following topics which describe the different mechanisms that can be used to extend JPF.
-
- * [Top-level design](design)
- * Key mechanisms, such as 
-     - [ChoiceGenerators](choicegenerator)
-     - [Partial order reduction](partial_order_reduction)
-     - [Slot and field attributes](attributes)
- * Extension mechanisms, such as
-     - [Listeners](listener)
-     - [Search Strategies](design)
-     - [Model Java Interface (MJI)](mji)
-     - [Bytecode Factories](bytecode_factory)
- * Common utility infrastructures, such as
-     - [Logging system](loggin)
-     - [Reporting system](report)
- * [Running JPF from within your application](embedded)
- * [Writing JPF tests](jpf_tests)
- * [Coding conventions](coding_conventions)
- * [Hosting an Eclipse plugin update site](eclipse_plugin_update) 
\ No newline at end of file
diff --git a/doc/devel/jpf_tests.md b/doc/devel/jpf_tests.md
deleted file mode 100644 (file)
index a445c5a..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-# Writing JPF Tests #
-
-As a complex runtime system for (almost) arbitrary Java programs, it goes without saying that JPF needs a lot of regression tests. You can find these under the `src/tests` directories in (hopefully) all JPF projects. All tests follow the same scheme, which is motivated by the need to run tests in a number of different ways:
-
-  1. as part of the Ant-based build system, i.e. from build.xml
-  1. as explicitly invoked JUnit tests
-  1. by directly running JPF on the test application (i.e. without JUnit, either as a JPF `shell` or via RunTest.jar)
-  1. by running the test application on a normal JVM
-
-The rationale for this is to support various levels of inspection and debugging. 
-
-Each test conceptually consists of a test driver (e.g. executed under JUnit) which starts JPF from within its `@Test` annotated methods, and a class that is executed by JPF in order to check the verification goals. For convenience reasons, jpf-core provides infrastructure that enables you to implement both parts in the same class. This can be confusing at first - **the test class is used to start JPF on itself**.
-
-![Figure: Unit Testing in JPF](../graphics/new-testing.svg){align=center width=870}
-
-The `main()` method of `TestJPF` derived classes always look the same and can be safely copied between tests:
-
-~~~~~~~~ {.java}
-public static void main(String[] testMethods){
-  runTestsOfThisClass(testMethods);
-}
-~~~~~~~~
-
-This method serves two purposes. First, it is used to start the test outside JUnit, either on all `@Test` annotated instance methods, or just on the ones which names are provided as arguments. Second, it serves as the entry point for JPF when it executes the class. In this case, `TestJPF` takes care of invoking JPF on the test class and providing the name of the test method this was executed from.
-
-Other than that, test classes just consist of (almost) normal `@Test` annotated JUnit test methods, which all share the same structure
-
-~~~~~~~~ {.java}
-import org.junit.Test;
-
-@Test public void testX () {
-  if (verifyNoPropertyViolation(JPF_ARGS){
-    .. code to verify by JPF
-  }
-}
-~~~~~~~~
-
-The trick is the call to `verifyNoPropertyViolation()`, or any of the other `verifyXX()` methods of `TestJPF`. If executed by the host VM, i.e. from JUnit, it starts JPF on the same class and the containing method, and returns `false`. This means the corresponding `if` block is **not** executed by the host VM.
-
-When JPF is invoked, the argument to the main() method is set to the method name from which JPF got invoked, which causes `runTestsOfThisMethod()` to execute exactly this method again, but this time under JPF. Instead of re-executing the same `TestJPF.verifyX()` method again (and becoming infinitely recursive), we use a native peer `JPF_gov_nasa_jpf_util_test_TestJPF` which intercepts the `verifyX()` call and simply returns true, i.e. this time *only* the `if` block gets executed.
-
-The rest of the host VM executed `TestJPF.verifyX()` checks the results of the JPF run, and accordingly throws an `AssertionError` in case it does not correspond to the expected result. The most common goals are
-
- * `verifyNoPropertyViolation` - JPF is not supposed to find an error
- * `verifyPropertyViolation` - JPF is supposed to find the specified property violation
- * `verifyUnhandledException` - JPF is supposed to detect an unhandled exception of the specified type
- * `verifyAssertionError` - same for AssertionErrors
- * `verifyDeadlock` - JPF is supposed to find a deadlock
-
-Each of these methods actually delegate running JPF to a corresponding method whose name does not start with 'verify..'. These workhorse methods expect explicit specification of the JPF arguments (including SUT main class name and method names), but they return JPF objects, and therefore can be used for more sophisticated JPF inspection (e.g. to find out about the number of states).
-
-`TestJPF` also provides some convenience methods that can be used within test methods to find out which environment the code is executed from:
-
- * `isJPFRun()` - returns true if the code is executed under JPF
- * `isJUnitRun()` - returns true if the code is executed under JUnit by the host VM
- * `isRunTestRun()` - returns true if the code is executed by RunTest.jar
-
-Here is an example of a typical test method that uses some of these features:
-
-~~~~~~~~ {.java}
-  @Test public void testIntFieldPerturbation() {
-
-    if (!isJPFRun()){ // run this outside of JPF
-      Verify.resetCounter(0);
-    }
-
-    if (verifyNoPropertyViolation("+listener=.listener.Perturbator",
-                                  "+perturb.fields=data",
-                                  "+perturb.data.class=.perturb.IntOverUnder",...
-                                  "+perturb.data.delta=1")){
-      // run this under JPF
-      System.out.println("instance field perturbation test");
-
-      int d = data; // this should be perturbated
-      System.out.println("d = " + d);
-
-      Verify.incrementCounter(0);
-
-    } else { // run this outside of JPF
-      assert Verify.getCounter(0) == 3;
-    }
-  }
-~~~~~~~~
-
-## Running JPF tests from command line ##
-To run JPF tests from the command line, use the RunTest.jar either from `jpf-core/build`, or the one that is distributed with your project containing the tests (`tools/RunTest.jar` for JPF projects). This is an executable jar that expects the test class and (optional) method test names as arguments. If no method names are provided, all `@Test` annotated methods are executed. Most projects have a convenience script `bin/test` to execute RunTest.jar.
-
-~~~~~~~~ {.bash}
-> bin/test gov.nasa.jpf.test.mc.data.PerturbatorTest testIntFieldPerturbation
-
-......................................... testing testIntFieldPerturbation
-  running jpf with args: +listener=.listener.Perturbator +perturb.fields=data +perturb.data.class=.perturb.IntOverUnder +perturb.data.field=gov.nasa.jpf.test.mc.data.PerturbatorTest.data +perturb.data.delta=1 gov.nasa.jpf.test.mc.data.PerturbatorTest testIntFieldPerturbation
-JavaPathfinder v5.x - (C) RIACS/NASA Ames Research Center
-
-
-====================================================== system under test
-application: gov/nasa/jpf/test/mc/data/PerturbatorTest.java
-arguments:   testIntFieldPerturbation 
-
-====================================================== search started: 9/10/10 7:03 PM
-instance field perturbation test
-d = 43
-d = 42
-...
-====================================================== search finished: 9/10/10 7:03 PM
-......................................... testIntFieldPerturbation: Ok
-
-......................................... execution of testsuite: gov.nasa.jpf.test.mc.data.PerturbatorTest SUCCEEDED
-.... [1] testIntFieldPerturbation: Ok
-......................................... tests: 1, failures: 0, errors: 0
-~~~~~~~~
-
-## Running JPF tests under JUnit ##
-
-This is the preferred way to execute JPF regression tests, which is usually done from an Ant build.xml script containing a standard target such as
-
-~~~~~~~~ {.xml}
-  ...
-  <target name="test" depends="build" description="run core regression tests" if="have_tests">
-     ...
-     <junit printsummary="on" showoutput="off" haltonfailure="yes"
-            fork="yes" forkmode="perTest" maxmemory="1024m" outputtoformatters="true">
-       <classpath>
-         <path refid="lib.path"/>
-         <pathelement location="build/tests"/>
-         ...
-       </classpath>
-       <batchtest todir="build/tests">
-          <fileset dir="build/tests">
-            <exclude name="**/JPF_*.class"/>
-            <include name="**/*Test.class"/>
-          </fileset>
-      </batchtest>
-    </junit>
-  </target>
-~~~~~~~~
-
-Most JPF projects have build.xml files you can use as examples.
-
-Please note this means that you should not have any inner classes, interfaces, annotation types etc. with a name ending with `"Test"` since JUnit would interpret these as test cases and most likely complain about missing constructors and `main()` methods.
-
-## Debugging tests ##
-
-Typically, JPF tests are only executed from within an IDE if they fail and need to be debugged. 
-
-Under NetBeans, this can be done by selecting the test class, and then executing the *Debug File* command from the context menu. This will pop up a dialog that lets you enter a specific test method to debug. This method requires a properly set up ide-file-target.xml, which comes with most JPF projects.
-
-Under Eclipse, you can select the test class and then execute **Debug As..** -> **Java Application**.
diff --git a/doc/devel/listener.md b/doc/devel/listener.md
deleted file mode 100644 (file)
index 98af48c..0000000
+++ /dev/null
@@ -1,332 +0,0 @@
-# Listeners #
-Listeners are perhaps the most important extension mechanism of JPF. They provide a way to observe, interact with and extend JPF execution with your own classes. Since listeners are dynamically configured at runtime, they do not require any modification to the JPF core. Listeners are executed at the same level like JPF, so there is hardly any limit of what you can do with them.
-
-![Figure 1: JPF Listeners](../graphics/listener-overview.svg){align=center width=800}
-
-The general principle is simple: JPF provides an observer pattern implementation that notifies registered observer instances about certain events at the search level and the VM level. These notifications cover a broad spectrum of JPF operations, from low level events like `instructionExecuted` to high level events like `searchFinished`. Each notification is parameterized with the corresponding source (either the `Search` or the `VM` instance), which can be then used by the notified listener to obtain more information about the event and the JPF's internal state.
-
-Configuration is usually done with the `listener` property, either from the command line, or a .jpf property file. Listeners can also be associated with annotations, to be automatically loaded whenever JPF encounters such an annotation. Applications can use the `@JPFConfig` annotation to explicitly specify JPF listeners. Lastly, if JPF is used in an embedded mode, listeners can be registered with an API.
-
-
-## Listener Types ##
-
-
-There are two basic listener interfaces, depending on corresponding event sources: `SearchListeners` and `VMListeners`. Since these interfaces are quite large, and listeners often need to implement both, we also provide "adapter" classes, i.e. implementors that contain all required method definitions with empty method bodies. Concrete listeners that extend these adapters therefore only have to override the notification methods they are interested in.
-
-The adapter classes are used for the majority of listener implementations, especially since they also support two other interfaces/extension mechanisms that are often used in conjunction with `Search` and `VMListeners`: 
-
- 1. `Property` - to define program properties
- 2. `PublisherExtension` - to produce output within [the JPF reporting system](report)
-
-`ListenerAdapter` is the bare adapter implementation for `SearchListener`, `VMListener` and `PublisherExtension`. This is what is mostly used to collect information during JPF execution (e.g. `CoverageAnalyzer` and `DeadlockAnalyzer`).
-
-`PropertyListenerAdapter` is used in case the listener implements a program property, i.e. it can terminate the search process. A prominent example of this category is `PreciseRaceDetector`.
-
-![Figure 2: Listener Types](../graphics/listeners.svg){align=center width=800}
-
-Choosing the right type for your listener is important, since JPF automatically registers listeners (and properties) based on this type. You can bypass and directly implement single listener interfaces, but then you also have to do the proper registrations.
-
-Usually, the notification alone is not enough, and the listener needs to acquire more information from JPF. For this purpose, we provide either the `Search` or the `VM` instance as notification arguments, and the listener has to use these as "Facades" to query or interact JPF. It therefore matters to implement the listener within the right package.
-
-
-## SearchListener ##
-
-
-`SearchListener` instances are used to monitor the state space search process, e.g. to create graphical representations of the state-graph. They provide notification methods for all major Search actions.
-
-~~~~~~~~ {.java}
-package gov.nasa.jpf.search;
-public interface SearchListener extends JPFListener {
-  void searchStarted (Search search);  
-  void stateAdvanced (Search search);       // got next state
-  void stateProcessed (Search search);      // state is fully explored
-  void stateBacktracked (Search search);    // state was backtracked one step (same path)
-  void stateStored (Search search);         // somebody stored the state
-  void stateRestored (Search search);       // previously generated state was restored (any path)
-  void propertyViolated (Search search);    // JPF encountered a property violation
-  void searchConstraintHit (Search search); // e.g. max search depth
-  void searchFinished (Search search);
-}}
-~~~~~~~~
-
-
-For the standard depth first search (`gov.nasa.jpf.search.DFSearch`), listener implementations can assume the following notification model:
-
-
-![Figure 3: Depth first listener notifications](../graphics/DFSListener.svg){align=center width=500}
-
-The most frequently used notifications are:
-
-`stateAdvanced` - to store additional, backtrackable state information in an associative array
-
-`stateBacktracked` - to restore additional state information
-
-`searchFinished` - to process listener results
-
-
-## VMListener ##
-
-
-This is a fat interface, reflecting various VM operations
-
-~~~~~~~~ {.java}
-package gov.nasa.jpf.jvm;
-public interface VMListener extends JPFListener {
-  //--- basic bytecode execution
-  void executeInstruction (JVM vm);  // JVM is about to execute the next instruction
-  void instructionExecuted (JVM vm); // JVM has executed an instruction
-
-  //--- thread operations (scheduling)
-  void threadStarted (JVM vm);       // new Thread entered run()
-  void threadBlocked (JVM vm);       // thread waits to acquire a lock
-  void threadWaiting (JVM vm);       // thread is waiting for signal
-  void threadNotified (JVM vm);      // thread got notified
-  void threadInterrupted (JVM vm);   // thread got interrupted
-  void threadTerminated (JVM vm);    // Thread exited run()
-  void threadScheduled (JVM vm);     // new thread was scheduled by JVM
-
-  //--- class management
-  void classLoaded (JVM vm);         // new class was loaded
-
-  //--- object operations
-  void objectCreated (JVM vm);       // new object was created
-  void objectReleased (JVM vm);      // object was garbage collected
-  void objectLocked (JVM vm);        // object lock acquired
-  void objectUnlocked (JVM vm);      // object lock released
-  void objectWait (JVM vm);          // somebody waits for object lock
-  void objectNotify (JVM vm);        // notify single waiter for object lock
-  void objectNotifyAll (JVM vm);     // notify all waiters for object lock
-
-  void gcBegin (JVM vm);             // start garbage collection
-  void gcEnd (JVM vm);               // garbage collection finished
-
-  void exceptionThrown (JVM vm);     // exception was thrown
-
-  //--- ChoiceGenerator operations  
-  void choiceGeneratorSet (JVM vm);  // new ChoiceGenerator registered
-  void choiceGeneratorAdvanced (JVM vm); // new choice from current ChoiceGenerator
-  void choiceGeneratorProcessed (JVM vm); // current ChoiceGenerator processed all choices  
-}
-~~~~~~~~
-
-
-The most commonly used methods are the instruction notifications:
-
-`executeInstruction` - is called before a bytecode instruction gets executed by the VM. The listener can even use this to skip and/or replace this instruction, which is useful for non-invasive instrumentation.
-
-`instructionExecuted` - is the post-execution notification, which is suitable to keep track of execution results (method invocations, assigned field values, branch results etc.)
-
-
-## Example ##
-
-The following example is a slightly abbreviated form our race detector. The basic idea is simple: every time we encounter a new scheduling point (i.e. new `ThreadChoiceGenerator` object) that is due to a field access on a shared object, we check if any of the other runnable threads is currently accessing the same field on the same object. If at least one operation is a `putfield`, we have a potential race.
-
-The example shows three aspects that are quite typical: 
-
-  1. listeners often use only a small number of notification methods
-
-  2. they often do not require a huge amount of code (most expensive operations are performed by the `VM` and the `Search` objects)
-
-  3. sometimes you have to dig deep into JPF internal constructs, to extract things like `ThreadInfo`, `FieldInfo` and `ChoiceGenerator` instances
-
-~~~~~~~~ {.java}
-public class PreciseRaceDetector extends PropertyListenerAdapter {
-  FieldInfo raceField;
-  ...
-  //--- the Property part
-  public boolean check(Search search, JVM vm) {
-    return (raceField == null);
-  }
-
-  //--- the VMListener part
-  public void choiceGeneratorSet(JVM vm) {
-    ChoiceGenerator<?> cg = vm.getLastChoiceGenerator();
-
-    if (cg instanceof ThreadChoiceFromSet) {
-      ThreadInfo[] threads = ((ThreadChoiceFromSet)cg).getAllThreadChoices();
-      ElementInfo[eiCandidates = new ElementInfo[threads.length](]);
-      FieldInfo[fiCandidates = new FieldInfo[threads.length](]);
-
-      for (int i=0; i<threads.length; i++) {
-        ThreadInfo ti = threads[i];
-        Instruction insn = ti.getPC();
-        
-        if (insn instanceof FieldInstruction) { // Ok, its a get/putfield
-          FieldInstruction finsn = (FieldInstruction)insn;
-          FieldInfo fi = finsn.getFieldInfo();
-
-          if (StringSetMatcher.isMatch(fi.getFullName(), includes, excludes)) {
-            ElementInfo ei = finsn.peekElementInfo(ti);
-
-            // check if we have seen it before from another thread
-            int idx=-1;
-            for (int j=0; j<i; j++) {
-              if ((ei ## eiCandidates[&& (fi ## fiCandidates[j](j])))) {
-                idx = j;
-                break;
-              }
-            }
-
-            if (idx >= 0){ // yes, we have multiple accesses on the same object/field
-              Instruction otherInsn = threads[idx].getPC();
-              if (isPutInsn(otherInsn) || isPutInsn(insn)) {
-                raceField = ((FieldInstruction)insn).getFieldInfo();
-                ..
-                return;
-              }
-            } else {
-              eiCandidates[i] = ei;
-              fiCandidates[i] = fi;
-            }
-          }
-        }
-      }
-    }
-  }
-
-  public void executeInstruction (JVM jvm) {
-    if (raceField != null) {  // we're done, report as quickly as possible
-      ThreadInfo ti = jvm.getLastThreadInfo();
-      ti.breakTransition();
-    }
-  }
-}
-~~~~~~~~
-
-## Instantiation ##
-
-Explicit instantiation of a listener (e.g. from a JPF shell) can be done in any way. If the listener is specified as a JPF property, it's class either needs to have a default constructor, or a constructor that takes a single `gov.nasa.jpf.Config` argument. The `Config` object that is passed into this constructor by JPF is the same that was used for the initialization of JPF itself. This is the preferred method if the listener has to be parameterized. In case of the `PreciseRaceDetector` example, this can be used to filter relevant fields with regular expressions:
-
-~~~~~~~~ {.java}
-public class PreciseRaceDetector extends PropertyListenerAdapter {
-  ...
-  StringSetMatcher includes = null;
-  StringSetMatcher excludes = null;
-  
-  public PreciseRaceDetector (Config conf) {
-    includes = StringSetMatcher.getNonEmpty(conf.getStringArray("race.include"));
-    excludes = StringSetMatcher.getNonEmpty(conf.getStringArray("race.exclude"));
-  }
-  ...
-  public void choiceGeneratorSet(JVM vm) {
-    ...
-        FieldInfo fi =..
-        if (StringSetMatcher.isMatch(fi.getFullName(), includes, excludes))
-     ...
-  }
-~~~~~~~~
-
-
-## Configuration ##
-
-Listener configuration can be done in a number of ways: via JPF properties from the command line or a .jpf file, via JPF APIs from a JPF shell (a program invoking JPF), or from the system under test by using Java annotations (i.e. without code modification).
-
-Since listeners are executed by the host VM, they have to be in the `CLASSPATH` (`jpf-core.native_classpath` property).
-
-
-### command line ###
-
-
-the *listener* property can be used to specify a colon separated list of listener class names:
-
-~~~~~~~~ {.bash}
-bin/jpf ... +listener=x.y.MyFirstListener,x.z.MySecondListener ...
-~~~~~~~~
-
-
-### .jpf property file ###
-
-
-If you have several listeners and/or a number of other JPF options, it is more convenient to add the `listener` property to a .jpf file:
-
-~~~~~~~~ {.bash}
-# Racer-listener.jpf - JPF mode property file to detect data races in jpftest.Racer
-target = jpftest.Racer
-listener=gov.nasa.jpf.tools.PreciseRaceDetector
-~~~~~~~~
-
-
-### Autoload Annotations ###
-
-
-Consider your system under test is marked up with a Java annotation that represent properties. For example, you can use the `@NonNull` annotation to express that a method is not allowed to return a `null` value:
-
-~~~~~~~~ {.java}
-import gov.nasa.jpf.NonNull; 
-  ...
-  @NonNull X computeX (..) {
-    //.. some complex computation
-  }
-  ...
-~~~~~~~~
-
-You can use .jpf property files (or the command line, if you love to type) to tell JPF that it should automatically load and register a corresponding listener (e.g. `NonNullChecker`) if it encounters such a `@NonNull` annotation during class loading:
-
-~~~~~~~~ {.bash}
-..
-listener.autoload = gov.nasa.jpf.NonNull,...
-listener.gov.nasa.jpf.NonNull = gov.nasa.jpf.tools.NonNullChecker
-...
-~~~~~~~~
-
-
-### @JPFConfig annotation (SuT) ###
-
-
-You can also explicitly direct JPF to load the listener from within your application by using the `@JPFConfig` annotation:
-
-~~~~~~~~ {.java}
-import gov.nasa.jpf.JPFConfig;
-..
-// set JPF properties via properties at class load time
-@JPFConfig ({"listener+=.tools.SharedChecker", ..})
-public class TestNonShared implements Runnable {
-  ...
-}
-~~~~~~~~
-
-However, this is not recommended outside JPF tests - the application would run, but not compile without JPF.
-
-
-### Verify API (SuT) ###
-
-
-A less often used method is to set listeners is to use the `gov.nasa.jpf.vm.Verify` API from within your application. With this, you can control the exact load time of the listener (but be aware of backtracking). With this, the above example would become
-
-~~~~~~~~ {.java}
-import gov.nasa.jpf.vm.Verify;
-..
-public class TestNonShared implements Runnable {
-  ...
-  public static void main (String[] args){
-    
-    // set JPF properties programmatically
-    Verify.setProperties("listener+=.tools.SharedChecker", ...);
-    ..
-  }
-}
-~~~~~~~~
-
-This method should only be used in special cases (models written explicitly for JPF verification), since it does not run outside JPF.
-
-
-### JPF API (embedded mode) ###
-
-
-If JPF is explicitly started from within another application, listeners can be instantiated at will and configured via the `JPF.addListener(..)` API:
-
-~~~~~~~~ {.java}
-MyListener listener=new MyListener(..);
-..
-Config config = JPF.createConfig( args);
-JPF jpf = new JPF( config);
-jpf.addListener(listener);
-jpf.run();
-..
-~~~~~~~~
-
-Most listeners tend to fall into three major categories: 
-
-1. system class (e.g. for logging) - is usually configured via the default.properties.
-2. complex properties - is configured with an application specific mode property file.
-3. JPF debugging - is specified via the command line (`+key=value` overrides).
diff --git a/doc/devel/logging.md b/doc/devel/logging.md
deleted file mode 100644 (file)
index 3993fdf..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# The JPF Logging API #
-There is one simple rule: do not use `System.out` or `System.err` for any permanent logging
-
-
-Of course we all do this temporarily during debugging, but it really shouldn't stay in the code. The logging infrastructure is quite easy to use. Just declare a static `Logger` instance with an appropriate id (either package or logging topic) at the top of your class, and then use the `Logger` API to create output:
-
-~~~~~~~~ {.java}
-...
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-package x.y.z;
-
-class MyClass .. {
-  static Logger log = JPF.getLogger("x.y.z");
-  ...
-    log.severe("there was an error");
-  ...
-    log.warning("there was a problem");
-  ...
-    log.info("something FYI");
-  ...
-    if (log.isLoggable(Level.FINE)){    // (1) don't create garbage
-        log.fine("this is some detailed info about: " + something);
-    }
-  ...
-}
-~~~~~~~~
-
-Note that there is only one instance for each `Logger` ID, i.e. you can have a corresponding static field in all your relevant classes, and don't have to share the fields. Another aspect that is mostly important for the lower log levels (e.g. `FINE`) is that you should't concatenate log messages in operations that occur frequently, since the corresponding `StringBuilder` instances can cause performance degradations even if the log level is not set (the arguments still get evaluated). In this case, encapsulate the logging in `log.isLoggable(level){..}` blocks.
-
diff --git a/doc/devel/mercurial.md b/doc/devel/mercurial.md
deleted file mode 100644 (file)
index b1b3051..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-# Mercurial in 5 Minutes #\r
-\r
-[Mercurial](http://www.selenic.com/mercurial) is a *distributed version control system* (DVCS) of the same category such as the likes of [Git](http://git-scm.com/) or [Bazaar](http://bazaar.canonical.com/en/). If you know nothing else about DVCS, this means mostly one thing - **all repositories are created equal**. There is no such thing as a different repository format for public and private repositories. All repositories (that are synchronized) have the same, stored history information.\r
-\r
-Yes, this means you can finally synchronize your working repos with more than one "master" repository, e.g. with several local ones, closed workgroup repos, and a public master repo (that just happens to be designated as such).\r
-\r
-Each Mercurial repository consists of an (optional) working copy of your files, and a `.hg` directory in your repo root dir that holds all the version control info. Be careful not to delete the `.hg` dir, otherwise your repo is reduced to just a snapshot of your current working files.\r
-\r
-A central concept of DVCS is the *change set* - think of it as the diff of all files that have been changed when you do a commit. This is what DVCS store (e.g. Mercurial in the `.hg` dir) and compare between different repositories. One implication of this is that you can't do partial commits like in CVS or SVN (e.g. by just committing changes within a certain subdirectory). You always have to execute the Mercurial commands in the top dir of the repository you are working in.\r
-\r
-If you have previously worked with CVS or SVN, another difference you have to wrap your head around is that there are commands that work locally, and commands that interact with the remote repo. __The `commit` and `update` commands are only local__. The `push` and `pull` commands synchronize your local repo with an external one (like commit and update did in CVS/SVN).\r
-\r
-Here are the main commands to interact with Mercurial:\r
-\r
-![](mercurial.png)\r
-\r
-**hg clone <url>** - this is the first command that clones an external repository (either from `file:///...` or `http://...` URLs). It creates both a working copy and the `.hg` directory (with contents)\r
-\r
-**hg init** - is what you do if you create a local repository for which there is no external one yet. Just create your files, `cd` into the top directory, and execute the command (which will create the `.hg` for you)\r
-\r
-**hg pull [-u] <url>** - updates the repo you are currently in from the provided URL. Note that your working copy is only updated if you use the `-u` option\r
-\r
-**hg incoming <url>** - is the little brother of `pull`. It just tells you if there are changesets in the remote repository you would pull\r
-\r
-**hg status** - tells you if there are uncommitted changes in your working copy that have to be committed to the local `.hg` directory before you can `push` or `pull`\r
-\r
-**hg diff** - does a bit more, it also shows you a diff file with the uncommitted changes\r
-\r
-**hg add <file>** - adds a file to the repo\r
-\r
-**hg remove <file>** - removes a file from the repo\r
-\r
-**hg addremove** - adds all new files of the working copy that are not in the repository yet, and removes all which are not in the working copy anymore\r
-\r
-**hg commit** - saves changes in your working copy to your local `.hg`. Do this early and often, this is now just a local operation that doesn't change anything outside the repo you are working with\r
-\r
-**hg update** - would update your working copy from your local `.hg`. It is rarely used if you pull with the `-u` option\r
-\r
-**hg push <url>** - pushes the relevant changesets of your local `.hg` back to the external repo with the provided URL. Make sure you have no uncommitted changes (Mercurial would refuse to push), and - in case the external repo is shared - that you pulled/merged all changesets of the external repo before you push\r
-\r
-**hg outgoing <url>** - is the dry run version of a push, it tells you if there are changesets that would have to be pushed  \r
-\r
-**hg revert** - reverts your working copy to a previous version stored in your local `.hg`\r
-\r
-**hg heads** - tells you if there are branches in your repo, which usually happens if you pull from a changed external repo while having un-pushed local changes that are committed\r
-\r
-**hg merge** - gets rid of multiple heads. Make sure to get rid of these by merging as soon as you detect them, it only gets more difficult with more external and local changes. Once there are collisions, you are back to the CVS/SVN merge mess\r
-\r
-You can always obtain more information by executing\r
-~~~~~~~~\r
-#!sh\r
-> hg help [command]\r
-~~~~~~~~\r
-If you don't list a command, all available ones will be displayed.\r
-\r
-Commands that refer to external repos take URLs such as `http://babelfish.arc.nasa.gov/hg/jpf/jpf-core` as arguments.\r
diff --git a/doc/devel/mji.md b/doc/devel/mji.md
deleted file mode 100644 (file)
index 817cdd1..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-# Model Java Interface (MJI) #
-## Purpose ##
-
-Even if it is just a Java application (i.e. solely consists of Java classes), JPF can be viewed as a Java Virtual Machine (JVM) in itself. The consequence is that (*.class) class files, and even the same files at times, are processed in two different ways in a JVM running JPF
-
-  * as ordinary Java classes managed and executed by the host JVM (standard Java library classes, JPF implementation classes)
-  * as "modeled" classes managed and processed (verified) by JPF
-
-Class lookup in both layers is based on the CLASSPATH environment variable / command line parameter, but this should not obfuscate the fact that we have to clearly distinguish between these two modes. In particular, JPF (i.e. the "Model" layer) has its own class and object model, which is completely different and incompatible to the (hidden) class and object models of the underlying host JVM executing JPF
-
-![Figure 1: JPF Layers](../graphics/jpf-layers.svg){align=center width=560}
-
-Each standard JVM supports a so called Java Native Interface (JNI), that is used to delegate execution from the Java level (i.e. JVM controlled bytecode) down into the (platform dependent) native layer (machine code). This is normally used to interface certain functionalities to the platform OS / architecture (e.g. I/O or graphics).
-
-Interestingly enough, there exists a analogous need to lower the "execution" level in JPF, from JPF controlled bytecode into JVM controlled bytecode. According to this analogy, the JPF specific interface is called Model Java interface (MJI).
-
-Even though MJI offers a wide range of applications, there are three major usages for delegating bytecode execution into the host JVM:
-
- 1. Interception of native methods - without a abstraction lowering mechanism, JPF would be forced to completely ignore native methods, i.e. would fail on applications relying on the side effects of such methods, which is not acceptable (even if  many native methods indeed can be ignored if we restrict the set of verification targets)
-
- 2. Interfacing of JPF system level functionality - some system level functions of standard library classes (esp. java.lang.Class, java.lang.Thread) have to be intercepted even if they are not native because they have to affect the JPF internal class, object and thread model (etc. loading classes, creating / starting threads). It should be noted that MJI can also be used to extend the functionality of JPF without changing its implementation.
-
-3. State space reduction - by delegating bytecode execution into the non-state-tracked host JVM, we can cut off large parts of the state space, provided that we know the corresponding method side effects are not relevant for property verification (e.g. `System.out.println(..)`)
-
-Besides these standard usages, there exist more exotic applications like collecting information about JPF state space exploration and making it available both to JPF and the verification target.
-
-
-## MJI Components ##
-
-
-The basic functionality of MJI consists of a mechanism to intercept method invocations, and delegate them by means of Java reflection calls to dedicated classes. There are two types of classes involved, residing at different layers:
-
-  * Model Classes - these classes execute by the VM of JPF, which might be completely unknown to the host JVM
-  * Native Peers - these classes, implemented by `NativePeer` subclasses, contain the implementations of the methods to intercept, and to execute by the host JVM
-
-As part of the JPF implementation, MJI automatically takes care of determining which method invocations have to be intercepted by looking up the corresponding native peer methods
-
-![Figure 2: MJI Functions](../graphics/mji-functions.svg){align=center width=600}
-
-This would not be very useful without being able to access the JPF object model (or other JPF intrinsics), from inside the native peer methods. Instead of requiring all native peers implementation to reside in a JPF internal package, there exists an interface class `MJIEnv` that provide access to the JPF internal structure in a controlled way. `NativePeer` classes  residing in `gov.nasa.jpf.vm` (i.e. the same package as `MJIEnv`) can reach all internal JPF features. Outside this package, the available API in `MJIEnv` is mostly restricted to the access JPF object (getting and setting values).
-
-![Figure 3: MJI Call Sequence](../graphics/mji-call.svg){align=center width=580}
-
-Before a native peer method can be used, JPF has to establish the correspondence between the model class and the native peer. This takes place at load time of the model class. MJI uses a special name mangling scheme to lookup native peers, using the model class package name and class name to deduce the native peer class name.
-
-![Figure 3: MJI name mangling](../graphics/mji-mangling.svg){align=center width=560}
-
-Since the model class package is encoded in the native peer name, the package of the native peer can be chosen freely. In analogy to JNI, native peers methods names include the signature of the model method by encoding its parameter types. If there is no potential ambiguity, i.e. mapping from native peer methods to model class methods is unique, signature encoding is not required.
-
-Each native peer, which is an instance of a `NativePeer` subclass, is associated with exactly one `ClassInfo` instance.
-All the native peer methods to be intercepted have to be `public` and annotated with `gov.nasa.jpf.annotation.MJI`. 
-Moreover, MJI requires them to have two parameters: 
-
-  * An instance of `MJIEnv` which can be used to access JPF internal constructs
-  * An integer which is a handle for the corresponding JPF `this` object (or the `java.lang.Class` object in case of a static method) including the method to be intercepted
-
-See [Mangling for MJI](mji/mangling) for more details and examples of mangling.
-
-Going beyond the JNI analogy, MJI can also be used to intercept
-
-  * non-native methods (i.e. the lookup process is driven by the methods found in the native peer, not the `native` attributes in the model class. This can be particularly useful in case the class is used from both as a model class and a JVM class (e.g. `gov.nasa.jpf.vm.Verify`), using a method body that directly refers to the native peer
-  * class initialization (the corresponding native peer method has to be named `$clinit(MJIEnv env, int clsRef)`)
-  * constructors (the corresponding native peer method has to be named `$init__<sig>(MJIEnv env,int objRef, <ctor-params>)` and the normal signature mangling rules apply)
-
-
-It is important to note that type correspondence does NOT include references. All references (object types) on the JPF side are transformed in handles (int values) on the JVM side. The passed in `MJIEnv` parameter has to be used to convert/analyze the JPF object. Since MJI per default uses the standard Java reflection call mechanism, there is a significant speed penalty (lookup, parameter conversion etc.), which again is a analogy to JNI.
-
-Even if it is not directly related to MJI, it should be mentioned that some JPF specific model classes cannot be loaded via the CLASSPATH (e.g. `java.lang.Class`), since they contain JPF based code that is not compatible with the host JVM (e.g. relying on native methods that refer to JPF functionality). Such classes should be kept in separate directories / jars that are specified with the JPF command line option `-jpf-bootclasspath` or `-jpf-classpath`. This is mostly the case for system classes. On the other hand, model classes don't have to be JPF specific. It is perfectly fine to provide a native peer for a standard Java class (e.g. `java.lang.Character`), if only certain methods from that standard class needs to be intercepted. Native peers can contain any number of non-"native" methods and fields, but those should not be annotated with `@MJI` to avoid lookup problems.
-
-## Tools ##
-
-To ease the tedious process of manually mangle method names, MJI includes a tool to automatically create skeletons of native peers from a given Model class, called `GenPeer`. The translation process uses Java reflection, i.e. the model class needs to be in the CLASSPATH and is specified in normal dot notation (i.e. not as a file).
-
-![Figure 4: The GenPeer tool](../graphics/genpeer.svg){align=center width=470}
-
-There exist a number of command line options that can be displayed by calling `GenPeer` without arguments. `GenPeer` per default writes to stdout, i.e. the output has to be redirected into a file.
-
-Since method invocation by reflection used to be a slow operation, we previously also had a tool called `GenPeerDispatcher`, which used method signature hash-codes to explicitly dispatch native peer methods. With recent improvements in JVM performance, this tool became obsolete.
-
-
-## Example ##
-
-
-The following example is an excerpt of a JPF regression test, showing how to intercept various different method types, and using `MJIEnv` to access JPF objects.
-
-
-### Model class (JPF side) ###
-
-
-This is executed by JPF, which means it needs to be in JPF's  `vm.classpath` setting. 
-
-~~~~~~~~ {.java}
-public class TestNativePeer {
-    static int sdata;
-    
-    static {
-      // only here to be intercepted
-    }
-    
-    int idata;
-    
-    TestNativePeer (int data) {
-      // only here to be intercepted
-
-    }
-  
-    public void testClInit () {
-      if (sdata != 42) {
-        throw new RuntimeException("native 'clinit' failed");
-      }
-    }
-
-    public void testInit () {
-      TestNativePeer t = new TestNativePeer(42);
-
-      if (t.idata != 42) {
-        throw new RuntimeException("native 'init' failed");
-      }
-    }
-
-    native int nativeInstanceMethod (double d, char c, boolean b, int i);
-
-    public void testNativeInstanceMethod () {
-
-      int res = nativeInstanceMethod(2.0, '?', true, 40);
-      if (res != 42) {
-        throw new RuntimeException("native instance method failed");
-      }
-    }
-    
-    native long nativeStaticMethod (long l, String s);
-
-    public void testNativeStaticMethod () {
-      long res =  nativeStaticMethod(40, "Blah");
-
-      if (res != 42) {
-        throw new RuntimeException("native instance method failed");
-
-      }
-    }
-    
-    native void nativeException ();
-    
-    public void testNativeException () {
-      try {
-        nativeException();
-      } catch (UnsupportedOperationException ux) {
-        String details = ux.getMessage();
-
-        if ("caught me".equals(details)) {
-          return;
-        } else {
-          throw new RuntimeException("wrong native exception details: " +
-                                     details);
-        }
-      } catch (Throwable t) {
-        throw new RuntimeException("wrong native exception type: " +
-                                   t.getClass());
-      }
-
-      throw new RuntimeException("no native exception thrown");
-    }
-  }
-~~~~~~~~
-
-
-### Native Peer class (host VM side) ###
-
-
-This is executed by the host VM (i.e. at the same level like JPF itself), so make sure it is in your CLASSPATH.
-
-~~~~~~~~ {.java}
-public class JPF_gov_nasa_jpf_vm_TestNativePeer {
-
-    @MJI
-    public static void $clinit (MJIEnv env, int rcls) {
-      env.setStaticIntField(rcls, "sdata", 42);
-    }
-
-    @MJI
-    public static void $init__I (MJIEnv env, int robj, int i) {
-      env.setIntField(robj, "idata", i);
-    }
-
-    // preferably use full signature mangling
-    @MJI
-    public static int nativeInstanceMethod__DCZI__I (MJIEnv env, int robj,
-                                            double d, char c,
-                                            boolean b, int i) {
-      if ((d ## 2.0) && (c  ## '?') && b) {
-        return i + 2;
-      }
-      return 0;
-    }
-
-    //..but it also works without, if there is no overloading (don't be lazy!) 
-    @MJI
-    public static long nativeStaticMethod (MJIEnv env, int rcls,
-                                           long l, int stringRef) {
-      String s = env.getStringObject(stringRef);
-      if ("Blah".equals(s)) {
-        return l + 2;
-      }
-      return 0;
-    }
-
-    @MJI
-    public static void nativeException____V (MJIEnv env, int robj) {
-      env.throwException("java.lang.UnsupportedOperationException",
-                         "caught me");
-    }
-  }
-~~~~~~~~
-
diff --git a/doc/devel/mji/mangling.md b/doc/devel/mji/mangling.md
deleted file mode 100644 (file)
index 5e2847a..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-# Mangling for MJI #
-## Mangling Methods ##
-Suppose your method looks like 
-
-~~~~~~~~ {.java}
-T1 foo(T2 x, T3 y, ...)
-~~~~~~~~
-
-where the `Ti` are Java types.
-
-If `T1` is a primitive type or `void`, then the mangled MJI method looks
-like
-
-~~~~~~~~ {.java}
-public static T1 foo__MT2MT3...__MT1(...)
-~~~~~~~~
-
-where the `MTi` are the mangled versions of the `Ti`.  
-Mangling of types is described in the Mangling Types section below. 
-Note that `T1` appears twice, once not mangled (`T1`) and once mangled
-(`MT1`).  The `__` is two consecutive underscores: `_` followed by
-`_`.
-
-As a not-so-special case, if `foo` has no arguments, then the mangled method
-will have four consecutive underscores:
-
-~~~~~~~~ {.java}
-  `T1 foo()`[[br]]
-~~~~~~~~
-
-goes to
-
-~~~~~~~~ {.java}
-  `public static T1 foo____MT1(...)`
-~~~~~~~~
-
-If `T1` is not a primitive type, then the mangled `MJI` method looks like 
-
-~~~~~~~~ {.java}
-  `public static int foo__MT2MT3...__MT1`
-~~~~~~~~
-
-where the `MTi` are as above.  Note that `T1` only appears once in this
-case.  The method's return type is `int`.  As before, a method with no
-arguments gets mangled to something with four consecutive underscores.
-
-Also, the use of generics is ignored when mangling names.
-
-
-## Mangling Constructors ##
-Constructors are treated as methods named `$init` with return type `void`.
-
-
-## Mangling Static Initializers ##
-Static initializers are treated as methods named `$clinit` with no
-arguments and return type `void`.  Thus, their MJI versions always
-have the mangled signature:
-
-~~~~~~~~ {.java}
-public static void $clinit____V (MJIEnv env, int clsObjRef)
-~~~~~~~~
-
-or the equivalent unmangled signature:
-
-~~~~~~~~ {.java}
-public static void $clinit (MJIEnv env, int clsObjRef)
-~~~~~~~~
-
-
-## Mangling Types ##
-  - Convert primitives and `void` as follows
-
-    |Java Type|Mangled Type|
-    | ------- |:---:|
-    |`boolean`|`Z`|
-    |`byte`   |`B`|
-    |`char`   |`C`|
-    |`short`  |`S`|
-    |`int`    |`I`|
-    |`long`   |`J`|
-    |`float`  |`F`|
-    |`double` |`D`|
-    |`void`   |`V`|
-
-  - Convert a non-array reference type `T` in package `x.y`
-    (e.g. `java.lang.String`) as follows
-    - `x.y.T`   --> `Lx_y_T_2`
-    - Example: `java.lang.String` --> `Ljava_lang_String_2`
-
-  - Convert an array of primitive type `T`
-    (e.g. `byte[]`) as follows:
-    - `T[]` --> `_3MT`  where `MT` is the mangled version of `T`
-      (e.g. for `T=byte`, `MT=B`)
-    - Example: `byte[]` --> `_3B`
-
-  - Convert an array of reference type `T` in package `x.y`
-    (e.g. `java.lang.String[]`) as follows:
-    - `x.y.T[]` --> `_3Lx_y_T_2`
-    - Example: `java.lang.String[]` --> `_3Ljava_lang_String_2`
-
-
-## Method Examples ##
-
- `void` return type, single primitive argument:
-
-~~~~~~~~ {.java}
-  public static void resetCounter(int id)
--->
-  public static final void resetCounter__I__V(MJIEnv env, int objref, int id)
-~~~~~~~~
-
- Primitive return type, no arguments:
-
-~~~~~~~~ {.java}
-  public native boolean isArray()
--->
-  public static boolean isArray____Z(MJIEnv env, int objref)
-~~~~~~~~
-
- Primitive return type, single primitive argument:
-
-~~~~~~~~ {.java}
-  public static double abs(double a)
--->
-  public static double abs__D__D(MJIEnv env, int clsObjRef, double a)
-~~~~~~~~
-
- Primitive return type, two primitive arguments:
-
-~~~~~~~~ {.java}
-  public static long min(long a, long b)
---> 
-  public static long min__JJ__J(MJIEnv env, int clsObjRef, long a, long b)
-~~~~~~~~
-
-
- `void` return type, arguments include an array of a primitive type:
-
-~~~~~~~~ {.java}
-  public native void write (byte[] buf, int off, int len);
--->
-  public static void write___3BII__V(MJIEnv env, int objref,
-                                     int bufRef, int off, int len)
-~~~~~~~~
-
-
- `void` return type, argument is an array of a reference type: 
-
-~~~~~~~~ {.java}
-   public static void print(String s)
--->
-  public static void print___3Ljava_lang_String_2__V(MJIEnv env, int clsRef, int argsRef)
-~~~~~~~~
-
- Array of reference types returned, no arguments: 
-~~~~~~~~ {.java}
-  public native Annotation[] getAnnotations()
--->
-  public static int getAnnotations_____3Ljava_lang_annotation_Annotation_2(MJIEnv env, int robj)
-~~~~~~~~
-   Notice there are 5 underscores before the `3L`: two marking the
-   arguments, two marking the return type, and one from the `_3`
-   signalling an array.
-
- Array of reference types using generics returned, no arguments:
-
-~~~~~~~~ {.java}
-  public native Class<?>[] getParameterTypes()
--->
-  public static int getParameterTypes_____3Ljava_lang_Class_2(MJIEnv env, int objref)
-~~~~~~~~
-    
-Note: the use of generics is ignored in the mangling.
-
-
-
-## Constructor Examples ##
-
-Constructors are treated as though they were methods named `$init`
-returning `void`, so the method examples above should also be helpful
-for constructors.  Here are a few more examples.
-
-In the class `ConsoleOutputStream`:
-
-~~~~~~~~ {.java}
-  public ConsoleOutputStream()
--->
-  public static void $init____V(MJIEnv env, int objref)
-~~~~~~~~
-
-In the class `AtomicLongFieldUpdater`:
-
-~~~~~~~~ {.java}
-  protected AtomicLongFieldUpdater(Class<T> objClass, String fieldName)
--->
-  public static void $init__Ljava_lang_Class_2Ljava_lang_String_2__V
-                         (MJIEnv env, int objRef,
-                          int tClsObjRef, int fNameRef)
-~~~~~~~~
diff --git a/doc/devel/modules.md b/doc/devel/modules.md
deleted file mode 100644 (file)
index 45e84d7..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# JPF Runtime Modules #
-
-JPF is partitioned into separate projects that all follow the same directory layout and build process. Modules can be distributed as source or binary distributions. Binary distributions are just slices through the directory tree of a source distribution that preserve the permanent build artifact, i.e. both distribution forms are runtime-compatible.
-
-![Figure: JPF Modules](../graphics/jpf-project.svg){align=center width=750}
-The main artifacts are the *.jar files created and stored in the `build` directory. We can divide this into classes that are executed by the host VM (i.e. have to be in JPF's `native_classpath` setting), and classes that are executed by JPF itself (i.e. have to be in JPF's `classpath` setting). The first category includes [listeners](listener) and [native peers](mji), the second one model classes (compiled from `src/classes`) and annotations, i.e. the system under test code.
-
-The build process is [Ant](http://ant.apache.org/) based, which means every source distribution comes with a build.xml script that implements the basic build targets `clean`, `compile`, `build` and `test`.
-
-We do not include required 3rd party runtime and build libraries in the project distributions.
-The `compile` Ant target uses the standard `javac` command which requires a full JDK installation. `test` generally executes a JUnit based regression test suite. Both JUnit and Ant libraries are also need to be installed.
-
-<included in the jpf-core distribution, which also contains the minimal RunAnt.jar executable jar which can be distributed with other JPF projects to use the jpf-core provided 3rd party build tools.>
-
-<The `lib` directory contains 3rd party libraries that are required at runtime of the project (like bcel.jar in jpf-core).>
-
-<tools contains programs and libraries that are used by the build process (like ant.jar and junit.jar in jpf-core).>
-
-For convenience reasons, JPF modules come with corresponding NetBeans and Eclipse configurations, i.e. can be directly opened as projects within these IDEs.
-
diff --git a/doc/devel/partial_order_reduction.md b/doc/devel/partial_order_reduction.md
deleted file mode 100644 (file)
index 7077a48..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-# On-the-fly Partial Order Reduction #
-
-The number of different scheduling combinations is the prevalent factor for the state space size of concurrent programs. Fortunately, for most practical purposes it is not necessary to explore all possible instruction interleavings for all threads. The number of scheduling induced states can be significantly reduced by grouping all instruction sequences in a thread that cannot have effects outside this thread itself, collapsing them into a single transition. This technique is called partial order reduction (POR), and typically results in more than 70% reduction of state spaces.
-
-JPF employs an on-the-fly POR that does not rely on user instrumentation or static analysis. JPF automatically determines at runtime which instructions have to be treated as state transition boundaries. If POR is enabled (configured via `vm.por` property), a forward request to the VM executes all instructions in the current thread until one of the following conditions is met:
-
- - the next instruction is scheduling relevant
- - the next instruction yields a "nondeterministic" result (i.e. simulates random value data acquisition)
-
-Detection of both conditions are delegated to the instruction object itself (`Instruction.execute()`), passing down information about the current VM execution state and threading context. If the instruction is a transition breaker, it creates a ChoiceGenerator and schedules itself for re-execution.
-
-~~~~~~~~ {.java}
-executeStep () {
-  ..
-  do {
-    if ((nextPc # executeInstruction()) #= pc) {
-      break;
-    } else {
-      pc = nextPc;
-    }
-    ..
-  } while (pc != null);
-  ..
-}
-~~~~~~~~
-
-Each bytecode instruction type corresponds to a concrete gov.nasa.jpf.Instruction subclass that determines scheduling relevance based on the following factors:
-
- * **Instruction Type** - due to the stack based nature of the JVM, only about 10% of the Java bytecode instructions are scheduling relevant, i.e. can have effects across thread boundaries. The interesting instructions include direct synchronization (`monitorEnter`, `monitorexit`, `invokeX` on synchronized methods), field access (`putX`, `getX`), array element access (`Xaload`, `Xastore`), and invoke calls of certain Thread (`start()`, `sleep()`, `yield()`, `join()`) and Object methods (`wait()`, `notify()`).
- * **Object Reachability** - besides direct synchronization instructions, field access is the major type of interaction between threads. However, not all putX / getX instructions have to be considered, only the ones referring to objects that are reachable by at least two threads can cause data races. While reachability analysis is an expensive operation, the VM already performs a similar task during garbage collection, which is extended to support POR.
- * **Thread and Lock Information** - even if the instruction type and the object reachability suggest scheduling relevance, there is no need to break the current transition in case there is no other runnable thread. In addition, lock acquisition and release (`monitorenter`, `monitorexit`) do not have to be considered as transition boundaries if there they happen recursively - only the first and the last lock operation can lead to rescheduling.
-
-![Figure 1: Scheduling Relevance Filters](../graphics/por-scheduling-relevance.svg){align=center width=650}
-
-While JPF uses these informations to automatically deduce scheduling relevance, there exist three mechanisms to explicitly control transition boundaries (i.e. potential thread interleavings)
-
- 1. `Attributor` - a configurable concrete class of this type is used by JPF during class loading to determine object, method and field attributes of selected classes and class sets. The most important attributes with respect to POR are method atomicity and scheduling relevance levels: (a) never relevant, (b) always scheduling relevant, (c) only relevant in the context of other runnables. (d) only relevant of top-level lock. The default Attributor executes all java code atomically, which is can be too aggressive (i.e. can cause `BlockedAtomicExceptions`).
-
- 2. `VMListener` - a listener can explicitly request a reschedule by calling `ThreadInfo.yield()` in response of a instruction execution notification.
-
- 3. `Verify` - a class that serves as an API to communicate between the test application and JPF, and contains `beginAtomic()`, `endAtomic()` functions to control thread interleaving
-
-The main effort of JPFs POR support relates to extending its precise mark and sweep collector. POR reachability is a subset of collector reachability, hence the mechanism piggybacks on the mark phase object traversal. It is complicated by the fact that certain reference chains exist only in the (hidden) VM implementation layer. For instance, every thread has a reference to its ThreadGroup, and the ThreadGroup objects in turn have references to all included threads, hence - from a garbage collection perspective - all threads within a group are mutually reachable. If the application under test does not use Java reflection and runtime queries like thread enumeration, POR reachability should follow accessibility rules as closely as possible. While JPF's POR does not yet support protected and private access modifiers, it includes a mechanism to specify that certain fields should not be used to promote POR reachability. This attribute is set via the configured Attributor at class load time.
-
-![Figure 2: Mark Phase of Reachability Analysis](../graphics/por-mark.svg){align=center width=460}
-
-With this mechanism, calculating POR reachability becomes a straight forward approach that is divided into two phases. Phase 1 non-recursively marks all objects of the root set (mostly static fields and thread stacks), recording the id of the referencing thread. In case an object is reachable from a static field, or from two threads, it's status is set to shared. Phase 2 recursively traverses all heap objects, propagating either a set shared status or the referencing thread id through all reference fields that are not marked as reachability firewalls. Again, if the traversal hits an object that is already marked as referenced by another thread, it promotes the object status to shared, and from there propagates the shared status instead of the thread id.
-
-To further reduce irrelevant context switches, JPF can check for lock protection to determine if a field access is scheduling relevant. If the property `vm.por.sync_detection` is set to true, JPF looks for potential lock candidates when analyzing `GET_x/SET_x` instructions. The policy of detecting lock candidates is configurable with the property `vm.por.fieldlockinfo.class`, the default `gov.nasa.jpf.jvm.StatisticFieldLockInfo` just defers the decision by recording the set of locks held when executing the field instruction, computing the set intersection at subsequent accesses. If the set does not get empty for a configurable number of field accesses, the field is marked as lock protected, and henceforth not treated as transition boundary. If however the set should afterwards become empty, a warning like
-
-~~~~~~~~ {.bash}
-Warning: unprotected field access of: Event@70.count in thread: "Thread-1" oldclassic.java:107
-   sync-detection assumed to be protected by: Event@70
-   found to be protected by: {}
-   >>> re-run with 'vm.por.sync_detection=false' or exclude field from checks <<<
-~~~~~~~~
-
-is issued, and the field access is again treated as transition breaker.
-
-The set of fields to be analyzed can be specified with the properties `vm.por.include_fields` and `vm.por.exclude_fields`. Per default, fields of system library classes are not analyzed (this is esp. useful to avoid context switches for global objects like `System.out`).
-
-Even with all these optimizations, some unwanted transition breakers are likely to remain. This is mostly due to two constraints:
-
- * JPF only considers reachability, not accessibility
- * write once, read multiple conditions cannot be detected a priori for fields that are not final, or inside immutable objects (like `java.lang.String`)
-
-Especially the last issue might be subject to further enhancements
diff --git a/doc/devel/report.md b/doc/devel/report.md
deleted file mode 100644 (file)
index aecfd6b..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-# The JPF Report API #
-The JPF report system consists of three major components: 
-
-  - the `Reporter`
-  - any number of format specific `Publisher` objects
-  - any number of tool-, property-, Publisher-specific `PublisherExtension` objects
-
-Here is the blueprint:
-
-![Figure: JPF Report System](../graphics/report.svg){align=center width=800}
-
-The `Reporter` is the data collector. It also manages and notifies `Publisher` extensions when a certain output phase is reached. The `Publishers` are the format (e.g. text, XML) specific output producers, the most prominent one being the `ConsolePublisher` (for normal, readable text output on consoles). `PublisherExtensions` can be registered for specific `Publishers` at startup time, e.g. from Listeners implementing properties or analysis modes such as `DeadlockAnalyzer`. This is so common that the `ListenerAdapter` actually implements all the required interface methods so that you just have to override the ones you are interested in.
-
-Configuration is quite easy, and involves only a handful of JPF properties that are all in the report category. The first property specifies the Reporter class itself, but is not likely to be redefined unless you have to implement different data collection modes.
-
-~~~~~~~~ {.bash}
-report.class=gov.nasa.jpf.report.Reporter
-~~~~~~~~
-
-The next setting specifies a list of Publisher instances to use, using symbolic names:
-
-~~~~~~~~ {.bash}
-report.publisher=console,xml
-~~~~~~~~
-
-Each of these symbolic names has to have a corresponding class name defined:
-
-~~~~~~~~ {.bash}
-report.console.class=gov.nasa.jpf.report.ConsolePublisher
-~~~~~~~~
-
-Finally, we have to specify for each symbolic publisher name and output phase what topics should be processed in which order, e.g.
-
-~~~~~~~~ {.bash}
-report.console.property_violation=error,trace,snapshot
-~~~~~~~~
-
-Again, the order of these topics matters, and gives you complete control over the report format. As usual, please refer to `defaults.properties` for default values.
-
-Publisher classes can have their own, additional properties. For instance, the `ConsolePublisher` implementation can be further configured with respect to the information that is included in traces (bytecodes, method names etc.), and to redirect output (file, socket). Please refer to the constructor of this class for further details.
-
-~~~~~~~~ {.bash}
-# save report to file
-report.console.file=My_JPF_report
-~~~~~~~~
-
-All of the involved core classes and interfaces reside in the `gov.nasa.jpf.report` package. The most common way to extend the system is to use your own `PublisherExtension` implementation, which involves two steps:
-
-  - implement the required phase and format specific methods
-  - register the extension for a specific Publisher class
-
-
-The `DeadlockAnalyzer` (which is a listener to analyze concurrency defects) can be used as an example of how to do this:
-
-~~~~~~~~ {.java}
-public class DeadlockAnalyzer extends ListenerAdapter {
-  ...
-  public DeadlockAnalyzer (Config config, JPF jpf){
-    jpf.addPublisherExtension(ConsolePublisher.class, this);  // (1)
-    ...
-  }
-  ...
-  public void publishPropertyViolation (Publisher publisher) { // (2)
-    PrintWriter pw = publisher.getOut();
-    publisher.publishTopicStart("thread ops " + publisher.getLastErrorId());
-    
-    ... // use 'pw' to generate the output
-  }
-}
-~~~~~~~~
diff --git a/doc/graphics/DFSListener.svg b/doc/graphics/DFSListener.svg
deleted file mode 100644 (file)
index 1684827..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="62 54 384 228" width="32pc" height="19pc" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2005-10-21 18:50:44 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="588.0188" height="768.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id26_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id27_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id28_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id29_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id30_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id31_Graphic" filter="url(#Shadow)"/></g><g id="id26_Graphic"><path d="M 91.05 67 L 155.45 67 C 163.0676 67 169.25 71.704 169.25 77.5 C 169.25 83.296 163.0676 88 155.45 88 L 91.05 88 C 83.4324 88 77.25 83.296 77.25 77.5 C 77.25 71.704 83.4324 67 91.05 67" fill="white"/><path d="M 91.05 67 L 155.45 67 C 163.0676 67 169.25 71.704 169.25 77.5 C 169.25 83.296 163.0676 88 155.45 88 L 91.05 88 C 83.4324 88 77.25 83.296 77.25 77.5 C 77.25 71.704 83.4324 67 91.05 67" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id27_Graphic"><path d="M 352.55 67 L 416.95 67 C 424.5676 67 430.75 71.704 430.75 77.5 C 430.75 83.296 424.5676 88 416.95 88 L 352.55 88 C 344.9324 88 338.75 83.296 338.75 77.5 C 338.75 71.704 344.9324 67 352.55 67" fill="white"/><path d="M 352.55 67 L 416.95 67 C 424.5676 67 430.75 71.704 430.75 77.5 C 430.75 83.296 424.5676 88 416.95 88 L 352.55 88 C 344.9324 88 338.75 83.296 338.75 77.5 C 338.75 71.704 344.9324 67 352.55 67" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id28_Graphic"><path d="M 136.475 118 L 211.025 118 C 219.8432 118 227 122.704 227 128.5 C 227 134.296 219.8432 139 211.025 139 L 136.475 139 C 127.6568 139 120.5 134.296 120.5 128.5 C 120.5 122.704 127.6568 118 136.475 118" fill="white"/><path d="M 136.475 118 L 211.025 118 C 219.8432 118 227 122.704 227 128.5 C 227 134.296 219.8432 139 211.025 139 L 136.475 139 C 127.6568 139 120.5 134.296 120.5 128.5 C 120.5 122.704 127.6568 118 136.475 118" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id29_Graphic"><path d="M 231.1125 183 L 301.6375 183 C 309.9796 183 316.75 187.704 316.75 193.5 C 316.75 199.296 309.9796 204 301.6375 204 L 231.1125 204 C 222.7704 204 216 199.296 216 193.5 C 216 187.704 222.7704 183 231.1125 183" fill="white"/><path d="M 231.1125 183 L 301.6375 183 C 309.9796 183 316.75 187.704 316.75 193.5 C 316.75 199.296 309.9796 204 301.6375 204 L 231.1125 204 C 222.7704 204 216 199.296 216 193.5 C 216 187.704 222.7704 183 231.1125 183" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id30_Graphic"><path d="M 247.55 148.5 L 311.95 148.5 C 319.5676 148.5 325.75 153.204 325.75 159 C 325.75 164.796 319.5676 169.5 311.95 169.5 L 247.55 169.5 C 239.9324 169.5 233.75 164.796 233.75 159 C 233.75 153.204 239.9324 148.5 247.55 148.5" fill="white"/><path d="M 247.55 148.5 L 311.95 148.5 C 319.5676 148.5 325.75 153.204 325.75 159 C 325.75 164.796 319.5676 169.5 311.95 169.5 L 247.55 169.5 C 239.9324 169.5 233.75 164.796 233.75 159 C 233.75 153.204 239.9324 148.5 247.55 148.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id31_Graphic"><path d="M 202.55 231 L 284.45 231 C 294.1376 231 302 235.704 302 241.5 C 302 247.296 294.1376 252 284.45 252 L 202.55 252 C 192.8624 252 185 247.296 185 241.5 C 185 235.704 192.8624 231 202.55 231" fill="white"/><path d="M 202.55 231 L 284.45 231 C 294.1376 231 302 235.704 302 241.5 C 302 247.296 294.1376 252 284.45 252 L 202.55 252 C 192.8624 252 185 247.296 185 241.5 C 185 235.704 192.8624 231 202.55 231" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 131.82329 138.16666 C 132.88209 140.61086 134.72058 143.048855 135 145.5 C 135.27942 147.951145 134.72904 151.04185 133.5 152.875 C 132.27096 154.70815 129.874775 156.1667 127.625 156.5 C 125.375225 156.8333 121.604006 156.31236 120 154.875 C 118.395994 153.43764 117.02568 150.964375 118 147.875 C 118.33188 146.82268 119.04462 145.594735 119.94362 144.28092" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 300.2699 236.20079 C 302.39772 235.01331 304.5007 234.23864 306.654 232.638 C 308.8073 231.03736 312.13694 229.05675 313.191 226.596 C 314.24506 224.13525 314.7705 221.5729 312.979 217.872 C 312.15253 216.16467 310.59337 214.11944 308.80859 211.9702" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(89.5 71.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".25927734" y="10" textLength="68.481445">searchStarted</tspan></text><text transform="translate(349.5 70.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".203125" y="10" textLength="74.59375">searchFinished</tspan></text><text transform="translate(127 121.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="4.6135254" y="10" textLength="72.77295">stateAdvanced</tspan></text><text transform="translate(241 152.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".044433594" y="10" textLength="47.68994">propertyV</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="47.541016" y="10" textLength="32.41455">iolated</tspan></text><text transform="translate(224.5 187.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".31274414" y="10" textLength="84.37451">stateBacktracked</tspan></text><text transform="translate(194.5 234.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".203125" y="10" textLength="96.59375">searchConstraintHit</tspan></text><path d="M 168.67215 76.98571 L 180.57215 76.98571 L 190.47357 76.98571 C 195.94198 76.98571 200.375 81.41873 200.375 86.88714 L 200.375 106.1 L 200.375 108.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 226.33107 127.98571 L 238.23107 127.98571 L 272.23107 127.98571 C 277.75392 127.98571 282.23107 123.50856 282.23107 117.98571 L 282.23107 87.5 C 282.23107 81.977153 286.70823 77.5 292.23107 77.5 L 326.85 77.5 L 328.85 77.5" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 200.375 139 L 200.375 150.9 L 200.375 154.54757 C 200.375 156.56207 202.00807 158.19515 204.02257 158.19515 L 221.89 158.19515 L 223.89 158.19515" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 325.17215 158.48571 L 337.07215 158.48571 L 375.7735 158.48571 C 381.29635 158.48571 385.7735 154.00856 385.7735 148.48571 L 385.7735 99.9 L 385.7735 97.9" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 316.11719 192.98571 L 328.01719 192.98571 L 388.22082 192.98571 C 393.74367 192.98571 398.22082 188.50856 398.22082 182.98571 L 398.22082 99.9 L 398.22082 97.9" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 301.26512 240.98571 L 313.16512 240.98571 L 400.5722 240.98571 C 406.09504 240.98571 410.5722 236.50856 410.5722 230.98571 L 410.5722 99.9 L 410.5722 97.9" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 173.23588 139 L 173.23588 150.9 L 173.23588 182.69515 C 173.23588 188.218 177.71303 192.69515 183.23588 192.69515 L 204.1438 192.69515 L 206.1438 192.69515" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 146.75778 139 L 146.75778 150.9 L 146.75778 230.69515 C 146.75778 236.218 151.23493 240.69515 156.75778 240.69515 L 173.15087 240.69515 L 175.15087 240.69515" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 242.93519 252 L 242.93519 263.9 L 242.93519 267.45 C 242.93519 269.41061 241.3458 271 239.38519 271 L 109 271 C 103.47715 271 99 266.52285 99 261 L 99 132.5183 C 99 129.854546 101.1594 127.69515 103.82315 127.69515 L 108.646305 127.69515 L 110.646305 127.69515" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 226.71194 203.16666 C 227.59954 205.40255 229.22284 207.77799 229.375 209.875 C 229.52716 211.97201 228.85404 214.12516 227.625 215.75 C 226.39596 217.37484 224.22894 219.08339 222 219.625 C 219.77106 220.16661 215.89567 220.14572 214.25 219 C 212.60433 217.85428 210.99047 215.69356 212.125 212.75 C 212.54779 211.65307 213.48253 210.31699 214.64302 208.87548" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/doc/graphics/app-types.svg b/doc/graphics/app-types.svg
deleted file mode 100644 (file)
index f845707..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="20 24 747 537" width="747pt" height="537pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2015-01-05 22:17:29 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><filter id="Shadow_2" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker_2" viewBox="-9 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M -8 0 L 0 3 L 0 -3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Lucida Grande" font-size="11" panose-1="2 11 6 0 4 5 2 2 2 4" units-per-em="1000" underline-position="-97.65625" underline-thickness="48.828125" slope="0" x-height="530.27344" cap-height="722.65625" ascent="966.7969" descent="-210.9375" font-weight="500"><font-face-src><font-face-name name="LucidaGrande"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="15" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-800" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 8 8" markerWidth="8" markerHeight="8" color="black"><g><path d="M 5.5999994 0 L 0 -2.0999998 L 0 2.0999998 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Times New Roman" font-size="20" panose-1="2 2 8 3 7 5 5 2 3 4" units-per-em="1000" underline-position="-108.88672" underline-thickness="95.214844" slope="0" x-height="456.54297" cap-height="662.10938" ascent="891.1133" descent="-216.3086" font-weight="bold"><font-face-src><font-face-name name="TimesNewRomanPS-BoldMT"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -2 4 4" markerWidth="4" markerHeight="4" color="black"><g><path d="M 1.6 0 L 0 -.6 L 0 .6 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>App Types</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id50_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id65_Graphic" filter="url(#Shadow)"/></g><g filter="url(#Shadow_2)"><path d="M 327.333 77.9986 L 474.333 77.9986 C 480.40813 77.9986 485.333 82.92347 485.333 88.9986 L 485.333 311.5916 C 485.333 317.66673 480.40813 322.5916 474.333 322.5916 L 327.333 322.5916 C 321.25787 322.5916 316.333 317.66673 316.333 311.5916 L 316.333 88.9986 C 316.333 82.92347 321.25787 77.9986 327.333 77.9986 Z" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g><g id="id50_Graphic"><path d="M 282.2563 114.6481 C 282.2563 109.43795 281.63467 108.79335 277.09383 103.6371 L 277.04586 103.58375 C 272.48103 98.3736 272.43356 98.3736 267.74881 98.3736 C 261.51097 98.3736 233.309 98.3736 233.309 98.3736 L 233.309 153.3736 L 282.2563 153.3736 L 282.2563 114.6481 Z" fill="white"/><path d="M 282.2563 114.6481 C 282.2563 109.43795 281.63467 108.79335 277.09383 103.6371 L 277.04586 103.58375 C 272.48103 98.3736 272.43356 98.3736 267.74881 98.3736 C 261.51097 98.3736 233.309 98.3736 233.309 98.3736 L 233.309 153.3736 L 282.2563 153.3736 L 282.2563 114.6481 Z M 282.2563 114.3797 C 282.2563 109.43795 282.20833 109.43795 272.43356 109.43795 L 272.43356 109.43795 C 272.43356 98.4275 272.43356 98.3736 268.03564 98.3736" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="31.2632" y1="385.317" x2="755.896" y2="385.317" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="16,9,1,9"/><line x1="300.567" y1="128.5" x2="506.433" y2="128.5" marker-end="url(#Arrow_Marker)" marker-start="url(#Arrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(118.333 406.626)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="133.21924">non-functional properties</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="110.08594"> unhandled exceptions</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="37" textLength="41.561523">     (incl. </tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="40.95996" y="37" textLength="73.95996">AssertionError)</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="51" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="51" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="51" textLength="52.58838"> deadlocks</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="65" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="65" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="65" textLength="29.95459"> races</tspan></text><text transform="translate(118.333 318.229)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="119.8291">restricted choice types</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="111.91211"> scheduling sequences</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="38" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="38" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="38" textLength="88.04297"> java.util.Random </tspan></text><text transform="translate(118.333 478.959)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="107.572266">improved inspection</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="93.5376"> coverage statistics</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="38" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="38" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="38" textLength="97.22217"> exact object counts</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="52" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="52" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="52" textLength="78.87451"> execution costs</tspan></text><text transform="translate(36.33314 309.333) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="15" textLength="72.53174">constraints</tspan></text><text transform="translate(38.9582 487.959) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="15" textLength="40.86914">benefi</tspan><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="40.86914" y="15" textLength="11.6674805">ts</tspan></text><text transform="translate(527.5 202)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="152.81836">restricted application models</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="26.280762"> UML</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="37.952148" y="24" textLength="73.981445"> statemachines</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="38" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="38" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="38" textLength="151.620605"> does not run w/o JPF libraries </tspan></text><text transform="translate(118.666 200.667)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="72.12842">runtime costs</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="130.23291"> order of magnitude slower</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="38" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="38" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="38" textLength="109.430664"> state storage memory</tspan></text><text transform="translate(118.333 244.97)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="127.13379">standard library support</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="116.77832"> java.net, javax.swing, ..</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="37" textLength="151.01367">     (needs abstraction models) </tspan></text><text transform="translate(528.197 437.293)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="158.89307">functional (domain) properties</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="120.430664"> built-in into JPF libraries</tspan></text><text transform="translate(118.666 288.728)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="160.74072">functional property impl. costs</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="123.49756"> listeners, MJI knowledge</tspan></text><text transform="translate(528.197 467.96)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="6.7192383">fl</tspan><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="6.7192383" y="10" textLength="94.166016">exible state space</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="73.36914"> domain specifi</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="85.44336" y="24" textLength="45.853027">c choices</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="37" textLength="63.572266">     (e.g. UML</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="63.169434" y="37" textLength="91.58789"> &quot;enabling events&quot;)</tspan></text><text transform="translate(528.864 511.294)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="163.80762">runtime costs &amp; library support</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="149.80518"> usually not a problem, domain</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="37" textLength="147.96289">     libs can control state space</tspan></text><text transform="translate(142 114.334)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="57.481445">runs on any</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="23" textLength="22">JVM</tspan></text><text transform="translate(597.018 112.38)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="44.63379">runs only</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="23" textLength="50.746094">under JPF</tspan></text><text transform="translate(528.197 406.626)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="102.066895">low modeling costs</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="165.08594"> statemachine w/o layout hassle,..</tspan></text><text transform="translate(527.833 247.333)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="131.40918">initial domain impl. costs</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="126.55371"> domain libs can be tricky </tspan></text><text transform="translate(408 85.8125)" fill="black"><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="0" y="11" textLength="65.5542">&quot;sweet spot&quot;</tspan></text><text transform="translate(345.41 172.334)" fill="red"><tspan font-family="Helvetica" font-size="11" font-weight="bold" fill="red" x="0" y="10" textLength="93.51074">annotate program</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="12.074219" y="24" textLength="67.251465"> requirements</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="38" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="6.1123047" y="38" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="12.074219" y="38" textLength="89.86914"> sequences (UML)</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="52" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="6.1123047" y="52" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="12.074219" y="52" textLength="79.46533"> contracts (PbC)</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="66" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="6.1123047" y="66" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="12.074219" y="66" textLength="26.286133"> tests</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="79" textLength="23.22461">    …</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="92" textLength="3.0561523"> </tspan></text><text transform="translate(345.41 259.291)" fill="red"><tspan font-family="Helvetica" font-size="11" font-weight="bold" fill="red" x="0" y="10" textLength="87.41992">analyze program</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="12.074219" y="24" textLength="72.13379"> symbolic exec</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="38" textLength="15.280762">     </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="15.280762" y="38" textLength="11">→</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="26.280762" y="38" textLength="45.251465"> test data</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="52" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="6.1123047" y="52" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="12.074219" y="52" textLength="105.77295"> thread safety / races </tspan></text><path d="M 443.077 271.319 C 448.50012 269.28287 455.12626 268.07605 459.348 265.21 C 463.56974 262.34395 467.8014 258.03911 468.41 254.121 C 469.0186 250.20289 466.9996 245.38813 463 241.699 C 460.3534 239.25783 455.78244 237.2113 451.19748 235.16785" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(241.566 140.124)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="10" textLength="29.453125">*.class</tspan></text><g id="id65_Graphic"><path d="M 424.2383 117.1085 C 424.2383 111.89835 423.61667 111.25375 419.07583 106.0975 L 419.02786 106.04415 C 414.46303 100.834 414.41556 100.834 409.7308 100.834 C 403.49297 100.834 375.291 100.834 375.291 100.834 L 375.291 155.834 L 424.2383 155.834 L 424.2383 117.1085 Z" fill="white"/><path d="M 424.2383 117.1085 C 424.2383 111.89835 423.61667 111.25375 419.07583 106.0975 L 419.02786 106.04415 C 414.46303 100.834 414.41556 100.834 409.7308 100.834 C 403.49297 100.834 375.291 100.834 375.291 100.834 L 375.291 155.834 L 424.2383 155.834 L 424.2383 117.1085 Z M 424.2383 116.8401 C 424.2383 111.89835 424.19033 111.89835 414.41556 111.89835 L 414.41556 111.89835 C 414.41556 100.8879 414.41556 100.834 410.01764 100.834" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(385.548 142.585)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="10" textLength="25.014648">*.java</tspan></text><text transform="translate(381.548 115.758)" fill="blue"><tspan font-family="Times New Roman" font-size="20" font-weight="bold" fill="blue" x="0" y="18" textLength="33.046875">@V</tspan></text><path d="M 574.3423 117.1085 C 574.3423 111.89835 573.72067 111.25375 569.17983 106.0975 L 569.13186 106.04415 C 564.56703 100.834 564.51956 100.834 559.8348 100.834 C 553.59697 100.834 525.395 100.834 525.395 100.834 L 525.395 155.834 L 574.3423 155.834 L 574.3423 117.1085 Z" fill="white"/><path d="M 574.3423 117.1085 C 574.3423 111.89835 573.72067 111.25375 569.17983 106.0975 L 569.13186 106.04415 C 564.56703 100.834 564.51956 100.834 559.8348 100.834 C 553.59697 100.834 525.395 100.834 525.395 100.834 L 525.395 155.834 L 574.3423 155.834 L 574.3423 117.1085 Z M 574.3423 116.8401 C 574.3423 111.89835 574.29433 111.89835 564.51956 111.89835 L 564.51956 111.89835 C 564.51956 100.8879 564.51956 100.834 560.12164 100.834" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><ellipse cx="543.737" cy="113.0895" rx="5.3750086" ry="4.0625065" fill="yellow"/><ellipse cx="543.737" cy="113.0895" rx="5.3750086" ry="4.0625065" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><ellipse cx="556.987" cy="126.2145" rx="5.3750086" ry="4.0625065" fill="red"/><ellipse cx="556.987" cy="126.2145" rx="5.3750086" ry="4.0625065" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><ellipse cx="538.987" cy="135.2145" rx="5.3750086" ry="4.0625065" fill="blue"/><ellipse cx="538.987" cy="135.2145" rx="5.3750086" ry="4.0625065" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 549.51266 113.920245 C 550.629 114.080814 551.84554 113.92592 552.862 114.402 C 553.87846 114.87808 555.03463 115.563874 555.612 116.777 C 555.80122 117.17458 555.9176 117.662774 555.9969 118.19702" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 559.38672 130.37215 C 560.37838 132.09026 562.65776 134.17099 562.362 135.527 C 562.06624 136.88301 560.5531 138.39227 557.612 138.509 C 555.40905 138.596435 551.6817 137.6995 548.14292 136.92421" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 538.68525 130.65814 C 538.5775 129.031255 537.41597 126.75709 538.362 125.777 C 539.30803 124.79691 542.22674 124.81438 544.362 124.777 C 545.42796 124.75834 546.5616 124.8872 547.71222 125.05311" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(535.842 142.467)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="10" textLength="25.014648">*.java</tspan></text><text transform="translate(198.618 42.3331)" fill="black"><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="15" textLength="88.374023">JPF unaware</tspan><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="33" textLength="63.354492">programs</tspan></text><text transform="translate(354.033 33.4506)" fill="black"><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="15" textLength="84.22119">JPF enabled</tspan><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="33" textLength="63.354492">programs</tspan></text><text transform="translate(498.368 43.1018)" fill="black"><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="15" textLength="101.74072">JPF dependent</tspan><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="33" textLength="63.354492">programs</tspan></text></g></g></svg>
diff --git a/doc/graphics/attributes.svg b/doc/graphics/attributes.svg
deleted file mode 100644 (file)
index 2aa20a4..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="98 7 445 412" width="445pt" height="412pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2011-05-16 18:21:11 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><font-face font-family="Helvetica" font-size="8" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="8" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><filter id="Shadow_2" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation=".75079507"/><feOffset in="blur" result="offset" dx=".5" dy=".5"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><filter id="Shadow_3" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation=".75079507"/><feOffset in="blur" result="offset" dx="1" dy="1"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="black"><g><path d="M 4.7999992 0 L 0 -1.7999997 L 0 1.7999997 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Courier New" font-size="9" panose-1="2 7 6 9 2 2 5 2 4 4" units-per-em="1000" underline-position="-232.91016" underline-thickness="100.097656" slope="0" x-height="443.35938" cap-height="591.79688" ascent="832.51953" descent="-300.29297" font-weight="bold"><font-face-src><font-face-name name="CourierNewPS-BoldMT"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="black"><g><path d="M 4 0 L 0 -1.5 L 0 1.5 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledBall_Marker" viewBox="-4 -3 5 6" markerWidth="5" markerHeight="6" color="black"><g><circle cx="-1.4999993" cy="0" r="1.4999987" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Courier New" font-size="10" panose-1="2 7 6 9 2 2 5 2 4 4" units-per-em="1000" underline-position="-232.91016" underline-thickness="100.097656" slope="0" x-height="443.35938" cap-height="591.79688" ascent="832.51953" descent="-300.29297" font-weight="bold"><font-face-src><font-face-name name="CourierNewPS-BoldMT"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" viewBox="-6 -3 7 6" markerWidth="7" markerHeight="6" color="black"><g><path d="M -4.8000002 0 L 0 1.8000001 L 0 -1.8000001 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1090.9091" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1200" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_4" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="#404040"><g><path d="M 4 0 L 0 -1.5 L 0 1.5 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledBall_Marker_2" viewBox="-4 -3 5 6" markerWidth="5" markerHeight="6" color="#404040"><g><circle cx="-1.4999993" cy="0" r="1.4999987" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><path d="M 129.05398 137.779 L 521.01013 137.779 C 526.53298 137.779 531.01013 142.25615 531.01013 147.779 C 531.01013 147.78732 531.01012 147.795646 531.0101 147.80397 L 530.5015 351.50493 C 530.4877 357.02776 525.99938 361.49372 520.47655 361.47993 C 520.47598 361.47993 520.4754 361.47993 520.47483 361.47992 L 319.923 360.94463 C 314.40018 360.92988 309.935 356.4408 309.94973 350.91797 C 309.94984 350.8784 309.95018 350.83881 309.95075 350.79924 L 310.80437 292.10691 C 310.88469 286.58465 306.47312 282.04286 300.95085 281.96255 C 300.923 281.96214 300.89516 281.96185 300.86732 281.96168 L 130.49925 280.90729 C 125.04834 280.87355 120.62861 276.48048 120.56189 271.02987 L 119.05473 147.9014 C 118.98713 142.37896 123.40915 137.84735 128.93158 137.77975 C 128.97238 137.77925 129.01318 137.779 129.05398 137.779 Z" fill="#fcffec"/><path d="M 129.05398 137.779 L 521.01013 137.779 C 526.53298 137.779 531.01013 142.25615 531.01013 147.779 C 531.01013 147.78732 531.01012 147.795646 531.0101 147.80397 L 530.5015 351.50493 C 530.4877 357.02776 525.99938 361.49372 520.47655 361.47993 C 520.47598 361.47993 520.4754 361.47993 520.47483 361.47992 L 319.923 360.94463 C 314.40018 360.92988 309.935 356.4408 309.94973 350.91797 C 309.94984 350.8784 309.95018 350.83881 309.95075 350.79924 L 310.80437 292.10691 C 310.88469 286.58465 306.47312 282.04286 300.95085 281.96255 C 300.923 281.96214 300.89516 281.96185 300.86732 281.96168 L 130.49925 280.90729 C 125.04834 280.87355 120.62861 276.48048 120.56189 271.02987 L 119.05473 147.9014 C 118.98713 142.37896 123.40915 137.84735 128.93158 137.77975 C 128.97238 137.77925 129.01318 137.779 129.05398 137.779 Z" stroke="#dabc2a" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="335.637" y="278.727" width="102.191" height="50.5717" fill="#faffc4"/><rect x="335.637" y="278.727" width="102.191" height="50.5717" stroke="#ffc189" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow)"><rect x="335.805" y="149.616" width="102.191" height="119.14" fill="#faffc4"/><rect x="335.805" y="149.616" width="102.191" height="119.14" stroke="#ffc189" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow)"><rect x="131.795" y="149.616" width="97.7571" height="95.5241" fill="#faffc4"/><rect x="131.795" y="149.616" width="97.7571" height="95.5241" stroke="#ffc189" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 119.83489 292.59206 L 291.39527 293.14156 C 296.91809 293.15925 301.38088 297.65072 301.36319 303.17354 C 301.36314 303.18956 301.36305 303.2056 301.36292 303.22162 L 300.91446 359.19774 C 300.87032 364.707 305.2906 369.21415 310.79969 369.2772 L 430.69996 370.6495 C 436.17774 370.7122 440.58542 375.17053 440.58552 380.64867 L 440.58582 397.60582 C 440.58592 403.12867 436.10885 407.6059 430.586 407.606 C 430.58594 407.606 430.58588 407.606 430.58582 407.606 L 120.528715 407.606 C 115.03568 407.606 110.57097 403.17527 110.52901 397.6824 L 109.80315 302.6684 C 109.76096 297.14571 114.20378 292.63449 119.72647 292.5923 C 119.76261 292.59202 119.79875 292.59194 119.83489 292.59206 Z" fill="#e5ffe3"/><path d="M 119.83489 292.59206 L 291.39527 293.14156 C 296.91809 293.15925 301.38088 297.65072 301.36319 303.17354 C 301.36314 303.18956 301.36305 303.2056 301.36292 303.22162 L 300.91446 359.19774 C 300.87032 364.707 305.2906 369.21415 310.79969 369.2772 L 430.69996 370.6495 C 436.17774 370.7122 440.58542 375.17053 440.58552 380.64867 L 440.58582 397.60582 C 440.58592 403.12867 436.10885 407.6059 430.586 407.606 C 430.58594 407.606 430.58588 407.606 430.58582 407.606 L 120.528715 407.606 C 115.03568 407.606 110.57097 403.17527 110.52901 397.6824 L 109.80315 302.6684 C 109.76096 297.14571 114.20378 292.63449 119.72647 292.5923 C 119.76261 292.59202 119.79875 292.59194 119.83489 292.59206 Z" stroke="#0e9319" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="337.865" y="68.4215" width="102.191" height="60" fill="white"/><rect x="337.865" y="68.4215" width="102.191" height="60" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(342.865 68.4215)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="8" textLength="77.808594">dup(), push(), pop(), ..</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="18" textLength="15.984375">------</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="28" textLength="70.253906">getOperandAttr(idx)</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="38" textLength="82.703125">setOperandAttr(idx,obj)</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="48" textLength="58.246094">getLocalAttr(idx)</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="58" textLength="70.695312">setLocalAttr(idx,obj)</tspan></text><rect x="337.865" y="28.4215" width="102.191" height="40" fill="white"/><rect x="337.865" y="28.4215" width="102.191" height="40" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(342.865 28.4215)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="8" textLength="35.570312">int[] locals</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="18" textLength="58.6875">Object[] localAttr</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="28" textLength="48.476562">int[] operands</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="38" textLength="71.59375">Object[] operandAttr</tspan></text><rect x="337.865" y="18.4215" width="102.191" height="10" fill="white"/><rect x="337.865" y="18.4215" width="102.191" height="10" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(342.865 18.4215)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="23.415812" y="8" textLength="45.359375">StackFrame</tspan></text><rect x="133.561" y="59.0283" width="102.191" height="70" fill="white"/><rect x="133.561" y="59.0283" width="102.191" height="70" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(138.561 59.0283)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="8" textLength="25.351562">getIntV</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="24.761719" y="8" textLength="41.792969">alue(idx), ...</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="18" textLength="24.902344">setIntV</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="24.3125" y="18" textLength="50.23828">alue(idx, v), ...</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="28" textLength="15.984375">------</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="38" textLength="56.460938">getFieldAttr(idx)</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="48" textLength="68.910156">setFieldAttr(idx,obj)</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="58" textLength="52.015625">getObjectAttr()</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="68" textLength="62.242188">setObjectAttr(obj)</tspan></text><rect x="133.561" y="29.0283" width="102.191" height="30" fill="white"/><rect x="133.561" y="29.0283" width="102.191" height="30" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(138.561 29.0283)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="8" textLength="38.242188">int[] values</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="18" textLength="33.789062">Object[] fi</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="33.789062" y="18" textLength="27.121094">eldAttrs</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="28" textLength="59.13672">Object objectAttr</tspan></text><rect x="133.561" y="19.0283" width="102.191" height="10" fill="white"/><rect x="133.561" y="19.0283" width="102.191" height="10" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(138.561 19.0283)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="34.536906" y="8" textLength="23.117188">Fields</tspan></text><rect x="350.285" y="163.457" width="75.3187" height="100" fill="white"/><rect x="350.285" y="163.457" width="75.3187" height="100" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="330.498" y1="193.894" x2="425.604" y2="193.894" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="387.872" y1="153.139" x2="387.872" y2="263.946" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow_2)"><rect x="353.396" y="167.278" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.396" y="167.278" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.198" y="167.048" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.198" y="167.048" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="353.396" y="178.857" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.396" y="178.857" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.198" y="178.627" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.198" y="178.627" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_2)"><rect x="353.396" y="199.952" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.396" y="199.952" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.198" y="199.722" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.198" y="199.722" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="353.396" y="211.531" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.396" y="211.531" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.198" y="211.301" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.198" y="211.301" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="353.396" y="223.11" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.396" y="223.11" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.198" y="222.88" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.198" y="222.88" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(335.377 190.062) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="23.009766">locals</tspan></text><text transform="translate(355.071 149.616)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="26.015625">values</tspan></text><text transform="translate(393.961 149.616)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="37.019531">attributes</tspan></text><text transform="translate(335.474 236.5) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="37.529297">operands</tspan></text><text transform="translate(309.594 187.863)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="18.505371">slots</tspan></text><rect x="144.642" y="183.546" width="75.3187" height="55.3838" fill="white"/><rect x="144.642" y="183.546" width="75.3187" height="55.3838" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="182.229" y1="173.228" x2="182.229" y2="239.159" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow_2)"><rect x="147.753" y="187.367" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="147.753" y="187.367" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="184.555" y="187.137" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="184.555" y="187.137" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="147.753" y="198.946" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="147.753" y="198.946" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="184.555" y="198.716" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="184.555" y="198.716" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_2)"><rect x="147.753" y="211.041" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="147.753" y="211.041" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="184.555" y="210.811" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="184.555" y="210.811" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="147.753" y="222.62" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="147.753" y="222.62" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="184.555" y="222.39" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="184.555" y="222.39" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(134.303 169.705)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">fi</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="4.5" y="9" textLength="41.02295">eld-values</tspan></text><text transform="translate(188.318 169.705)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="37.019531">attributes</tspan></text><line x1="234.498" y1="231.537" x2="322.887" y2="231.537" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="329.357" y1="206.886" x2="240.379" y2="206.886" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(259.457 194.858)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="43.20703">putfield</tspan></text><path d="M 428.964 210.165 L 447.019 210.165 L 447.019 228.737 L 435.664 228.737" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(259.457 221.198)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="43.20703">getfield</tspan></text><text transform="translate(449.973 209.928)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="16.202637">dup</tspan><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="17" textLength="10.801758">..</tspan></text><path d="M 428.169 168.156 L 497.385 168.156 L 497.385 237.983 L 434.869 237.983" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(500.669 202.849)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="27.004395">iload</tspan><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="17" textLength="10.801758">..</tspan></text><path d="M 429.803 200.798 L 456.803 200.798 L 456.803 180.798 L 434.503 180.798" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(458.813 182.982)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="32.405273">istore</tspan><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="17" textLength="10.801758">..</tspan></text><g filter="url(#Shadow_3)"><rect x="353.166" y="236.151" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.166" y="236.151" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="389.968" y="235.921" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="389.968" y="235.921" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><rect x="350.674" y="286.352" width="75.3187" height="34.5028" fill="white"/><rect x="350.674" y="286.352" width="75.3187" height="34.5028" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow_2)"><rect x="353.785" y="290.173" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.785" y="290.173" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.587" y="289.943" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.587" y="289.943" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="353.785" y="301.752" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.785" y="301.752" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.587" y="301.522" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.587" y="301.522" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 428.734 249.545 L 489.176 249.545 L 489.176 306.698 L 434.116 306.698" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow_3)"><rect x="352.936" y="248.531" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="352.936" y="248.531" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="389.738" y="248.301" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="389.738" y="248.301" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(454.692 309.299)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="70.211426">invokevirtual</tspan><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="17" textLength="10.801758">..</tspan></text><path d="M 428.603 291.278 L 446.659 291.278 L 446.659 259.189 L 434.503 259.189" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(448.227 265.618)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="32.405273">return</tspan><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="17" textLength="10.801758">..</tspan></text><g filter="url(#Shadow)"><rect x="214.377" y="301.379" width="54" height="34" fill="white"/><rect x="214.377" y="301.379" width="54" height="34" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(219.377 308.379)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="6" y="8" textLength="32">attribute</tspan><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="10.220703" y="18" textLength="23.558594">object</tspan></text></g><path d="M 199.193 249.815 L 199.193 318.925 L 207.97754 318.8113" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 406.74574 294.90896 L 406.242 315.583 L 272.50995 315.01889" marker-end="url(#FilledArrow_Marker_2)" marker-start="url(#FilledBall_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(118.282 316.108)" fill="blue"><tspan font-family="Courier New" font-size="10" font-weight="bold" fill="blue" x="0" y="8" textLength="72.01172">setAttr(i,o)</tspan></text><text transform="translate(142.52 386.429)" fill="blue"><tspan font-family="Courier New" font-size="10" font-weight="bold" fill="blue" x="0" y="8" textLength="60.009766">getAttr(i)</tspan></text><g filter="url(#Shadow)"><rect x="208.685" y="363.774" width="65" height="34" fill="white"/><rect x="208.685" y="363.774" width="65" height="34" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(213.685 365.774)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="0" y="8" textLength="33.34375">- listener</tspan><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="0" y="18" textLength="46.21875">- Instruction</tspan><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="0" y="28" textLength="47.128906">- native peer</tspan></text></g><path d="M 201.48924 382.13757 L 191.346 382.486 L 191.55037 253.65499" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 280.88496 380.90578 L 403.869 381.314 L 403.869 332.244" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="241.23884" y1="363.274" x2="241.30251" y2="342.57897" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4,4"/><text transform="translate(280.538 386.363)" fill="blue"><tspan font-family="Courier New" font-size="10" font-weight="bold" fill="blue" x="0" y="8" textLength="66.010742">get?Attr(i)</tspan></text><text transform="translate(362.525 383.486)" fill="blue"><tspan font-family="Courier New" font-size="10" font-weight="bold" fill="blue" x="0" y="8" textLength="78.012695">set?Attr(i,o)</tspan></text><text transform="translate(250.716 143.057)" fill="red"><tspan font-family="Helvetica" font-size="11" font-style="italic" font-weight="500" fill="red" x=".4946289" y="10" textLength="44.010742">JPF core</tspan></text><text transform="translate(123.34 347.446)" fill="red"><tspan font-family="Helvetica" font-size="11" font-style="italic" font-weight="500" fill="red" x="14.221924" y="10" textLength="19.556152">JPF</tspan><tspan font-family="Helvetica" font-size="11" font-style="italic" font-weight="500" fill="red" x=".45581055" y="23" textLength="47.08838">extension</tspan></text><text transform="translate(257.781 101.477)" fill="blue"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="blue" x=".25878906" y="10" textLength="38.911133">attribute </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="blue" x="38.623047" y="10" textLength="16.118164">API</tspan></text><g filter="url(#Shadow_3)"><rect x="184.386" y="157.024" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="184.386" y="157.024" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(140.259 155.826)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="40.016602">object-attr</tspan></text><line x1="342.24" y1="282.597" x2="342.24" y2="275.551" marker-end="url(#FilledArrow_Marker_4)" marker-start="url(#FilledBall_Marker_2)" stroke="#404040" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="363.056" y="337.39" width="77" height="16.4457" fill="white" fill-opacity=".76"/><rect x="363.056" y="337.39" width="77" height="16.4457" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(368.056 341.61285)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="12.833984" y="8" textLength="41.332031">ThreadInfo</tspan></text></g><g filter="url(#Shadow)"><rect x="156.551" y="257.852" width="77" height="16.4457" fill="white" fill-opacity=".76"/><rect x="156.551" y="257.852" width="77" height="16.4457" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(161.551 261.07485)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="10.609375" y="8" textLength="45.78125">ElementInfo</tspan></text></g></g></g></svg>
diff --git a/doc/graphics/bc-factory.svg b/doc/graphics/bc-factory.svg
deleted file mode 100644 (file)
index f69c951..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="-2 3 732 514" width="61pc" height="514pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2011-05-16 18:32:22 +0000</dc:date></metadata><defs><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="black"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 0 M 0 -3 L 8 0 L 0 3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Courier" font-size="11" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Courier" font-size="11" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker_2" viewBox="-1 -4 9 8" markerWidth="9" markerHeight="8" color="gray"><g><path d="M 6.3999996 0 L 0 0 M 0 -2.3999999 L 6.3999996 0 L 0 2.3999999" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Times New Roman" font-size="14" panose-1="2 2 5 3 5 4 5 9 3 4" units-per-em="1000" underline-position="-108.88672" underline-thickness="48.828125" slope="-1166.6423" x-height="430.17578" cap-height="662.10938" ascent="891.1133" descent="-216.3086" font-style="italic" font-weight="500"><font-face-src><font-face-name name="TimesNewRomanPS-ItalicMT"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><path d="M 487.518 259.358 L 549.518 259.358 C 558.35456 259.358 565.518 266.52144 565.518 275.358 L 565.518 341.358 C 565.518 350.19456 558.35456 357.358 549.518 357.358 L 487.518 357.358 C 478.68144 357.358 471.518 350.19456 471.518 341.358 L 471.518 275.358 C 471.518 266.52144 478.68144 259.358 487.518 259.358 Z" fill="#e6e6e6"/><path d="M 487.518 259.358 L 549.518 259.358 C 558.35456 259.358 565.518 266.52144 565.518 275.358 L 565.518 341.358 C 565.518 350.19456 558.35456 357.358 549.518 357.358 L 487.518 357.358 C 478.68144 357.358 471.518 350.19456 471.518 341.358 L 471.518 275.358 C 471.518 266.52144 478.68144 259.358 487.518 259.358 Z" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 275.368 259.358 L 337.368 259.358 C 346.20456 259.358 353.368 266.52144 353.368 275.358 L 353.368 356.407 C 353.368 365.24356 346.20456 372.407 337.368 372.407 L 275.368 372.407 C 266.53144 372.407 259.368 365.24356 259.368 356.407 L 259.368 275.358 C 259.368 266.52144 266.53144 259.358 275.368 259.358 Z" fill="#e6e6e6"/><path d="M 275.368 259.358 L 337.368 259.358 C 346.20456 259.358 353.368 266.52144 353.368 275.358 L 353.368 356.407 C 353.368 365.24356 346.20456 372.407 337.368 372.407 L 275.368 372.407 C 266.53144 372.407 259.368 365.24356 259.368 356.407 L 259.368 275.358 C 259.368 266.52144 266.53144 259.358 275.368 259.358 Z" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 26.8252 54.5645 L 26.8252 19.3645 C 26.8252 16.9357 37.5772 14.9645 50.8252 14.9645 C 64.0732 14.9645 74.8252 16.9357 74.8252 19.3645 L 74.8252 54.5645 C 74.8252 56.9933 64.0732 58.9645 50.8252 58.9645 C 37.5772 58.9645 26.8252 56.9933 26.8252 54.5645" fill="white"/><path d="M 26.8252 54.5645 L 26.8252 19.3645 C 26.8252 16.9357 37.5772 14.9645 50.8252 14.9645 C 64.0732 14.9645 74.8252 16.9357 74.8252 19.3645 L 74.8252 54.5645 C 74.8252 56.9933 64.0732 58.9645 50.8252 58.9645 C 37.5772 58.9645 26.8252 56.9933 26.8252 54.5645 M 26.8252 19.3645 C 26.8252 21.7933 37.5772 23.7645 50.8252 23.7645 C 64.0732 23.7645 74.8252 21.7933 74.8252 19.3645" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(31.8252 32.1645)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="1.328125" y="11" textLength="35.34375">*.class</tspan></text><rect x="494.553" y="61.0215" width="121.415" height="28" fill="white"/><rect x="494.553" y="61.0215" width="121.415" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(499.553 61.0215)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="99.375">Instruction ifeq(tgt)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan></text><rect x="494.553" y="35.0215" width="121.415" height="26" fill="white"/><rect x="494.553" y="35.0215" width="121.415" height="26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(499.553 35.0215)" fill="#404040"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#404040" x="30.96873" y="10" textLength="49.47754">«interface»</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="3.0346484" y="23" textLength="105.3457">InstructionFactory</tspan></text><rect x="639.695" y="200.846" width="61.7822" height="28" fill="white"/><rect x="639.695" y="200.846" width="61.7822" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(644.695 207.846)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="20.890123" y="11" textLength="10.001953">...</tspan></text><line x1="555.26" y1="152.712" x2="555.26028" y2="102.5215" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 304.67782 189.418 L 304.67782 182.418 L 304.67782 151.623 L 308.217 151.623 L 666.902 151.623 L 669.7412 151.623 L 669.7412 193.34685 L 669.7412 200.34685" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="515.096" y1="189.418" x2="515.93555" y2="151.623" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="352.606" y="107.24" width="121.415" height="14" fill="white"/><rect x="352.606" y="107.24" width="121.415" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(357.606 107.24)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="108.714844">Instruction execute()</tspan></text><rect x="352.606" y="93.2401" width="121.415" height="14" fill="white"/><rect x="352.606" y="93.2401" width="121.415" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(357.606 93.2401)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="24.708477" y="11" textLength="61.998047">Instruction</tspan></text><g filter="url(#Shadow)"><rect x="275.683" y="314.395" width="61.7822" height="28" fill="white"/><rect x="275.683" y="314.395" width="61.7822" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(280.683 321.395)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="11.8901234" y="11" textLength="28.001953">IFEQ</tspan></text></g><g filter="url(#Shadow)"><rect x="485.885" y="314.395" width="61.7822" height="28" fill="white"/><rect x="485.885" y="314.395" width="61.7822" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(490.885 321.395)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="11.8901234" y="11" textLength="28.001953">IFEQ</tspan></text></g><g filter="url(#Shadow)"><rect x="275.427" y="270.568" width="61.7822" height="28" fill="white"/><rect x="275.427" y="270.568" width="61.7822" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(280.427 277.568)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="20.890123" y="11" textLength="10.001953">...</tspan></text></g><g filter="url(#Shadow)"><rect x="485.885" y="270.857" width="61.7822" height="28" fill="white"/><rect x="485.885" y="270.857" width="61.7822" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(490.885 277.857)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="20.890123" y="11" textLength="10.001953">...</tspan></text></g><path d="M 246.11 247.41 L 245.412 327.791 L 265.2835 327.98724" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4,4"/><line x1="245.776" y1="285.8723" x2="265.02941" y2="285.4575" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4,4"/><path d="M 578.975 247.41 L 578.337 328.532 L 558.06717 328.4869" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4,4"/><line x1="578.68897" y1="283.77946" x2="558.06563" y2="284.1384" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4,4"/><path d="M 414.287 327.791 L 413.53368 157.12295 C 419.03363 157.09867 418.98507 146.09878 413.48513 146.12305 L 413.43488 134.73987" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="337.9652" y1="328.21897" x2="414.287" y2="327.791" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="485.385" y1="328.21" x2="414.287" y2="327.791" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(149.162 384.451)" fill="blue"><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="79.21289">Instruction </tspan><tspan font-family="Courier" font-size="11" font-weight="bold" fill="blue" x="79.21289" y="10" textLength="46.20752">execute</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="125.42041" y="10" textLength="39.606445"> (){..</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="23" textLength="151.82471">  cond = popCondition()</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="36" textLength="72.611816">  if (cond)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="49" textLength="138.62256">    return jumpTarget</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="62" textLength="39.606445">  else</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="75" textLength="158.42578">    return getNextInsn()</tspan></text><path d="M 329.824 76.4422 L 412.748 76.4422 L 412.87469 83.34177" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="216.085" y="82.7095" width="113.739" height="14" fill="white"/><rect x="216.085" y="82.7095" width="113.739" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(221.085 82.7095)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="78.708984">setCode(code)</tspan></text><rect x="216.085" y="54.7095" width="113.739" height="28" fill="white"/><rect x="216.085" y="54.7095" width="113.739" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(221.085 54.7095)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="36.011719">factory</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="91.38281">Instruction[] code</tspan></text><rect x="216.085" y="40.7095" width="113.739" height="14" fill="white"/><rect x="216.085" y="40.7095" width="113.739" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(221.085 40.7095)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="19.546258" y="11" textLength="64.646484">MethodInfo</tspan></text><line x1="329.824" y1="62.127" x2="484.653" y2="62.054543" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="74.8252" y1="36.9645" x2="93.35158" y2="36.74587" marker-end="url(#StickArrow_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="337.7092" y1="284.6111" x2="485.385" y2="284.8139" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="50.7243" y1="176.837" x2="717.844" y2="176.837" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="16,9,1,9"/><text transform="translate(53.112 183.541)" fill="red"><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x=".23876953" y="12" textLength="31.875977">concr</tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="31.595215" y="12" textLength="132.166016">ete execution semantics</tspan></text><text transform="translate(53.612 153.212)" fill="red"><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x=".130859375" y="12" textLength="161.73828">abstract execution semantics</tspan></text><text transform="translate(153.46 299.483)" fill="red"><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x=".25439453" y="12" textLength="31.875977">concr</tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="31.61084" y="12" textLength="50.134766">ete value</tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="14.182617" y="28" textLength="53.634766">execution</tspan></text><text transform="translate(592.455 317.551)" fill="red"><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x=".20849609" y="12" textLength="83.58301">symbolic value</tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="15.182617" y="28" textLength="53.634766">execution</tspan></text><text transform="translate(266.575 349.18)" fill="black"><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" x=".13964844" y="12" textLength="79.720703">instruction set</tspan></text><text transform="translate(414.822 364.88)" fill="blue"><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="79.21289">Instruction </tspan><tspan font-family="Courier" font-size="11" font-weight="bold" fill="blue" x="79.21289" y="10" textLength="46.20752">execute</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="125.42041" y="10" textLength="33.005371">(){..</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="23" textLength="158.42578">  if (!firstStepInsn()){</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="36" textLength="250.84082">    setNextCG(new PCChoiceGenerator())</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="49" textLength="99.016113">    return this</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="62" textLength="19.803223">  }</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="75" textLength="224.43652">  popCondition() // not interested</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="88" textLength="211.23438">  cond = getCG().getNextChoice()</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="101" textLength="99.016113">  if (cond){...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="114" textLength="138.62256">    return jumpTarget</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="127" textLength="85.813965">  } else {...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="140" textLength="158.42578">    return getNextInsn()</tspan></text><text transform="translate(617.76 80.3873)" fill="red"><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="7.2963867" y="12" textLength="22.16211">per </tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="29.458496" y="11.753906" textLength="3.5"> </tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="32.958496" y="12" textLength="49.745117">bytecode</tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x=".091308594" y="28" textLength="89.817383">factory methods</tspan></text><rect x="232.381" y="215.418" width="139.537" height="28" fill="white"/><rect x="232.381" y="215.418" width="139.537" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(237.381 215.418)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="99.375">Instruction ifeq(tgt)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan></text><rect x="232.381" y="189.418" width="139.537" height="26" fill="white"/><rect x="232.381" y="189.418" width="139.537" height="26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(237.381 189.418)" fill="#404040"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#404040" x="7.3270938" y="10" textLength="16.123047">gov</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#404040" x="22.712836" y="10" textLength="99.49707">.nasa.jpf.jvm.bytecode</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="12.0956484" y="23" textLength="105.3457">InstructionFactory</tspan></text><rect x="429.84" y="215.418" width="174" height="28" fill="white"/><rect x="429.84" y="215.418" width="174" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(434.84 215.418)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="99.375">Instruction ifeq(tgt)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan></text><rect x="429.84" y="189.418" width="174" height="26" fill="white"/><rect x="429.84" y="189.418" width="174" height="26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(434.84 189.418)" fill="#404040"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#404040" x="39.5708" y="10" textLength="16.123047">gov</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#404040" x="54.956543" y="10" textLength="69.472656">.nasa.jpf.symbc</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="2.6523438" y="23" textLength="158.69531">SymbolicInstructionFactory</tspan></text><text transform="translate(12.40741 223.195)" fill="blue"><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="79.21289">Instruction </tspan><tspan font-family="Courier" font-size="11" font-weight="bold" fill="blue" x="79.21289" y="10" textLength="26.404297">ifeq</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="105.61719" y="10" textLength="112.21826">(int jumpTarget){</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="23" textLength="191.43115">  return new IFEQ(jumpTarget)</tspan></text><rect x="101.651" y="55.837" width="84.557" height="14" fill="white"/><rect x="101.651" y="55.837" width="84.557" height="14" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(106.651 55.837)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="10.2726406" y="11" textLength="54.01172">ClassInfo</tspan></text><rect x="101.651" y="29.149" width="84.557" height="14" fill="white"/><rect x="101.651" y="29.149" width="84.557" height="14" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(106.651 29.149)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="10.93182" y="11" textLength="52.69336">ClassFile</tspan></text><rect x="101.651" y="83.6054" width="84.557" height="14" fill="white"/><rect x="101.651" y="83.6054" width="84.557" height="14" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(106.651 83.6054)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="1.6095547" y="11" textLength="71.33789">CodeBuilder</tspan></text><line x1="215.602" y1="62.1806" x2="194.508" y2="62.1806" marker-end="url(#StickArrow_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="186.208" y1="90.6054" x2="207.785" y2="90.6054" marker-end="url(#StickArrow_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.01023" y1="43.149" x2="144.06628" y2="48.008652" marker-end="url(#StickArrow_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="143.92952" y1="69.837" x2="143.92953" y2="75.3054" marker-end="url(#StickArrow_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="345.178" y="20.3772" width="84.557" height="14" fill="white"/><rect x="345.178" y="20.3772" width="84.557" height="14" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(350.178 20.3772)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="18.285336" y="11" textLength="30.65625">Confi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="48.941586" y="11" textLength="7.330078">g</tspan></text><path d="M 387.45665 34.3772 L 387.457 51.2746 L 338.124 51.2746" marker-end="url(#StickArrow_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(435.518 12.0618)" fill="blue"><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="165.02686">vm.insn_factory.class=...</tspan></text></g></g></svg>
diff --git a/doc/graphics/cg-impl.svg b/doc/graphics/cg-impl.svg
deleted file mode 100644 (file)
index 07a14cb..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="5 12 774 590" width="774pt" height="590pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-02 07:14:49 +0000</dc:date></metadata><defs><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="black"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="539.55078" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="bold"><font-face-src><font-face-name name="Helvetica-BoldOblique"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="1176.0376"/><g><title>Layer 1</title><path d="M 624 341 L 640 341 L 640 441.1" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(42.3333 21.6667)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="129.62109">initNextTransition</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="129.62109" y="11" textLength="43.20703">(){...</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="115.21875">  curCg = nextCg</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="108.01758">  nextCg = null</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="53" textLength="122.41992">  curCg.advance()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="67" textLength="144.02344">   ..setExecThread()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="81" textLength="36.00586">  ...</tspan></text><text transform="translate(19.7895 260)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="122.41992">executeTransition</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="122.41992" y="11" textLength="36.00586">(){..</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="172.82812">  isFirstStepInsn = true</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="158.42578">  while (pc != null) {</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="53" textLength="237.63867">    nextPc = executeInstruction()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="67" textLength="208.83398">    if (ss.breakTransition())</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="81" textLength="79.21289">      break</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="95" textLength="57.609375">    else</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="109" textLength="122.41992">      pc = nextPc</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="123" textLength="194.43164">    isFirstStepInsn = false</tspan></text><text transform="translate(252.667 349.409)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="64.810547">execute()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="64.810547" y="11" textLength="21.603516">{..</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="180.0293">  if (!ti.isFirstStepInsn</tspan><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="180.0293" y="25" textLength="14.402344">()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="194.43164" y="25" textLength="21.603516">) {</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="180.0293">    ChoiceGenerator cg = </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="53" textLength="259.24219">          ..createMonitorEnterCG(..)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="67" textLength="144.02344">    if (cg != null){</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="81" textLength="252.04102">      ss.setNextChoiceGenerator(cg)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="95" textLength="194.43164">      return this // repeat</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="109" textLength="21.603516">  }</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="137" textLength="93.615234">  ei.lock(ti)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="151" textLength="165.62695">  return getNextPc(ti);</tspan></text><rect x="458.041" y="280.5" width="90" height="14" fill="white"/><rect x="458.041" y="280.5" width="90" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(463.041 280.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="50.021484">execute()</tspan></text><rect x="458.041" y="266.5" width="90" height="14" fill="white"/><rect x="458.041" y="266.5" width="90" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(463.041 266.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="9.0009766" y="11" textLength="61.998047">Instruction</tspan></text><rect x="254" y="65" width="152" height="42" fill="white"/><rect x="254" y="65" width="152" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(259 65)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="47.34375">initNextT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="46.904297" y="11" textLength="53.34961">ransition()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="37.347656">breakT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="36.908203" y="25" textLength="53.34961">ransition()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="140.05664">setNextChoiceGenerator()</tspan></text><rect x="254" y="37" width="152" height="28" fill="white"/><rect x="254" y="37" width="152" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(259 37)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="38.021484">nextCg</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="32.009766">curCg</tspan></text><rect x="254" y="23" width="152" height="14" fill="white"/><rect x="254" y="23" width="152" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(259 23)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="34.982422" y="11" textLength="72.035156">SystemState</tspan></text><rect x="547.541" y="60" width="113.459" height="28" fill="white"/><rect x="547.541" y="60" width="113.459" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(552.541 60)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="98.033203">hasMoreChoices()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="53.361328">advance()</tspan></text><rect x="547.541" y="46" width="113.459" height="14" fill="white"/><rect x="547.541" y="46" width="113.459" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(552.541 46)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="3.0498125" y="11" textLength="97.359375">ChoiceGenerator</tspan></text><rect x="472" y="153" width="101" height="14" fill="white"/><rect x="472" y="153" width="101" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(477 153)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="86.70117">getNextChoice()</tspan></text><rect x="472" y="139" width="101" height="14" fill="white"/><rect x="472" y="139" width="101" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(477 139)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="52.03711">threadSet</tspan></text><rect x="472" y="125" width="101" height="14" fill="white"/><rect x="472" y="125" width="101" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(477 125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="16.496094" y="11" textLength="58.007812">ThreadCG</tspan></text><rect x="596" y="153" width="101" height="14" fill="white"/><rect x="596" y="153" width="101" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(601 153)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="86.70117">getNextChoice()</tspan></text><rect x="596" y="139" width="101" height="14" fill="white"/><rect x="596" y="139" width="101" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(601 139)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="54.046875">doubleSet</tspan></text><rect x="596" y="125" width="101" height="14" fill="white"/><rect x="596" y="125" width="101" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(601 125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="16.167969" y="11" textLength="58.664062">DoubleCG</tspan></text><rect x="713.438" y="125" width="54" height="18" fill="white"/><rect x="713.438" y="125" width="54" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(718.438 127)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="16.999023" y="11" textLength="10.001953">...</tspan></text><rect x="495" y="190" width="54" height="18" fill="white"/><rect x="495" y="190" width="54" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(500 192)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="16.999023" y="11" textLength="10.001953">...</tspan></text><rect x="85.4035" y="207" width="118" height="42" fill="white"/><rect x="85.4035" y="207" width="118" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(90.4035 207)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="49.359375">executeT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="48.919922" y="11" textLength="53.34961">ransition()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="105.38086">executeInstruction()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="87.35156">isFirstStepInsn()</tspan></text><rect x="85.4035" y="193" width="118" height="14" fill="white"/><rect x="85.4035" y="193" width="118" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(90.4035 193)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="64.04297">{pc, nextPc}</tspan></text><rect x="85.4035" y="179" width="118" height="14" fill="white"/><rect x="85.4035" y="179" width="118" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(90.4035 179)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="23.000977" y="11" textLength="61.998047">ThreadInfo</tspan></text><line x1="609.041" y1="112" x2="609.041" y2="101.5" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 521.57353 125 L 521 112 L 740.403 112 L 740.438 125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="646.4202" y1="125" x2="646.3708" y2="112" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="522" y1="190.257" x2="522" y2="179.757" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="366.5" y="327.5" width="90" height="18" fill="white"/><rect x="366.5" y="327.5" width="90" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(371.5 329.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="2.6699219" y="11" textLength="74.660156">MonitorEnter</tspan></text><rect x="553.5" y="327.5" width="68" height="18" fill="white"/><rect x="553.5" y="327.5" width="68" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(558.5 329.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="6.658203" y="11" textLength="44.683594">Invoke..</tspan></text><rect x="476.703" y="327.5" width="54" height="18" fill="white"/><rect x="476.703" y="327.5" width="54" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(481.703 329.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="16.999023" y="11" textLength="10.001953">...</tspan></text><line x1="503.5" y1="318.5" x2="503.5" y2="308" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 411.5 327.5 L 411.5 318.5 L 587.458 318.5 L 587.5 327.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="503.703" y1="327.5" x2="503.87076" y2="318.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="573.5" y="363.833" width="83" height="18" fill="white"/><rect x="573.5" y="363.833" width="83" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(578.5 365.833)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="4.1767578" y="11" textLength="64.646484">MethodInfo</tspan></text><rect x="591.5" y="399.833" width="83" height="18" fill="white"/><rect x="591.5" y="399.833" width="83" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(596.5 401.833)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="5.4804688" y="11" textLength="62.039062">NativePeer</tspan></text><text transform="translate(463.041 446)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="160.0957">e.g. JPF_gov_nasa_jpf_vm_V</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="159.43945" y="11" textLength="22.669922">erify</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="181.22461" y="11" textLength="91.39453">.getBoolean(env)</tspan></text><line x1="210" y1="469.665" x2="362" y2="469.665" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="8,4,1,4"/><text transform="translate(35 434.665)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="bold" fill="red" x="0" y="11" textLength="43.32422">top half</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="43.32422" y="11" textLength="81.38672">: executed on fi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="124.71094" y="11" textLength="70.69922">rst invocation</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="208.78125">optionally sets next CG and reexecutes</tspan></text><text transform="translate(35 475.665)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="bold" fill="red" x="0" y="11" textLength="65.320312">bottom half</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="65.320312" y="11" textLength="124.722656">: executed on revisit (or</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="187.42969">if no CG created because of policy)</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="39" textLength="165.43945">does semantic action based on</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="53" textLength="102.703125">current CGs choice</tspan></text><line x1="585" y1="131" x2="586" y2="246" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="8,4,1,4"/><text transform="translate(468 224)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="101.396484">scheduling choices</tspan></text><text transform="translate(601.5 224)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="127.41211">data acquisition choices</tspan></text><path d="M 700 163 L 747 163 L 747 546.1" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><line x1="406" y1="71" x2="537.641" y2="71" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 194 249 C 222 278.6667 258.6663 285.99975 307.333 289.333 C 352.12157 292.40069 408.50888 290.38684 448.14126 290.04641" marker-end="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><circle cx="263.333" cy="171" r="8.000013" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(261.933 164)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="6.673828">1</tspan></text><circle cx="314.667" cy="277.333" r="8.000013" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(313.267 270.333)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="6.673828">2</tspan></text><circle cx="374.5" cy="207.333" r="8.000013" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(373.1 200.333)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="6.673828">3</tspan></text><line x1="426.041" y1="531.45" x2="585" y2="531.45" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="8,4,1,4"/><text transform="translate(424.333 511.333)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="39.363281">top half</tspan></text><text transform="translate(423.667 536.333)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="36.685547">bottom</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="19.347656">half</tspan></text><text transform="translate(465 466.95)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="194.43164">if (!ti.isFirstStepInsn()){</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="158.42578">  cg = new BooleanCG()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="223.23633">  ss.setNextChoiceGenerator(cg)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="53" textLength="194.43164">  env.repeatInvocation() ..</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="81" textLength="57.609375">} else {</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="95" textLength="216.03516">  cg = ss.getChoiceGenerator()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="109" textLength="288.04688">  return ((BooleanCG)cg).getNextChoice()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="123" textLength="7.201172">}</tspan></text><text transform="translate(56 126.333)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="108.01758">breakTransition</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="108.01758" y="11" textLength="43.20703">(){...</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="165.62695">  return nextCg != null</tspan></text><path d="M 301.333 106 C 299.99966 155.3333 295.3337 164.6667 280.667 179 C 267.09314 192.2653 251.8064 204.10311 213.1948 210.54982" marker-end="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 458.041 277.333 C 382.6786 281.99966 361.33353 214.0001 353 187.667 C 345.40257 163.6599 344.73164 148.240585 344.60825 115.9" marker-end="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/></g></g></svg>
diff --git a/doc/graphics/cg-motivation.svg b/doc/graphics/cg-motivation.svg
deleted file mode 100644 (file)
index e8c750c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="36 72 668 428" width="668pt" height="428pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2010-02-22 05:27:10 +0000</dc:date></metadata><defs><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 0 M 0 -3 L 8 0 L 0 3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker_2" viewBox="-9 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M -8 0 L 0 0 M 0 3 L -8 0 L 0 -3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Lucida Grande" font-size="12" panose-1="2 11 6 0 4 5 2 2 2 4" units-per-em="1000" underline-position="-97.65625" underline-thickness="48.828125" slope="0" x-height="530.27344" cap-height="722.65625" ascent="966.7969" descent="-210.9375" font-weight="500"><font-face-src><font-face-name name="LucidaGrande"/></font-face-src></font-face><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Lucida Grande" font-size="14" panose-1="2 11 6 0 4 5 2 2 2 4" units-per-em="1000" underline-position="-97.65625" underline-thickness="48.828125" slope="0" x-height="530.27344" cap-height="722.65625" ascent="966.7969" descent="-210.9375" font-weight="500"><font-face-src><font-face-name name="LucidaGrande"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><line x1="401.4" y1="354" x2="449.6" y2="354" marker-end="url(#StickArrow_Marker)" marker-start="url(#StickArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="425.5" y1="331" x2="425.5" y2="364" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="440.5" y1="338" x2="440.5" y2="364" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="410.5" y1="338" x2="410.5" y2="364" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(412 316)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".38085938" y="12" textLength="7.330078">T</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="7.5" y="12" textLength="9.919922"> ±</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="17.419922" y="12" textLength="12.199219"> Δ</tspan></text><circle cx="425.5" cy="354" r="3.0000048" fill="white"/><circle cx="425.5" cy="354" r="3.0000048" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="440.5" cy="354" r="3.0000048" fill="white"/><circle cx="440.5" cy="354" r="3.0000048" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="410.5" cy="354" r="3.0000048" fill="white"/><circle cx="410.5" cy="354" r="3.0000048" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(250.5215 365.55046)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="21.603516">.. </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="295.24805">double v = Verify.getDouble(&quot;velocity&quot;); </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="14.402344">..</tspan></text><text transform="translate(220.02 434.55)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="468.07617">velocity.class = gov.nasa.jpf.jvm.choice.DoubleThresholdGenerator</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="187.23047">velocity.threshold = 13250</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="144.02344">velocity.delta = 500</tspan></text><text transform="translate(132.175 372.129)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".020996094" y="13" textLength="93.95801">application code</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="14.13501" y="29" textLength="65.72998">(test driver)</tspan></text><text transform="translate(50 436)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="32.280518" y="13" textLength="27.459961">confi</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="59.74048" y="13" textLength="50.59082">guration </tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".49780273" y="29" textLength="123.55713">(e.g. mode property fi</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="124.05493" y="29" textLength="14.447266">le)</tspan></text><path d="M 474.5 396 C 475.1666 401.49945 481.8328 409.25033 476.5 412.5 C 471.1672 415.74967 475.91332 414.91673 442.5 415.5 C 409.08668 416.08327 308.41342 414.83345 276 416 C 243.58658 417.16655 250.58307 418.91703 248 422.5 C 246.49657 424.5854 249.56637 427.63104 253.21663 430.79843" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(476.5 345.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".32714844" y="12" textLength="29.683594">C = { </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="29.799805" y="12" textLength="7.330078">T</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="36.473633" y="12" textLength="3.9960938">-</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="40.469727" y="12" textLength="68.203125">Δ, T, T+ Δ }</tspan></text><text transform="translate(77.73514 82.637407)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="136.822266">Verify.getBoolean()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="129.62109">Verify.getInt(0,4)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="67" textLength="180.0293">Verify.getDouble(1.0,1.5)</tspan></text><text transform="translate(267.733 84)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="12" textLength="82.376953">C = { true, false</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="82.376953" y="12" textLength="7.6992188"> }</tspan></text><text transform="translate(267.233 111)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="12" textLength="89.72461">C = { 0, 1, 2, 3, 4</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="89.72461" y="12" textLength="7.6992188"> }</tspan></text><text transform="translate(373.733 83.6349)" fill="red"><tspan font-family="Lucida Grande" font-size="14" font-weight="500" fill="red" x="0" y="14" textLength="10.698242">✓</tspan></text><text transform="translate(374.733 108.635)" fill="red"><tspan font-family="Helvetica" font-size="14" font-weight="bold" fill="red" x="0" y="14" textLength="8.551758">?</tspan></text><text transform="translate(404.733 111)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="279.48633">potentially large sets with lots of uninteresting values</tspan></text><text transform="translate(374.733 135.635)" fill="red"><tspan font-family="Helvetica" font-size="14" font-weight="bold" fill="red" x="0" y="14" textLength="17.103516">??</tspan></text><text transform="translate(404.733 138)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="22.68164">no fi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="22.68164" y="11" textLength="166.08398">nite value set without heuristics</tspan></text><text transform="translate(267.233 138)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="13" textLength="29.683594">C = { </tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="29.683594" y="13" textLength="9.267578">∞</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="38.951172" y="13" textLength="7.6992188"> }</tspan></text><text transform="translate(214.675 327.129)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".3239746" y="13" textLength="144.35205">e.g. &quot;Threshold&quot; heuristic</tspan></text><path d="M 327 180.284 L 327 211.409 L 320 211.409 L 334 221.784 L 348 211.409 L 341 211.409 L 341 180.284 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(202 247.12)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="63.86914" y="14" textLength="125.26172">Choice Generators</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="122.41211" y="31" textLength="8.1757812">+</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x=".09326172" y="48" textLength="35.765625">Confi</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="35.858887" y="48" textLength="217.04785">gurable Heuristic Choice Models</tspan></text><text transform="translate(411 238)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="169.42383">JPF internal object to store and </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="144.08203">enumerate a set of choices</tspan></text><text transform="translate(468 283)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="25.347656">confi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="25.347656" y="11" textLength="96.720703">gurable classes to</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="182.09766">create ChoiceGenerator instances</tspan></text><rect x="107" y="225.12" width="140" height="43" fill="white"/><rect x="107" y="225.12" width="140" height="43" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112 225.12)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="98.033203">hasMoreChoices()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="53.361328">advance()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="40" textLength="90.035156">getNextChoice() </tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="90.035156" y="40" textLength="12">→</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="102.035156" y="40" textLength="9.3339844"> x</tspan></text><rect x="107" y="211.12" width="140" height="14" fill="white"/><rect x="107" y="211.12" width="140" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112 211.12)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="73.382812">choiceSet: {x}</tspan></text><rect x="107" y="197.12" width="140" height="14" fill="white"/><rect x="107" y="197.12" width="140" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112 197.12)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="12.9833984" y="11" textLength="104.033203">xChoiceGenerator</tspan></text></g></g></svg>
diff --git a/doc/graphics/cg-ontology.svg b/doc/graphics/cg-ontology.svg
deleted file mode 100644 (file)
index fab55e3..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="131 133 625 388" width="625pt" height="388pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2010-02-22 02:58:46 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation=".48301078"/><feOffset in="blur" result="offset" dx="1" dy="1"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Courier" font-size="13" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id139_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id140_Graphic" filter="url(#Shadow)"/></g><path d="M 284.70481 177.8364 L 284.70481 177.8364 C 294.09105 185.10919 295.80434 198.61399 288.53156 208.00022 C 288.53156 208.00022 288.53156 208.00022 288.53156 208.00022 L 231.091 282.13285 C 223.81822 291.51909 210.31342 293.23238 200.92719 285.9596 L 200.92719 285.9596 C 191.54095 278.68681 189.82766 265.18201 197.10044 255.79578 L 254.541 181.66315 C 261.81378 172.27691 275.31858 170.56362 284.70481 177.8364 C 284.70481 177.8364 284.70481 177.8364 284.70481 177.8364 Z" fill="#ffccc3" fill-opacity=".25"/><path d="M 284.70481 177.8364 L 284.70481 177.8364 C 294.09105 185.10919 295.80434 198.61399 288.53156 208.00022 C 288.53156 208.00022 288.53156 208.00022 288.53156 208.00022 L 231.091 282.13285 C 223.81822 291.51909 210.31342 293.23238 200.92719 285.9596 L 200.92719 285.9596 C 191.54095 278.68681 189.82766 265.18201 197.10044 255.79578 L 254.541 181.66315 C 261.81378 172.27691 275.31858 170.56362 284.70481 177.8364 C 284.70481 177.8364 284.70481 177.8364 284.70481 177.8364 Z" stroke="#ff97a0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id139_Graphic"><circle cx="269.28125" cy="195.78125" r="18.281279" fill="white"/><circle cx="269.28125" cy="195.78125" r="18.281279" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id140_Graphic"><circle cx="215.5" cy="267.5" r="15.500025" fill="white"/><circle cx="215.5" cy="267.5" r="15.500025" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="258.01217" y1="210.80888" x2="225.10027" y2="254.69777" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(145.432 221)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".19897461" y="13" textLength="7.940918">T</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="7.6638184" y="13" textLength="49.137207">ransition</tspan></text><rect x="231" y="217" width="75" height="11" fill="blue" fill-opacity=".14"/><rect x="231" y="217" width="75" height="11" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(253.562 187)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".3227539" y="13" textLength="30.354492">State</tspan></text><text transform="translate(312.5 213)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".21044922" y="14" textLength="43.579102">Choice</tspan></text><line x1="267" y1="144" x2="268.45463" y2="177.01808" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 205.51021 279.9999 L 183.932 307 L 183.932 307 L 183.932 307" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="224.25289" y1="280.89727" x2="240" y2="305" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="276.61163" y1="213.07815" x2="294.378" y2="255" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(360.562 248)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="116.74414">Scheduling Choice</tspan></text><text transform="translate(360.562 343)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="77.041016">Data Choice</tspan></text><text transform="translate(405.562 361)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="13" textLength="249.64062">boolean b = Verify.getBoolean();</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="29" textLength="335.45459">double d = Verify.getDouble(&quot;MyHeuristic&quot;);</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="45" textLength="15.602539">..</tspan></text><text transform="translate(405.562 268)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="13" textLength="171.62793">synchronized (..) {..}</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="29" textLength="70.211426">wait (..)</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="45" textLength="140.42285">x = mySharedObject</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="61" textLength="15.602539">..</tspan></text><text transform="translate(360.562 424)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="92.59961">Control Choice</tspan></text><text transform="translate(405.562 448)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="13" textLength="109.217773">if (&lt;cond&gt;) ..</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="29" textLength="210.63428">INVOKECG.setInvocations(..)</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="45" textLength="15.602539">..</tspan></text><path d="M 332.571 233.32 L 332.571 433.328 L 355.562 433.328" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="333.347" y1="256.576" x2="355.562" y2="256.576" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="332.571" y1="351.929" x2="354.787" y2="351.929" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/doc/graphics/cg-sequence.svg b/doc/graphics/cg-sequence.svg
deleted file mode 100644 (file)
index 5e0ff92..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="133 132 503 243" width="503pt" height="243pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2006-05-05 17:02:45 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation=".48301078"/><feOffset in="blur" result="offset" dx="1" dy="1"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 8 8" markerWidth="8" markerHeight="8" color="black"><g><path d="M 5.6000004 0 L 0 -2.1000001 L 0 2.1000001 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="black"><g><path d="M 4.7999992 0 L 0 -1.7999997 L 0 1.7999997 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id4_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id5_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id22_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id7_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id17_Graphic" filter="url(#Shadow)"/></g><path d="M 237.89106 230.97335 L 237.89106 230.97335 C 243.97415 235.39297 245.32265 243.9071 240.90303 249.99018 C 240.90303 249.99018 240.90303 249.99018 240.90303 249.99018 L 213.52887 287.66748 C 209.10925 293.75057 200.59513 295.09907 194.51204 290.67945 L 194.51204 290.67945 C 188.42895 286.25983 187.08045 277.7457 191.50007 271.66262 L 218.87423 233.98532 C 223.29385 227.90223 231.80797 226.55373 237.89106 230.97335 Z" fill="#ffccc3" fill-opacity=".25"/><path d="M 237.89106 230.97335 L 237.89106 230.97335 C 243.97415 235.39297 245.32265 243.9071 240.90303 249.99018 C 240.90303 249.99018 240.90303 249.99018 240.90303 249.99018 L 213.52887 287.66748 C 209.10925 293.75057 200.59513 295.09907 194.51204 290.67945 L 194.51204 290.67945 C 188.42895 286.25983 187.08045 277.7457 191.50007 271.66262 L 218.87423 233.98532 C 223.29385 227.90223 231.80797 226.55373 237.89106 230.97335 Z" stroke="#ff97a0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 197.99853 196.87463 L 197.99853 196.87463 C 203.38779 192.9742 210.91857 194.18114 214.819 199.5704 C 214.819 199.5704 214.819 199.5704 214.819 199.5704 L 240.80254 235.4721 C 244.70297 240.86136 243.49603 248.39214 238.10677 252.29257 L 238.10677 252.29257 C 232.71751 256.193 225.18673 254.98606 221.2863 249.5968 C 221.2863 249.5968 221.2863 249.5968 221.2863 249.5968 L 195.30276 213.6951 C 191.40233 208.30584 192.60927 200.77506 197.99853 196.87463 Z" fill="#ffccc3" fill-opacity=".25"/><path d="M 197.99853 196.87463 L 197.99853 196.87463 C 203.38779 192.9742 210.91857 194.18114 214.819 199.5704 C 214.819 199.5704 214.819 199.5704 214.819 199.5704 L 240.80254 235.4721 C 244.70297 240.86136 243.49603 248.39214 238.10677 252.29257 L 238.10677 252.29257 C 232.71751 256.193 225.18673 254.98606 221.2863 249.5968 C 221.2863 249.5968 221.2863 249.5968 221.2863 249.5968 L 195.30276 213.6951 C 191.40233 208.30584 192.60927 200.77506 197.99853 196.87463 Z" stroke="#ff97a0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id4_Graphic"><circle cx="205.5" cy="207.5" r="10.500017" fill="white"/><circle cx="205.5" cy="207.5" r="10.500017" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id5_Graphic"><circle cx="176.5" cy="241.5" r="10.500017" fill="white"/><circle cx="176.5" cy="241.5" r="10.500017" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id22_Graphic"><circle cx="156.5" cy="280.5" r="10.500017" fill="white"/><circle cx="156.5" cy="280.5" r="10.500017" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id7_Graphic"><circle cx="229.5" cy="240.5" r="10.500017" fill="white"/><circle cx="229.5" cy="240.5" r="10.500017" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="198.36125" y1="215.86957" x2="183.63874" y2="233.13042" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="211.97076" y1="216.39733" x2="223.02918" y2="231.60271" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="171.47923" y1="251.2905" x2="161.52077" y2="270.7095" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id17_Graphic"><circle cx="201.5" cy="280.5" r="10.500017" fill="white"/><circle cx="201.5" cy="280.5" r="10.500017" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="182.43751" y1="250.76253" x2="195.56247" y2="271.23748" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="223.19091" y1="249.51298" x2="207.80908" y2="271.48702" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="233.83421" y1="250.61316" x2="246" y2="279" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(255 275)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><line x1="197.32751" y1="290.68088" x2="189" y2="311" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="237.95824" y1="247.5337" x2="277" y2="280" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="205.49625" y1="290.75125" x2="213" y2="310" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(195 307)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(330 250)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="29.355469">get_fi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="29.355469" y="11" textLength="16.013672">eld</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="74.039062">monitor_enter</tspan></text><text transform="translate(330 197)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="10.001953">...</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="29.355469">get_fi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="29.355469" y="25" textLength="16.013672">eld</tspan></text><text transform="translate(330 316)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="74.039062">monitor_enter</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan></text><path d="M 312 246 L 397 246 C 404.73199 246 411 252.26801 411 260 L 411 282 C 411 289.73199 404.73199 296 397 296 L 312 296 C 304.26801 296 298 289.73199 298 282 L 298 260 C 298 252.26801 304.26801 246 312 246 Z" fill="#ffccc3" fill-opacity=".25"/><path d="M 312 246 L 397 246 C 404.73199 246 411 252.26801 411 260 L 411 282 C 411 289.73199 404.73199 296 397 296 L 312 296 C 304.26801 296 298 289.73199 298 282 L 298 260 C 298 252.26801 304.26801 246 312 246 Z" stroke="#ff97a0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 312 179 L 397 179 C 404.73199 179 411 185.26801 411 193 L 411 215 C 411 222.73199 404.73199 229 397 229 L 312 229 C 304.26801 229 298 222.73199 298 215 L 298 193 C 298 185.26801 304.26801 179 312 179 Z" fill="#ffccc3" fill-opacity=".25"/><path d="M 312 179 L 397 179 C 404.73199 179 411 185.26801 411 193 L 411 215 C 411 222.73199 404.73199 229 397 229 L 312 229 C 304.26801 229 298 222.73199 298 215 L 298 193 C 298 185.26801 304.26801 179 312 179 Z" stroke="#ff97a0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 312 314 L 397 314 C 404.73199 314 411 320.26801 411 328 L 411 350 C 411 357.73199 404.73199 364 397 364 L 312 364 C 304.26801 364 298 357.73199 298 350 L 298 328 C 298 320.26801 304.26801 314 312 314 Z" fill="#ffccc3" fill-opacity=".25"/><path d="M 312 314 L 397 314 C 404.73199 314 411 320.26801 411 328 L 411 350 C 411 357.73199 404.73199 364 397 364 L 312 364 C 304.26801 364 298 357.73199 298 350 L 298 328 C 298 320.26801 304.26801 314 312 314 Z" stroke="#ff97a0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(460.266 141)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="106.61328">ChoiceGenerator</tspan></text><path d="M 386 218 L 456 218 L 456 224.5" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 456 246 L 456 255 L 387.7 255" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(301 193.5)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".2241211" y="14" textLength="8.551758">T</tspan></text><text transform="translate(310 201.5)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".27807617" y="10" textLength="2.4438477">j</tspan></text><text transform="translate(301 259.178)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".2241211" y="14" textLength="8.551758">T</tspan></text><text transform="translate(309 267.178)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="14.985352">j+1</tspan></text><text transform="translate(300 327.178)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".2241211" y="14" textLength="8.551758">T</tspan></text><text transform="translate(308 335.178)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="14.985352">j+2</tspan></text><path d="M 406 287 L 455 287 L 455 293.5" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 455 315 L 455 324 L 412.7 324" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(452 228)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="21">CG</tspan></text><text transform="translate(475.15 236)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="5.5">k</tspan></text><text transform="translate(452 297)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="21">CG</tspan></text><text transform="translate(475.15 305)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="2.4438477">l</tspan></text><text transform="translate(431 200)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="58.68164">setNextCG</tspan></text><text transform="translate(431 256)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="78.708984">getNextChoice</tspan></text><text transform="translate(323.5 141)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="8.551758">T</tspan><tspan font-family="Helvetica" font-size="14" font-weight="500" x="8.0390625" y="14" textLength="52.916992">ransition</tspan></text><text transform="translate(198.707 241.273)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(203.818 238.508)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">1</tspan></text><text transform="translate(205.471 248.397)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(225.2 255.48)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(231.407 251.619)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">2</tspan></text><text transform="translate(231.69 262.33)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(248.814 242.537)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(255.295 238.95)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">3</tspan></text><text transform="translate(255.578 249.661)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(223.631 231.98)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49804688" y="11" textLength="8.0039062">S</tspan></text><text transform="translate(231.712 236.938)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(513.826 231.676)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(518.798 228.5)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">1</tspan></text><text transform="translate(520.589 238.389)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(529.688 231.676)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(535.248 228.5)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">2</tspan></text><text transform="translate(536.451 238.389)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(506.378 228.326)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".32910156" y="13" textLength="4.341797">{</tspan></text><text transform="translate(506.378 296.609)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".32910156" y="13" textLength="4.341797">{</tspan></text><text transform="translate(559.536 228.326)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".32910156" y="13" textLength="4.341797">}</tspan></text><text transform="translate(544.246 296.609)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".32910156" y="13" textLength="4.341797">}</tspan></text><text transform="translate(526.246 232.672)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".33300781" y="11" textLength="3.3339844">,</tspan></text><text transform="translate(495.88 228.328)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".20410156" y="13" textLength="7.591797">=</tspan></text><text transform="translate(495.882 296.807)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".20410156" y="13" textLength="7.591797">=</tspan></text><text transform="translate(181.122 141)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="32.689453">State</tspan></text><path d="M 595.073 343 L 595.073 238.537 L 583.773 238.537" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(569.537 344.5)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="51.351562">backtrack</tspan></text><text transform="translate(570.537 218.5)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="45.36914">advance</tspan></text><text transform="translate(546.227 231.545)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(551.787 228.369)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">2</tspan></text><text transform="translate(552.99 238.258)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(542.785 232.541)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".33300781" y="11" textLength="3.3339844">,</tspan></text><text transform="translate(513.076 299.926)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(518.048 296.75)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">1</tspan></text><text transform="translate(519.839 306.639)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="1.9995117">l</tspan></text><text transform="translate(527.938 299.926)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(525.496 300.922)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".33300781" y="11" textLength="3.3339844">,</tspan></text><text transform="translate(417.5 185.5)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="42.029297">execute</tspan></text><text transform="translate(340.5 159)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="63.375">{Instruction}</tspan></text><text transform="translate(195.631 272.98)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49804688" y="11" textLength="8.0039062">S</tspan></text><text transform="translate(204.712 277.938)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="1.9995117">l</tspan></text></g></g></svg>
diff --git a/doc/graphics/choicegen-example.svg b/doc/graphics/choicegen-example.svg
deleted file mode 100644 (file)
index 675ec8d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="36 72 663 436" width="663pt" height="436pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2006-05-03 17:51:17 +0000</dc:date></metadata><defs><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 0 M 0 -3 L 8 0 L 0 3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker_2" viewBox="-9 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M -8 0 L 0 0 M 0 3 L -8 0 L 0 -3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Lucida Grande" font-size="12" panose-1="2 11 6 0 4 5 2 2 2 4" units-per-em="1000" underline-position="-97.65625" underline-thickness="48.828125" slope="0" x-height="530.27344" cap-height="722.65625" ascent="966.7969" descent="-210.9375" font-weight="500"><font-face-src><font-face-name name="LucidaGrande"/></font-face-src></font-face><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Lucida Grande" font-size="14" panose-1="2 11 6 0 4 5 2 2 2 4" units-per-em="1000" underline-position="-97.65625" underline-thickness="48.828125" slope="0" x-height="530.27344" cap-height="722.65625" ascent="966.7969" descent="-210.9375" font-weight="500"><font-face-src><font-face-name name="LucidaGrande"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><line x1="401.4" y1="354" x2="449.6" y2="354" marker-end="url(#StickArrow_Marker)" marker-start="url(#StickArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="425.5" y1="331" x2="425.5" y2="364" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="440.5" y1="338" x2="440.5" y2="364" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="410.5" y1="338" x2="410.5" y2="364" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(412 316)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".38085938" y="12" textLength="7.330078">T</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="7.5" y="12" textLength="9.919922"> ±</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="17.419922" y="12" textLength="12.199219"> Δ</tspan></text><circle cx="425.5" cy="354" r="3.0000048" fill="white"/><circle cx="425.5" cy="354" r="3.0000048" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="440.5" cy="354" r="3.0000048" fill="white"/><circle cx="440.5" cy="354" r="3.0000048" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="410.5" cy="354" r="3.0000048" fill="white"/><circle cx="410.5" cy="354" r="3.0000048" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(250.5215 365.55046)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="21.603516">.. </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="295.24805">double v = Verify.getDouble(&quot;velocity&quot;); </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="14.402344">..</tspan></text><text transform="translate(220.01942 434.54995)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="230.4375">velocity.class = DoubleThreshold</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="187.23047">velocity.threshold = 13250</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="144.02344">velocity.delta = 500</tspan></text><text transform="translate(132.175 372.129)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".020996094" y="13" textLength="93.95801">application code</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="14.13501" y="29" textLength="65.72998">(test driver)</tspan></text><text transform="translate(50 436)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="32.280518" y="13" textLength="27.459961">confi</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="59.74048" y="13" textLength="50.59082">guration </tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".49780273" y="29" textLength="123.55713">(e.g. mode property fi</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="124.05493" y="29" textLength="14.447266">le)</tspan></text><path d="M 474.5 396 C 475.1666 401.49945 481.8328 409.25033 476.5 412.5 C 471.1672 415.74967 475.91332 414.91673 442.5 415.5 C 409.08668 416.08327 308.41342 414.83345 276 416 C 243.58658 417.16655 250.58307 418.91703 248 422.5 C 246.49657 424.5854 249.56637 427.63104 253.21663 430.79843" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(476.5 345.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".32714844" y="12" textLength="29.683594">C = { </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="29.799805" y="12" textLength="7.330078">T</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="36.473633" y="12" textLength="3.9960938">-</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="40.469727" y="12" textLength="68.203125">Δ, T, T+ Δ }</tspan></text><text transform="translate(77.73514 82.637407)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="136.822266">Verify.getBoolean()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="129.62109">Verify.getInt(0,4)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="67" textLength="180.0293">Verify.getDouble(1.0,1.5)</tspan></text><text transform="translate(267.733 84)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="12" textLength="82.376953">C = { true, false</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="82.376953" y="12" textLength="7.6992188"> }</tspan></text><text transform="translate(267.233 111)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="12" textLength="89.72461">C = { 0, 1, 2, 3, 4</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="89.72461" y="12" textLength="7.6992188"> }</tspan></text><text transform="translate(373.733 83.6349)" fill="black"><tspan font-family="Lucida Grande" font-size="14" font-weight="500" x="0" y="14" textLength="10.698242">✓</tspan></text><text transform="translate(374.733 108.635)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="0" y="14" textLength="8.551758">?</tspan></text><text transform="translate(404.733 111)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="279.48633">potentially large sets with lots of uninteresting values</tspan></text><text transform="translate(374.733 135.635)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="0" y="14" textLength="17.103516">??</tspan></text><text transform="translate(404.733 138)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="22.68164">no fi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="22.68164" y="11" textLength="166.08398">nite value set without heuristics</tspan></text><text transform="translate(267.233 138)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="13" textLength="29.683594">C = { </tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="29.683594" y="13" textLength="9.267578">∞</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="38.951172" y="13" textLength="7.6992188"> }</tspan></text><text transform="translate(200.175 327.129)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".0021972656" y="13" textLength="173.99561">e.g. &quot;DoubleThresholdChoice&quot;</tspan></text><path d="M 327 180.284 L 327 211.409 L 320 211.409 L 334 221.784 L 348 211.409 L 341 211.409 L 341 180.284 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(202 247.12)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="63.86914" y="14" textLength="125.26172">Choice Generators</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="122.41211" y="31" textLength="8.1757812">+</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x=".09326172" y="48" textLength="35.765625">Confi</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="35.858887" y="48" textLength="217.04785">gurable Heuristic Choice Models</tspan></text><text transform="translate(411 238)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="169.42383">JPF internal object to store and </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="144.08203">enumerate a set of choices</tspan></text><text transform="translate(468 283)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="25.347656">confi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="25.347656" y="11" textLength="96.720703">gurable classes to</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="182.09766">create ChoiceGenerator instances</tspan></text><rect x="107" y="225.12" width="140" height="43" fill="white"/><rect x="107" y="225.12" width="140" height="43" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112 225.12)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="98.033203">hasMoreChoices()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="53.361328">advance()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="40" textLength="90.035156">getNextChoice() </tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="90.035156" y="40" textLength="12">→</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="102.035156" y="40" textLength="9.3339844"> x</tspan></text><rect x="107" y="211.12" width="140" height="14" fill="white"/><rect x="107" y="211.12" width="140" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112 211.12)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="73.382812">choiceSet: {x}</tspan></text><rect x="107" y="197.12" width="140" height="14" fill="white"/><rect x="107" y="197.12" width="140" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112 197.12)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="12.9833984" y="11" textLength="104.033203">xChoiceGenerator</tspan></text></g></g></svg>
diff --git a/doc/graphics/genpeer.svg b/doc/graphics/genpeer.svg
deleted file mode 100644 (file)
index 6887428..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="65 35 468 408" width="39pc" height="34pc" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-04 01:29:55 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Monaco" font-size="12" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="576" height="734"/><g><title>Layer 1</title><g><xl:use xl:href="#id1_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id6_Graphic" filter="url(#Shadow)"/></g><g id="id1_Graphic"><path d="M 266.75 164 L 266.75 231.5 L 262 231.5 L 271.5 254 L 281 231.5 L 276.25 231.5 L 276.25 164 Z" fill="white"/><path d="M 266.75 164 L 266.75 231.5 L 262 231.5 L 271.5 254 L 281 231.5 L 276.25 231.5 L 276.25 164 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id6_Graphic"><ellipse cx="271.5" cy="202.5" rx="46.500074" ry="19.500031" fill="white"/><ellipse cx="271.5" cy="202.5" rx="46.500074" ry="19.500031" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(239.3 194)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="4.1829102" y="14" textLength="56.03418">GenPeer</tspan></text></g><text transform="translate(133 44.125)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="100.816406">package x.y.z;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="108.01758">class MyClass {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="44" textLength="36.00586">  ...</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="60" textLength="273.64453">  native String foo (int i, String s);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="76" textLength="7.201172">}</tspan></text><text transform="translate(79 257.125)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="180.0293">class JPF_x_y_z_MyClass {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="36.00586">  ...</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="44" textLength="43.20703">  @MJI</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="60" textLength="108.01758">  public static</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="76" textLength="439.27148">      int foo__ILjava_lang_String__2 (MJIEnv env, int objRef,</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="92" textLength="403.26562">                                      int i, int sRef) {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="108" textLength="187.23047">    int ref = MJIEnv.NULL;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="124" textLength="180.0293">    // &lt;2do&gt; fill in body</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="140" textLength="108.01758">    return ref;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="156" textLength="21.603516">  }</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="172" textLength="7.201172">}</tspan></text><text transform="translate(93.5 147.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x=".21777344" y="11" textLength="48.955078">&quot;java gov</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="48.288086" y="11" textLength="115.39453">.nasa.jpf.GenPeer x.y</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="162.79785" y="11" textLength="213.98438">.z.MyClass &gt; JPF_x_y_z_MyClass.java&quot;</tspan></text></g></g></svg>
diff --git a/doc/graphics/interleavings.svg b/doc/graphics/interleavings.svg
deleted file mode 100644 (file)
index 4dfa19e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="7 283 477 166" width="477pt" height="166pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-11-19 20:18:08 +0000</dc:date></metadata><defs><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Hoefler Text" font-size="14" panose-1="2 3 6 2 5 5 6 2 2 3" units-per-em="1000" underline-position="0" underline-thickness="67.471858" slope="0" x-height="425" cap-height="689.5" ascent="720.99304" descent="-279.00696" font-weight="500"><font-face-src><font-face-name name="HoeflerText-Regular"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="8" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><rect x="116" y="335.875" width="9" height="17" fill="#ceccff"/><rect x="116" y="335.875" width="9" height="17" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="116" y="355.875" width="9" height="21.5" fill="#ceccff"/><rect x="116" y="355.875" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="116" y="388.375" width="9" height="33" fill="#ceccff"/><rect x="116" y="388.375" width="9" height="33" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="148.5" y="335.875" width="9" height="21.5" fill="#ffd1d7"/><rect x="148.5" y="335.875" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="148.5" y="360.375" width="9" height="21.5" fill="#ffd1d7"/><rect x="148.5" y="360.375" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="148.5" y="393.875" width="9" height="21.5" fill="#ffd1d7"/><rect x="148.5" y="393.875" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="184" y="336.375" width="9" height="26.5" fill="#d6ffc8"/><rect x="184" y="336.375" width="9" height="26.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="184" y="365.875" width="9" height="14" fill="#d6ffc8"/><rect x="184" y="365.875" width="9" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="184" y="394.375" width="9" height="21.5" fill="#d6ffc8"/><rect x="184" y="394.375" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(183.5 376)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(148 376.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(115.5 372.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(101 337)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".9411621" y="10" textLength="6.1176758">1</tspan></text><text transform="translate(100.5 361)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".9411621" y="10" textLength="6.1176758">2</tspan></text><text transform="translate(115.5 309.5)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".33105469" y="14" textLength="9.3378906">P</tspan></text><text transform="translate(119.5 318)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="1.49731445" y="9" textLength="5.005371">1</tspan></text><text transform="translate(148.5 309.875)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".33105469" y="14" textLength="9.3378906">P</tspan></text><text transform="translate(152.5 318.375)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="1.49731445" y="9" textLength="5.005371">2</tspan></text><text transform="translate(183.5 309.875)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".33105469" y="14" textLength="9.3378906">P</tspan></text><text transform="translate(187.5 318.375)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x=".75024414" y="9" textLength="6.4995117">N</tspan></text><text transform="translate(101.5 394.375)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".4411621" y="10" textLength="6.1176758">n</tspan></text><text transform="translate(106.5 400.375)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="1.49731445" y="9" textLength="5.005371">1</tspan></text><text transform="translate(135.5 397.375)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".4411621" y="10" textLength="6.1176758">n</tspan></text><text transform="translate(140.5 403.375)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="1.49731445" y="9" textLength="5.005371">2</tspan></text><rect x="254" y="355.875" width="9" height="21.5" fill="#ffd1d7"/><rect x="254" y="355.875" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="254" y="380.375" width="9" height="26.5" fill="#d6ffc8"/><rect x="254" y="380.375" width="9" height="26.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(253.5 402)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(21.5 367.375)" fill="black"><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="14.499" y="13" textLength="10.276">A</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="24.075" y="13" textLength="5.166">t</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="29.031" y="13" textLength="29.47">omic</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x=".121" y="30" textLength="6.188">I</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="5.735" y="30" textLength="23.394">nstr</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="29.479" y="30" textLength="43.4">uctions</tspan></text><text transform="translate(128 292.5)" fill="black"><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x=".175" y="13" textLength="48.65">Threads</tspan></text><rect x="254.5" y="416.375" width="9" height="21.5" fill="#d6ffc8"/><rect x="254.5" y="416.375" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(240 339.5)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".9411621" y="10" textLength="6.1176758">1</tspan></text><text transform="translate(239.5 359)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".9411621" y="10" textLength="6.1176758">2</tspan></text><text transform="translate(257 309.875)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".05517578" y="14" textLength="3.8896484">I</tspan></text><text transform="translate(260 317.5)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="1.49731445" y="9" textLength="5.005371">1</tspan></text><text transform="translate(230.5 418.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".38574219" y="11" textLength="15.228516">∑n</tspan></text><text transform="translate(244.5 426.375)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="3.0002441" y="9" textLength="1.9995117">i</tspan></text><text transform="translate(296.5 309.875)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".05517578" y="14" textLength="3.8896484">I</tspan></text><text transform="translate(299.5 317.5)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x=".25146484" y="9" textLength="7.4970703">M</tspan></text><text transform="translate(276.5 310.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(166.5 310.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(170.5 397.375)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".4411621" y="10" textLength="6.1176758">n</tspan></text><text transform="translate(175.5 403.375)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x=".75024414" y="9" textLength="6.4995117">N</tspan></text><rect x="297.5" y="336.375" width="9" height="26.5" fill="#d6ffc8"/><rect x="297.5" y="336.375" width="9" height="26.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="297.5" y="365.375" width="9" height="17" fill="#ceccff"/><rect x="297.5" y="365.375" width="9" height="17" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="254" y="335.875" width="9" height="17" fill="#ceccff"/><rect x="254" y="335.875" width="9" height="17" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="297.5" y="384.875" width="9" height="21.5" fill="#ffd1d7"/><rect x="297.5" y="384.875" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(297 402)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><rect x="298" y="416.375" width="9" height="21.5" fill="#ffd1d7"/><rect x="298" y="416.375" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(276.5 364.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(166.5 355.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(239.5 292.5)" fill="black"><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x=".224" y="13" textLength="6.188">I</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="5.838" y="13" textLength="12.838">nt</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="18.466" y="13" textLength="28.182">erlea</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="46.858" y="13" textLength="29.918">vings</tspan></text><path d="M 210.5 369.125 L 224 369.125 L 224 366.375 L 228.5 371.875 L 224 377.375 L 224 374.625 L 210.5 374.625 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(394 355.375)" fill="black"><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="0" y="13" textLength="46.102">(∑    n )!</tspan></text><text transform="translate(397 382.375)" fill="black"><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="0" y="13" textLength="44.674">∏   (n !)</tspan></text><text transform="translate(408 351.375)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="1.1113281" y="8" textLength="5.7773438">N</tspan></text><text transform="translate(406 365.375)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="3.0507812" y="8" textLength="10.8984375">i=1</tspan></text><text transform="translate(426 365.375)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="3.1113281" y="8" textLength="1.7773438">i</tspan></text><text transform="translate(408 379.375)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="1.1113281" y="8" textLength="5.7773438">N</tspan></text><text transform="translate(406 392.375)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="3.0507812" y="8" textLength="10.8984375">i=1</tspan></text><text transform="translate(428 392.375)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="3.1113281" y="8" textLength="1.7773438">i</tspan></text><line x1="380.5" y1="378.375" x2="457" y2="378.375" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(345 368.5)" fill="black"><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="8.394" y="13" textLength="26.712">M = </tspan></text><rect x="342.5" y="346.375" width="130" height="61.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/doc/graphics/jpf-abstractions.svg b/doc/graphics/jpf-abstractions.svg
deleted file mode 100644 (file)
index b636c6f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="5 32 709 537" width="709pt" height="537pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-11-26 21:24:31 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="black"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker_2" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="gray"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Monaco" font-size="10" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker" viewBox="-1 -4 9 8" markerWidth="9" markerHeight="8" color="blue"><g><path d="M 6.3999996 0 L 0 0 M 0 -2.3999999 L 6.3999996 0 L 0 2.3999999" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Ball_Marker" viewBox="-6 -4 7 8" markerWidth="7" markerHeight="8" color="blue"><g><circle cx="-2.3999988" cy="0" r="2.3999977" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><rect x="67.3713" y="354" width="232.664" height="103.055" fill="#dee4ff"/><rect x="67.3713" y="354" width="232.664" height="103.055" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="251.917" y="60.5674" width="137.5" height="101.779" fill="#fff9ab"/><rect x="251.917" y="60.5674" width="137.5" height="101.779" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="45" y="191.359" width="261" height="127.641" fill="#aebcff"/><rect x="45" y="191.359" width="261" height="127.641" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="336" y="193" width="367" height="236.266" fill="#a7ffb4"/><rect x="336" y="193" width="367" height="236.266" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="126.92008" y="233.5" width="105.75" height="14" fill="white"/><rect x="126.92008" y="233.5" width="105.75" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(131.92008 233.5)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="47.34375">search ()</tspan></text></g><g filter="url(#Shadow)"><rect x="126.92008" y="219.5" width="105.75" height="14" fill="white"/><rect x="126.92008" y="219.5" width="105.75" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(131.92008 219.5)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="37.330078">VM vm</tspan></text></g><g filter="url(#Shadow)"><rect x="126.92008" y="205.5" width="105.75" height="14" fill="white"/><rect x="126.92008" y="205.5" width="105.75" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(131.92008 205.5)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="red" x="27.862305" y="11" textLength="40.02539">Search</tspan></text></g><line x1="179.49" y1="268.089" x2="179.59506" y2="260.99852" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="353.25" y="219.5" width="105.75" height="42" fill="white"/><rect x="353.25" y="219.5" width="105.75" height="42" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(358.25 219.5)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="51.339844">forward ()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="25" textLength="62.677734">backtrack ()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="39" textLength="76.69336">restoreState ()</tspan></text></g><g filter="url(#Shadow)"><rect x="353.25" y="205.5" width="105.75" height="14" fill="white"/><rect x="353.25" y="205.5" width="105.75" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(358.25 205.5)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="red" x="38.875" y="11" textLength="18">VM</tspan></text></g><g filter="url(#Shadow)"><rect x="60.625" y="289" width="105.75" height="14" fill="white"/><rect x="60.625" y="289" width="105.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(65.625 289)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="47.34375">search ()</tspan></text></g><g filter="url(#Shadow)"><rect x="60.625" y="275" width="105.75" height="14" fill="white"/><rect x="60.625" y="275" width="105.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(65.625 275)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="19.864258" y="11" textLength="56.021484">DFSearch</tspan></text></g><g filter="url(#Shadow)"><rect x="263.917" y="105.328" width="114" height="14" fill="white"/><rect x="263.917" y="105.328" width="114" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(268.917 105.328)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="28.669922">run ()</tspan></text></g><g filter="url(#Shadow)"><rect x="263.917" y="91.3279" width="114" height="14" fill="white"/><rect x="263.917" y="91.3279" width="114" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(268.917 91.3279)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="90.697266">search, vm, confi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="90.697266" y="11" textLength="6.673828">g</tspan></text></g><g filter="url(#Shadow)"><rect x="263.917" y="77.3279" width="114" height="14" fill="white"/><rect x="263.917" y="77.3279" width="114" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(268.917 77.3279)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="red" x="40.996094" y="11" textLength="22.007812">JPF</tspan></text></g><path d="M 263.917 113.349 L 31.6528 111.887 L 31 284 L 43.1 284" marker-end="url(#Arrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 377.917 111.887 L 483.589 111.925 L 483.312 205.5 L 468.9 205.5" marker-end="url(#Arrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><line x1="232.67008" y1="226.5" x2="343.35009" y2="226.04105" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="371.194" y="340.3" width="122" height="28" fill="white"/><rect x="371.194" y="340.3" width="122" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(376.194 340.3)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="49.359375">executeT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="48.919922" y="11" textLength="56.683594">ransition ()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="25" textLength="108.714844">executeInstruction ()</tspan></text></g><g filter="url(#Shadow)"><rect x="371.194" y="326.3" width="122" height="14" fill="white"/><rect x="371.194" y="326.3" width="122" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(376.194 326.3)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="25.000977" y="11" textLength="61.998047">ThreadInfo</tspan></text></g><g filter="url(#Shadow)"><rect x="341.325" y="292.463" width="145" height="28" fill="white"/><rect x="341.325" y="292.463" width="145" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(346.325 292.463)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="74.689453">initializeNextT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="74.25" y="11" textLength="53.34961">ransition()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="25" textLength="74.033203">executeNextT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="73.59375" y="25" textLength="53.34961">ransition()</tspan></text></g><g filter="url(#Shadow)"><rect x="341.325" y="278.463" width="145" height="14" fill="white"/><rect x="341.325" y="278.463" width="145" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(346.325 278.463)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="31.482422" y="11" textLength="72.035156">SystemState</tspan></text></g><g filter="url(#Shadow)"><rect x="591.25" y="232.411" width="82.375" height="20.589" fill="white"/><rect x="591.25" y="232.411" width="82.375" height="20.589" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(596.25 235.7055)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="9.1816406" y="11" textLength="54.01172">ClassInfo</tspan></text></g><g filter="url(#Shadow)"><rect x="605.438" y="258.411" width="82.375" height="20.589" fill="white"/><rect x="605.438" y="258.411" width="82.375" height="20.589" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(610.438 261.7055)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="3.8642578" y="11" textLength="64.646484">MethodInfo</tspan></text></g><g filter="url(#Shadow)"><rect x="606.25" y="284.411" width="82.375" height="20.589" fill="white"/><rect x="606.25" y="284.411" width="82.375" height="20.589" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(611.25 287.7055)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="11.191406" y="11" textLength="49.992188">FieldInfo</tspan></text></g><g filter="url(#Shadow)"><rect x="500.625" y="279.161" width="82.375" height="20.589" fill="white"/><rect x="500.625" y="279.161" width="82.375" height="20.589" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(505.625 282.4555)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="1.8515625" y="11" textLength="68.671875">ElementInfo</tspan></text></g><g filter="url(#Shadow)"><rect x="515.594" y="305.161" width="67.0625" height="20.589" fill="white"/><rect x="515.594" y="305.161" width="67.0625" height="20.589" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(520.594 308.4555)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="11.1933594" y="11" textLength="34.675781">Fields</tspan></text></g><g filter="url(#Shadow)"><rect x="515.938" y="330.161" width="67.0625" height="20.589" fill="white"/><rect x="515.938" y="330.161" width="67.0625" height="20.589" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(520.938 333.4555)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="6.538086" y="11" textLength="43.986328">Monitor</tspan></text></g><g filter="url(#Shadow)"><rect x="485.938" y="251.456" width="82.375" height="20.589" fill="white"/><rect x="485.938" y="251.456" width="82.375" height="20.589" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(490.938 254.7505)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="16.511719" y="11" textLength="39.351562">Statics</tspan></text></g><text transform="translate(374.731 408.79)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".12988281" y="11" textLength="106.740234">bytecode  execution</tspan></text><text transform="translate(611.5 312.411)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".31054688" y="11" textLength="62.378906">type + code</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="18.161133" y="25" textLength="26.677734">mgnt</tspan></text><text transform="translate(536.5 357.572)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".4892578" y="11" textLength="32.021484">object</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".158203125" y="25" textLength="32.683594">model</tspan></text><rect x="251.917" y="43.7905" width="78" height="17.1216" fill="#fff9ab"/><rect x="251.917" y="43.7905" width="78" height="17.1216" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(256.917 45.3513)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="2.0869141" y="11" textLength="19.347656">gov</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="20.549805" y="11" textLength="45.36328">.nasa.jpf</tspan></text><rect x="45" y="173" width="114" height="18" fill="#aebcff"/><rect x="45" y="173" width="114" height="18" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(50 175)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".41113281" y="11" textLength="19.347656">gov</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="18.874023" y="11" textLength="84.714844">.nasa.jpf.search</tspan></text><g filter="url(#Shadow)"><rect x="183.625" y="377.236" width="105.75" height="14" fill="white"/><rect x="183.625" y="377.236" width="105.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(188.625 377.236)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="47.34375">search ()</tspan></text></g><g filter="url(#Shadow)"><rect x="183.625" y="363.236" width="105.75" height="14" fill="white"/><rect x="183.625" y="363.236" width="105.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(188.625 363.236)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="2.1865234" y="11" textLength="91.376953">HeuristicSearch</tspan></text></g><path d="M 113.5 275 L 113.5 268 L 236.5 268 L 236.5 356.236 L 236.5 363.236" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="336" y="175" width="97.375" height="18" fill="#a7ffb4"/><rect x="336" y="175" width="97.375" height="18" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(341 177)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="2.109375" y="11" textLength="19.347656">gov</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="20.572266" y="11" textLength="64.69336">.nasa.jpf.vm</tspan></text><rect x="67.3713" y="336" width="162" height="18" fill="#dee4ff"/><rect x="67.3713" y="336" width="162" height="18" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(72.3713 338)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".40234375" y="11" textLength="19.347656">gov</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="18.865234" y="11" textLength="132.73242">.nasa.jpf.search.heuristic</tspan></text><line x1="236.275" y1="419.43" x2="236.39227" y2="404.73557" marker-end="url(#UMLInheritance_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="396" y="467.057" width="166.625" height="90" fill="#deffe8"/><rect x="396" y="467.057" width="166.625" height="90" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="396" y="449.057" width="162" height="18" fill="#deffe8"/><rect x="396" y="449.057" width="162" height="18" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(401 451.057)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="8.4033203" y="11" textLength="19.347656">gov</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="26.866211" y="11" textLength="116.73047">.nasa.jpf.vm.bytecode</tspan></text><g filter="url(#Shadow)"><rect x="416.125" y="485.057" width="122" height="14" fill="white"/><rect x="416.125" y="485.057" width="122" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(421.125 485.057)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="53.35547">execute ()</tspan></text></g><g filter="url(#Shadow)"><rect x="416.125" y="471.057" width="122" height="14" fill="white"/><rect x="416.125" y="471.057" width="122" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(421.125 471.057)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="25.000977" y="11" textLength="61.998047">Instruction</tspan></text></g><line x1="476.365" y1="520.646" x2="476.3219" y2="512.5568" marker-end="url(#UMLInheritance_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="459.25" y="525.351" width="43" height="18" fill="white"/><rect x="459.25" y="525.351" width="43" height="18" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(464.25 527.351)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="11.4990234" y="11" textLength="10.001953">...</tspan></text></g><rect x="455.25" y="521.351" width="43" height="18" fill="white"/><rect x="455.25" y="521.351" width="43" height="18" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(460.25 523.351)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="11.4990234" y="11" textLength="10.001953">...</tspan></text><path d="M 371.194 347.3 L 353.25 347.55 L 353.25 485.057 L 406.225 485.057" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="251.917" y="274.824" width="43" height="18" fill="white"/><rect x="251.917" y="274.824" width="43" height="18" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(256.917 276.824)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="11.4990234" y="11" textLength="10.001953">...</tspan></text></g><path d="M 235.68224 268 L 272.978 268 L 273.417 274.824" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="183.4" y="433.43" width="105.75" height="14" fill="white"/><rect x="183.4" y="433.43" width="105.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(188.4 433.43)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="47.34375">search ()</tspan></text></g><g filter="url(#Shadow)"><rect x="183.4" y="419.43" width="105.75" height="14" fill="white"/><rect x="183.4" y="419.43" width="105.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(188.4 419.43)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="10.199219" y="11" textLength="75.351562">BFSHeuristic</tspan></text></g><g filter="url(#Shadow)"><rect x="108" y="419.253" width="43" height="18" fill="white"/><rect x="108" y="419.253" width="43" height="18" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(113 421.253)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="11.4990234" y="11" textLength="10.001953">...</tspan></text></g><path d="M 235.682 410.984 L 129.425 410.984 L 129.5 419.253" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(31 471.057)" fill="blue"><tspan font-family="Monaco" font-size="10" font-weight="500" fill="blue" x="0" y="10" textLength="102.0166">while (notDone) {</tspan><tspan font-family="Monaco" font-size="10" font-weight="500" fill="blue" x="0" y="24" textLength="96.015625"> ..vm.forward();</tspan><tspan font-family="Monaco" font-size="10" font-weight="500" fill="blue" x="0" y="38" textLength="108.01758"> ..vm.backtrack();</tspan><tspan font-family="Monaco" font-size="10" font-weight="500" fill="blue" x="0" y="52" textLength="156.02539"> if (!properties.check()){</tspan><tspan font-family="Monaco" font-size="10" font-weight="500" fill="blue" x="0" y="66" textLength="168.02734">   reportError(); break; ...</tspan></text><path d="M 48.938554 304.05756 C 43.085163 312.15881 30.529805 331.16365 22.8773 354.647 C 12.6393 386.0645 17.02699 410.2525 22.8773 427.469 C 26.786267 438.97245 34.286499 452.55632 39.54308 460.30485" marker-end="url(#StickArrow_Marker)" marker-start="url(#Ball_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(142.526 127.115)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="0" y="13" textLength="90.67627">search.class=...</tspan></text><text transform="translate(405.865 127)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="0" y="13" textLength="68.98633">vm.class=...</tspan></text><g filter="url(#Shadow)"><rect x="396.381" y="390.67" width="105.75" height="14" fill="white"/><rect x="396.381" y="390.67" width="105.75" height="14" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(401.381 390.67)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="85.365234">push (), pop() ...</tspan></text></g><g filter="url(#Shadow)"><rect x="396.381" y="376.67" width="105.75" height="14" fill="white"/><rect x="396.381" y="376.67" width="105.75" height="14" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(401.381 377.67)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="13.855469" y="11" textLength="68.039062">StackFrame</tspan></text></g><g filter="url(#Shadow)"><rect x="292.164" y="131.276" width="82.375" height="20.589" fill="white"/><rect x="292.164" y="131.276" width="82.375" height="20.589" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(297.164 134.5705)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="17.194336" y="11" textLength="30.65625">Confi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="47.850586" y="11" textLength="7.330078">g</tspan></text></g><g filter="url(#Shadow)"><rect x="488.713" y="222.411" width="67.0625" height="20.589" fill="white"/><rect x="488.713" y="222.411" width="67.0625" height="20.589" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(493.713 225.7055)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="13.859375" y="11" textLength="29.34375">Heap</tspan></text></g></g></g></svg>
diff --git a/doc/graphics/jpf-basic.svg b/doc/graphics/jpf-basic.svg
deleted file mode 100644 (file)
index fdfae11..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="162 106 384 214" width="32pc" height="214pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-11-19 18:37:23 +0000</dc:date></metadata><defs><font-face font-family="Helvetica" font-size="18" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-857.14286" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><rect x="299.965" y="117" width="99.4872" height="56.0076" fill="#fffab4"/><rect x="299.965" y="117" width="99.4872" height="56.0076" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(304.965 134.0038)" fill="black"><tspan font-family="Helvetica" font-size="18" font-weight="bold" x="28.23774" y="18" textLength="33.011719">JPF</tspan></text><path d="M 206.06 166.232 L 206.06 123.032 C 206.06 120.0512 218.156 117.632 233.06 117.632 C 247.964 117.632 260.06 120.0512 260.06 123.032 L 260.06 166.232 C 260.06 169.2128 247.964 171.632 233.06 171.632 C 218.156 171.632 206.06 169.2128 206.06 166.232" fill="#dfdbff"/><path d="M 206.06 166.232 L 206.06 123.032 C 206.06 120.0512 218.156 117.632 233.06 117.632 C 247.964 117.632 260.06 120.0512 260.06 123.032 L 260.06 166.232 C 260.06 169.2128 247.964 171.632 233.06 171.632 C 218.156 171.632 206.06 169.2128 206.06 166.232 M 206.06 123.032 C 206.06 126.0128 218.156 128.432 233.06 128.432 C 247.964 128.432 260.06 126.0128 260.06 123.032" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(211.06 139.332)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="2.8554688" y="13" textLength="38.289062">*.class</tspan></text><path d="M 438.51 119.263 L 510.51 119.263 L 510.51 162.463 C 488.91 157.063 460.11 178.663 438.51 167.863 Z" fill="#ffcac7"/><path d="M 438.51 119.263 L 510.51 119.263 L 510.51 162.463 C 488.91 157.063 460.11 178.663 438.51 167.863 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(443.51 135.563)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="14.0200195" y="13" textLength="33.95996">report</tspan></text><path d="M 322.497 264.402 L 322.497 221.202 C 322.497 218.2212 334.593 215.802 349.497 215.802 C 364.401 215.802 376.497 218.2212 376.497 221.202 L 376.497 264.402 C 376.497 267.3828 364.401 269.802 349.497 269.802 C 334.593 269.802 322.497 267.3828 322.497 264.402" fill="#dfdbff"/><path d="M 322.497 264.402 L 322.497 221.202 C 322.497 218.2212 334.593 215.802 349.497 215.802 C 364.401 215.802 376.497 218.2212 376.497 221.202 L 376.497 264.402 C 376.497 267.3828 364.401 269.802 349.497 269.802 C 334.593 269.802 322.497 267.3828 322.497 264.402 M 322.497 221.202 C 322.497 224.1828 334.593 226.602 349.497 226.602 C 364.401 226.602 376.497 224.1828 376.497 221.202" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(327.497 237.502)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="10.7995605" y="13" textLength="22.400879">*.jpf</tspan></text><text transform="translate(176 185.642)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x=".154296875" y="14" textLength="90.26172">System under </tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="90.16992" y="14" textLength="8.551758">T</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="97.16992" y="14" textLength="18.675781">est</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="8.1967773" y="31" textLength="99.606445">(Java bytecode)</tspan></text><text transform="translate(418.768 185.485)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x=".46923828" y="14" textLength="9.3378906">V</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="9.041504" y="14" textLength="22.558594">erifi</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="31.600098" y="14" textLength="80.930664">cation Result</tspan></text><text transform="translate(290.911 276.286)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="3.4726562" y="14" textLength="61.461914">JPF Confi</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="64.93457" y="14" textLength="50.592773">guration</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x=".35888672" y="31" textLength="92.59961">Properties to V</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="92.19287" y="31" textLength="26.448242">erify</tspan></text><path d="M 266.46 140.155075 L 288.70305 140.155075 L 288.70305 134.628 L 296.1174 145.68215 L 288.70305 156.7363 L 288.70305 151.209225 L 266.46 151.209225 Z" fill="white"/><path d="M 266.46 140.155075 L 288.70305 140.155075 L 288.70305 134.628 L 296.1174 145.68215 L 288.70305 156.7363 L 288.70305 151.209225 L 266.46 151.209225 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 404.611 140.078075 L 426.85405 140.078075 L 426.85405 134.551 L 434.2684 145.60515 L 426.85405 156.6593 L 426.85405 151.132225 L 404.611 151.132225 Z" fill="white"/><path d="M 404.611 140.078075 L 426.85405 140.078075 L 426.85405 134.551 L 434.2684 145.60515 L 426.85405 156.6593 L 426.85405 151.132225 L 404.611 151.132225 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 344.23062 209.36985 L 344.23062 187.1268 L 338.70355 187.1268 L 349.7577 179.71245 L 360.81185 187.1268 L 355.28478 187.1268 L 355.28478 209.36985 Z" fill="white"/><path d="M 344.23062 209.36985 L 344.23062 187.1268 L 338.70355 187.1268 L 349.7577 179.71245 L 360.81185 187.1268 L 355.28478 187.1268 L 355.28478 209.36985 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/doc/graphics/jpf-intro-new.svg b/doc/graphics/jpf-intro-new.svg
deleted file mode 100644 (file)
index 56fc211..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="3 18 771 561" width="771pt" height="561pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2009-04-10 01:07:23 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 8 8" markerWidth="8" markerHeight="8" color="blue"><g><path d="M 5.6000004 0 L 0 -2.1000001 L 0 2.1000001 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-7 -4 8 8" markerWidth="8" markerHeight="8" color="blue"><g><path d="M -5.6000004 0 L 0 2.1000001 L 0 -2.1000001 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><filter id="Shadow_2" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" viewBox="-8 -4 9 8" markerWidth="9" markerHeight="8" color="black"><g><path d="M -6.3999996 0 L 0 2.3999999 L 0 -2.3999999 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-923.0769" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="15" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_4" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="blue"><g><path d="M 4 0 L 0 -1.5 L 0 1.5 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_5" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#ff8987"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_6" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id267_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id10_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id312_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id320_Graphic" filter="url(#Shadow)"/></g><line x1="437.4379" y1="41.027123" x2="519.2401" y2="40.616177" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="145.336" y1="40.4099" x2="424.873" y2="40.4099" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 135.678 89.1207 L 493.624 89.1207 C 500.25142 89.1207 505.624 94.493283 505.624 101.1207 L 505.624 477.0257 C 505.624 483.65312 500.25142 489.0257 493.624 489.0257 L 135.678 489.0257 C 129.05058 489.0257 123.678 483.65312 123.678 477.0257 L 123.678 101.1207 C 123.678 94.493283 129.05058 89.1207 135.678 89.1207 Z" fill="white"/><path d="M 135.678 89.1207 L 493.624 89.1207 C 500.25142 89.1207 505.624 94.493283 505.624 101.1207 L 505.624 477.0257 C 505.624 483.65312 500.25142 489.0257 493.624 489.0257 L 135.678 489.0257 C 129.05058 489.0257 123.678 483.65312 123.678 477.0257 L 123.678 101.1207 C 123.678 94.493283 129.05058 89.1207 135.678 89.1207 Z" stroke="#999" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 530.289 141.229 L 734.049 141.229 L 734.049 281.1298 C 672.921 263.6422 591.417 333.5926 530.289 298.6174 Z" fill="white"/><path d="M 530.289 141.229 L 734.049 141.229 L 734.049 281.1298 C 672.921 263.6422 591.417 333.5926 530.289 298.6174 Z" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(538.789 143.229)" fill="#7e7e7e"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="9" textLength="149.41406">------------------------------------ error path</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="20" textLength="5.0009766">..</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="31" textLength="38.53125">Step #14 </tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="38.373047" y="31" textLength="41.027344">Thread #1</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="42" textLength="193.5791">  oldclassic.java:95           event2.waitForEvent();</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="53" textLength="122.541504">  oldclassic.java:37         wait();</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="75" textLength="163.92041">------------------------------------ thread stacks</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="86" textLength="33.51709">Thread: </tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="33.358887" y="86" textLength="36.518555">Thread-0</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="97" textLength="181.58643">        at java.lang.Object.wait(Object.java:429)</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="108" textLength="184.57471">        at Event.waitForEvent(oldclassic.java:37)</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="119" textLength="27.505371">         ..</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="130" textLength="126.140625">========================</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#7e7e7e" x="0" y="142" textLength="114.49707">  1 Error Found: Deadlock</tspan></text><g filter="url(#Shadow_2)"><path d="M 30.1245 156.971 L 226.4705 156.971 C 233.09792 156.971 238.4705 162.34358 238.4705 168.971 L 238.4705 349.105 C 238.4705 355.73242 233.09792 361.105 226.4705 361.105 L 30.1245 361.105 C 23.497083 361.105 18.1245 355.73242 18.1245 349.105 L 18.1245 168.971 C 18.1245 162.34358 23.497083 156.971 30.1245 156.971 Z" fill="#ffd3db"/><path d="M 30.1245 156.971 L 226.4705 156.971 C 233.09792 156.971 238.4705 162.34358 238.4705 168.971 L 238.4705 349.105 C 238.4705 355.73242 233.09792 361.105 226.4705 361.105 L 30.1245 361.105 C 23.497083 361.105 18.1245 355.73242 18.1245 349.105 L 18.1245 168.971 C 18.1245 162.34358 23.497083 156.971 30.1245 156.971 Z" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 146.022 97.9336 L 482.417 97.9336 C 489.04442 97.9336 494.417 103.30618 494.417 109.9336 L 494.417 422.0106 C 494.417 428.63802 489.04442 434.0106 482.417 434.0106 L 146.022 434.0106 C 139.39458 434.0106 134.022 428.63802 134.022 422.0106 L 134.022 109.9336 C 134.022 103.30618 139.39458 97.9336 146.022 97.9336 Z" fill="#fffbbf" fill-opacity=".57"/><path d="M 146.022 97.9336 L 482.417 97.9336 C 489.04442 97.9336 494.417 103.30618 494.417 109.9336 L 494.417 422.0106 C 494.417 428.63802 489.04442 434.0106 482.417 434.0106 L 146.022 434.0106 C 139.39458 434.0106 134.022 428.63802 134.022 422.0106 L 134.022 109.9336 C 134.022 103.30618 139.39458 97.9336 146.022 97.9336 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow_2)"><path d="M 271.936 111.498 L 305.1668 111.498 C 311.79422 111.498 317.1668 116.87058 317.1668 123.498 L 317.1668 396.268 C 317.1668 402.89542 311.79422 408.268 305.1668 408.268 L 271.936 408.268 C 265.30858 408.268 259.936 402.89542 259.936 396.268 L 259.936 123.498 C 259.936 116.87058 265.30858 111.498 271.936 111.498 Z" fill="white"/><path d="M 271.936 111.498 L 305.1668 111.498 C 311.79422 111.498 317.1668 116.87058 317.1668 123.498 L 317.1668 396.268 C 317.1668 402.89542 311.79422 408.268 305.1668 408.268 L 271.936 408.268 C 265.30858 408.268 259.936 402.89542 259.936 396.268 L 259.936 123.498 C 259.936 116.87058 265.30858 111.498 271.936 111.498 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(264.936 242.883)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="10.7775094" y="14" textLength="25.675781">JPF</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="7.667158" y="31" textLength="31.896484">Core</tspan></text></g><path d="M 346.726 196.737 L 410.101 196.737 C 414.976 196.737 414.976 196.737 414.976 198.91808 L 414.976 197.82754 C 417.4135 197.82754 417.4135 197.82754 417.4135 200.00862 L 417.4135 198.91808 C 419.851 198.91808 419.851 198.91808 419.851 201.09916 L 419.851 229.45322 C 419.851 231.6343 419.851 231.6343 414.976 231.6343 L 351.601 231.6343 C 346.726 231.6343 346.726 231.6343 346.726 230.54376 C 344.2885 230.54376 344.2885 230.54376 344.2885 229.45322 C 341.851 229.45322 341.851 229.45322 341.851 227.27214 L 341.851 198.91808 C 341.851 196.737 341.851 196.737 346.726 196.737 Z" fill="#fefff6"/><path d="M 346.726 196.737 L 410.101 196.737 C 414.976 196.737 414.976 196.737 414.976 198.91808 L 414.976 227.27214 C 414.976 229.45322 414.976 229.45322 410.101 229.45322 L 346.726 229.45322 C 341.851 229.45322 341.851 229.45322 341.851 227.27214 L 341.851 198.91808 C 341.851 196.737 341.851 196.737 346.726 196.737 M 414.976 197.82754 C 417.4135 197.82754 417.4135 197.82754 417.4135 200.00862 L 417.4135 229.45322 C 417.4135 230.54376 417.4135 230.54376 412.5385 230.54376 L 349.1635 230.54376 C 344.2885 230.54376 344.2885 230.54376 344.2885 229.45322 M 417.4135 198.91808 C 419.851 198.91808 419.851 198.91808 419.851 201.09916 L 419.851 229.45322 C 419.851 231.6343 419.851 231.6343 414.976 231.6343 L 351.601 231.6343 C 346.726 231.6343 346.726 231.6343 346.726 230.54376" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.411 198.35354)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="3.9934375" y="11" textLength="48.703125">bytecode</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="20.341094" y="25" textLength="16.0078125">set</tspan></text><path d="M 346.726 284.892 L 410.101 284.892 C 414.976 284.892 414.976 284.892 414.976 287.07308 L 414.976 285.98254 C 417.4135 285.98254 417.4135 285.98254 417.4135 288.16362 L 417.4135 287.07308 C 419.851 287.07308 419.851 287.07308 419.851 289.25416 L 419.851 317.60822 C 419.851 319.7893 419.851 319.7893 414.976 319.7893 L 351.601 319.7893 C 346.726 319.7893 346.726 319.7893 346.726 318.69876 C 344.2885 318.69876 344.2885 318.69876 344.2885 317.60822 C 341.851 317.60822 341.851 317.60822 341.851 315.42714 L 341.851 287.07308 C 341.851 284.892 341.851 284.892 346.726 284.892 Z" fill="#fefff6"/><path d="M 346.726 284.892 L 410.101 284.892 C 414.976 284.892 414.976 284.892 414.976 287.07308 L 414.976 315.42714 C 414.976 317.60822 414.976 317.60822 410.101 317.60822 L 346.726 317.60822 C 341.851 317.60822 341.851 317.60822 341.851 315.42714 L 341.851 287.07308 C 341.851 284.892 341.851 284.892 346.726 284.892 M 414.976 285.98254 C 417.4135 285.98254 417.4135 285.98254 417.4135 288.16362 L 417.4135 317.60822 C 417.4135 318.69876 417.4135 318.69876 412.5385 318.69876 L 349.1635 318.69876 C 344.2885 318.69876 344.2885 318.69876 344.2885 317.60822 M 417.4135 287.07308 C 419.851 287.07308 419.851 287.07308 419.851 289.25416 L 419.851 317.60822 C 419.851 319.7893 419.851 319.7893 414.976 319.7893 L 351.601 319.7893 C 346.726 319.7893 346.726 319.7893 346.726 318.69876" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.411 286.50854)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="7.336211" y="11" textLength="42.017578">listener/</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.334258" y="25" textLength="44.021484">property</tspan></text><path d="M 346.726 240.755 L 410.101 240.755 C 414.976 240.755 414.976 240.755 414.976 242.93608 L 414.976 241.84554 C 417.4135 241.84554 417.4135 241.84554 417.4135 244.02662 L 417.4135 242.93608 C 419.851 242.93608 419.851 242.93608 419.851 245.11716 L 419.851 273.47122 C 419.851 275.6523 419.851 275.6523 414.976 275.6523 L 351.601 275.6523 C 346.726 275.6523 346.726 275.6523 346.726 274.56176 C 344.2885 274.56176 344.2885 274.56176 344.2885 273.47122 C 341.851 273.47122 341.851 273.47122 341.851 271.29014 L 341.851 242.93608 C 341.851 240.755 341.851 240.755 346.726 240.755 Z" fill="#fefff6"/><path d="M 346.726 240.755 L 410.101 240.755 C 414.976 240.755 414.976 240.755 414.976 242.93608 L 414.976 271.29014 C 414.976 273.47122 414.976 273.47122 410.101 273.47122 L 346.726 273.47122 C 341.851 273.47122 341.851 273.47122 341.851 271.29014 L 341.851 242.93608 C 341.851 240.755 341.851 240.755 346.726 240.755 M 414.976 241.84554 C 417.4135 241.84554 417.4135 241.84554 417.4135 244.02662 L 417.4135 273.47122 C 417.4135 274.56176 417.4135 274.56176 412.5385 274.56176 L 349.1635 274.56176 C 344.2885 274.56176 344.2885 274.56176 344.2885 273.47122 M 417.4135 242.93608 C 419.851 242.93608 419.851 242.93608 419.851 245.11716 L 419.851 273.47122 C 419.851 275.6523 419.851 275.6523 414.976 275.6523 L 351.601 275.6523 C 346.726 275.6523 346.726 275.6523 346.726 274.56176" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.411 242.37154)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="2.329375" y="11" textLength="55.365234">publisher/ </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="18.343047" y="25" textLength="20.003906">-ext</tspan></text><path d="M 346.726 110.242 L 410.101 110.242 C 414.976 110.242 414.976 110.242 414.976 112.42308 L 414.976 111.33254 C 417.4135 111.33254 417.4135 111.33254 417.4135 113.51362 L 417.4135 112.42308 C 419.851 112.42308 419.851 112.42308 419.851 114.60416 L 419.851 142.95822 C 419.851 145.1393 419.851 145.1393 414.976 145.1393 L 351.601 145.1393 C 346.726 145.1393 346.726 145.1393 346.726 144.04876 C 344.2885 144.04876 344.2885 144.04876 344.2885 142.95822 C 341.851 142.95822 341.851 142.95822 341.851 140.77714 L 341.851 112.42308 C 341.851 110.242 341.851 110.242 346.726 110.242 Z" fill="#fefff6"/><path d="M 346.726 110.242 L 410.101 110.242 C 414.976 110.242 414.976 110.242 414.976 112.42308 L 414.976 140.77714 C 414.976 142.95822 414.976 142.95822 410.101 142.95822 L 346.726 142.95822 C 341.851 142.95822 341.851 142.95822 341.851 140.77714 L 341.851 112.42308 C 341.851 110.242 341.851 110.242 346.726 110.242 M 414.976 111.33254 C 417.4135 111.33254 417.4135 111.33254 417.4135 113.51362 L 417.4135 142.95822 C 417.4135 144.04876 417.4135 144.04876 412.5385 144.04876 L 349.1635 144.04876 C 344.2885 144.04876 344.2885 144.04876 344.2885 142.95822 M 417.4135 112.42308 C 419.851 112.42308 419.851 112.42308 419.851 114.60416 L 419.851 142.95822 C 419.851 145.1393 419.851 145.1393 414.976 145.1393 L 351.601 145.1393 C 346.726 145.1393 346.726 145.1393 346.726 144.04876" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.411 111.85854)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="11.00125" y="11" textLength="34.6875">choice</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="2.6604297" y="25" textLength="51.36914">generator</tspan></text><path d="M 346.726 328.15 L 410.101 328.15 C 414.976 328.15 414.976 328.15 414.976 330.33108 L 414.976 329.24054 C 417.4135 329.24054 417.4135 329.24054 417.4135 331.42162 L 417.4135 330.33108 C 419.851 330.33108 419.851 330.33108 419.851 332.51216 L 419.851 360.86622 C 419.851 363.0473 419.851 363.0473 414.976 363.0473 L 351.601 363.0473 C 346.726 363.0473 346.726 363.0473 346.726 361.95676 C 344.2885 361.95676 344.2885 361.95676 344.2885 360.86622 C 341.851 360.86622 341.851 360.86622 341.851 358.68514 L 341.851 330.33108 C 341.851 328.15 341.851 328.15 346.726 328.15 Z" fill="#fefff6"/><path d="M 346.726 328.15 L 410.101 328.15 C 414.976 328.15 414.976 328.15 414.976 330.33108 L 414.976 358.68514 C 414.976 360.86622 414.976 360.86622 410.101 360.86622 L 346.726 360.86622 C 341.851 360.86622 341.851 360.86622 341.851 358.68514 L 341.851 330.33108 C 341.851 328.15 341.851 328.15 346.726 328.15 M 414.976 329.24054 C 417.4135 329.24054 417.4135 329.24054 417.4135 331.42162 L 417.4135 360.86622 C 417.4135 361.95676 417.4135 361.95676 412.5385 361.95676 L 349.1635 361.95676 C 344.2885 361.95676 344.2885 361.95676 344.2885 360.86622 M 417.4135 330.33108 C 419.851 330.33108 419.851 330.33108 419.851 332.51216 L 419.851 360.86622 C 419.851 363.0473 419.851 363.0473 414.976 363.0473 L 351.601 363.0473 C 346.726 363.0473 346.726 363.0473 346.726 361.95676" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.411 329.76654)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="2.6721484" y="11" textLength="51.345703">serializer/</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="7.673125" y="25" textLength="41.34375">restorer</tspan></text><path d="M 154.52 285.36 L 217.895 285.36 C 222.77 285.36 222.77 285.36 222.77 287.54108 L 222.77 286.45054 C 225.2075 286.45054 225.2075 286.45054 225.2075 288.63162 L 225.2075 287.54108 C 227.645 287.54108 227.645 287.54108 227.645 289.72216 L 227.645 318.07622 C 227.645 320.2573 227.645 320.2573 222.77 320.2573 L 159.395 320.2573 C 154.52 320.2573 154.52 320.2573 154.52 319.16676 C 152.0825 319.16676 152.0825 319.16676 152.0825 318.07622 C 149.645 318.07622 149.645 318.07622 149.645 315.89514 L 149.645 287.54108 C 149.645 285.36 149.645 285.36 154.52 285.36 Z" fill="#fefff6"/><path d="M 154.52 285.36 L 217.895 285.36 C 222.77 285.36 222.77 285.36 222.77 287.54108 L 222.77 315.89514 C 222.77 318.07622 222.77 318.07622 217.895 318.07622 L 154.52 318.07622 C 149.645 318.07622 149.645 318.07622 149.645 315.89514 L 149.645 287.54108 C 149.645 285.36 149.645 285.36 154.52 285.36 M 222.77 286.45054 C 225.2075 286.45054 225.2075 286.45054 225.2075 288.63162 L 225.2075 318.07622 C 225.2075 319.16676 225.2075 319.16676 220.3325 319.16676 L 156.9575 319.16676 C 152.0825 319.16676 152.0825 319.16676 152.0825 318.07622 M 225.2075 287.54108 C 227.645 287.54108 227.645 287.54108 227.645 289.72216 L 227.645 318.07622 C 227.645 320.2573 227.645 320.2573 222.77 320.2573 L 159.395 320.2573 C 154.52 320.2573 154.52 320.2573 154.52 319.16676" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(156.205 293.97654)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".31960937" y="11" textLength="56.05078">annotation</tspan></text><line x1="249.343" y1="60.98" x2="249.343" y2="410.723" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="10,3,2,3"/><text transform="translate(130.465 327.122)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".47558594" y="11" textLength="106.04883"> (optional) in-source</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="17.148438" y="25" textLength="72.703125">property spec</tspan></text><path d="M 155.56714 196.608 L 221.63501 196.608 C 226.71716 196.608 226.71716 196.608 226.71716 198.78908 L 226.71716 197.69854 C 229.25823 197.69854 229.25823 197.69854 229.25823 199.87962 L 229.25823 198.78908 C 231.7993 198.78908 231.7993 198.78908 231.7993 200.97016 L 231.7993 229.32422 C 231.7993 231.5053 231.7993 231.5053 226.71716 231.5053 L 160.64929 231.5053 C 155.56714 231.5053 155.56714 231.5053 155.56714 230.41476 C 153.02607 230.41476 153.02607 230.41476 153.02607 229.32422 C 150.485 229.32422 150.485 229.32422 150.485 227.14314 L 150.485 198.78908 C 150.485 196.608 150.485 196.608 155.56714 196.608 Z" fill="#fefff6"/><path d="M 155.56714 196.608 L 221.63501 196.608 C 226.71716 196.608 226.71716 196.608 226.71716 198.78908 L 226.71716 227.14314 C 226.71716 229.32422 226.71716 229.32422 221.63501 229.32422 L 155.56714 229.32422 C 150.485 229.32422 150.485 229.32422 150.485 227.14314 L 150.485 198.78908 C 150.485 196.608 150.485 196.608 155.56714 196.608 M 226.71716 197.69854 C 229.25823 197.69854 229.25823 197.69854 229.25823 199.87962 L 229.25823 229.32422 C 229.25823 230.41476 229.25823 230.41476 224.17608 230.41476 L 158.10822 230.41476 C 153.02607 230.41476 153.02607 230.41476 153.02607 229.32422 M 229.25823 198.78908 C 231.7993 198.78908 231.7993 198.78908 231.7993 200.97016 L 231.7993 229.32422 C 231.7993 231.5053 231.7993 231.5053 226.71716 231.5053 L 160.64929 231.5053 C 155.56714 231.5053 155.56714 231.5053 155.56714 230.41476" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(157.11129 198.22454)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.0831523" y="11" textLength="39.357422">domain</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="1.7569804" y="25" textLength="56.009766">framework</tspan></text><text transform="translate(172.599 163.656)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".158203125" y="11" textLength="32.683594">model</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".1640625" y="25" textLength="32.671875">library</tspan></text><g id="id267_Graphic"><path d="M 32.187544 235.617 L 102.98351 235.617 C 108.429356 235.617 108.429356 235.617 108.429356 238.3499 L 108.429356 236.98345 C 111.15228 236.98345 111.15228 236.98345 111.15228 239.71634 L 111.15228 238.3499 C 113.8752 238.3499 113.8752 238.3499 113.8752 241.08279 L 113.8752 276.6104 C 113.8752 279.3433 113.8752 279.3433 108.429356 279.3433 L 37.633388 279.3433 C 32.187544 279.3433 32.187544 279.3433 32.187544 277.97685 C 29.464622 277.97685 29.464622 277.97685 29.464622 276.6104 C 26.7417 276.6104 26.7417 276.6104 26.7417 273.87751 L 26.7417 238.3499 C 26.7417 235.617 26.7417 235.617 32.187544 235.617 Z" fill="white"/><path d="M 32.187544 235.617 L 102.98351 235.617 C 108.429356 235.617 108.429356 235.617 108.429356 238.3499 L 108.429356 273.87751 C 108.429356 276.6104 108.429356 276.6104 102.98351 276.6104 L 32.187544 276.6104 C 26.7417 276.6104 26.7417 276.6104 26.7417 273.87751 L 26.7417 238.3499 C 26.7417 235.617 26.7417 235.617 32.187544 235.617 M 108.429356 236.98345 C 111.15228 236.98345 111.15228 236.98345 111.15228 239.71634 L 111.15228 276.6104 C 111.15228 277.97685 111.15228 277.97685 105.706434 277.97685 L 34.910466 277.97685 C 29.464622 277.97685 29.464622 277.97685 29.464622 276.6104 M 111.15228 238.3499 C 113.8752 238.3499 113.8752 238.3499 113.8752 241.08279 L 113.8752 276.6104 C 113.8752 279.3433 113.8752 279.3433 108.429356 279.3433 L 37.633388 279.3433 C 32.187544 279.3433 32.187544 279.3433 32.187544 277.97685" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(33.48437 248.18452)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="red" x=".57964937" y="11" textLength="63.339844">application</tspan></text></g><line x1="122.237904" y1="240.46846" x2="153.34371" y2="230.27844" marker-start="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="122.17559" y1="275.74486" x2="150.254375" y2="285.63264" marker-start="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="341.351" y1="127.69064" x2="316.791" y2="127.69" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="341.851" y1="170.78465" x2="316.816" y2="170.46" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="341.851" y1="214.18565" x2="316.816" y2="214.088" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="341.3511" y1="258.1939" x2="316.816" y2="257.715" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="341.35102" y1="302.33574" x2="316.816" y2="302.095" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="341.35116" y1="345.5861" x2="316.816" y2="344.97" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="23.7492" y1="70.7573" x2="238.504" y2="70.7573" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="132.098" y="60.4708" width="34" height="16" fill="white"/><text transform="translate(137.098 60.4708)" fill="blue"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="13" textLength="23.841797">SuT</tspan></text><line x1="260.26599" y1="70.768543" x2="485.89801" y2="70.312557" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="304.843" y="53.864" width="82" height="32" fill="white"/><text transform="translate(309.843 53.864)" fill="blue"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="13" textLength="55.649902">execution</tspan><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="29" textLength="71.538086">environment</tspan></text><path d="M 346.569 372.698 L 409.944 372.698 C 414.819 372.698 414.819 372.698 414.819 374.87908 L 414.819 373.78854 C 417.2565 373.78854 417.2565 373.78854 417.2565 375.96962 L 417.2565 374.87908 C 419.694 374.87908 419.694 374.87908 419.694 377.06016 L 419.694 405.41422 C 419.694 407.5953 419.694 407.5953 414.819 407.5953 L 351.444 407.5953 C 346.569 407.5953 346.569 407.5953 346.569 406.50476 C 344.1315 406.50476 344.1315 406.50476 344.1315 405.41422 C 341.694 405.41422 341.694 405.41422 341.694 403.23314 L 341.694 374.87908 C 341.694 372.698 341.694 372.698 346.569 372.698 Z" fill="#fefff6"/><path d="M 346.569 372.698 L 409.944 372.698 C 414.819 372.698 414.819 372.698 414.819 374.87908 L 414.819 403.23314 C 414.819 405.41422 414.819 405.41422 409.944 405.41422 L 346.569 405.41422 C 341.694 405.41422 341.694 405.41422 341.694 403.23314 L 341.694 374.87908 C 341.694 372.698 341.694 372.698 346.569 372.698 M 414.819 373.78854 C 417.2565 373.78854 417.2565 373.78854 417.2565 375.96962 L 417.2565 405.41422 C 417.2565 406.50476 417.2565 406.50476 412.3815 406.50476 L 349.0065 406.50476 C 344.1315 406.50476 344.1315 406.50476 344.1315 405.41422 M 417.2565 374.87908 C 419.694 374.87908 419.694 374.87908 419.694 377.06016 L 419.694 405.41422 C 419.694 407.5953 419.694 407.5953 414.819 407.5953 L 351.444 407.5953 C 346.569 407.5953 346.569 407.5953 346.569 406.50476" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.254 374.31454)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.336211" y="11" textLength="36.017578">search</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="7.0022266" y="25" textLength="42.685547">strategy</tspan></text><line x1="341.19404" y1="390.13999" x2="316.659" y2="389.813" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(265.13 289.673)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="10.326172" y="11" textLength="25.347656">Java</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="6.995117" y="25" textLength="32.009766">virtual</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".32128906" y="39" textLength="45.357422">machine</tspan></text><path d="M 118.697 248.87425 L 168.44068 248.87425 L 168.44068 239.294 L 185.0219 258.4545 L 168.44068 277.615 L 168.44068 268.03475 L 118.697 268.03475 Z" fill="#ebe8ff"/><path d="M 118.697 248.87425 L 168.44068 248.87425 L 168.44068 239.294 L 185.0219 258.4545 L 168.44068 277.615 L 168.44068 268.03475 L 118.697 268.03475 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(123.348 250.672)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".1484375" y="11" textLength="48.703125">bytecode</tspan></text><text transform="translate(484.521 250.515)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".32617188" y="11" textLength="31.347656">report</tspan></text><text transform="translate(141.086 102.486)" fill="red"><tspan font-family="Helvetica" font-size="15" font-weight="500" fill="red" x="0" y="15" textLength="26.66748">JPF</tspan></text><line x1="627.333" y1="314.722" x2="627.333" y2="320.178" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="624.70977" y1="327.42927" x2="618.59018" y2="334.78068" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="613.34386" y1="341.08335" x2="607.2231" y2="348.43661" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="604.6" y1="355.688" x2="604.6" y2="361.143" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 597.527 364.956 C 594.45664 365.32263 591.13855 366.62494 588.315 366.056 C 585.49145 365.48706 582.53897 363.92343 580.584 361.542 C 578.62903 359.16057 576.91747 355.24282 576.584 351.766 C 576.25053 348.28918 577.16148 343.96717 578.583 340.679 C 580.00452 337.39083 582.44243 334.16829 585.114 332.035 C 587.78557 329.90171 591.53098 328.46127 594.614 327.878 C 597.69702 327.29473 600.5994 327.27322 603.614 328.535 C 605.1366 329.1723 606.66708 330.34182 608.19938 331.6403" marker-end="url(#FilledArrow_Marker_4)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="631.00532" y1="326.1034" x2="651.1297" y2="336.10659" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="652.24505" y1="341.1374" x2="635.57295" y2="362.0376" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="634.06917" y1="369.20604" x2="636.22385" y2="377.31395" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 651.872 350.006 C 649.0306 353.83895 644.38623 358.33382 643.347 361.506 C 642.30777 364.67818 643.85634 367.09003 645.636 369.041 C 647.41566 370.99197 651.09246 372.4959 654.026 373.213 C 656.95954 373.9301 660.37495 373.87278 663.239 373.344 C 666.10305 372.81522 669.20403 371.84615 671.212 370.04 C 673.21997 368.23385 675.44765 365.4452 675.288 362.506 C 675.12835 359.5668 672.3428 355.48602 670.254 352.403 C 669.2545 350.92772 668.0666 349.58246 666.82558 348.27392" marker-end="url(#FilledArrow_Marker_4)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="658.56888" y1="339.55327" x2="693.57913" y2="354.62173" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="628.534" y1="402.73847" x2="634.65403" y2="410.0915" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="646.02086" y1="402.73835" x2="639.9001" y2="410.09161" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="697.2711" y1="360.34232" x2="697.0259" y2="373.76468" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="696.951" y1="381.964" x2="696.951" y2="387.418" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="694.32786" y1="394.66935" x2="688.2071" y2="402.02261" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="682.9609" y1="408.32537" x2="676.84107" y2="415.6776" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="699.57414" y1="394.66935" x2="705.6949" y2="402.02261" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="627.333" cy="310.622" r="3.6000058" fill="yellow"/><circle cx="627.333" cy="310.622" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="627.333" cy="324.278" r="3.6000058" fill="yellow"/><circle cx="627.333" cy="324.278" r="3.6000058" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="615.967" cy="337.932" r="3.6000058" fill="white"/><circle cx="615.967" cy="337.932" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="604.6" cy="351.588" r="3.6000058" fill="white"/><circle cx="604.6" cy="351.588" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="604.6" cy="365.243" r="3.6000058" fill="blue"/><circle cx="604.6" cy="365.243" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="654.802" cy="337.932" r="3.6000058" fill="yellow"/><circle cx="654.802" cy="337.932" r="3.6000058" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="633.016" cy="365.243" r="3.6000058" fill="blue"/><circle cx="633.016" cy="365.243" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="697.346" cy="356.243" r="3.6000058" fill="yellow"/><circle cx="697.346" cy="356.243" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="637.277" cy="381.277" r="3.6000058" fill="white"/><circle cx="637.277" cy="381.277" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="648.644" cy="399.587" r="3.6000058" fill="white"/><circle cx="648.644" cy="399.587" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="625.911" cy="399.587" r="3.6000058" fill="white"/><circle cx="625.911" cy="399.587" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="637.277" cy="413.243" r="3.6000058" fill="white"/><circle cx="637.277" cy="413.243" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="696.951" cy="391.518" r="3.6000058" fill="white"/><circle cx="696.951" cy="391.518" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="708.318" cy="405.174" r="3.6000058" fill="white"/><circle cx="708.318" cy="405.174" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="685.584" cy="405.174" r="3.6000058" fill="white"/><circle cx="685.584" cy="405.174" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="674.218" cy="418.829" r="3.6000058" fill="white"/><circle cx="674.218" cy="418.829" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="696.951" cy="377.864" r="3.6000058" fill="red"/><circle cx="696.951" cy="377.864" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(581.584 332.815)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="2.0389578" y="11" textLength="20.021484">end</tspan></text><text transform="translate(645.152 355.212)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="1.5648078" y="11" textLength="26.021484">seen</tspan></text><text transform="translate(698.473 307.269)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="1.88925" y="11" textLength="52.6875">error-path</tspan></text><text transform="translate(703.341 369.88)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="6.2222578" y="11" textLength="47.35547">property </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="6.219328" y="25" textLength="44.027344">violation</tspan></text><path d="M 680.049 343.105 C 688.4935 338.63578 694.70723 336.80062 705.385 329.696 C 716.06277 322.59138 737.21352 311.11894 744.122 300.473 C 751.03048 289.82706 751.51837 281.20713 746.84 265.814 C 742.84603 252.67272 730.70992 233.928 720.8592 216.75722" marker-end="url(#FilledArrow_Marker_5)" stroke="#ff8987" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><line x1="618.13855" y1="341.41063" x2="630.84446" y2="361.76436" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="635.11422" y1="384.7611" x2="628.07376" y2="396.10288" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="639.4399" y1="384.76102" x2="646.4811" y2="396.10298" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 706.065 373.189 C 710.36857 367.52657 717.165 361.63612 718.977 356.2 C 720.789 350.76388 723.2802 345.6655 716.938 340.569 C 710.5958 335.4725 690.9995 330.71432 680.92 325.618 C 670.8405 320.52168 663.47663 316.3302 656.455 309.988 C 651.8553 305.83336 648.22683 300.7056 644.6155 295.56124" marker-end="url(#FilledArrow_Marker_5)" stroke="#ff8987" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(313.697 453.368)" fill="red"><tspan font-family="Helvetica" font-size="15" font-weight="500" fill="red" x="0" y="15" textLength="71.68213">host - JVM</tspan></text><line x1="429.938" y1="29.5677" x2="429.938" y2="410.892" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="10,3,2,3"/><rect x="225.929" y="30.9748" width="100" height="16" fill="white"/><text transform="translate(230.929 30.9748)" fill="blue"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="13" textLength="89.59082">JPF distribution</tspan></text><path d="M 437.51213 154.523 L 483.03984 154.523 C 486.54197 154.523 486.54197 154.523 486.54197 156.70408 L 486.54197 155.61354 C 488.29303 155.61354 488.29303 155.61354 488.29303 157.79462 L 488.29303 156.70408 C 490.0441 156.70408 490.0441 156.70408 490.0441 158.88516 L 490.0441 187.23922 C 490.0441 189.4203 490.0441 189.4203 486.54197 189.4203 L 441.01426 189.4203 C 437.51213 189.4203 437.51213 189.4203 437.51213 188.32976 C 435.76107 188.32976 435.76107 188.32976 435.76107 187.23922 C 434.01 187.23922 434.01 187.23922 434.01 185.05814 L 434.01 156.70408 C 434.01 154.523 434.01 154.523 437.51213 154.523 Z" fill="#fefff6"/><path d="M 437.51213 154.523 L 483.03984 154.523 C 486.54197 154.523 486.54197 154.523 486.54197 156.70408 L 486.54197 185.05814 C 486.54197 187.23922 486.54197 187.23922 483.03984 187.23922 L 437.51213 187.23922 C 434.01 187.23922 434.01 187.23922 434.01 185.05814 L 434.01 156.70408 C 434.01 154.523 434.01 154.523 437.51213 154.523 M 486.54197 155.61354 C 488.29303 155.61354 488.29303 155.61354 488.29303 157.79462 L 488.29303 187.23922 C 488.29303 188.32976 488.29303 188.32976 484.7909 188.32976 L 439.2632 188.32976 C 435.76107 188.32976 435.76107 188.32976 435.76107 187.23922 M 488.29303 156.70408 C 490.0441 156.70408 490.0441 156.70408 490.0441 158.88516 L 490.0441 187.23922 C 490.0441 189.4203 490.0441 189.4203 486.54197 189.4203 L 441.01426 189.4203 C 437.51213 189.4203 437.51213 189.4203 437.51213 188.32976" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(440.13068 163.13954)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="13.953601" y="11" textLength="10.001953">...</tspan></text><path d="M 346.726 153.336 L 410.101 153.336 C 414.976 153.336 414.976 153.336 414.976 155.51708 L 414.976 154.42654 C 417.4135 154.42654 417.4135 154.42654 417.4135 156.60762 L 417.4135 155.51708 C 419.851 155.51708 419.851 155.51708 419.851 157.69816 L 419.851 186.05222 C 419.851 188.2333 419.851 188.2333 414.976 188.2333 L 351.601 188.2333 C 346.726 188.2333 346.726 188.2333 346.726 187.14276 C 344.2885 187.14276 344.2885 187.14276 344.2885 186.05222 C 341.851 186.05222 341.851 186.05222 341.851 183.87114 L 341.851 155.51708 C 341.851 153.336 341.851 153.336 346.726 153.336 Z" fill="#fefff6"/><path d="M 346.726 153.336 L 410.101 153.336 C 414.976 153.336 414.976 153.336 414.976 155.51708 L 414.976 183.87114 C 414.976 186.05222 414.976 186.05222 410.101 186.05222 L 346.726 186.05222 C 341.851 186.05222 341.851 186.05222 341.851 183.87114 L 341.851 155.51708 C 341.851 153.336 341.851 153.336 346.726 153.336 M 414.976 154.42654 C 417.4135 154.42654 417.4135 154.42654 417.4135 156.60762 L 417.4135 186.05222 C 417.4135 187.14276 417.4135 187.14276 412.5385 187.14276 L 349.1635 187.14276 C 344.2885 187.14276 344.2885 187.14276 344.2885 186.05222 M 417.4135 155.51708 C 419.851 155.51708 419.851 155.51708 419.851 157.69816 L 419.851 186.05222 C 419.851 188.2333 419.851 188.2333 414.976 188.2333 L 351.601 188.2333 C 346.726 188.2333 346.726 188.2333 346.726 187.14276" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.411 154.95254)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="12.334258" y="11" textLength="32.021484">native</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="16.336211" y="25" textLength="24.017578">peer</tspan></text><path d="M 437.68213 285.265 L 483.20984 285.265 C 486.71197 285.265 486.71197 285.265 486.71197 287.44608 L 486.71197 286.35554 C 488.46303 286.35554 488.46303 286.35554 488.46303 288.53662 L 488.46303 287.44608 C 490.2141 287.44608 490.2141 287.44608 490.2141 289.62716 L 490.2141 317.98122 C 490.2141 320.1623 490.2141 320.1623 486.71197 320.1623 L 441.18426 320.1623 C 437.68213 320.1623 437.68213 320.1623 437.68213 319.07176 C 435.93107 319.07176 435.93107 319.07176 435.93107 317.98122 C 434.18 317.98122 434.18 317.98122 434.18 315.80014 L 434.18 287.44608 C 434.18 285.265 434.18 285.265 437.68213 285.265 Z" fill="#fefff6"/><path d="M 437.68213 285.265 L 483.20984 285.265 C 486.71197 285.265 486.71197 285.265 486.71197 287.44608 L 486.71197 315.80014 C 486.71197 317.98122 486.71197 317.98122 483.20984 317.98122 L 437.68213 317.98122 C 434.18 317.98122 434.18 317.98122 434.18 315.80014 L 434.18 287.44608 C 434.18 285.265 434.18 285.265 437.68213 285.265 M 486.71197 286.35554 C 488.46303 286.35554 488.46303 286.35554 488.46303 288.53662 L 488.46303 317.98122 C 488.46303 319.07176 488.46303 319.07176 484.9609 319.07176 L 439.4332 319.07176 C 435.93107 319.07176 435.93107 319.07176 435.93107 317.98122 M 488.46303 287.44608 C 490.2141 287.44608 490.2141 287.44608 490.2141 289.62716 L 490.2141 317.98122 C 490.2141 320.1623 490.2141 320.1623 486.71197 320.1623 L 441.18426 320.1623 C 437.68213 320.1623 437.68213 320.1623 437.68213 319.07176" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(440.30068 293.88154)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="13.953601" y="11" textLength="10.001953">...</tspan></text><path d="M 437.68213 242.749 L 483.20984 242.749 C 486.71197 242.749 486.71197 242.749 486.71197 244.93008 L 486.71197 243.83954 C 488.46303 243.83954 488.46303 243.83954 488.46303 246.02062 L 488.46303 244.93008 C 490.2141 244.93008 490.2141 244.93008 490.2141 247.11116 L 490.2141 275.46522 C 490.2141 277.6463 490.2141 277.6463 486.71197 277.6463 L 441.18426 277.6463 C 437.68213 277.6463 437.68213 277.6463 437.68213 276.55576 C 435.93107 276.55576 435.93107 276.55576 435.93107 275.46522 C 434.18 275.46522 434.18 275.46522 434.18 273.28414 L 434.18 244.93008 C 434.18 242.749 434.18 242.749 437.68213 242.749 Z" fill="#fefff6"/><path d="M 437.68213 242.749 L 483.20984 242.749 C 486.71197 242.749 486.71197 242.749 486.71197 244.93008 L 486.71197 273.28414 C 486.71197 275.46522 486.71197 275.46522 483.20984 275.46522 L 437.68213 275.46522 C 434.18 275.46522 434.18 275.46522 434.18 273.28414 L 434.18 244.93008 C 434.18 242.749 434.18 242.749 437.68213 242.749 M 486.71197 243.83954 C 488.46303 243.83954 488.46303 243.83954 488.46303 246.02062 L 488.46303 275.46522 C 488.46303 276.55576 488.46303 276.55576 484.9609 276.55576 L 439.4332 276.55576 C 435.93107 276.55576 435.93107 276.55576 435.93107 275.46522 M 488.46303 244.93008 C 490.2141 244.93008 490.2141 244.93008 490.2141 247.11116 L 490.2141 275.46522 C 490.2141 277.6463 490.2141 277.6463 486.71197 277.6463 L 441.18426 277.6463 C 437.68213 277.6463 437.68213 277.6463 437.68213 276.55576" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(440.30068 251.36554)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="13.953601" y="11" textLength="10.001953">...</tspan></text><path d="M 482.577 248.71725 L 532.32068 248.71725 L 532.32068 239.137 L 548.9019 258.2975 L 532.32068 277.458 L 532.32068 267.87775 L 482.577 267.87775 Z" fill="#ebe8ff"/><path d="M 482.577 248.71725 L 532.32068 248.71725 L 532.32068 239.137 L 548.9019 258.2975 L 532.32068 277.458 L 532.32068 267.87775 L 482.577 267.87775 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="439.75" y="31.1434" width="73" height="16" fill="white"/><text transform="translate(444.75 31.1434)" fill="blue"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="13" textLength="62.149902">extensions</tspan></text><g id="id10_Graphic"><path d="M 277.115 548.62458 L 277.115 511.94762 C 277.115 509.4169 287.67938 507.363 300.6962 507.363 C 313.71302 507.363 324.2774 509.4169 324.2774 511.94762 L 324.2774 548.62458 C 324.2774 551.1553 313.71302 553.2092 300.6962 553.2092 C 287.67938 553.2092 277.115 551.1553 277.115 548.62458" fill="white"/><path d="M 277.115 548.62458 L 277.115 511.94762 C 277.115 509.4169 287.67938 507.363 300.6962 507.363 C 313.71302 507.363 324.2774 509.4169 324.2774 511.94762 L 324.2774 548.62458 C 324.2774 551.1553 313.71302 553.2092 300.6962 553.2092 C 287.67938 553.2092 277.115 551.1553 277.115 548.62458 M 277.115 511.94762 C 277.115 514.47833 287.67938 516.53224 300.6962 516.53224 C 313.71302 516.53224 324.2774 514.47833 324.2774 511.94762" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(282.115 524.0784)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="6.5191883" y="14" textLength="24.124023">*.jpf</tspan></text></g><g id="id312_Graphic"><rect x="407.819" y="548.116" width="1.0188" height=".125" fill="white"/><rect x="407.819" y="548.116" width="1.0188" height=".125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 77.7265 380.014 L 77.7265 519.852 C 77.7265 527.584 83.994514 533.852 91.7265 533.852 L 257.324 533.852" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 422.082 415.5 L 421.1825 519.97253 C 421.11634 527.6572 414.86798 533.852 407.18302 533.852 L 344.365 533.852" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 336.8 397.341 L 336.8 401.679 C 336.8 409.41099 343.06801 415.679 350.8 415.679 L 473.80245 415.679 C 481.53444 415.679 487.80245 409.41099 487.80245 401.679 C 487.80245 401.41993 487.79526 401.16092 487.7809 400.90225 L 487.583 397.341" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><line x1="299.826" y1="501.253" x2="298.89868" y2="401.12458" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(327.878 553.383)" fill="blue"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="13" textLength="54.183594">JPF confi</tspan><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="54.183594" y="13" textLength="46.979004">guration</tspan></text><text transform="translate(496.924 250.84)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".32617188" y="11" textLength="31.347656">report</tspan></text><path d="M 139.874 445.218 L 99.1214 445.218 L 99.1214 291.09" marker-end="url(#FilledArrow_Marker_6)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 207.836 451.331 L 245.532 451.331 L 245.532 442.89" marker-end="url(#FilledArrow_Marker_6)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(202.648 452.006)" fill="blue"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="13" textLength="50.59082">standard</tspan><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="29" textLength="76.584473">Java libraries</tspan></text><g filter="url(#Shadow_2)"><path d="M 152.821 462.01758 L 152.821 425.34062 C 152.821 422.8099 163.38538 420.756 176.4022 420.756 C 189.41902 420.756 199.9834 422.8099 199.9834 425.34062 L 199.9834 462.01758 C 199.9834 464.5483 189.41902 466.6022 176.4022 466.6022 C 163.38538 466.6022 152.821 464.5483 152.821 462.01758" fill="white"/><path d="M 152.821 462.01758 L 152.821 425.34062 C 152.821 422.8099 163.38538 420.756 176.4022 420.756 C 189.41902 420.756 199.9834 422.8099 199.9834 425.34062 L 199.9834 462.01758 C 199.9834 464.5483 189.41902 466.6022 176.4022 466.6022 C 163.38538 466.6022 152.821 464.5483 152.821 462.01758 M 152.821 425.34062 C 152.821 427.87133 163.38538 429.92524 176.4022 429.92524 C 189.41902 429.92524 199.9834 427.87133 199.9834 425.34062" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(157.821 437.4714)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="6.1329578" y="14" textLength="24.896484">*.jar</tspan></text></g><g id="id320_Graphic"><path d="M 147.727 455.90558 L 147.727 419.22862 C 147.727 416.6979 158.29138 414.644 171.3082 414.644 C 184.32502 414.644 194.8894 416.6979 194.8894 419.22862 L 194.8894 455.90558 C 194.8894 458.4363 184.32502 460.4902 171.3082 460.4902 C 158.29138 460.4902 147.727 458.4363 147.727 455.90558" fill="white"/><path d="M 147.727 455.90558 L 147.727 419.22862 C 147.727 416.6979 158.29138 414.644 171.3082 414.644 C 184.32502 414.644 194.8894 416.6979 194.8894 419.22862 L 194.8894 455.90558 C 194.8894 458.4363 184.32502 460.4902 171.3082 460.4902 C 158.29138 460.4902 147.727 458.4363 147.727 455.90558 M 147.727 419.22862 C 147.727 421.75933 158.29138 423.81324 171.3082 423.81324 C 184.32502 423.81324 194.8894 421.75933 194.8894 419.22862" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(152.727 431.3594)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="6.1329578" y="14" textLength="24.896484">*.jar</tspan></text></g></g></g></svg>
diff --git a/doc/graphics/jpf-layers.svg b/doc/graphics/jpf-layers.svg
deleted file mode 100644 (file)
index ada4957..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="8 66 540 266" width="45pc" height="266pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-02 21:48:18 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="red"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-857.14286" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="576" height="734"/><g><title>Layer 1</title><g><xl:use xl:href="#id1_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id30_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id4_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id6_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id9_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id11_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id14_Graphic" filter="url(#Shadow)"/></g><g id="id1_Graphic"><rect x="100" y="281" width="287" height="34" fill="white"/><rect x="100" y="281" width="287" height="34" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(105 291)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="106.490234" y="11" textLength="64.01953">platform OS</tspan></text></g><g id="id30_Graphic"><path d="M 165 208 L 325 208 L 324 273 L 301 273 L 301 232 L 189 232 L 189 273 L 165 273 Z" fill="white"/><path d="M 165 208 L 325 208 L 324 273 L 301 273 L 301 232 L 189 232 L 189 273 L 165 273 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(217.5 213.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".4921875" y="11" textLength="50.015625">host JVM</tspan></text><g id="id4_Graphic"><path d="M 204 241 L 282 241 C 288 241 288 241 288 243.125 L 288 242.0625 C 291 242.0625 291 242.0625 291 244.1875 L 291 243.125 C 294 243.125 294 243.125 294 245.25 L 294 272.875 C 294 275 294 275 288 275 L 210 275 C 204 275 204 275 204 273.9375 C 201 273.9375 201 273.9375 201 272.875 C 198 272.875 198 272.875 198 270.75 L 198 243.125 C 198 241 198 241 204 241 Z" fill="white"/><path d="M 204 241 L 282 241 C 288 241 288 241 288 243.125 L 288 270.75 C 288 272.875 288 272.875 282 272.875 L 204 272.875 C 198 272.875 198 272.875 198 270.75 L 198 243.125 C 198 241 198 241 204 241 M 288 242.0625 C 291 242.0625 291 242.0625 291 244.1875 L 291 272.875 C 291 273.9375 291 273.9375 285 273.9375 L 207 273.9375 C 201 273.9375 201 273.9375 201 272.875 M 291 243.125 C 294 243.125 294 243.125 294 245.25 L 294 272.875 C 294 275 294 275 288 275 L 210 275 C 204 275 204 275 204 273.9375" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(204.92 242.215)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="20.029258" y="11" textLength="35.355469">native </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="15.034141" y="25" textLength="42.01172">libraries</tspan></text></g><rect x="100" y="228" width="287" height="18" fill="red" fill-opacity=".09"/><rect x="100" y="228" width="287" height="18" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id6_Graphic"><path d="M 204 167 L 282 167 C 288 167 288 167 288 169.125 L 288 168.0625 C 291 168.0625 291 168.0625 291 170.1875 L 291 169.125 C 294 169.125 294 169.125 294 171.25 L 294 198.875 C 294 201 294 201 288 201 L 210 201 C 204 201 204 201 204 199.9375 C 201 199.9375 201 199.9375 201 198.875 C 198 198.875 198 198.875 198 196.75 L 198 169.125 C 198 167 198 167 204 167 Z" fill="white"/><path d="M 204 167 L 282 167 C 288 167 288 167 288 169.125 L 288 196.75 C 288 198.875 288 198.875 282 198.875 L 204 198.875 C 198 198.875 198 198.875 198 196.75 L 198 169.125 C 198 167 198 167 204 167 M 288 168.0625 C 291 168.0625 291 168.0625 291 170.1875 L 291 198.875 C 291 199.9375 291 199.9375 285 199.9375 L 207 199.9375 C 201 199.9375 201 199.9375 201 198.875 M 291 169.125 C 294 169.125 294 169.125 294 171.25 L 294 198.875 C 294 201 294 201 288 201 L 210 201 C 204 201 204 201 204 199.9375" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(204.92 168.215)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="19.704062" y="11" textLength="36.00586">library </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="16.033164" y="25" textLength="40.013672">classes</tspan></text></g><path d="M 165 136 L 325 136 L 324 201 L 301 201 L 301 160 L 189 160 L 189 201 L 165 201 Z" fill="yellow"/><path d="M 165 136 L 325 136 L 324 201 L 301 201 L 301 160 L 189 160 L 189 201 L 165 201 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(179.5 140.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".14160156" y="11" textLength="118.7168">JPF (Java application)</tspan></text><g id="id9_Graphic"><path d="M 204 95 L 282 95 C 288 95 288 95 288 97.125 L 288 96.0625 C 291 96.0625 291 96.0625 291 98.1875 L 291 97.125 C 294 97.125 294 97.125 294 99.25 L 294 126.875 C 294 129 294 129 288 129 L 210 129 C 204 129 204 129 204 127.9375 C 201 127.9375 201 127.9375 201 126.875 C 198 126.875 198 126.875 198 124.75 L 198 97.125 C 198 95 198 95 204 95 Z" fill="white"/><path d="M 204 95 L 282 95 C 288 95 288 95 288 97.125 L 288 124.75 C 288 126.875 288 126.875 282 126.875 L 204 126.875 C 198 126.875 198 126.875 198 124.75 L 198 97.125 C 198 95 198 95 204 95 M 288 96.0625 C 291 96.0625 291 96.0625 291 98.1875 L 291 126.875 C 291 127.9375 291 127.9375 285 127.9375 L 207 127.9375 C 201 127.9375 201 127.9375 201 126.875 M 291 97.125 C 294 97.125 294 97.125 294 99.25 L 294 126.875 C 294 129 294 129 288 129 L 210 129 C 204 129 204 129 204 127.9375" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(204.92 96.215)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="13.024375" y="11" textLength="49.365234">modeled </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="16.033164" y="25" textLength="40.013672">classes</tspan></text></g><rect x="100" y="123" width="287" height="18" fill="red" fill-opacity=".2"/><rect x="100" y="123" width="287" height="18" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id11_Graphic"><path d="M 465 203.2 L 465 172.8 C 465 170.7024 475.528 169 488.5 169 C 501.472 169 512 170.7024 512 172.8 L 512 203.2 C 512 205.2976 501.472 207 488.5 207 C 475.528 207 465 205.2976 465 203.2" fill="white"/><path d="M 465 203.2 L 465 172.8 C 465 170.7024 475.528 169 488.5 169 C 501.472 169 512 170.7024 512 172.8 L 512 203.2 C 512 205.2976 501.472 207 488.5 207 C 475.528 207 465 205.2976 465 203.2 M 465 172.8 C 465 174.8976 475.528 176.6 488.5 176.6 C 501.472 176.6 512 174.8976 512 172.8" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(470 182.9)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.5" y="11" textLength="24">rt.jar</tspan></text></g><path d="M 464.51608 194.23311 C 443.01287 199.82151 425.91675 206.03935 400 211 C 374.08325 215.96065 330.83115 228.3329 309 224 C 291.02341 220.43213 284.5698 205.10993 275.4076 192.55293" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 464.5003 187.15195 C 425.33746 185.76811 380.41338 195.52407 347 183 C 316.59513 171.60358 295.70486 141.75243 271.34544 118.638844" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><g id="id14_Graphic"><path d="M 465 152.2 L 465 121.8 C 465 119.7024 475.528 118 488.5 118 C 501.472 118 512 119.7024 512 121.8 L 512 152.2 C 512 154.2976 501.472 156 488.5 156 C 475.528 156 465 154.2976 465 152.2" fill="white"/><path d="M 465 152.2 L 465 121.8 C 465 119.7024 475.528 118 488.5 118 C 501.472 118 512 119.7024 512 121.8 L 512 152.2 C 512 154.2976 501.472 156 488.5 156 C 475.528 156 465 154.2976 465 152.2 M 465 121.8 C 465 123.8976 475.528 125.6 488.5 125.6 C 501.472 125.6 512 123.8976 512 121.8" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 464.51156 142.2503 C 428.34466 150.166075 387.9154 172.37441 356 166 C 327.09537 160.22692 305.15832 131.006355 280.72651 110.193924" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(104.5 227.125)" fill="red"><tspan font-family="Helvetica" font-size="14" font-weight="bold" fill="red" x=".106933594" y="14" textLength="21.786133">JNI</tspan></text><text transform="translate(104.5 122.125)" fill="red"><tspan font-family="Helvetica" font-size="14" font-weight="bold" fill="red" x=".33105469" y="14" textLength="23.33789">MJI</tspan></text><text transform="translate(470.5 131.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".328125" y="11" textLength="35.34375">*.class</tspan></text><text transform="translate(439 95.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x=".14746094" y="11" textLength="94.70508">system under test</tspan></text><text transform="translate(450.5 212.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="1.8095703" y="11" textLength="78.714844">standard Java </tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="11.149414" y="25" textLength="56.701172">installation</tspan></text><text transform="translate(411.5 219.125) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".30761719" y="13" textLength="51.301758">CLASSP</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="50.65088" y="13" textLength="8.6708984">A</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="58.36328" y="13" textLength="17.329102">TH</tspan></text><line x1="57" y1="205" x2="366" y2="205" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,4,1,4"/><line x1="57" y1="132" x2="92" y2="132" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,4,1,4"/><line x1="138" y1="132" x2="365" y2="132" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,4,1,4"/><text transform="translate(54.5 75.125)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x=".31738281" y="14" textLength="72.365234">Model layer</tspan></text><text transform="translate(54.5 160.125)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x=".09667969" y="14" textLength="63.80664">Java layer</tspan></text><text transform="translate(54.5 256.125)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x=".041503906" y="14" textLength="73.91699">Native layer</tspan></text><text transform="translate(22.5 214.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x=".37890625" y="11" textLength="121.24219">&quot;Java Native Interface&quot;</tspan></text><text transform="translate(22.5 109.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x=".043945312" y="11" textLength="119.91211">&quot;Model Java Interface&quot;</tspan></text></g></g></svg>
diff --git a/doc/graphics/jpf-project.svg b/doc/graphics/jpf-project.svg
deleted file mode 100644 (file)
index 790b51b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="46 25 545 750" width="545pt" height="750pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2009-09-09 23:36:00 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1200" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Lucida Grande" font-size="10" panose-1="2 11 6 0 4 5 2 2 2 4" units-per-em="1000" underline-position="-97.65625" underline-thickness="48.828125" slope="0" x-height="530.27344" cap-height="722.65625" ascent="966.7969" descent="-210.9375" font-weight="500"><font-face-src><font-face-name name="LucidaGrande"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1200" x-height="539.55078" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="bold"><font-face-src><font-face-name name="Helvetica-BoldOblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-923.0769" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="red"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1090.9091" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="588.0188" height="768.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id111_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id106_Graphic" filter="url(#Shadow)"/></g><g id="id111_Graphic"><path d="M 68.5938 640.352 L 229.3748 640.352 C 232.68851 640.352 235.3748 643.0383 235.3748 646.352 L 235.3748 751.813 C 235.3748 755.1267 232.68851 757.813 229.3748 757.813 L 68.5938 757.813 C 65.28009 757.813 62.5938 755.1267 62.5938 751.813 L 62.5938 646.352 C 62.5938 643.0383 65.28009 640.352 68.5938 640.352 Z" fill="#ebffed"/><path d="M 68.5938 640.352 L 229.3748 640.352 C 232.68851 640.352 235.3748 643.0383 235.3748 646.352 L 235.3748 751.813 C 235.3748 755.1267 232.68851 757.813 229.3748 757.813 L 68.5938 757.813 C 65.28009 757.813 62.5938 755.1267 62.5938 751.813 L 62.5938 646.352 C 62.5938 643.0383 65.28009 640.352 68.5938 640.352 Z" stroke="#9cffb1" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id106_Graphic"><path d="M 69.335548 61.38315 L 186.93809 61.38416 C 190.2518 61.384188 192.93807 64.070502 192.93804 67.38421 C 192.93804 67.38427 192.93804 67.384327 192.93804 67.384385 L 192.93781 73.569708 C 192.93769 76.88329 190.25149 79.56943 186.93791 79.569483 L 97.390935 79.57095 C 94.077265 79.571007 91.391034 82.25728 91.391034 85.57095 L 91.391034 388.09394 C 91.391034 391.39507 94.057715 394.07612 97.35879 394.09386 L 226.37644 394.78716 C 229.67752 394.8049 232.3442 397.48595 232.3442 400.78708 L 232.3442 493.42925 C 232.3442 496.73035 229.67755 499.4114 226.3765 499.42916 L 97.358877 500.1237 C 94.057834 500.14146 91.39119 502.82248 91.391176 506.12357 L 91.39106 529.77343 C 91.391047 533.08714 94.077325 535.77345 97.391034 535.77346 C 97.391053 535.77346 97.39107 535.77346 97.39109 535.77346 L 199.82096 535.77296 C 203.13467 535.77295 205.82097 538.45923 205.82099 541.77294 C 205.82099 541.773 205.82099 541.77308 205.82099 541.77315 L 205.82084 546.65464 C 205.82074 549.95652 203.1528 552.6378 199.85096 552.65438 L 96.69789 553.1722 C 93.38422 553.18885 90.71145 555.8886 90.728084 559.20226 C 90.728193 559.22398 90.72842 559.2457 90.728765 559.26742 L 91.297165 595.05585 C 91.349097 598.3257 94.01001 600.95175 97.28028 600.96055 L 155.35214 601.11666 C 158.53473 601.1252 161.15693 603.61723 161.3274 606.79526 L 161.52812 610.5372 C 161.70561 613.84616 159.16706 616.67248 155.858105 616.84997 C 155.75109 616.8557 155.64393 616.85858 155.53676 616.85858 L 67.852627 616.85907 C 64.53892 616.8591 61.852612 614.1728 61.852594 610.8591 C 61.852594 610.85363 61.8526 610.84816 61.852616 610.8427 L 63.33552 67.36678 C 63.344543 64.059455 66.02821 61.383123 69.335548 61.38315 Z" fill="#fffbe6"/><path d="M 69.335548 61.38315 L 186.93809 61.38416 C 190.2518 61.384188 192.93807 64.070502 192.93804 67.38421 C 192.93804 67.38427 192.93804 67.384327 192.93804 67.384385 L 192.93781 73.569708 C 192.93769 76.88329 190.25149 79.56943 186.93791 79.569483 L 97.390935 79.57095 C 94.077265 79.571007 91.391034 82.25728 91.391034 85.57095 L 91.391034 388.09394 C 91.391034 391.39507 94.057715 394.07612 97.35879 394.09386 L 226.37644 394.78716 C 229.67752 394.8049 232.3442 397.48595 232.3442 400.78708 L 232.3442 493.42925 C 232.3442 496.73035 229.67755 499.4114 226.3765 499.42916 L 97.358877 500.1237 C 94.057834 500.14146 91.39119 502.82248 91.391176 506.12357 L 91.39106 529.77343 C 91.391047 533.08714 94.077325 535.77345 97.391034 535.77346 C 97.391053 535.77346 97.39107 535.77346 97.39109 535.77346 L 199.82096 535.77296 C 203.13467 535.77295 205.82097 538.45923 205.82099 541.77294 C 205.82099 541.773 205.82099 541.77308 205.82099 541.77315 L 205.82084 546.65464 C 205.82074 549.95652 203.1528 552.6378 199.85096 552.65438 L 96.69789 553.1722 C 93.38422 553.18885 90.71145 555.8886 90.728084 559.20226 C 90.728193 559.22398 90.72842 559.2457 90.728765 559.26742 L 91.297165 595.05585 C 91.349097 598.3257 94.01001 600.95175 97.28028 600.96055 L 155.35214 601.11666 C 158.53473 601.1252 161.15693 603.61723 161.3274 606.79526 L 161.52812 610.5372 C 161.70561 613.84616 159.16706 616.67248 155.858105 616.84997 C 155.75109 616.8557 155.64393 616.85858 155.53676 616.85858 L 67.852627 616.85907 C 64.53892 616.8591 61.852612 614.1728 61.852594 610.8591 C 61.852594 610.85363 61.8526 610.84816 61.852616 610.8427 L 63.33552 67.36678 C 63.344543 64.059455 66.02821 61.383123 69.335548 61.38315 Z" stroke="#fffbe6" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(86.8516 34.6328)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="24.438477">jpf-X</tspan></text><text transform="translate(122 91)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="16.516113">src</tspan></text><text transform="translate(122 253)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="26.27002">build</tspan></text><text transform="translate(122 226)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="43.403809">build.xml</tspan></text><text transform="translate(122 64)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="63.58838">jpf.properties</tspan></text><text transform="translate(140 397.094)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="bold" fill="blue" x="0" y="10" textLength="23.847656">X.jar</tspan></text><text transform="translate(140 415.094)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="bold" fill="blue" x="0" y="10" textLength="67.27295">X-classes.jar</tspan></text><text transform="translate(140 433.094)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="83.160645">X-annotations.jar</tspan></text><text transform="translate(149 109)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="23.842285">main</tspan></text><text transform="translate(149 127)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="27.516113">peers</tspan></text><text transform="translate(149 145)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="36.6792">classes</tspan></text><text transform="translate(149 163)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="56.879883">annotations</tspan></text><text transform="translate(149 181)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="23.22998">tests</tspan></text><text transform="translate(149 199)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="47.077637">examples</tspan></text><text transform="translate(122 460.094)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="12.831543">lib</tspan></text><text transform="translate(122 505.281)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="26.27539">tools</tspan></text><text transform="translate(122 583.438)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="16.494629">bin</tspan></text><text transform="translate(140 538.438)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="39.735352">RunJPF</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="blue" x="38.516113" y="10" textLength="15.280762">.jar</tspan></text><text transform="translate(140 556.438)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="51.970703">RunAnt.jar</tspan></text><text transform="translate(140 601.438)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="11.617676">jpf</tspan></text><text transform="translate(140 619.438)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="15.291504">ant</tspan></text><text transform="translate(122 646.438)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="45.251465">nbproject</tspan></text><text transform="translate(140 664.438)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="53.1792">project.xml</tspan></text><text transform="translate(140 682.438)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="23.842285">ide-fi</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="23.842285" y="10" textLength="66.016113">le-targets.xml</tspan></text><text transform="translate(122 704.983)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="49.526855">.classpath</tspan></text><line x1="99.348286" y1="47.6328" x2="99" y2="730.842" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="130.445744" y1="104" x2="129.591" y2="206.401" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144" y1="115.48059" x2="130.350046" y2="115.465" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.091" y1="133.637" x2="129.591" y2="133.674" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.091" y1="151.818" x2="129.591" y2="151.855" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.091" y1="170" x2="129.591" y2="170.037" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.091" y1="188.182" x2="129.591" y2="188.219" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.091" y1="206.364" x2="129.591" y2="206.401" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(149.091 271.09)" fill="#626262"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#626262" x="0" y="10" textLength="23.842285">main</tspan></text><text transform="translate(149.091 289.09)" fill="#626262"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#626262" x="0" y="10" textLength="27.516113">peers</tspan></text><text transform="translate(149.091 307.09)" fill="#626262"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#626262" x="0" y="10" textLength="36.6792">classes</tspan></text><text transform="translate(149.091 325.09)" fill="#626262"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#626262" x="0" y="10" textLength="56.879883">annotations</tspan></text><text transform="translate(149.091 343.09)" fill="#626262"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#626262" x="0" y="10" textLength="23.22998">tests</tspan></text><text transform="translate(149.091 361.09)" fill="#626262"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#626262" x="0" y="10" textLength="47.077637">examples</tspan></text><line x1="129.596" y1="266.09" x2="129.682" y2="368.491" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.091" y1="277.5711" x2="129.60563" y2="277.555" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.182" y1="295.727" x2="129.682" y2="295.764" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.182" y1="313.908" x2="129.682" y2="313.945" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.182" y1="332.09" x2="129.682" y2="332.127" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.182" y1="350.272" x2="129.682" y2="350.309" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.182" y1="368.454" x2="129.682" y2="368.491" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="117.091" y1="259.597" x2="99.5542" y2="259.652" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="117.182" y1="466.795" x2="99.6451" y2="466.85" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="117.182" y1="512.177" x2="99.6451" y2="512.232" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="117.182" y1="590.608" x2="99.6451" y2="590.663" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="117.182" y1="653.926" x2="99.6451" y2="653.981" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(122.091 723.075)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="34.240723">eclipse</tspan></text><line x1="117.273" y1="730.564" x2="99.736" y2="730.619" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(140.091 741.075)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="66.649902">run-jpf.launch</tspan></text><text transform="translate(250.984 58.6875)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="105.5957">JPF project properties fi</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="105.5957" y="10" textLength="7.783203">le</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="22" textLength="58.911133">(runtime def: </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="58.911133" y="22" textLength="74.492188">native_classpath</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="133.40332" y="22" textLength="5.5566406">, </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="138.95996" y="22" textLength="42.246094">classpath</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="181.20605" y="22" textLength="5.5566406">, </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="186.7627" y="22" textLength="49.47754">sourcepath</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="236.24023" y="22" textLength="3.3300781">)</tspan></text><text transform="translate(278.93 107.57)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="246.20117">host-VM executed classes (listeners, infrastructure etc.)</tspan></text><text transform="translate(279.023 125.664)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="229.52637">host-VM executed library classes (MJI native peers)</tspan></text><text transform="translate(279.117 144.258)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="135.60547">JPF executed library classes   </tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" fill="#20a356" x="135.60547" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="145.60547" y="10" textLength="49.47754">sourcepath</tspan></text><text transform="translate(279.211 161.852)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="145.08301">JPF processed Java annotations</tspan></text><text transform="translate(279.305 179.945)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="70.585938">regression tests</tspan></text><text transform="translate(279.398 198.539)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="35.57129">demos  </tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" fill="#20a356" x="35.57129" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="45.57129" y="10" textLength="49.47754">sourcepath</tspan></text><text transform="translate(251.641 225.133)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="71.694336">Ant build script (</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="red" x="71.694336" y="10" textLength="34.458008">compile</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="106.152344" y="10" textLength="5.5566406">, </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="red" x="111.708984" y="10" textLength="21.12793">build</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="132.836914" y="10" textLength="5.5566406">, </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="red" x="138.393555" y="10" textLength="16.118164">test</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="154.51172" y="10" textLength="5.5566406">, </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="red" x="160.06836" y="10" textLength="23.90625">clean</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="183.97461" y="10" textLength="3.3300781">)</tspan></text><text transform="translate(263.414 305.969)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="140.60059">temporary build artifacts (classfi</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="140.60059" y="10" textLength="16.113281">les)</tspan></text><text transform="translate(278.734 397.5)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="210.08789">main host-VM executed project jar (main,peers </tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" fill="#20a356" x="210.08789" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="220.08789" y="10" textLength="74.492188">native_classpath</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="294.58008" y="10" textLength="3.3300781">)</tspan></text><text transform="translate(278.828 415.594)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="201.75781">JPF executed library jar (classes,annotations </tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" fill="#20a356" x="201.75781" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="211.75781" y="10" textLength="42.246094">classpath</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="254.0039" y="10" textLength="3.3300781">)</tspan></text><text transform="translate(278.922 433.188)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="201.20117">separate anotations jar (for JPF external SUT</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="201.02539" y="10" textLength="27.231445"> exec)</tspan></text><text transform="translate(252.016 460.781)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="97.26074">required runtime jars  </tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" fill="#20a356" x="97.26074" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="107.26074" y="10" textLength="74.492188">native_classpath</tspan></text><text transform="translate(252.109 502.531)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="45.029297">build tools</tspan></text><text transform="translate(140.094 520.531)" fill="#404040"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="0" y="10" textLength="30.572266">ant.jar</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="29.970703" y="10" textLength="41.572266">, junit.jar</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="70.941406" y="10" textLength="15.280762">, ...</tspan></text><text transform="translate(140.188 477.898)" fill="#404040"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="0" y="10" textLength="35.45996">bcel.jar</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="34.858398" y="10" textLength="27.510742">, antlr</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="61.767578" y="10" textLength="15.280762">.jar</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="76.446777" y="10" textLength="12.2246094">, ..</tspan></text><text transform="translate(279.203 478.375)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="105.59082">(example) 3rd party jars</tspan></text><text transform="translate(250.531 253.578)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="58.916016">build artifacts</tspan></text><text transform="translate(264.836 379.477)" fill="blue"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="bold" fill="blue" x="0" y="10" textLength="119.46777">permanent build artifacts</tspan></text><text transform="translate(278.539 521.195)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="105.59082">(example) 3rd party jars</tspan></text><text transform="translate(278.539 537.391)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="122.82715">JPF startup jar (executable)</tspan></text><text transform="translate(278.633 555.484)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="113.38379">JPF build jar (executable)</tspan></text><text transform="translate(252.203 583.625)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="28.891602">scripts</tspan></text><text transform="translate(279.391 600.984)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="83.90625">JPF startup script (</tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" x="83.90625" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="93.90625" y="10" textLength="36.123047">RunJPF</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="128.9209" y="10" textLength="17.22168">.jar)</tspan></text><text transform="translate(279.485 619.077)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="74.46289">JPF build script (</tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" x="74.46289" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="84.46289" y="10" textLength="50.576172">RunAnt.jar)</tspan></text><text transform="translate(252.391 704.602)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="88.930664">Eclipse project confi</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="88.930664" y="10" textLength="36.137695">guration</tspan></text><line x1="117.185" y1="97.5308" x2="99.6479" y2="97.5858" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(250.625 91.5547)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="67.807617">project sources</tspan></text><text transform="translate(227.414 34.7109)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="91.14746">project root directory</tspan></text><text transform="translate(69.6719 415.508) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" x="0" y="13" textLength="101.88623">binary distribution</tspan></text><text transform="translate(252.484 663.562)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="100.61035">NetBeans project confi</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="100.61035" y="10" textLength="36.137695">guration</tspan></text><text transform="translate(252.578 681.656)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="51.694336">NetBeans fi</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="51.694336" y="10" textLength="115.04883">le actions (JPF execution)</tspan></text><text transform="translate(252.672 740.961)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="88.38379">Eclipse launch confi</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="88.38379" y="10" textLength="83.36426">gs (JPF execution)</tspan></text><text transform="translate(71.2344 731.805) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" x="0" y="13" textLength="68.643555">IDE support</tspan></text><path d="M 204.516 159.898 L 215.25 159.898 C 221.87742 159.898 227.25 165.27058 227.25 171.898 L 227.25 308.86879 C 227.25 315.4962 221.87742 320.86879 215.25 320.86879 C 215.13236 320.86879 215.01472 320.86706 214.89713 320.8636 L 211.37972 320.76012" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 231.134 319.703 L 241.868 319.703 C 248.49542 319.703 253.868 325.07558 253.868 331.703 L 253.868 401.31326 C 253.868 407.94068 248.49542 413.31326 241.868 413.31326 C 241.75051 413.31326 241.63303 413.31154 241.5156 413.3081 L 237.99773 413.20473" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(212.578 256.102) rotate(-90)" fill="red"><tspan font-family="Helvetica" font-size="11" font-style="italic" font-weight="500" fill="red" x="0" y="10" textLength="37.903809">compile</tspan></text><text transform="translate(239.586 371.32) rotate(-90)" fill="red"><tspan font-family="Helvetica" font-size="11" font-style="italic" font-weight="500" fill="red" x="0" y="10" textLength="23.240723">build</tspan></text><path d="M 198.548 409.218 L 209.282 409.218 C 215.90942 409.218 221.282 403.84542 221.282 397.218 L 221.282 363.27672 C 221.282 356.78689 216.12235 351.473 209.63534 351.28192 L 205.41171 351.1575" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(207.5 387.266) rotate(-90)" fill="red"><tspan font-family="Helvetica" font-size="11" font-style="italic" font-weight="500" fill="red" x="0" y="10" textLength="17.72998">test</tspan></text></g></g></svg>
diff --git a/doc/graphics/listener-overview.svg b/doc/graphics/listener-overview.svg
deleted file mode 100644 (file)
index 8a58bd9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="63 56 639 340" width="639pt" height="340pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-02 07:42:37 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="gray" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><filter id="Shadow_2" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Courier" font-size="11" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Courier" font-size="11" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><font-face font-family="Apple Symbols" font-size="12" panose-1="2 0 0 0 0 0 0 0 0 0" units-per-em="1000" underline-position="-73.242188" underline-thickness="48.828125" slope="0" x-height="392.57812" cap-height="546.38672" ascent="666.5039" descent="-250" font-weight="500"><font-face-src><font-face-name name="AppleSymbols"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id25_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id26_Graphic" filter="url(#Shadow)"/></g><g filter="url(#Shadow_2)"><path d="M 107.658 161.374 L 226.991 161.374 C 229.75242 161.374 231.991 163.61258 231.991 166.374 L 231.991 337.001 C 231.991 339.76242 229.75242 342.001 226.991 342.001 L 107.658 342.001 C 104.896576 342.001 102.658 339.76242 102.658 337.001 L 102.658 166.374 C 102.658 163.61258 104.896576 161.374 107.658 161.374 Z" fill="#ffffcd"/><path d="M 107.658 161.374 L 226.991 161.374 C 229.75242 161.374 231.991 163.61258 231.991 166.374 L 231.991 337.001 C 231.991 339.76242 229.75242 342.001 226.991 342.001 L 107.658 342.001 C 104.896576 342.001 102.658 339.76242 102.658 337.001 L 102.658 166.374 C 102.658 163.61258 104.896576 161.374 107.658 161.374 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_2)"><rect x="122.867" y="292.563" width="90" height="36" fill="white"/><rect x="122.867" y="292.563" width="90" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(127.867 303.563)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="19.987305" y="11" textLength="40.02539">Search</tspan></text></g><g filter="url(#Shadow_2)"><rect x="122.867" y="175.926" width="90" height="36" fill="white"/><rect x="122.867" y="175.926" width="90" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(127.867 186.926)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="31" y="11" textLength="18">VM</tspan></text></g><text transform="translate(119.191 239.52)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x=".49609375" y="11" textLength="22.007812">JPF</tspan></text><line x1="75.175" y1="136.649" x2="404.976" y2="136.649" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="8,4,1,4"/><rect x="106.7" y="74.525" width="121.25" height="36" fill="#ffe2dc"/><rect x="106.7" y="74.525" width="121.25" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(111.7 85.525)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="7.270508" y="11" textLength="96.708984">System under test</tspan></text><path d="M 274.98012 238.271 L 373.49575 238.271 C 381.07388 238.271 381.07388 238.271 381.07388 240.08095 L 381.07388 239.17598 C 384.86294 239.17598 384.86294 239.17598 384.86294 240.98592 L 384.86294 240.08095 C 388.652 240.08095 388.652 240.08095 388.652 241.8909 L 388.652 265.42025 C 388.652 267.2302 388.652 267.2302 381.07388 267.2302 L 282.55825 267.2302 C 274.98012 267.2302 274.98012 267.2302 274.98012 266.32522 C 271.19106 266.32522 271.19106 266.32522 271.19106 265.42025 C 267.402 265.42025 267.402 265.42025 267.402 263.6103 L 267.402 240.08095 C 267.402 238.271 267.402 238.271 274.98012 238.271 Z" fill="#bfffbe"/><path d="M 274.98012 238.271 L 373.49575 238.271 C 381.07388 238.271 381.07388 238.271 381.07388 240.08095 L 381.07388 263.6103 C 381.07388 265.42025 381.07388 265.42025 373.49575 265.42025 L 274.98012 265.42025 C 267.402 265.42025 267.402 265.42025 267.402 263.6103 L 267.402 240.08095 C 267.402 238.271 267.402 238.271 274.98012 238.271 M 381.07388 239.17598 C 384.86294 239.17598 384.86294 239.17598 384.86294 240.98592 L 384.86294 265.42025 C 384.86294 266.32522 384.86294 266.32522 377.28481 266.32522 L 278.76919 266.32522 C 271.19106 266.32522 271.19106 266.32522 271.19106 265.42025 M 384.86294 240.08095 C 388.652 240.08095 388.652 240.08095 388.652 241.8909 L 388.652 265.42025 C 388.652 267.2302 388.652 267.2302 381.07388 267.2302 L 282.55825 267.2302 C 274.98012 267.2302 274.98012 267.2302 274.98012 266.32522" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(274.827 244.23024)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="22.154688" y="11" textLength="49.359375">listeners</tspan></text><path d="M 213.367 193.9258 L 328.404 193.881 L 328.11532 227.87138" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 213.367 310.563 L 328.993 310.563 L 328.25879 277.62762" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="266.902" y1="252.75231" x2="222.76794" y2="252.90316" marker-end="url(#Arrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="167.867" y1="292.063" x2="167.867" y2="221.826" marker-end="url(#Arrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="167.867" y1="175.926" x2="167.50956" y2="120.92478" marker-end="url(#Arrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(283.027 113.374)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x=".31054688" y="11" textLength="89.378906">executed by JPF</tspan></text><text transform="translate(268.418 144.524)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x=".46972656" y="11" textLength="118.06055">executed by host JVM</tspan></text><text transform="translate(260.108 312.942)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="97.38867">search event notifi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="97.38867" y="11" textLength="38.021484">cations</tspan></text><text transform="translate(252.61 176.262)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="112.740234">execution event notifi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="112.740234" y="11" textLength="38.021484">cations</tspan></text><text transform="translate(402.525 247.554)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x=".48046875" y="11" textLength="25.347656">confi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="25.828125" y="11" textLength="30.691406">gured</tspan></text><text transform="translate(417.247 65.978)" fill="blue"><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="118.819336">- classLoaded (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="23" textLength="145.22363">- threadScheduled (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="36" textLength="138.62256">- threadNotified (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="49" textLength="33.005371">  ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="62" textLength="13.2021484">- </tspan><tspan font-family="Courier" font-size="11" font-weight="bold" fill="blue" x="13.2021484" y="62" textLength="118.819336">executeInstruction</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="132.021484" y="62" textLength="33.005371"> (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="75" textLength="13.2021484">- </tspan><tspan font-family="Courier" font-size="11" font-weight="bold" fill="blue" x="13.2021484" y="75" textLength="125.42041">instructionExecuted</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="138.62256" y="75" textLength="33.005371"> (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="88" textLength="33.005371">  ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="101" textLength="132.021484">- objectCreated (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="114" textLength="33.005371">  ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="127" textLength="138.62256">- exceptionThrown(vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="140" textLength="33.005371">  ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="153" textLength="198.03223">- choiceGeneratorAdvanced (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="166" textLength="33.005371">  ...</tspan></text><text transform="translate(353.977 331.014)" fill="blue"><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="158.42578">- stateAdvanced (search)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="23" textLength="178.229">- stateBacktracked (search)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="36" textLength="178.229">- propertyViolated (search)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="49" textLength="165.02686">- searchFinished (search)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="62" textLength="33.005371">  ...</tspan></text><text transform="translate(469.131 248.388)" fill="red"><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="10" textLength="184.83008">- +listener=&lt;listener-class&gt;</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="23" textLength="105.61719">- @JPFConfig(..)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="36" textLength="217.83545">- listener.autoload=&lt;annotations&gt;</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="49" textLength="138.62256">- jpf.addListener(..)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="62" textLength="33.005371">  ...</tspan></text><g id="id25_Graphic"><rect x="274.264" y="283.835" width="108.986" height="20.5102" fill="white"/><rect x="274.264" y="283.835" width="108.986" height="20.5102" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(279.264 286.5901)" fill="black"><tspan font-family="Apple Symbols" font-size="12" font-weight="500" x=".5291328" y="11" textLength="8.800781">≪</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="9.329914" y="11" textLength="80.71289">SearchListener</tspan><tspan font-family="Apple Symbols" font-size="12" font-weight="500" x="90.042805" y="11" textLength="8.4140625">≫</tspan></text></g><g id="id26_Graphic"><rect x="274.432" y="200.503" width="108.986" height="20.5102" fill="white"/><rect x="274.432" y="200.503" width="108.986" height="20.5102" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(279.432 203.2581)" fill="black"><tspan font-family="Apple Symbols" font-size="12" font-weight="500" x="10.539875" y="11" textLength="8.800781">≪</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="19.340656" y="11" textLength="60.691406">VMListener</tspan><tspan font-family="Apple Symbols" font-size="12" font-weight="500" x="80.032062" y="11" textLength="8.4140625">≫</tspan></text></g></g></g></svg>
diff --git a/doc/graphics/listeners.svg b/doc/graphics/listeners.svg
deleted file mode 100644 (file)
index 681d1ad..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="61 72 661 400" width="661pt" height="400pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2009-04-08 19:52:28 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="black"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker_2" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="gray"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id10_Graphic" filter="url(#Shadow)"/></g><g id="id10_Graphic"><rect x="166.578" y="85.4216" width="130.422" height="29.3676" fill="white"/><rect x="166.578" y="85.4216" width="130.422" height="29.3676" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(171.578 87.1054)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="35.47223" y="10" textLength="49.47754">«interface»</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="25.866273" y="23" textLength="68.689453">JPFListener</tspan></text></g><rect x="72" y="197" width="171" height="98" fill="white"/><rect x="72" y="197" width="171" height="98" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(77 197)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="121.37695">executeInstruction(vm)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="119.384766">instructionExecuted(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="87.375">threadStarted(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="53" textLength="89.373047">objectCreated(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="67" textLength="121.38867">choiceGeneratorSet(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="81" textLength="156.75">choiceGeneratorAdvanced(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="95" textLength="16.669922">. . .</tspan></text><rect x="72" y="171" width="171" height="26" fill="white"/><rect x="72" y="171" width="171" height="26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(77 171)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="55.76123" y="10" textLength="49.47754">«interface»</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="48.15918" y="23" textLength="64.68164">VMListener</tspan></text><rect x="261" y="197" width="135" height="84" fill="white"/><rect x="261" y="197" width="135" height="84" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(266 197)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="118.7168">searchStarted(search)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="94.04883">stateAdvanced(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="106.70508">stateBacktracked(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="53" textLength="52.02539">propertyV</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="51.814453" y="53" textLength="50.021484">iolated(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="67" textLength="96.035156">searchFinished(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="81" textLength="16.669922">. . .</tspan></text><rect x="261" y="171" width="135" height="26" fill="white"/><rect x="261" y="171" width="135" height="26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(266 171)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="37.76123" y="10" textLength="49.47754">«interface»</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="19.146484" y="23" textLength="86.70703">SearchListener</tspan></text><rect x="594" y="197" width="117" height="28" fill="white"/><rect x="594" y="197" width="117" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(599 197)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="94.6875">check(search,vm)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="100.03125">getErrorMessage()</tspan></text><rect x="594" y="171" width="117" height="26" fill="white"/><rect x="594" y="171" width="117" height="26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(599 171)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="28.76123" y="10" textLength="49.47754">«interface»</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="28.826172" y="23" textLength="49.347656">Property</tspan></text><rect x="594" y="284.737" width="117" height="28" fill="white"/><rect x="594" y="284.737" width="117" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(599 284.737)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="106.03711">check(search,vm) {}</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="16.669922">. . .</tspan></text><rect x="594" y="270.737" width="117" height="14" fill="white"/><rect x="594" y="270.737" width="117" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(599 270.737)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="6.4814453" y="11" textLength="94.03711">GenericProperty</tspan></text><rect x="180" y="373.263" width="171" height="42" fill="white"/><rect x="180" y="373.263" width="171" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(185 373.263)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="140.0625">instructionExecuted(vm) {}</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="130.06641">searchStarted(search) {}</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="16.669922">. . .</tspan></text><rect x="180" y="359.263" width="171" height="14" fill="white"/><rect x="180" y="359.263" width="171" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(185 359.263)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="34.489258" y="11" textLength="92.021484">ListenerAdapter</tspan></text><rect x="425.211" y="196.631" width="132.789" height="42" fill="white"/><rect x="425.211" y="196.631" width="132.789" height="42" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(430.211 196.631)" fill="#404040"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="#404040" x="0" y="11" textLength="120.058594">publishStart(publisher)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="#404040" x="0" y="25" textLength="98.04492">publishFinished(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="#404040" x="0" y="39" textLength="16.669922">. . .</tspan></text><rect x="425.211" y="170.631" width="132.789" height="26" fill="white"/><rect x="425.211" y="170.631" width="132.789" height="26" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(430.211 170.631)" fill="#404040"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#404040" x="36.65573" y="10" textLength="49.47754">«interface»</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="#404040" x="5.3818047" y="23" textLength="112.02539">PublisherExtension</tspan></text><rect x="477" y="419" width="153" height="42" fill="white"/><rect x="477" y="419" width="153" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(482 419)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="140.0625">instructionExecuted(vm) {}</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="130.06641">searchStarted(search) {}</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="16.669922">. . .</tspan></text><rect x="477" y="405" width="153" height="14" fill="white"/><rect x="477" y="405" width="153" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(482 405)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x=".8154297" y="11" textLength="141.36914">PropertyListenerAdapter</tspan></text><line x1="652.5" y1="270.737" x2="652.5" y2="238.5" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="198" y1="360" x2="198" y2="310.5" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="306" y1="362.211" x2="306" y2="294.711" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="189" y1="169.526" x2="189" y2="129.026" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="279" y1="169.526" x2="279" y2="129.026" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 342 360 L 342 333 L 445.578 333 L 445.578 252.722" marker-end="url(#UMLInheritance_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="540" y1="405" x2="540" y2="252.722" marker-end="url(#UMLInheritance_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 513 405 L 513 306 L 333 306 L 332.68563 294.70577" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="612" y1="405" x2="612" y2="328.5" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 495 405 L 495 324 L 225 324 L 224.78847 310.49834" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/doc/graphics/mji-call.svg b/doc/graphics/mji-call.svg
deleted file mode 100644 (file)
index d5db418..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="13 12 553 462" width="553pt" height="462pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2011-05-24 04:08:50 +0000</dc:date></metadata><defs><font-face font-family="Monaco" font-size="12" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><font-face font-family="Monaco" font-size="9" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-857.14286" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="588.0188" height="768.0188"/><g><title>Layer 1</title><text transform="translate(332 21.125)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="57.609375">package </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="57.609375" y="12" textLength="36.00586">x.y.z</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="93.615234" y="12" textLength="7.201172">;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="43.20703">class </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="43.20703" y="28" textLength="7.201172">C</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="50.408203" y="28" textLength="14.402344"> {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="44" textLength="36.00586">  ...</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="60" textLength="14.402344">  </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="14.402344" y="60" textLength="158.42578">native int foo (int p)</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="172.82812" y="60" textLength="7.201172">;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="76" textLength="7.201172">}</tspan></text><text transform="translate(84 352.125)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="43.20703">class </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="43.20703" y="12" textLength="79.21289">JPF_x_y_z_C</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="122.41992" y="12" textLength="14.402344"> {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="36.00586">  ...</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="44" textLength="14.402344">  </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="14.402344" y="44" textLength="432.0703">public static int foo__I__I (MJIEnv env, int thisRef, int p)</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="446.47266" y="44" textLength="14.402344"> {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="60" textLength="324.05273">    int d = env.getIntField(thisRef, &quot;data&quot;);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="76" textLength="43.20703">    ..</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="92" textLength="21.603516">  }</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="108" textLength="7.201172">}</tspan></text><text transform="translate(157 51.125)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="21.603516">...</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="122.41992">int a = c.foo(3);</tspan></text><text transform="translate(100 82.125)" fill="black"><tspan font-family="Monaco" font-size="9" font-weight="500" x="0" y="9" textLength="16.202637">...</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" x="0" y="21" textLength="37.806152">aload_1</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" x="0" y="33" textLength="37.806152">icont_3</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" x="0" y="45" textLength="86.41406">invokevirtual ..</tspan></text><text transform="translate(39 215.125)" fill="gray"><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="12" textLength="230.4375">executeMethod (ThreadInfo ti..){</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="28" textLength="216.03516">  MJIEnv env = ti.getMJIEnv();</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="44" textLength="237.63867">  Object[] args = getArguments();</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="60" textLength="28.804688">  ..</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="76" textLength="201.63281">  mth.invoke(peerCls, args);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="92" textLength="28.804688">  ..</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="108" textLength="7.201172">}</tspan></text><text transform="translate(328 198.125)" fill="gray"><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="12" textLength="108.01758">ClassInfo (..){</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="28" textLength="223.23633">  peerCls = loadNativePeer(..);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="44" textLength="28.804688">  ..</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="60" textLength="7.201172">}</tspan></text><rect x="314.25" y="168.5" width="103.75" height="14" fill="white"/><rect x="314.25" y="168.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(319.25 168.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="90.046875">executeMethod()</tspan></text><rect x="314.25" y="154.5" width="103.75" height="14" fill="white"/><rect x="314.25" y="154.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(319.25 154.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="41.34961">peerCls</tspan></text><rect x="314.25" y="140.5" width="103.75" height="14" fill="white"/><rect x="314.25" y="140.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(319.25 140.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="19.869141" y="11" textLength="54.01172">ClassInfo</tspan></text><rect x="186.25" y="187.5" width="103.75" height="14" fill="white"/><rect x="186.25" y="187.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(191.25 187.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="90.046875">executeMethod()</tspan></text><rect x="186.25" y="173.5" width="103.75" height="14" fill="white"/><rect x="186.25" y="173.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(191.25 173.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="46.02539">methods</tspan></text><rect x="186.25" y="159.5" width="103.75" height="14" fill="white"/><rect x="186.25" y="159.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(191.25 159.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="15.855469" y="11" textLength="62.039062">NativePeer</tspan></text><path d="M 323 53 C 308.0015 50.3336 291.9986 45.9999 278 45 C 264.0014 44.0001 250.6655 44.0003 239 47 C 230.64732 49.147832 223.66006 53.688744 216.57229 58.05222" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 175 89 C 170.0005 93.3329 164.6662 96.83385 160 102 C 157.38073 104.899905 154.97109 108.325474 152.59469 111.83394" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 139 136 C 127.0012 148.9987 119.3317 161.83465 103 175 C 86.6683 188.16535 53.49875 203.50115 41 215 C 28.50125 226.49885 25.50025 234.001 28 244 C 29.9417 251.7668 40.130086 259.93767 48.955984 268.04108" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 88 300 C 94.3327 309.3324 111.49955 319.6675 107 328 C 102.50045 336.3325 67.9993 342.3341 61 350 C 54.0007 357.6659 60.16715 366.83405 65 374 C 68.37733 379.00777 75.174067 383.2026 81.805417 387.43634" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="265.25" y="295.5" width="103.75" height="42" fill="white"/><rect x="265.25" y="295.5" width="103.75" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(270.25 295.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="65.35547">getXField(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="64.68164">setXField(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="10.001953">...</tspan></text><rect x="265.25" y="281.5" width="103.75" height="14" fill="white"/><rect x="265.25" y="281.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(270.25 281.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="54.041016">threadInfo</tspan></text><rect x="265.25" y="267.5" width="103.75" height="14" fill="white"/><rect x="265.25" y="267.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(270.25 267.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="25.86914" y="11" textLength="42.01172">MJIEnv</tspan></text><rect x="393.25" y="266.5" width="90" height="14" fill="white"/><rect x="393.25" y="266.5" width="90" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(398.25 266.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="19.347656">env</tspan></text><rect x="393.25" y="252.5" width="90" height="14" fill="white"/><rect x="393.25" y="252.5" width="90" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(398.25 252.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="9.0009766" y="11" textLength="61.998047">ThreadInfo</tspan></text><line x1="394" y1="275" x2="378.9" y2="275" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="314" y1="163" x2="298.9" y2="163" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 490 376 C 500.3323 365.0011 512.6675 354.9988 521 343 C 529.3325 331.0012 538.3335 317.332 540 304 C 541.6665 290.668 535.6662 273.9989 531 263 C 527.83756 255.54567 523.1433 250.53967 518.4748 245.49341" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 441 89 C 458.3316 96.9992 481.3345 102.6677 493 113 C 504.6655 123.3323 510.0001 135.16825 511 151 C 511.83488 164.21889 505.69802 181.85666 501.32146 198.37727" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(482 115.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="10.555176" y="14" textLength="24.889648">JPF</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="7.051758" y="31" textLength="31.896484">class</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".4243164" y="48" textLength="45.151367">loading</tspan></text><text transform="translate(28 157.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="19.555176" y="14" textLength="24.889648">JPF</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="8.6518555" y="31" textLength="46.69629">method</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".4794922" y="48" textLength="63.041016">invocation</tspan></text><path d="M 422 412 C 431.3324 409.6669 443.50065 409.16625 450 405 C 456.49935 400.83375 462.3332 393.49935 461 387 C 459.6668 380.50065 455.6653 373.9992 442 366 C 430.2377 359.11475 407.60562 350.7459 388.13989 342.8098" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(400 317.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="9.555176" y="14" textLength="24.889648">JPF</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="3.3208008" y="31" textLength="37.358398">object</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".21386719" y="48" textLength="43.572266">access</tspan></text><text transform="translate(82 22.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".4897461" y="14" textLength="112.02051">JPF (model) class</tspan></text><text transform="translate(307 445.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".21386719" y="14" textLength="106.572266">JVM (Java) class</tspan></text><line x1="24" y1="133" x2="541" y2="133" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="10,3,2,3"/><text transform="translate(109 301.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".41748047" y="14" textLength="52.910156">Java refl</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="53.327637" y="14" textLength="62.254883">ection call</tspan></text><text transform="translate(488 310.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".09667969" y="14" textLength="19.448242">refl</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="19.544922" y="14" textLength="37.358398">ection</tspan></text></g></g></svg>
diff --git a/doc/graphics/mji-functions.svg b/doc/graphics/mji-functions.svg
deleted file mode 100644 (file)
index bac9b5c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="20 17 583 414" width="583pt" height="414pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2011-05-24 04:01:26 +0000</dc:date></metadata><defs><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="SharpArrow_Marker" viewBox="-6 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M -5 0 L 3 3 L 0 0 L 0 0 L 3 -3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="SharpArrow_Marker_2" viewBox="-4 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 5 0 L -3 -3 L 0 0 L 0 0 L -3 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Monaco" font-size="12" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-857.14286" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><rect x="57" y="164" width="451" height="55" fill="red" fill-opacity=".11"/><rect x="57" y="164" width="451" height="55" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="288" y1="152.9" x2="288" y2="235" marker-start="url(#SharpArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="180" y1="155" x2="180" y2="228.1" marker-end="url(#SharpArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="37" y1="192" x2="540" y2="192" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="10,3,2,3"/><text transform="translate(34 259.494)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="43.20703">class </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="43.20703" y="12" textLength="122.41992">JPF_x_y_z_MyClass</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="165.62695" y="12" textLength="14.402344"> {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="144.02344">  public static int </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="44" textLength="43.20703">      </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="43.20703" y="44" textLength="331.2539">foo__ILjava_lang_String_2__Ljava_lang_String_2</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="374.46094" y="44" textLength="180.0293"> (MJIEnv env, int objRef,</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="60" textLength="518.48438">                                                      int i, int sRef) {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="76" textLength="295.24805">    String s = env.getStringObject(sRef);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="92" textLength="43.20703">    ..</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="108" textLength="230.4375">    int ref = env.newString(..);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="124" textLength="108.01758">    return ref;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="140" textLength="21.603516">  }</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="156" textLength="7.201172">}</tspan></text><text transform="translate(83 31.125)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="57.609375">package </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="57.609375" y="12" textLength="36.00586">x.y.z</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="93.615234" y="12" textLength="7.201172">;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="43.20703">class </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="43.20703" y="28" textLength="50.408203">MyClass</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="93.615234" y="28" textLength="14.402344"> {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="44" textLength="28.804688">  ..</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="60" textLength="115.21875">  native String </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="115.21875" y="60" textLength="21.603516">foo</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="136.822266" y="60" textLength="14.402344"> (</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="151.22461" y="60" textLength="21.603516">int</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="172.82812" y="60" textLength="28.804688"> i, </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="201.63281" y="60" textLength="43.20703">String</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="244.83984" y="60" textLength="28.804688"> s);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="76" textLength="7.201172">}</tspan></text><path d="M 252 174 L 321 174 C 323.76142 174 326 176.23858 326 179 L 326 203 C 326 205.76142 323.76142 208 321 208 L 252 208 C 249.23858 208 247 205.76142 247 203 L 247 179 C 247 176.23858 249.23858 174 252 174 Z" fill="white"/><path d="M 252 174 L 321 174 C 323.76142 174 326 176.23858 326 179 L 326 203 C 326 205.76142 323.76142 208 321 208 L 252 208 C 249.23858 208 247 205.76142 247 203 L 247 179 C 247 176.23858 249.23858 174 252 174 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(252 183)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="12.896484" y="12" textLength="43.20703">MJIEnv</tspan></text><text transform="translate(351 169.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".43115234" y="14" textLength="73.137695">JPF objects</tspan></text><text transform="translate(349 195.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".08984375" y="14" textLength="77.820312">Java objects</tspan></text><path d="M 143 174 L 222 174 C 224.76142 174 227 176.23858 227 179 L 227 203 C 227 205.76142 224.76142 208 222 208 L 143 208 C 140.23858 208 138 205.76142 138 203 L 138 179 C 138 176.23858 140.23858 174 143 174 Z" fill="white"/><path d="M 143 174 L 222 174 C 224.76142 174 227 176.23858 227 179 L 227 203 C 227 205.76142 224.76142 208 222 208 L 143 208 C 140.23858 208 138 205.76142 138 203 L 138 179 C 138 176.23858 140.23858 174 143 174 Z" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(143 183)" fill="gray"><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="3.4941406" y="12" textLength="72.01172">NativePeer</tspan></text><text transform="translate(363 46.2916)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".20019531" y="14" textLength="85.59961">JPF executed</tspan></text><text transform="translate(388 380.062)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".46923828" y="14" textLength="112.061523">host VM executed</tspan></text><text transform="translate(110 116.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="86.05078">- method lookup</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="25" textLength="123.38672">- parameter conversion</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="39" textLength="61.365234">- invocation</tspan></text><text transform="translate(299 225.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="13.330078">- fi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="13.330078" y="11" textLength="56.695312">eld access</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="25" textLength="100.716797">- object conversion</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="39" textLength="119.35547">- JPF intrinsics access</tspan></text><text transform="translate(257 26.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".0166015625" y="14" textLength="4.9697266">&quot;</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="4.986328" y="14" textLength="38.13086">Model</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="43.117188" y="14" textLength="43.86621">&quot; Class</tspan></text><text transform="translate(248 404.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".45458984" y="14" textLength="4.9697266">&quot;</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="5.4243164" y="14" textLength="69.254883">NativePeer</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="74.6792" y="14" textLength="43.86621">&quot; Class</tspan></text><text transform="translate(336 146.125)" fill="red"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="red" x=".0546875" y="14" textLength="174.89062">MJI - &quot;Model Java Interface&quot;</tspan></text></g></g></svg>
diff --git a/doc/graphics/mji-mangling.svg b/doc/graphics/mji-mangling.svg
deleted file mode 100644 (file)
index 7e59270..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="62 86 481 369" width="481pt" height="369pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-02 21:54:02 +0000</dc:date></metadata><defs><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="red"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="fuchsia"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_4" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#ff8000"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-857.14286" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="576" height="734"/><g><title>Layer 1</title><text transform="translate(76 177.125)" fill="black"><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="11" textLength="57.609375">package </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="57.609375" y="11" textLength="21.603516">x.y</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="79.21289" y="11" textLength="7.201172">;</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="39" textLength="43.20703">class </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="red" x="43.20703" y="39" textLength="50.408203">MyClass</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="93.615234" y="39" textLength="14.402344"> {</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="53" textLength="93.615234">  native int </tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="67" textLength="36.00586">     </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="purple" x="36.00586" y="67" textLength="21.603516">foo</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="57.609375" y="67" textLength="14.402344"> (</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="#ff8000" x="72.01172" y="67" textLength="108.01758">int i, String s</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="180.0293" y="67" textLength="14.402344">);</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="81" textLength="7.201172">}</tspan></text><text transform="translate(309 191.125)" fill="black"><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="11" textLength="72.01172">class JPF_</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="72.01172" y="11" textLength="21.603516">x_y</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="93.615234" y="11" textLength="7.201172">_</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="red" x="100.816406" y="11" textLength="50.408203">MyClass</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="151.22461" y="11" textLength="14.402344"> {</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="39" textLength="144.02344">  public static int </tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="53" textLength="28.804688">    </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="purple" x="28.804688" y="53" textLength="21.603516">foo</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="50.408203" y="53" textLength="165.62695">__ILjava_lang_String_2 </tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="67" textLength="208.83398">     (MJIEnv env, int objref,</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="81" textLength="43.20703">      </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="#ff8000" x="43.20703" y="81" textLength="108.01758">int i, int sRef</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="151.22461" y="81" textLength="7.201172">)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="95" textLength="57.609375">    {..}</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="109" textLength="7.201172">}</tspan></text><path d="M 148 176 C 168.6646 166.6676 188.16885 153.6661 210 148 C 231.83115 142.3339 256.83555 139.83355 279 142 C 301.16445 144.16645 325.0018 153.0008 343 161 C 357.56026 167.47123 367.7608 176.12565 378.89088 184.31325" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 161 202 C 170.6657 191.0011 177.3346 179.49895 190 169 C 202.6654 158.50105 220.0017 145.83265 237 139 C 253.9983 132.16735 274.50175 128.3333 292 128 C 309.49825 127.6667 325.6683 132.0005 342 137 C 358.3317 141.9995 375.83475 149.83415 390 158 C 401.11917 164.40987 409.98157 172.25904 419.24353 179.85215" marker-end="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 126 250 C 149.6643 256.666 172.6691 267.0003 197 270 C 221.3309 272.9997 249.83555 272.16625 272 268 C 290.619 264.50019 305.24373 256.05959 320.90548 248.90456" marker-end="url(#FilledArrow_Marker_3)" stroke="fuchsia" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 196 254 C 211.3318 260.3327 226.0016 268.83375 242 273 C 257.9984 277.16625 275.0017 279.49995 292 279 C 305.83104 278.5932 320.10685 274.87584 334.28319 271.88872" marker-end="url(#FilledArrow_Marker_4)" stroke="#ff8000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><line x1="288" y1="97" x2="288" y2="331" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="16,9,1,9"/><text transform="translate(144 103.125)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="0" y="14" textLength="77.027344">Model Class</tspan></text><text transform="translate(359 103.125)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="0" y="14" textLength="112.041016">Native Peer Class</tspan></text><text transform="translate(332 310.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="11" textLength="96.708984">model parameters</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="25" textLength="94.61133">(refs become &apos;int&apos;)</tspan></text><text transform="translate(384 346.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="11" textLength="83.35547">MJI parameters</tspan></text><path d="M 452 279 L 452 318 L 437 318" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 491 269 L 491 354 L 476 354" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 532 248 L 532 390 L 517 390" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(372 382.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="11" textLength="133.39453">JNI conformant mangling</tspan></text><text transform="translate(145 319.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x=".29101562" y="11" textLength="42.708984">boolean</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="20.318359" y="25" textLength="22.68164">byte</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="19.65625" y="39" textLength="23.34375">char</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="16.322266" y="53" textLength="26.677734">short</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="30.326172" y="67" textLength="12.673828">int</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="20.3125" y="81" textLength="22.6875">long</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="20.318359" y="95" textLength="6">fl</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="26.31836" y="95" textLength="16.681641">oat</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="6.9648438" y="109" textLength="36.035156">double</tspan></text><text transform="translate(201 320.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="7.330078">Z</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="8.0039062">B</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="8.6660156">C</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="53" textLength="8.0039062">S</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="67" textLength="3.3339844">I</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="81" textLength="6">J</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="95" textLength="7.330078">F</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="109" textLength="8.6660156">D</tspan></text><text transform="translate(257 336.125)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="21.603516">&apos;_&apos;</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="21.603516">&apos;;&apos;</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="21.603516">&apos;[&apos;</tspan></text><text transform="translate(291 337.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="13.347656">_1</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="13.347656">_2</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="13.347656">_3</tspan></text><text transform="translate(224 383.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="36.697266">&lt;type&gt;</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="36.697266" y="11" textLength="3.3339844"> </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="40.03125" y="11" textLength="14.402344">[]</tspan></text><text transform="translate(289 383.125)" fill="black"><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="11" textLength="7.201172">[</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="7.201172" y="11" textLength="36.697266">&lt;type&gt;</tspan></text><text transform="translate(250 400.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="15.333984">x.y</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="14.449219" y="11" textLength="10.6640625">.Z</tspan></text><text transform="translate(291 400.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="52.69922">Lx_y_Z_2</tspan></text><text transform="translate(224 417.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="36.697266">&lt;func&gt;</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="36.697266" y="11" textLength="17.994141"> (..)</tspan></text><text transform="translate(291 417.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="11" textLength="36.697266">&lt;func&gt;</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="36.697266" y="11" textLength="14.402344">__</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="51.09961" y="11" textLength="63.38086">&lt;signature&gt;</tspan></text></g></g></svg>
diff --git a/doc/graphics/new-testing.svg b/doc/graphics/new-testing.svg
deleted file mode 100644 (file)
index 4254ad1..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="10 15 718 319" width="718pt" height="319pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-05 00:34:03 +0000</dc:date></metadata><defs><font-face font-family="Courier" font-size="10" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><font-face font-family="Courier" font-size="10" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="black"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="756" height="553"/><g><title>Layer 1</title><text transform="translate(339.4 252.055)" fill="blue"><tspan font-family="Courier" font-size="10" font-weight="bold" fill="blue" x="0" y="10" textLength="30.004883">@Test</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="30.004883" y="10" textLength="78.012695"> public void </tspan><tspan font-family="Courier" font-size="10" font-weight="bold" fill="blue" x="108.01758" y="10" textLength="30.004883">testX</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="138.02246" y="10" textLength="24.003906">() {</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="22" textLength="216.03516">  if (verifyNoPropertyViolation()) {</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="34" textLength="24.003906">    </tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="red" x="24.003906" y="34" textLength="156.02539">String s = &quot;one&quot; + &quot; two&quot;;</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="red" x="0" y="46" textLength="186.03027">    assert &quot;one two&quot;.equals(s);</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="58" textLength="18.00293">  }</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="70" textLength="6.0009766">}</tspan></text><path d="M 361.58823 277.92 L 528.48 277.92 L 528.48 299.92 L 361.58823 299.92 Z" stroke="#fd7673" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 196.644 234.841 L 314.109 234.841 C 317.4227 234.841 320.109 237.52729 320.109 240.841 L 320.109 307.503 C 320.109 310.8167 317.4227 313.503 314.109 313.503 L 196.644 313.503 C 193.33029 313.503 190.644 310.8167 190.644 307.503 L 190.644 240.841 C 190.644 237.52729 193.33029 234.841 196.644 234.841 Z" fill="#e9ffe4"/><path d="M 196.644 234.841 L 314.109 234.841 C 317.4227 234.841 320.109 237.52729 320.109 240.841 L 320.109 307.503 C 320.109 310.8167 317.4227 313.503 314.109 313.503 L 196.644 313.503 C 193.33029 313.503 190.644 310.8167 190.644 307.503 L 190.644 240.841 C 190.644 237.52729 193.33029 234.841 196.644 234.841 Z" stroke="#aeffa8" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 85.6174 26.126 L 364.9384 26.126 C 368.2521 26.126 370.9384 28.812292 370.9384 32.126 L 370.9384 199.694 C 370.9384 203.00771 368.2521 205.694 364.9384 205.694 L 85.6174 205.694 C 82.30369 205.694 79.6174 203.00771 79.6174 199.694 L 79.6174 32.126 C 79.6174 28.812292 82.30369 26.126 85.6174 26.126 Z" fill="#fff8e0"/><path d="M 85.6174 26.126 L 364.9384 26.126 C 368.2521 26.126 370.9384 28.812292 370.9384 32.126 L 370.9384 199.694 C 370.9384 203.00771 368.2521 205.694 364.9384 205.694 L 85.6174 205.694 C 82.30369 205.694 79.6174 203.00771 79.6174 199.694 L 79.6174 32.126 C 79.6174 28.812292 82.30369 26.126 85.6174 26.126 Z" stroke="#ffcf9c" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(382.995 68.2183)" fill="blue"><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="10" textLength="48.007812">boolean </tspan><tspan font-family="Courier" font-size="10" font-weight="bold" fill="blue" x="48.007812" y="10" textLength="150.02441">verifyNoPropertyViolation</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="198.03223" y="10" textLength="132.021484"> (String... jpfArgs) {</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="22" textLength="30.004883">  ...</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="34" textLength="282.0459">  args = append(jpfArgs, caller.getClassName(),</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="46" textLength="294.04785">                         caller.getMethodName());</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="58" textLength="36.00586">    ..</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="70" textLength="216.03516">    JPF jpf = createAndRunJPF(args);</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="82" textLength="42.006836">    ...</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="94" textLength="210.03418">    errors = jpf.getSearchErrors();</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="106" textLength="156.02539">    if (!errors.isEmpty())</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="118" textLength="210.03418">      throw new AssertionError(..);</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="130" textLength="42.006836">    ...</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="142" textLength="276.04492">  return false; // -&gt; don&apos;t execute test block</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="154" textLength="6.0009766">}</tspan></text><text transform="translate(24.5953 63.4089)" fill="blue"><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="10" textLength="48.007812">boolean </tspan><tspan font-family="Courier" font-size="10" font-weight="bold" fill="blue" x="48.007812" y="10" textLength="150.02441">verifyNoPropertyViolation</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="198.03223" y="10" textLength="30.004883">(..){</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="22" textLength="84.01367">  return true;</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="34" textLength="6.0009766">}</tspan></text><rect x="251.28" y="45.6337" width="90" height="11" fill="white"/><rect x="251.28" y="45.6337" width="90" height="11" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(256.28 45.6337)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="23.497559">start()</tspan></text><rect x="251.28" y="34.6337" width="90" height="11" fill="white"/><rect x="251.28" y="34.6337" width="90" height="11" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(256.28 34.6337)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="bold" x="20.993652" y="9" textLength="38.012695">JPFShell</tspan></text><rect x="231.548" y="95.3416" width="129.465" height="88" fill="white"/><rect x="231.548" y="95.3416" width="129.465" height="88" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(236.548 95.3416)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="18.505371">runT</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="17.507812" y="9" textLength="71.507812">estsOfThisClass()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="20" textLength="79.532227">createAndRunJPF()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="31" textLength="7.501465">...</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="42" textLength="73.023926">verifyNoPropertyV</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="72.865723" y="42" textLength="34.514648">iolation()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="53" textLength="61.519043">verifyPropertyV</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="61.36084" y="53" textLength="34.514648">iolation()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="64" textLength="110.55762">verifyUnhandledException()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="75" textLength="85.012207">verifyAssertionError()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="86" textLength="7.501465">...</tspan></text><rect x="231.548" y="84.3416" width="129.465" height="11" fill="white"/><rect x="231.548" y="84.3416" width="129.465" height="11" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(236.548 84.3416)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="bold" x="42.558672" y="9" textLength="5.4975586">T</tspan><tspan font-family="Helvetica" font-size="9" font-weight="bold" x="47.392656" y="9" textLength="29.513672">estJPF</tspan></text><rect x="208.904" y="253.802" width="90" height="22" fill="white"/><rect x="208.904" y="253.802" width="90" height="22" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(213.904 253.802)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="26.503418">testX()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="20" textLength="7.501465">...</tspan></text><rect x="208.904" y="242.802" width="90" height="11" fill="white"/><rect x="208.904" y="242.802" width="90" height="11" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(213.904 242.802)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="bold" x="1.3193359" y="9" textLength="65.01709">MyJPFProjectT</tspan><tspan font-family="Helvetica" font-size="9" font-weight="bold" x="65.67285" y="9" textLength="13.0078125">est</tspan></text><line x1="296.28021" y1="84.3416" x2="296.28013" y2="70.1337" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="253.904" y1="242.802" x2="253.904" y2="196.842" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(96.2759 34.6337)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x=".32763672" y="10" textLength="33.344727">jpf-core</tspan></text><text transform="translate(202.017 293.506)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x=".20458984" y="10" textLength="80.59082">tested JPF project</tspan></text><rect x="87.5524" y="117.184" width="129.465" height="44" fill="white"/><rect x="87.5524" y="117.184" width="129.465" height="44" stroke="#4f4f4f" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(92.5524 117.184)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="73.023926">verifyNoPropertyV</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="72.865723" y="9" textLength="34.514648">iolation()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="20" textLength="61.519043">verifyPropertyV</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="61.36084" y="20" textLength="34.514648">iolation()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="31" textLength="110.55762">verifyUnhandledException()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="42" textLength="85.012207">verifyAssertionError()</tspan></text><rect x="87.5524" y="106.184" width="129.465" height="11" fill="white"/><rect x="87.5524" y="106.184" width="129.465" height="11" stroke="#4f4f4f" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(92.5524 106.184)" fill="#4f4f4f"><tspan font-family="Helvetica" font-size="9" font-weight="bold" fill="#4f4f4f" x="26.799883" y="9" textLength="37.015137">JPF_.._T</tspan><tspan font-family="Helvetica" font-size="9" font-weight="bold" fill="#4f4f4f" x="63.151445" y="9" textLength="29.513672">estJPF</tspan></text><line x1="217.0174" y1="133.75498" x2="231.548" y2="133.77092" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(127.285 89.2183)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x=".26123047" y="10" textLength="49.47754">native peer</tspan></text><text transform="translate(538.274 280.529)" fill="red"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="red" x=".20214844" y="10" textLength="45.576172">code verifi</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="red" x="45.77832" y="10" textLength="45.01953">ed by JPF</tspan></text><text transform="translate(39.189 166.149)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="11" textLength="121.40039">executed by JPF when</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="25" textLength="62.70703">running test</tspan></text><text transform="translate(355.357 34.6337)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="11" textLength="118.734375">executed outside JPF </tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="25" textLength="111.36914">(starting JPF on test)</tspan></text></g></g></svg>
diff --git a/doc/graphics/por-mark.svg b/doc/graphics/por-mark.svg
deleted file mode 100644 (file)
index f47b060..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="109 71 356 231" width="356pt" height="231pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-02 07:35:36 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 8 8" markerWidth="8" markerHeight="8" color="blue"><g><path d="M 5.5 0 L 0 -2.0625 L 0 2.0625 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -4 8 8" markerWidth="8" markerHeight="8" color="black"><g><path d="M 5.5 0 L 0 -2.0625 L 0 2.0625 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" viewBox="-1 -4 8 8" markerWidth="8" markerHeight="8" color="red"><g><path d="M 5.5 0 L 0 -2.0625 L 0 2.0625 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="576" height="734"/><g><title>Layer 1</title><g><xl:use xl:href="#id30_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id18_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id20_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id21_Graphic" filter="url(#Shadow)"/></g><path d="M 143.59697 197.31011 C 114.34375 186.125 126.0092 91.96476 172.67462 108.03125 C 177.00414 76.712532 231.26975 81.795915 230.91499 108.03125 C 264.94118 74.475928 308.42462 141.38457 279.25828 174.93989 C 314.25644 191.20838 278.81664 278.8608 250.09375 264.21875 C 247.79505 288.62357 196.44716 297.1639 191.94026 264.21875 C 162.86442 299.40259 102.23666 245.30548 143.59697 197.31011 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id30_Graphic"><circle cx="192" cy="105" r="9.0000144" fill="white"/><circle cx="192" cy="105" r="9.0000144" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><circle cx="191" cy="157" r="9.0000144" fill="white"/><circle cx="191" cy="157" r="9.0000144" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(188.8 150)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="8.0039062">X</tspan></text><circle cx="238" cy="163" r="9.0000144" fill="white"/><circle cx="238" cy="163" r="9.0000144" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(235.8 156)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="8.0039062">X</tspan></text><circle cx="193" cy="215" r="9.0000144" fill="white"/><circle cx="193" cy="215" r="9.0000144" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(190.8 208)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="6.673828">1</tspan></text><circle cx="215" cy="243" r="9.0000144" fill="white"/><circle cx="215" cy="243" r="9.0000144" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(212.8 236)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="8.0039062">X</tspan></text><circle cx="178" cy="258" r="9.0000144" fill="white"/><circle cx="178" cy="258" r="9.0000144" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(175.8 251)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="8.0039062">X</tspan></text><line x1="206.19382" y1="246.57008" x2="193.66406" y2="251.64973" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="230" cy="199" r="9.0000144" fill="white"/><circle cx="230" cy="199" r="9.0000144" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(227.8 192)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="6.673828">1</tspan></text><circle cx="251" cy="227" r="9.0000144" fill="white"/><circle cx="251" cy="227" r="9.0000144" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(248.8 220)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="6.673828">2</tspan></text><line x1="221.27816" y1="202.77161" x2="208.51399" y2="208.29126" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="198.86986" y1="222.47071" x2="204.55829" y2="229.71052" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="242.31658" y1="230.85931" x2="230.44564" y2="236.1353" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="224" cy="130" r="9.0000144" fill="white"/><circle cx="224" cy="130" r="9.0000144" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(221.8 123)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="8.0039062">X</tspan></text><line x1="199.48694" y1="110.849185" x2="210.68166" y2="119.595074" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="216.64689" y1="136.01617" x2="204.08037" y2="146.29784" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="227.71114" y1="138.747725" x2="231.39875" y2="147.43998" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id18_Graphic"><rect x="342.5" y="153.125" width="65" height="13" fill="white"/><rect x="342.5" y="153.125" width="65" height="13" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(347.5 153.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".29541016" y="10" textLength="34.22998">static fi</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="34.52539" y="10" textLength="20.179199">elds</tspan></text></g><path d="M 330.0725 188.69105 C 307.04069 182.125 316.2252 126.84966 352.9661 136.28125 C 356.37484 117.89607 399.09956 120.880195 398.82025 136.28125 C 425.60995 116.58311 459.8456 155.86081 436.88218 175.55895 C 464.43714 185.10912 436.53446 236.56415 413.92019 227.96875 C 412.11036 242.29523 371.68283 247.3087 368.13443 227.96875 C 345.24227 248.62289 297.50846 216.866 330.0725 188.69105 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id20_Graphic"><rect x="343.5" y="179.125" width="23" height="13" fill="white"/><rect x="343.5" y="179.125" width="23" height="13" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.5 179.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".08154297" y="10" textLength="12.836914">T1</tspan></text></g><g id="id21_Graphic"><rect x="343.5" y="203.125" width="23" height="13" fill="white"/><rect x="343.5" y="203.125" width="23" height="13" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.5 203.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".08154297" y="10" textLength="12.836914">T2</tspan></text></g><line x1="342.00935" y1="153.1525" x2="240.58475" y2="133.2538" marker-end="url(#FilledArrow_Marker_3)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="343.00284" y1="186.9087" x2="246.80439" y2="197.20193" marker-end="url(#FilledArrow_Marker_3)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="343.00684" y1="211.62867" x2="267.66967" y2="224.21505" marker-end="url(#FilledArrow_Marker_3)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(387.5 190.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x=".49023438" y="11" textLength="40.019531">root set</tspan></text><text transform="translate(158.5 181.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x=".15234375" y="11" textLength="26.695312">heap</tspan></text><text transform="translate(288.5 117.125)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x=".1484375" y="11" textLength="42.703125">phase 1</tspan></text><text transform="translate(153.5 129.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".1484375" y="11" textLength="42.703125">phase 2</tspan></text><text transform="translate(282 257.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="164.484375">1 &amp; 2 : referencing thread number</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="23" textLength="53.195312">X : shared </tspan></text></g></g></svg>
diff --git a/doc/graphics/por-scheduling-relevance.svg b/doc/graphics/por-scheduling-relevance.svg
deleted file mode 100644 (file)
index 45c2886..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="33 31 534 383" width="534pt" height="383pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2011-05-11 18:17:44 +0000</dc:date></metadata><defs><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="black"><g><path d="M 4.4999995 0 L 0 -1.6874998 L 0 1.6874998 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Monaco" font-size="9" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="588.0188" height="768.0188"/><g><title>Layer 1</title><text transform="translate(199 40.8188)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".1171875" y="11" textLength="158.765625">executed bytecode instruction</tspan></text><text transform="translate(99.4328 104.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".31933594" y="11" textLength="6">fi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.319336" y="11" textLength="41.361328">eld insn</tspan></text><text transform="translate(253 104.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".4892578" y="11" textLength="50.021484">sync insn</tspan></text><text transform="translate(394 104.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".48242188" y="11" textLength="60.035156">invoke insn</tspan></text><text transform="translate(367 165.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="2.163086" y="11" textLength="28.007812">sync </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="4.498047" y="25" textLength="20.003906">mth</tspan></text><text transform="translate(439 165.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="1.9804688" y="11" textLength="53.373047">threading </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="17.99707" y="25" textLength="18.005859">call</tspan></text><line x1="261.35365" y1="54.8188" x2="140.57915" y2="104.125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="278.5" y1="54.8188" x2="278.5" y2="104.125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="294.64376" y1="54.8188" x2="408.35624" y2="104.125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="123.432805" y1="118.125" x2="123.432995" y2="380.456" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="278.51266" y1="118.125" x2="278.98842" y2="381.177" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="420.0736" y1="118.125" x2="390.3534" y2="165.125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="428.77212" y1="118.125" x2="457.45633" y2="165.125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="381.5" y1="193.125" x2="381.5" y2="381.826" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="466" y1="193.125" x2="466" y2="382.51" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="174" y="70.125" width="204" height="14" fill="#ffd0cd" fill-opacity=".78"/><rect x="174" y="70.125" width="204" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(179 70.125)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="19.618164" y="11" textLength="154.76367">scheduling relevant insn type</tspan></text><rect x="46" y="232.125" width="432.976" height="14" fill="#ffd0cd" fill-opacity=".78"/><rect x="46" y="232.125" width="432.976" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(51 232.125)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="151.113" y="11" textLength="120.75">other runnable threads</tspan></text><rect x="245" y="259.909" width="158" height="14" fill="#ffd0cd" fill-opacity=".78"/><rect x="245" y="259.909" width="158" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(250 259.909)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="34.323242" y="11" textLength="79.353516">recursive locks</tspan></text><rect x="46" y="287.692" width="358" height="14" fill="#ffd0cd" fill-opacity=".78"/><rect x="46" y="287.692" width="358" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(51 287.692)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="134.97656" y="11" textLength="78.046875">shared objects</tspan></text><rect x="46" y="327.142" width="136.5" height="14" fill="#ffd0cd" fill-opacity=".78"/><rect x="46" y="327.142" width="136.5" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(51 327.142)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="5.555664" y="11" textLength="115.38867">lock protected access</tspan></text><text transform="translate(108.433 390.26)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".0126953125" y="11" textLength="234.78516">scheduling relevant instruction (registeres a </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="234.58691" y="11" textLength="133.40039">ThreadChoiceGenerator)</tspan></text><text transform="translate(63.4328 77.125)" fill="purple"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x=".48339844" y="11" textLength="56.033203">data races</tspan></text><text transform="translate(318.5 105.125)" fill="purple"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x="4.482422" y="11" textLength="54.035156">deadlocks</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x=".4951172" y="25" textLength="62.009766">(lock races)</tspan></text><rect x="153.077" y="305.692" width="150" height="14" fill="white" fill-opacity=".74"/><text transform="translate(158.077 305.692)" fill="purple"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x=".29980469" y="11" textLength="139.40039">tracking of access threads</tspan></text><rect x="43.75" y="343.26" width="141" height="14" fill="white" fill-opacity=".74"/><text transform="translate(48.75 343.26)" fill="purple"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x=".47558594" y="11" textLength="130.04883">lock distance &amp; statistics</tspan></text><rect x="409" y="192.125" width="141" height="36" fill="white" fill-opacity=".84"/><text transform="translate(414 192.125)" fill="blue"><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="9" textLength="129.62109">Thread. start(), yield()</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="21" textLength="124.220215">        sleep(), join()</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="33" textLength="118.819336">Object.wait(),notify()</tspan></text><text transform="translate(494.261 123.125)" fill="purple"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x=".98046875" y="11" textLength="25.347656">confi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x="26.328125" y="11" textLength="30.691406">gured</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x=".32421875" y="25" textLength="57.351562">class/mthd</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x="4.3203125" y="39" textLength="49.359375">attributes</tspan></text><text transform="translate(72.4142 127.125)" fill="blue"><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="9" textLength="43.20703">GETFIELD</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="21" textLength="43.20703">PUTFIELD</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="33" textLength="48.60791">GETSTATIC</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="45" textLength="48.60791">PUTSTATIC</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="57" textLength="32.405273">xALOAD</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="69" textLength="37.806152">xASTORE</tspan></text><rect x="248" y="127.125" width="75" height="24" fill="white" fill-opacity=".74"/><text transform="translate(253 127.125)" fill="blue"><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="9" textLength="64.810547">MONITORENTER</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="21" textLength="59.409668">MONITOREXIT</tspan></text><rect x="392" y="127.125" width="81" height="24" fill="white" fill-opacity=".83"/><text transform="translate(397 127.125)" fill="blue"><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="9" textLength="70.211426">INVOKEVIRTUAL</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="21" textLength="64.810547">INVOKESTATIC</tspan></text><line x1="44.5056" y1="371.793" x2="508.586" y2="371.793" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,4,1,4"/></g></g></svg>
diff --git a/doc/graphics/properties.svg b/doc/graphics/properties.svg
deleted file mode 100644 (file)
index ad56b87..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="31 4 710 529" width="710pt" height="529pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2011-05-11 18:07:23 +0000</dc:date></metadata><defs><font-face font-family="Courier" font-size="11" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="15" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 9 8" markerWidth="9" markerHeight="8" color="blue"><g><path d="M 6.3999996 0 L 0 -2.3999999 L 0 2.3999999 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 9 8" markerWidth="9" markerHeight="8" color="purple"><g><path d="M 6.4000006 0 L 0 -2.4000002 L 0 2.4000002 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -4 9 8" markerWidth="9" markerHeight="8" color="blue"><g><path d="M 6.4000006 0 L 0 -2.4000002 L 0 2.4000002 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="19" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker_2" viewBox="-1 -4 9 8" markerWidth="9" markerHeight="8" color="purple"><g><path d="M 6.3999996 0 L 0 -2.3999999 L 0 2.3999999 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><path d="M 58.801 34.7184 L 485.801 34.7184 C 491.32385 34.7184 495.801 39.195553 495.801 44.7184 L 495.801 51.4805 C 495.801 57.003347 491.32385 61.4805 485.801 61.4805 L 58.801 61.4805 C 53.278153 61.4805 48.801 57.003347 48.801 51.4805 L 48.801 44.7184 C 48.801 39.195553 53.278153 34.7184 58.801 34.7184 Z" fill="#faffb6"/><path d="M 58.801 34.7184 L 485.801 34.7184 C 491.32385 34.7184 495.801 39.195553 495.801 44.7184 L 495.801 51.4805 C 495.801 57.003347 491.32385 61.4805 485.801 61.4805 L 58.801 61.4805 C 53.278153 61.4805 48.801 57.003347 48.801 51.4805 L 48.801 44.7184 C 48.801 39.195553 53.278153 34.7184 58.801 34.7184 Z" stroke="#ffd7aa" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 217.927 76.1073 L 477.121 76.1073 C 482.64385 76.1073 487.121 80.584453 487.121 86.1073 L 487.121 196.8643 C 487.121 202.38715 482.64385 206.8643 477.121 206.8643 L 217.927 206.8643 C 212.40415 206.8643 207.927 202.38715 207.927 196.8643 L 207.927 86.1073 C 207.927 80.584453 212.40415 76.1073 217.927 76.1073 Z" fill="#faffb6"/><path d="M 217.927 76.1073 L 477.121 76.1073 C 482.64385 76.1073 487.121 80.584453 487.121 86.1073 L 487.121 196.8643 C 487.121 202.38715 482.64385 206.8643 477.121 206.8643 L 217.927 206.8643 C 212.40415 206.8643 207.927 202.38715 207.927 196.8643 L 207.927 86.1073 C 207.927 80.584453 212.40415 76.1073 217.927 76.1073 Z" stroke="#ffd7aa" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 277.238 247.408 L 500.267 247.408 C 505.78985 247.408 510.267 251.88515 510.267 257.408 L 510.267 358.199 C 510.267 363.72185 505.78985 368.199 500.267 368.199 L 277.238 368.199 C 271.71515 368.199 267.238 363.72185 267.238 358.199 L 267.238 257.408 C 267.238 251.88515 271.71515 247.408 277.238 247.408 Z" fill="#faffb6"/><path d="M 277.238 247.408 L 500.267 247.408 C 505.78985 247.408 510.267 251.88515 510.267 257.408 L 510.267 358.199 C 510.267 363.72185 505.78985 368.199 500.267 368.199 L 277.238 368.199 C 271.71515 368.199 267.238 363.72185 267.238 358.199 L 267.238 257.408 C 267.238 251.88515 271.71515 247.408 277.238 247.408 Z" stroke="#ffd7aa" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 52.3687 247.326 L 232.6457 247.326 C 238.16855 247.326 242.6457 251.80315 242.6457 257.326 L 242.6457 463.762 C 242.6457 469.28485 238.16855 473.762 232.6457 473.762 L 52.3687 473.762 C 46.845853 473.762 42.3687 469.28485 42.3687 463.762 L 42.3687 257.326 C 42.3687 251.80315 46.845853 247.326 52.3687 247.326 Z" fill="#faffb6"/><path d="M 52.3687 247.326 L 232.6457 247.326 C 238.16855 247.326 242.6457 251.80315 242.6457 257.326 L 242.6457 463.762 C 242.6457 469.28485 238.16855 473.762 232.6457 473.762 L 52.3687 473.762 C 46.845853 473.762 42.3687 469.28485 42.3687 463.762 L 42.3687 257.326 C 42.3687 251.80315 46.845853 247.326 52.3687 247.326 Z" stroke="#ffd7aa" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 268.558 400.709 L 508.946 400.709 C 514.46885 400.709 518.946 405.18615 518.946 410.709 L 518.946 511.5 C 518.946 517.02285 514.46885 521.5 508.946 521.5 L 268.558 521.5 C 263.03515 521.5 258.558 517.02285 258.558 511.5 L 258.558 410.709 C 258.558 405.18615 263.03515 400.709 268.558 400.709 Z" fill="#faffb6"/><path d="M 268.558 400.709 L 508.946 400.709 C 514.46885 400.709 518.946 405.18615 518.946 410.709 L 518.946 511.5 C 518.946 517.02285 514.46885 521.5 508.946 521.5 L 268.558 521.5 C 263.03515 521.5 258.558 517.02285 258.558 511.5 L 258.558 410.709 C 258.558 405.18615 263.03515 400.709 268.558 400.709 Z" stroke="#ffd7aa" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(266.835 408.697)" fill="black"><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="10" textLength="237.63867">jpf.home = ${user.home}/projects/jpf</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="36" textLength="52.808594">jpf-core</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="52.808594" y="36" textLength="151.82471"> = ${jpf.home}/jpf-core</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="49" textLength="46.20752">jpf-awt</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="46.20752" y="49" textLength="118.819336"> = ${jpf.home}/awt</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="62" textLength="59.409668">jpf-shell</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="59.409668" y="62" textLength="158.42578"> = ${jpf.home}/jpf-shell</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="75" textLength="59.409668">jpf-aprop</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="59.409668" y="75" textLength="39.606445"> = ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="88" textLength="19.803223">...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="101" textLength="66.010742">extensions</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="66.010742" y="101" textLength="178.229"> = ${jpf-core},${jpf-shell}</tspan></text><text transform="translate(50 262)" fill="black"><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="10" textLength="165.02686">jpf-core = ${config_path}</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="36" textLength="59.409668">jpf-core.</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="59.409668" y="36" textLength="105.61719">native_classpath</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="165.02686" y="36" textLength="13.2021484">=\</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="49" textLength="191.43115">  ${jpf-core}/build/jpf.jar;\</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="62" textLength="33.005371">  ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="75" textLength="178.229">  ${jpf-core}/lib/bcel.jar;</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="101" textLength="59.409668">jpf-core.</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="59.409668" y="101" textLength="59.409668">classpath</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="118.819336" y="101" textLength="13.2021484">=\</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="114" textLength="151.82471">  build/jpf-classes.jar</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="140" textLength="59.409668">jpf-core.</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="59.409668" y="140" textLength="92.41504">test_classpath</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="151.82471" y="140" textLength="13.2021484">=\</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="153" textLength="85.813965">  build/tests</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="179" textLength="59.409668">jpf-core.</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="59.409668" y="179" textLength="59.409668">sourcepat</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="118.819336" y="179" textLength="19.803223">h=\</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="192" textLength="85.813965">  src/classes</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="205" textLength="19.803223">...</tspan></text><text transform="translate(271.417 260.887)" fill="black"><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="10" textLength="198.03223">jpf-awt-shell = ${config_path}</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="36" textLength="39.606445">@using</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="39.606445" y="36" textLength="66.010742"> = jpf-awt</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="75" textLength="92.41504">jpf-awt-shell.</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="92.41504" y="75" textLength="105.61719">native_classpath</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="198.03223" y="75" textLength="26.404297">=...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="88" textLength="92.41504">jpf-awt-shell.</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="92.41504" y="88" textLength="59.409668">classpath</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="151.82471" y="88" textLength="26.404297">=...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="101" textLength="19.803223">...</tspan></text><text transform="translate(215.481 84.5732)" fill="red"><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="10" textLength="39.606445">target</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="39.606445" y="10" textLength="99.016113"> = RobotManager</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="23" textLength="72.611816">target_args</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="72.611816" y="23" textLength="39.606445"> = ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="49" textLength="118.819336">@using = jpf-aprop</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="62" textLength="46.20752">@import</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="46.20752" y="62" textLength="118.819336"> = ./my.properties</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="88" textLength="33.005371">shell</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="33.005371" y="88" textLength="204.6333"> = .shell.basicshell.BasicShell</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="101" textLength="52.808594">listener</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="52.808594" y="101" textLength="211.23438"> = .aprop.listener.SharedChecker</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="114" textLength="19.803223">...</tspan></text><text transform="translate(535.837 419.199)" fill="black"><tspan font-family="Helvetica" font-size="15" font-weight="500" x="0" y="15" textLength="110.88867">1. site properties</tspan></text><text transform="translate(535.837 269.806)" fill="black"><tspan font-family="Helvetica" font-size="15" font-weight="500" x="0" y="15" textLength="132.56836">2. project properties</tspan></text><text transform="translate(535.837 122.743)" fill="black"><tspan font-family="Helvetica" font-size="15" font-weight="500" x="0" y="15" textLength="159.26514">3. application properties</tspan></text><text transform="translate(535.837 37)" fill="black"><tspan font-family="Helvetica" font-size="15" font-weight="500" x="0" y="15" textLength="110.05371">4. command line</tspan></text><text transform="translate(553.837 446.199)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="158.42578">~/.jpf/site.properties</tspan></text><text transform="translate(553.837 296.806)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="172.82812">&lt;project&gt;/jpf.properties</tspan></text><text transform="translate(553.837 149.743)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="136.822266">&lt;project&gt;/.../*.jpf</tspan></text><text transform="translate(57.8009 38.4467)" fill="black"><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="11" textLength="180.0293">&gt; bin/jpf [-log][-show] {</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="red" x="180.0293" y="11" textLength="86.41406">+log.info=..</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="266.44336" y="11" textLength="14.402344">} </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="red" x="280.8457" y="11" textLength="144.02344">.../RobotManager.jpf</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="424.86914" y="11" textLength="14.402344">  </tspan></text><path d="M 254.897 507.803 L 197.74177 507.75322 C 194.43011 507.75034 191.747 505.0649 191.747 501.75322 L 191.747 469.593" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 117 252 L 117 240.0136 C 117 236.69989 119.68629 234.0136 123 234.0136 C 123.00453 234.0136 123.00906 234.0136 123.013585 234.01362 L 263.27802 234.3312" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(75.1602 478.429)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="97.38281">all jpf.properties in</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="44.689453">order of </tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="44.689453" y="25" textLength="57.36914">extensions</tspan></text><text transform="translate(284.191 226.678)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="172.07227">jpf.properties in current directory</tspan></text><path d="M 473.835 234.806 L 494.8676 234.806 C 498.16894 234.806 500.85008 232.13898 500.86752 228.83768 L 501.55515 98.61408 C 501.57265 95.30042 498.90058 92.59998 495.58692 92.582484 C 495.57636 92.58243 495.5658 92.5824 495.55523 92.5824 L 435.684 92.5824" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(579.345 469.372)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="94.04297">- project locations</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="110.05664">- pre-loaded projects</tspan></text><text transform="translate(579.345 319.979)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="106.71094">- project class paths</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="121.41211">- project dependencies</tspan></text><text transform="translate(579.345 172.915)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="103.359375">- system-under-test</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="89.36133">- listeners, shells</tspan></text><text transform="translate(579.345 58.6805)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="63.38672">- debugging</tspan></text><text transform="translate(252.533 18.202)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="182.08594">command line property arguments</tspan></text><path d="M 423.131 477.215 C 422.42507 484.2239 423.5989 485.0065 427.771 486.571 C 431.9431 488.1355 462.451 486.832 462.451 486.832 C 462.451 486.832 471.22213 485.7952 473.73633 493.13772" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 384.172 289.104 C 385.547 286.104 388.047 282.854 393.547 282.729 C 399.047 282.604 404.922 287.729 404.672 293.729 C 404.422 299.729 399.672 304.729 393.047 304.354 C 391.54602 304.26904 390.24395 303.84401 389.1277 303.23738" marker-end="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="188.908" y="216.267" width="16" height="23" fill="white"/><text transform="translate(188.908 216.267)" fill="blue"><tspan font-family="Helvetica" font-size="19" font-weight="500" fill="blue" x="0" y="19" textLength="15.836426">...</tspan></text><path d="M 264.193 454.367 C 255.2799 454.037 253.41636 449.68932 251.553 440.062 C 249.68966 430.43468 250.62069 331.05585 255.279 323.913 C 259.9374 316.77015 261.80115 316.14904 268.944 313.354 C 276.08685 310.55896 329.5034 310.55858 340.373 310.248 C 347.94775 310.03157 353.4106 310.26777 355.18565 306.1217" marker-end="url(#Arrow_Marker_2)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(440.597 77.495)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="57.375">application</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="53.361328">properties</tspan></text><path d="M 387.466 131.784 C 388.841 128.784 391.341 125.534 396.841 125.409 C 402.341 125.284 408.216 130.409 407.966 136.409 C 407.716 142.409 402.966 147.409 396.341 147.034 C 394.84002 146.94904 393.53795 146.52401 392.4217 145.917375" marker-end="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 564.52274 354.335 L 551.865 366.99273 L 560.2191 366.99273 L 560.2191 408.5825 L 568.8264 408.5825 L 568.8264 366.99273 L 577.1805 366.99273 Z" fill="#e8eef7"/><path d="M 564.52274 354.335 L 551.865 366.99273 L 560.2191 366.99273 L 560.2191 408.5825 L 568.8264 408.5825 L 568.8264 366.99273 L 577.1805 366.99273 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width=".24"/><path d="M 564.20274 200.87 L 551.545 213.52773 L 559.8991 213.52773 L 559.8991 255.1175 L 568.5064 255.1175 L 568.5064 213.52773 L 576.8605 213.52773 Z" fill="#e8eef7"/><path d="M 564.20274 200.87 L 551.545 213.52773 L 559.8991 213.52773 L 559.8991 255.1175 L 568.5064 255.1175 L 568.5064 213.52773 L 576.8605 213.52773 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width=".24"/><path d="M 564.20274 60.5442 L 551.545 73.20193 L 559.8991 73.20193 L 559.8991 114.7917 L 568.5064 114.7917 L 568.5064 73.20193 L 576.8605 73.20193 Z" fill="#e8eef7"/><path d="M 564.20274 60.5442 L 551.545 73.20193 L 559.8991 73.20193 L 559.8991 114.7917 L 568.5064 114.7917 L 568.5064 73.20193 L 576.8605 73.20193 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width=".24"/><path d="M 487.875 49.625 C 487.875 49.625 504.125 48.75 508.125 55.125 C 512.125 61.49999 509.12492 68.125 508.097 69.4369 C 507.80348 69.81151 507.02888 70.620914 506.07187 71.58626" marker-end="url(#Arrow_Marker_2)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(373.153 385.456)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="75.36914">site properties</tspan></text></g></g></svg>
diff --git a/doc/graphics/report.svg b/doc/graphics/report.svg
deleted file mode 100644 (file)
index cad3324..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="10 18 784 573" width="784pt" height="573pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2010-09-10 23:02:45 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Monaco" font-size="11" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Ball_Marker" viewBox="-7 -4 8 8" markerWidth="8" markerHeight="8" color="blue"><g><circle cx="-2.9999986" cy="0" r="2.9999973" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="black"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="1536.0376" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id99_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id21_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id100_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id105_Graphic" filter="url(#Shadow)"/></g><g id="id99_Graphic"><rect x="601" y="156" width="151" height="70" fill="white"/><rect x="601" y="156" width="151" height="70" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id21_Graphic"><rect x="468" y="140" width="90" height="83" fill="white"/><rect x="468" y="140" width="90" height="83" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><rect x="119" y="134" width="146" height="42" fill="white"/><rect x="119" y="134" width="146" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(124 134)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="29.326172">JPF()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="130.740234">addPublisherExtension()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="73.365234">setPublisherT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="72.035156" y="39" textLength="36.00586">opics()</tspan></text><rect x="119" y="120" width="146" height="14" fill="white"/><rect x="119" y="120" width="146" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(124 120)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="42.017578">reporter</tspan></text><rect x="119" y="106" width="146" height="14" fill="white"/><rect x="119" y="106" width="146" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(124 106)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="56.996094" y="11" textLength="22.007812">JPF</tspan></text><text transform="translate(34.81 28.631245)" fill="blue"><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="11" textLength="13.2021484">..</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="26" textLength="422.46875">reporter = config.getInstance(&quot;report.class&quot;, Reporter.class,..)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="422.46875" y="26" textLength="7.201172">;</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="41" textLength="14.402344">..</tspan></text><path d="M 108.51673 140.52065 C 96.31494 139.82353 82.887197 139.963245 74 137 C 63.50105 133.49935 54.3331 130.9979 52 120 C 49.6669 109.0021 57.3336 87.3357 60 71.006" marker-start="url(#Ball_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="305" y="150" width="118" height="42" fill="white"/><rect x="305" y="150" width="118" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(310 150)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="82.69922">searchStarted()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="52.02539">propertyV</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="51.814453" y="25" textLength="43.353516">iolated()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="89.36719">searchFinished()</tspan></text><rect x="305" y="136" width="118" height="14" fill="white"/><rect x="305" y="136" width="118" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(310 136)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="54.697266">publishers</tspan></text><rect x="305" y="122" width="118" height="14" fill="white"/><rect x="305" y="122" width="118" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(310 122)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="28.995117" y="11" textLength="50.009766">Reporter</tspan></text><rect x="463.5" y="190" width="90" height="28" fill="white"/><rect x="463.5" y="190" width="90" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(468.5 190)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="71.36133">publishStart()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="44.015625">getOut()</tspan></text><rect x="463.5" y="148" width="90" height="42" fill="white"/><rect x="463.5" y="148" width="90" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(468.5 148)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="57.36914">extensions</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="31.347656">topics</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="16.681641">out</tspan></text><rect x="463.5" y="134" width="90" height="14" fill="white"/><rect x="463.5" y="134" width="90" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(468.5 134)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="12.660156" y="11" textLength="54.679688">Publisher</tspan></text><rect x="596" y="165" width="151" height="56" fill="white"/><rect x="596" y="165" width="151" height="56" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(601 165)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="71.36133">publishStart()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="45.357422">publishT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="44.91797" y="25" textLength="53.34961">ransition()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="91.38281">publishPropertyV</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="91.171875" y="39" textLength="46.01953">iolation()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="53" textLength="91.376953">publishFinished()</tspan></text><rect x="596" y="151" width="151" height="14" fill="white"/><rect x="596" y="151" width="151" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(601 151)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x=".4716797" y="11" textLength="140.05664">&lt;&lt;PublisherExtension&gt;&gt;</tspan></text><g id="id100_Graphic"><rect x="583" y="343" width="39" height="30" fill="white"/><rect x="583" y="343" width="39" height="30" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(588 351)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="9.4990234" y="11" textLength="10.001953">...</tspan></text></g><line x1="676" y1="328" x2="676" y2="240.506" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 606 343 L 606 328 L 704 328 L 704 343" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id105_Graphic"><rect x="409" y="284" width="39" height="30" fill="white"/><rect x="409" y="284" width="39" height="30" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(414 292)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="9.4990234" y="11" textLength="10.001953">...</tspan></text></g><line x1="502.00002" y1="269" x2="502.00002" y2="240.506" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 432 284 L 432 269 L 530 269 L 530 284" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="535" y1="157" x2="586.1" y2="157" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="402" y1="141" x2="453.1" y2="141" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="245" y1="128" x2="296.1" y2="128" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(102.08 217.37988)" fill="blue"><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="11" textLength="13.2021484">..</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="26" textLength="204.6333">for (Publisher p : publishers){</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="41" textLength="118.819336">  p.openChannel();</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="56" textLength="26.404297">  ..</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="71" textLength="125.42041">  p.publishStart();</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="86" textLength="14.402344">..</tspan></text><path d="M 298.63573 160.68016 C 291.20484 165.53147 283.20964 170.12326 278 176 C 271.50065 183.3316 266.49985 192.49985 265 201 C 263.50015 209.50015 267.6668 218.3382 269 227.006" marker-start="url(#Ball_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(200.64 328.44478)" fill="blue"><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="11" textLength="191.43115"> public void publishStart() {</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="26" textLength="250.84082">    for (String topic : startTopics) {</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="41" textLength="204.6333">      if (&quot;jpf&quot;.equals(topic)){</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="56" textLength="138.62256">        publishJPF();</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="71" textLength="33.005371">  ...</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="86" textLength="204.6333">    for (PublisherExtension e :</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="101" textLength="237.63867">                       extensions) {</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="116" textLength="191.43115">        e.publishStart(this);</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="131" textLength="46.20752">      }</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="146" textLength="33.005371">  ...</tspan></text><path d="M 448.95183 200.3809 C 432.62623 206.25465 414.28666 209.15743 402 221 C 388.16805 234.332 378.68406 260.67906 372 278 C 365.31594 295.32094 365.26076 309.29224 361.89164 324.936" marker-start="url(#Ball_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(395.8 477.35088)" fill="blue"><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="11" textLength="211.23438">out.println(&quot;JPF version&quot; + ..);</tspan></text><rect x="475" y="297.936" width="118" height="28" fill="white"/><rect x="475" y="297.936" width="118" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(480 297.936)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="67.353516">publishJPF()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan></text><rect x="475" y="283.936" width="118" height="14" fill="white"/><rect x="475" y="283.936" width="118" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(480 283.936)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="2.991211" y="11" textLength="102.01758">ConsolePublisher</tspan></text><path d="M 533.46314 321.31366 C 530.55445 334.16368 528.93123 346.2254 522.891 361 C 515.87354 378.16495 499.575 400.67907 492.891 418 C 486.207 435.32093 486.152 449.29223 482.783 464.936" marker-start="url(#Ball_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="647" y="357" width="118" height="28" fill="white"/><rect x="647" y="357" width="118" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(652 357)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="91.376953">publishFinished()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan></text><rect x="647" y="343" width="118" height="14" fill="white"/><rect x="647" y="343" width="118" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(652 343)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="2.3115234" y="11" textLength="103.376953">DeadlockAnalyzer</tspan></text><text transform="translate(555.78 414.35063)" fill="blue"><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="11" textLength="118.819336">PrintWriter out = </tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="26" textLength="191.43115">          publisher,getOut();</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="41" textLength="158.42578">printTraceAnalysis(out);</tspan></text><path d="M 714.47304 378.3917 C 713.93286 385.00501 713.7042 391.82623 711 397 C 707.3972 403.89298 699.3982 407.86588 693.59814 413.298" marker-start="url(#Ball_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(306 80)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="76.716797">data collection</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="122.07422">publisher management</tspan></text><text transform="translate(468 70)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="80.04492">data formatting</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="98.72461">topic management</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="39" textLength="78.73242">output channel</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="53" textLength="80.04492">   management</tspan></text><text transform="translate(620.5 109.506)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="86.03906">property/listener</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="34.013672">specifi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="34.013672" y="25" textLength="77.378906">c output topics</tspan></text><text transform="translate(50.42 512.3625)" fill="#390"><tspan font-family="Monaco" font-size="11" font-weight="500" fill="#390" x="0" y="11" textLength="191.43115">report.class=.report.Reporter</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="#390" x="0" y="26" textLength="178.229">report.publisher=console,..</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="#390" x="0" y="41" textLength="297.04834">report.console.class=.report.ConsolePublisher</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="#390" x="0" y="56" textLength="178.229">report.console.start=jpf,..</tspan></text><text transform="translate(91 477)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="50.015625">JPF confi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="50.015625" y="11" textLength="43.365234">guration</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="144.06445">(e.g. jpf.properties or *.jpf fi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="144.06445" y="25" textLength="19.335938">les)</tspan></text><path d="M 135.75 467.749 L 135.75 425.749 L 126 425.749 L 145.5 411.749 L 165 425.749 L 155.25 425.749 L 155.25 467.749 Z" fill="white"/><path d="M 135.75 467.749 L 135.75 425.749 L 126 425.749 L 145.5 411.749 L 165 425.749 L 155.25 425.749 L 155.25 467.749 Z" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/doc/graphics/states-mc.svg b/doc/graphics/states-mc.svg
deleted file mode 100644 (file)
index 8d9f5fd..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="111 18 212 194" width="212pt" height="194pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2009-09-06 18:37:27 +0000</dc:date></metadata><defs><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="blue"><g><path d="M 4.7999992 0 L 0 -1.7999997 L 0 1.7999997 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -2 5 4" markerWidth="5" markerHeight="4" color="red"><g><path d="M 2.4000001 0 L 0 -.90000004 L 0 .90000004 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-4 -2 5 4" markerWidth="5" markerHeight="4" color="red"><g><path d="M -2.4000001 0 L 0 .90000004 L 0 -.90000004 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" viewBox="-1 -2 3 4" markerWidth="3" markerHeight="4" color="red"><g><path d="M .96 0 L 0 -.36 L 0 .36 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Arial Unicode MS" font-size="14" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-100.097656" underline-thickness="49.804688" slope="0" x-height="529.78516" cap-height="728.02734" ascent="1068.84766" descent="-270.9961" font-weight="500"><font-face-src><font-face-name name="ArialUnicodeMS"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Apple Symbols" font-size="13" panose-1="2 0 0 0 0 0 0 0 0 0" units-per-em="1000" underline-position="-73.242188" underline-thickness="48.828125" slope="0" x-height="392.57812" cap-height="546.38672" ascent="666.5039" descent="-250" font-weight="500"><font-face-src><font-face-name name="AppleSymbols"/></font-face-src></font-face><font-face font-family="Zapf Dingbats" font-size="14" panose-1="5 2 1 2 1 7 4 2 6 9" units-per-em="1000" underline-position="-100.097656" underline-thickness="60.058594" slope="0" x-height="542.48047" cap-height="723.14453" ascent="813.96484" descent="-176.75781" font-weight="500"><font-face-src><font-face-name name="ZapfDingbatsITC"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><path d="M 199.037 162.428 C 200.57818 159.34531 201.0281 157.22493 203.661 153.179 C 206.2939 149.13307 210.95072 142.5169 214.836 138.15 C 218.72128 133.7831 225.04836 130.86028 226.975 126.975 C 228.90164 123.08972 229.60801 119.138736 226.397 114.836 C 224.05647 111.69971 218.50761 108.289804 213.25864 104.90571" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><circle cx="199.97595" cy="92.61395" r="7.000961" fill="#fffe71"/><circle cx="199.97595" cy="92.61395" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle cx="181.81895" cy="119.45695" r="7.000961" fill="#fffe71"/><circle cx="181.81895" cy="119.45695" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="172.39495" cy="145.98695" r="7.000961" fill="#fffe71"/><circle cx="172.39495" cy="145.98695" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="191.28895" cy="172.51695" r="7.000961" fill="#a5ff78"/><circle cx="191.28895" cy="172.51695" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="214.71395" cy="119.26395" r="7.000961" fill="#fffe71"/><circle cx="214.71395" cy="119.26395" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="247.76695" cy="119.93295" r="7.000961" fill="#fffe71"/><circle cx="247.76695" cy="119.93295" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle cx="225.36195" cy="147.66995" r="7.000961" fill="#fffe71"/><circle cx="225.36195" cy="147.66995" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="193.08327" y1="102.80395" x2="188.43147" y2="109.68109" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="177.86826" y1="130.578685" x2="176.34559" y2="134.865196" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="205.92984" y1="103.380056" x2="209.00205" y2="108.93538" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="218.85671" y1="130.315664" x2="221.21924" y2="136.61822" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="179.24131" y1="155.600255" x2="184.4426" y2="162.90364" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="215.647" y1="154.37152" x2="205.27354" y2="161.52735" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="261.29795" cy="146.77595" r="7.000961" fill="#fffe71"/><circle cx="261.29795" cy="146.77595" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="206.92362" y1="96.58548" x2="236.28745" y2="113.37086" marker-end="url(#FilledArrow_Marker_3)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="251.36924" y1="127.07921" x2="255.34603" y2="134.9684" marker-end="url(#FilledArrow_Marker_3)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle cx="261.20595" cy="174.51295" r="7.000961" fill="red"/><circle cx="261.20595" cy="174.51295" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="261.27142" y1="154.77686" x2="261.24816" y2="161.79207" marker-end="url(#FilledArrow_Marker_3)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="204.73078" y1="125.559554" x2="186.87417" y2="136.82032" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="239.8446" y1="129.34356" x2="235.5243" y2="134.47547" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(255.97 164.705)" fill="yellow"><tspan font-family="Arial Unicode MS" font-size="14" font-weight="500" fill="yellow" x="0" y="15" textLength="10.5">☠</tspan></text><text transform="translate(149 27)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="79.486816">model checking:</tspan></text><text transform="translate(176 46.4739)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="10" textLength="132.84668">all program state are explored</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="22" textLength="131.75781"> until none left or defect found</tspan></text><path d="M 183.622 166.859 C 178.29187 167.05165 173.02446 169.4278 167.63 167.437 C 162.23554 165.4462 154.65566 161.23853 151.252 154.913 C 147.84834 148.58747 145.43984 137.4432 147.206 129.48 C 148.97216 121.5168 155.10684 112.587704 161.85 107.129 C 167.00219 102.95821 174.3303 101.111333 181.33995 98.92518" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 183.237 142.775 C 188.43881 142.83899 194.41278 145.3111 198.844 142.967 C 201.71564 141.44791 203.9405 137.9056 206.14715 134.306975" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 235.645 139.692 C 237.44315 138.9854 239.37017 139.27383 241.04 137.572 C 241.57356 137.02821 242.08097 136.281115 242.57475 135.42817" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(125.853 90.4145)" fill="blue"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="blue" x="0" y="10" textLength="42.79297">backtrack</tspan></text><text transform="translate(177.64 135.638)" fill="purple"><tspan font-family="Apple Symbols" font-size="13" font-weight="500" fill="purple" x="0" y="9" textLength="7.445801">≡</tspan></text><text transform="translate(195.944 160.694)" fill="purple"><tspan font-family="Apple Symbols" font-size="13" font-weight="500" fill="purple" x="0" y="9" textLength="7.445801">≡</tspan></text><text transform="translate(228.507 134.495)" fill="purple"><tspan font-family="Apple Symbols" font-size="13" font-weight="500" fill="purple" x="0" y="9" textLength="7.445801">≡</tspan></text><text transform="translate(202.738 164.231)" fill="purple"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="purple" x="0" y="10" textLength="27.231445">match</tspan></text><text transform="translate(254.721 187.554)" fill="red"><tspan font-family="Zapf Dingbats" font-size="14" font-weight="500" fill="red" x=".26269531" y="11" textLength="9.4746094">✘</tspan></text></g></g></svg>
diff --git a/doc/graphics/states-testing.svg b/doc/graphics/states-testing.svg
deleted file mode 100644 (file)
index 12e5396..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="143 28 197 186" width="197pt" height="186pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-11-19 20:33:35 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="red"><g><path d="M 4.8000002 0 L 0 -1.8000001 L 0 1.8000001 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Arial Unicode MS" font-size="14" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-100.097656" underline-thickness="49.804688" slope="0" x-height="529.78516" cap-height="728.02734" ascent="1068.84766" descent="-270.9961" font-weight="500"><font-face-src><font-face-name name="ArialUnicodeMS"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Zapf Dingbats" font-size="14" panose-1="5 2 1 2 1 7 4 2 6 9" units-per-em="1000" underline-position="-100.097656" underline-thickness="60.058594" slope="0" x-height="542.48047" cap-height="723.14453" ascent="813.96484" descent="-176.75781" font-weight="500"><font-face-src><font-face-name name="ZapfDingbatsITC"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="blue"><g><path d="M 4.7999992 0 L 0 -1.7999997 L 0 1.7999997 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id24_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id25_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id28_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id36_Graphic" filter="url(#Shadow)"/></g><circle cx="200.11895" cy="97.06455" r="7.000961" fill="#faff8b"/><circle cx="200.11895" cy="97.06455" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><g id="id24_Graphic"><circle cx="181.96195" cy="123.90795" r="7.000961" fill="white"/><circle cx="181.96195" cy="123.90795" r="7.000961" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id25_Graphic"><circle cx="172.53795" cy="150.43695" r="7.000961" fill="white"/><circle cx="172.53795" cy="150.43695" r="7.000961" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><circle cx="191.43195" cy="176.96795" r="7.000961" fill="#a5ff78"/><circle cx="191.43195" cy="176.96795" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle cx="214.85695" cy="123.71495" r="7.000961" fill="#faff8b"/><circle cx="214.85695" cy="123.71495" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><g id="id28_Graphic"><circle cx="247.90995" cy="124.38295" r="7.000961" fill="white"/><circle cx="247.90995" cy="124.38295" r="7.000961" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><circle cx="225.50495" cy="152.11995" r="7.000961" fill="#faff8b"/><circle cx="225.50495" cy="152.11995" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="195.63552" y1="103.692876" x2="186.16524" y2="117.69378" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="179.45053" y1="130.97771" x2="175.04936" y2="143.36719" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="203.99181" y1="104.067766" x2="207.74168" y2="110.84856" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="217.66598" y1="131.20841" x2="220.34415" y2="138.3528" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="176.88977" y1="156.54779" x2="186.79009" y2="170.44984" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="219.0396" y1="156.83486" x2="203.31072" y2="168.30526" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id36_Graphic"><circle cx="261.44095" cy="151.22695" r="7.000961" fill="white"/><circle cx="261.44095" cy="151.22695" r="7.000961" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="207.06666" y1="101.036017" x2="241.39632" y2="120.65962" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="251.28707" y1="131.08278" x2="258.06383" y2="144.52712" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="261.34895" cy="178.96395" r="7.000961" fill="#ffafb4"/><circle cx="261.34895" cy="178.96395" r="7.000961" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="261.41607" y1="158.72786" x2="261.37383" y2="171.46304" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="208.09054" y1="127.98755" x2="178.88159" y2="146.43131" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="243.19621" y1="130.21848" x2="230.53287" y2="145.895465" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(256.333 169.281)" fill="black"><tspan font-family="Arial Unicode MS" font-size="14" font-weight="500" x="0" y="15" textLength="10.5">☠</tspan></text><text transform="translate(228.228 55.8818)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="10" textLength="84.506836">based on input set </tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="blue" x="84.506836" y="10" textLength="12.241211">{d}</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="22" textLength="40.585938">only one </tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="red" x="40.585938" y="22" textLength="19.462891">path</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="34" textLength="81.713867">executed at a time</tspan></text><text transform="translate(176 190)" fill="#00c300"><tspan font-family="Zapf Dingbats" font-size="14" font-weight="500" fill="#00c300" x=".076660156" y="11" textLength="11.84668">✔</tspan></text><text transform="translate(203.93402 37.205296)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="35.465332">testing:</tspan></text><text transform="translate(157.263 64)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="17.137695">{d}</tspan></text><path d="M 180.263 69.663568 C 186.02242 68.496695 194.58713 64.273384 197.543 66.1626 C 199.34019 67.31126 199.0646 70.719975 198.60663 74.327384" marker-end="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/doc/graphics/sw-model-checking-2.svg b/doc/graphics/sw-model-checking-2.svg
deleted file mode 100644 (file)
index a0575f7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="34 236 374 190" width="374pt" height="190pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2015-01-05 22:19:29 +0000</dc:date></metadata><defs><font-face font-family="Courier" font-size="14" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><font-face font-family="Courier" font-size="14" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 0 M 0 -3 L 8 0 L 0 3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker_2" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="red"><g><path d="M 4.8 0 L 0 0 M 0 -1.8 L 4.8 0 L 0 1.8" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Zapf Dingbats" font-size="14" panose-1="5 2 1 2 1 7 4 2 6 9" units-per-em="1000" underline-position="-100.097656" underline-thickness="60.058594" slope="0" x-height="542.48047" cap-height="723.14453" ascent="813.96484" descent="-176.75781" font-weight="500"><font-face-src><font-face-name name="ZapfDingbatsITC"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="purple"><g><path d="M 4.7999992 0 L 0 -1.7999997 L 0 1.7999997 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><text transform="translate(97.5 288)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x="0" y="14" textLength="25.204102">a=0</tspan></text><text transform="translate(51.5 335)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">b=0</tspan></text><text transform="translate(117 335)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">b=1</tspan></text><text transform="translate(182 335)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x="0" y="14" textLength="25.204102">b=2</tspan></text><line x1="102.18085" y1="305" x2="79.743833" y2="327.92478" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="114.026596" y1="305" x2="122.67953" y2="325.8558" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="125.781915" y1="305" x2="168.4446" y2="328.72954" marker-end="url(#StickArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(51.5 380)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">c=0</tspan></text><text transform="translate(117 380)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">c=0</tspan></text><text transform="translate(174.5 380)" fill="red"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="red" x="0" y="14" textLength="42.006836">c=0/0</tspan></text><line x1="64.5" y1="352" x2="64.5" y2="370.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="130" y1="352" x2="130" y2="370.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="195.18889" y1="352" x2="195.52452" y2="367.10318" marker-end="url(#StickArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(200 245)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x="0" y="14" textLength="42.006836">start</tspan></text><line x1="199.55814" y1="262" x2="140.52895" y2="284.86716" marker-end="url(#StickArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(304.5 288)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">a=1</tspan></text><text transform="translate(258.5 335)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">b=0</tspan></text><text transform="translate(312.5 335)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">b=1</tspan></text><text transform="translate(366.5 335)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">b=2</tspan></text><line x1="309.18085" y1="305" x2="286.74383" y2="327.92478" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="318.9468" y1="305" x2="322.39198" y2="325.24037" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="328.71277" y1="305" x2="360.39788" y2="329.01936" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(254.5 380.5)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="33.605469">c=-1</tspan></text><text transform="translate(304 380.5)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="42.006836">c=1/0</tspan></text><text transform="translate(367.5 380)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">c=1</tspan></text><line x1="271.5" y1="352" x2="271.5" y2="370.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="325.5" y1="352" x2="325.5" y2="370.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="379.68912" y1="352" x2="380.0919" y2="370.10245" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="240.47674" y1="262" x2="290.46495" y2="284.39055" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(190 402)" fill="red"><tspan font-family="Zapf Dingbats" font-size="14" font-weight="500" fill="red" x="0" y="11" textLength="9.4746094">✘</tspan></text><path d="M 195 255.53846 C 184.3344 256.35889 171.9991 255.75663 163 258 C 154.0009 260.24337 148.17807 264.0005 141 269 C 135.49167 272.83653 130.1641 278.24436 124.8097 283.41438" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="165.29035" y="251.01964" width="16" height="11" fill="white"/><text transform="translate(170.29035 251.01964)" fill="purple"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="purple" x="0" y="9" textLength="5.005371">1</tspan></text><path d="M 93.036364 305 C 80.025544 311.3327 61.83861 316.91738 54 324 C 46.16139 331.08262 44.88934 338.1676 46 347.5 C 46.909354 355.1409 52.88361 364.79484 57.70203 373.98866" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="59.46112" y="310.53899" width="16" height="11" fill="white"/><text transform="translate(64.46112 310.53899)" fill="purple"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="purple" x="0" y="9" textLength="5.005371">2</tspan></text><path d="M 67.75532 380 C 72.66972 367.16795 76.257992 353.99875 82.5 341.5 C 87.77279 330.94197 94.94186 320.857 101.60377 310.64679" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="66.688773" y="354.95894" width="16" height="11" fill="white"/><text transform="translate(71.688773 354.95894)" fill="purple"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="purple" x="0" y="9" textLength="5.005371">3</tspan></text><path d="M 110.03297 305 C 109.35538 317.3321 107.672194 331.58438 108 342 C 108.327806 352.41562 109.547864 361.1673 112 367.5 C 113.41764 371.1611 115.5836 373.37442 117.84884 375.39535" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="100.541785" y="320.0904" width="16" height="11" fill="white"/><text transform="translate(105.541785 320.0904)" fill="purple"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="purple" x="0" y="9" textLength="5.005371">4</tspan></text><path d="M 133.36264 380 C 138.24127 367.6679 150.6677 355.49875 148 343 C 145.68608 332.1588 132.01485 321.06398 121.76401 310.04676" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="136.39532" y="354.41076" width="16" height="11" fill="white"/><text transform="translate(141.39532 354.41076)" fill="purple"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="purple" x="0" y="9" textLength="5.005371">5</tspan></text><text transform="translate(59 402)" fill="#00c300"><tspan font-family="Zapf Dingbats" font-size="14" font-weight="500" fill="#00c300" x="0" y="11" textLength="11.84668">✔</tspan></text><text transform="translate(124 402)" fill="#00c300"><tspan font-family="Zapf Dingbats" font-size="14" font-weight="500" fill="#00c300" x="0" y="11" textLength="11.84668">✔</tspan></text><path d="M 128.5 303.40226 C 144.66505 309.60088 162.91808 315.15106 177 322 C 191.08192 328.84894 209.28636 334.8343 213 344.5 C 216.09567 352.55727 207.67603 363.62784 202.14012 373.94288" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="152.59596" y="309.56811" width="16" height="11" fill="white"/><text transform="translate(157.59596 309.56811)" fill="purple"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="purple" x="0" y="9" textLength="5.005371">6</tspan></text></g></g></svg>
diff --git a/doc/graphics/sw-model-checking.svg b/doc/graphics/sw-model-checking.svg
deleted file mode 100644 (file)
index 1fd0a54..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="32 9 642 191" width="642pt" height="191pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-11-19 20:40:12 +0000</dc:date></metadata><defs><font-face font-family="Courier" font-size="13" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Hiragino Kaku Gothic Pro" font-size="14" panose-1="2 11 3 0 0 0 0 0 0 0" units-per-em="1000" underline-position="-60" underline-thickness="63" slope="0" x-height="545" cap-height="766" ascent="880.0018" descent="-120.00024" font-weight="400"><font-face-src><font-face-name name="HiraKakuPro-W3"/></font-face-src></font-face><font-face font-family="Courier" font-size="14" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 0 M 0 -3 L 8 0 L 0 3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Courier" font-size="14" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker_2" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="red"><g><path d="M 4.8 0 L 0 0 M 0 -1.8 L 4.8 0 L 0 1.8" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Zapf Dingbats" font-size="14" panose-1="5 2 1 2 1 7 4 2 6 9" units-per-em="1000" underline-position="-100.097656" underline-thickness="60.058594" slope="0" x-height="542.48047" cap-height="723.14453" ascent="813.96484" descent="-176.75781" font-weight="500"><font-face-src><font-face-name name="ZapfDingbatsITC"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><text transform="translate(432.5 20)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="4.2822266" y="13" textLength="226.23682">Random random = new Random() </tspan></text><text transform="translate(432.5 65.5)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x=".48413086" y="13" textLength="195.03174">int a = random.nextInt(2)</tspan></text><text transform="translate(432.5 110)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x=".48413086" y="13" textLength="195.03174">int b = random.nextInt(3)</tspan></text><text transform="translate(432.5 155)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x=".28857422" y="13" textLength="140.42285">int c = a/(b+a -2)</tspan></text><text transform="translate(411 24)" fill="black"><tspan font-family="Hiragino Kaku Gothic Pro" font-size="14" font-weight="400" x="0" y="12" textLength="14">①</tspan></text><text transform="translate(411 68)" fill="black"><tspan font-family="Hiragino Kaku Gothic Pro" font-size="14" font-weight="400" x="0" y="12" textLength="14">②</tspan></text><text transform="translate(411 112)" fill="black"><tspan font-family="Hiragino Kaku Gothic Pro" font-size="14" font-weight="400" x="0" y="12" textLength="14">③</tspan></text><text transform="translate(411 156)" fill="black"><tspan font-family="Hiragino Kaku Gothic Pro" font-size="14" font-weight="400" x="0" y="12" textLength="14">④</tspan></text><text transform="translate(92 61)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">a=0</tspan></text><text transform="translate(46 108)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">b=0</tspan></text><text transform="translate(100 108)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">b=1</tspan></text><text transform="translate(154 108)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">b=2</tspan></text><line x1="96.68085" y1="78" x2="74.243835" y2="100.92478" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="106.446806" y1="78" x2="109.89197" y2="98.24037" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="116.21276" y1="78" x2="147.89787" y2="102.01936" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(46 153)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">c=0</tspan></text><text transform="translate(100 153)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">c=0</tspan></text><text transform="translate(146.5 153)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".49658203" y="14" textLength="42.006836">c=0/0</tspan></text><line x1="59" y1="125" x2="59" y2="143.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="113" y1="125" x2="113" y2="143.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="167.18889" y1="125" x2="167.59116" y2="143.10244" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(194.5 18)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x=".49658203" y="14" textLength="42.006836">start</tspan></text><line x1="194.05814" y1="35" x2="132.23152" y2="58.95085" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(299 61)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x=".39794922" y="14" textLength="25.204102">a=1</tspan></text><text transform="translate(253 108)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x=".39794922" y="14" textLength="25.204102">b=0</tspan></text><text transform="translate(307 108)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">b=1</tspan></text><text transform="translate(361 108)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">b=2</tspan></text><line x1="303.68085" y1="78" x2="283.34222" y2="98.780774" marker-end="url(#StickArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="313.4468" y1="78" x2="316.89197" y2="98.24037" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="323.21276" y1="78" x2="354.89787" y2="102.01936" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(249 153)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x=".19726562" y="14" textLength="33.605469">c=-1</tspan></text><text transform="translate(298.5 153)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".49658203" y="14" textLength="42.006836">c=1/0</tspan></text><text transform="translate(362 153)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">c=1</tspan></text><line x1="266" y1="125" x2="266" y2="140.1" marker-end="url(#StickArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="320" y1="125" x2="320" y2="143.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="374.18889" y1="125" x2="374.59116" y2="143.10244" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="234.97674" y1="35" x2="282.22705" y2="56.1642" marker-end="url(#StickArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(260 176)" fill="#00c300"><tspan font-family="Zapf Dingbats" font-size="14" font-weight="500" fill="#00c300" x=".076660156" y="11" textLength="11.84668">✔</tspan></text></g></g></svg>
diff --git a/doc/index.md b/doc/index.md
deleted file mode 100644 (file)
index a40d030..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-## Welcome to the Java™Pathfinder System ##
-
-This is the main page for Java™ Pathfinder (JPF). JPF is an extensible software model checking framework for Java™ bytecode programs. The system was developed at the [NASA Ames Research Center](http://arc.nasa.gov), open sourced in 2005, and is freely available on this server under the [Apache-2.0 license](http://www.apache.org/licenses/LICENSE-2.0).
-
-
-This page is our primary source of documentation, and is divided into the following sections.
-
-   ---
-
-  * [Introduction](intro/index) -- a brief introduction into model checking and JPF
-    * [What is JPF?](intro/what_is_jpf)
-    * [Testing vs. Model Checking](intro/testing_vs_model_checking)
-         - [Random value example](intro/random_example)
-         - [Data race example](intro/race_example)
-    * [JPF key features](intro/classification)
-    
-    ---
-
-  * [How to obtain and install JPF](install/index) -- everything to get it running on your machine
-    - [System requirements](install/requirements)
-    - Downloading [binary snapshots](install/snapshot) and [sources](install/repositories)
-    - [Creating a site properties file](install/site-properties)
-    - [Building, testing, and running](install/build)
-    - Installing the JPF plugins
-         - [Eclipse](install/eclipse-plugin) 
-         - [NetBeans](install/netbeans-plugin)
-    
-    ---
-         
-  * [How to use JPF](user/index) -- the user manual for JPF    
-    - [Different applications of JPF](user/application_types)
-    - [JPF's runtime components](user/components)
-    - [Starting JPF](user/run)
-    - [Configuring JPF](user/config)
-    - [Understanding JPF output](user/output)
-    - [Using JPF's Verify API in the system under test](user/api)
-    
-    ---
-        
-  * [Developer guide](devel/index) -- what's under the hood
-    * [Top-level design](devel/design)
-    * Key mechanisms, such as 
-        - [ChoiceGenerators](devel/choicegenerator)
-        - [Partial order reduction](devel/partial_order_reduction)
-        - [Slot and field attributes](devel/attributes)
-    * Extension mechanisms, such as
-        - [Listeners](devel/listener)
-        - [Search Strategies](devel/design)
-        - [Model Java Interface (MJI)](devel/mji)
-        - [Bytecode Factories](devel/bytecode_factory)
-    * Common utility infrastructures, such as
-        - [Logging system](devel/logging)
-        - [Reporting system](devel/report)
-    * [Running JPF from within your application](devel/embedded)
-    * [Writing JPF tests](devel/jpf_tests)
-    * [Coding conventions](devel/coding_conventions)
-    * [Hosting an Eclipse plugin update site](devel/eclipse_plugin_update) 
-        
-    ---
-        
-  * [JPF core project](jpf-core/index) -- description and link to jpf-core
-    
-    ---
-      
-  * [Related research and publications](papers/index)    
-
diff --git a/doc/install/build.md b/doc/install/build.md
deleted file mode 100644 (file)
index 9e8d3d6..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-# Building, Testing, and Running #
-
-If you downloaded binary snapshots, you don't have anything to build (except of creating/updating you [site.properties](./site-properties) file). 
-
-## Building JPF ##
-
-If you have cloned the project repositories you are interested in (which at least includes [jpf-core](../jpf-core/index)), you can build and test each of them by means of their included [Ant](http://ant.apache.org) `build.xml` scripts. Note that you have to install Ant and JUnit separately, e.g. following directions [here](../install/requirements).
-
-
-### Using the command line ###
-
-~~~~~~~~ {.bash}
-> cd jpf-core
-> ant test
-
-... lots of output, at the end you should see something like:
-BUILD SUCCESSFUL
-Total time: 2 minutes 31 seconds
-~~~~~~~~
-
-### Within NetBeans ###
-
- 1. run **File/Open Project..** from the application menu, entering the JPF project you just downloaded (e.g. "jpf-core")
- 1. select the project that appears in our project pane (e.g. "jpf-core")
- 1. run **Build** from the project context menu
-
-### Within Eclipse ###
-
-* Ensure that the `JAVA_HOME` environment variable points to the jdk1.6xxx directory. If it is empty or points to a JRE then errors such as **javac not found** maybe seen. If you do not want the system Java settings to point to jdk1.6xxx, you can also set project specific settings in eclipse.
-
-* If you eclipse settings are set to **Build Automatically** then the project after being cloned will be built.
-
-* To build a particular project in the Project menu select **Build Project**. All the dependencies for the project will be built automatically. 
-
-#### Project Specific JDK settings within Eclipse ####
-1. In Eclipse go to **Project** -> **Properties** 
-
-2. Select **Builders**
-
-3. Pick **Ant_Builder** -> click **Edit**
-
-4. Click on the **JRE** tab
-
-5. Select **Separate JRE** -> **Installed JREs**
-
-6. On Windows and Unix-based systems pick JDK1.6xxx. If it is not listed under the installed JREs, click on **Add**, browse your file system to where JDK1.6xxx resides and select. On OSx systems pick the JVM 1.6.0. 
-
-
-## Running JPF ##
-
-### Using the command line ###
-
-
-~~~~~~~~ {.bash}
-> cd jpf-core
-> java -jar build/RunJPF.jar src/examples/Racer.jpf
-JavaPathfinder v5.0 - (C) 1999-2007 RIACS/NASA Ames Research Center
-.....
-====================================================== statistics
-elapsed time:       0:00:00
-states:             new=9, visited=1, backtracked=4, end=2
-search:             maxDepth=5, constraints=0
-choice generators:  thread=8, data=0
-heap:               gc=8, new=291, free=32
-instructions:       3112
-max memory:         79MB
-loaded code:        classes=73, methods=1010
-
-====================================================== search finished: 1/12/10 2:30 PM
-~~~~~~~~
-
-### Using eclipse plugin ###
-
- 1. Right click on a .jpf file. Examples can be found in the src\examples directory in jpf-core
- 1. If the eclipse plugin is correctly installed, a Verify option will appear. 
- 1. Select the Verify option and the verification process of the system specified in the .jpf file begins
-
-Note that the Application.jpf file essentially replaces previous uses of eclipse launch configurations. The required element of a .jpf file is the `target=MAIN_CLASS` where `MAIN_CLASS` is the class containing main method of the system under test. Any other configurations that need to be specified can be added here. for example `listener=gov.nasa.jpf.tools.SearchMonitor`.   
-
-Specify `classpath=PATH_TO_BIN_DIRECTORY` to add the class files for the program under test to JPF's class path.  Windows users will need to use the double-backslash notation in specifying paths in the .jpf file.  An example .jpf file for the Windows platform is included below for convenience:
-
-~~~~~~~~ {.bash}
-target=mutex.DekkerTestMain
-report.console.property_violation=error,trace,snapshot
-listener=gov.nasa.jpf.listener.EndlessLoopDetector
-classpath=C:\\Users\\fred\\Documents\\ch02-mutex\\bin
-sourcepath=C:\\Users\\fred\\Documents\\ch02-mutex\\src,C:\\Users\\Fred\\Documents\\ch02-mutex\\src-test
-~~~~~~~~
-
-The .jpf file not only indicates the `target` and `classpath`, but it also turns on error reporting with trace generation (`report.console.property_violation`) and configures the source path (`sourcepath`).  Note that multiple source directories are specified using the comma separator.
-
-### Using eclipse Run Configuration ###
-
- 1. Select a .jpf file by clicking on it in the Package Explorer
- 1. Click **Run** -> **Run Configurations** -> **run-JPF-core**. It is important the correct .jpf file is selected when the configuration is run. 
-
-#### Windows users ####
-After a fresh install of jpf-core you may see the following when trying to use the Eclipse Run-jpf-core configuration:
-
-~~~~~~~~
-java.lang.NoClassDefFoundError: gov/nasa/jpf/Main
-Caused by: java.lang.ClassNotFoundException: gov.nasa.jpf.Main
-    at java.net.URLClassLoader$1.run(Unknown Source)
-    at java.security.AccessController.doPrivileged(Native Method)
-    at java.net.URLClassLoader.findClass(Unknown Source)
-    at java.lang.ClassLoader.loadClass(Unknown Source)
-    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
-    at java.lang.ClassLoader.loadClass(Unknown Source)
-Exception in thread "main" 
-~~~~~~~~
-
-In this particular case, the error was generated after the initial build after the clone had completed.  To resolve the issue, **refresh the Eclipse workspace** (F5 or right click Refresh).  After the refresh, the Run-jpf-core configuration should work as described above.
diff --git a/doc/install/eclipse-jpf.md b/doc/install/eclipse-jpf.md
deleted file mode 100644 (file)
index bae977d..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# eclipse-jpf #
-
-This is a plugin to launch JPF on selected application property files (*.jpf) from within Eclipse. This plugin is the Eclipse analog to netbeans-jpf. This plugin is minimal by design and serves mostly to start an external JPF process from within Eclipse.
-
-To this end, the plugin adds a "Verify.." popup menu item for *.jpf files that are selected in the package explorer window. 
-
-Depending on the selected application property file, output will appear either in the eclipse console view or a jpf-shell.
-
-The site.properties location can be entered in the "JPF Preferences" pane within the normal Eclipse Preferences window. The default location is `$HOME/.jpf/site.properties`.
-
-This project is *not* a normal JPF project, i.e. it does not follow the usual JPF directory structure and artifacts. This is an Eclipse plugin project that builds into a jar file (attached) that installs into Eclipse as a plugin. Of course that means you need an Eclipse installation that includes the Plugin Development Environment (PDE) in order to build this project.
-
-### Repository ###
-The eclipse-jpf source repository is located on http://babelfish.arc.nasa.gov/hg/jpf/eclipse-jpf
-
-### Installation ###
-If you have the eclipse PDE installed, the preferred way is to get the eclipse-jpf sources from the repository, build via the eclipse plugin Export Wizard into the <eclipse-home>/dropins folder and restart eclipse.
-
-If you don't have the eclipse PDE, you can either install this plugin via "Eclipse/Help/Install New Software..." by entering the the eclipse-jpf update site URL: 
-
-      http://babelfish.arc.nasa.gov/trac/jpf/raw-attachment/wiki/projects/eclipse-jpf/update
-
-or download the attached eclipse-jpf_<version>.jar file and move it into your <eclipse-home>/dropins folder. In both cases, you need to restart eclipse in order to load the plugin. Note however that this might not be the latest eclipse-jpf version and it might or might not work with your eclipse.
\ No newline at end of file
diff --git a/doc/install/eclipse-plugin.md b/doc/install/eclipse-plugin.md
deleted file mode 100644 (file)
index 2bcbb3a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# Installing the Eclipse JPF plugin #
-
-Note that this is assuming the latest Eclipse and Java versions, which is Eclipse 4.3.x and Java 7 at the time of this writing. Older versions might or might not work.
-There are three different ways to install the plugin, which are listed in the order of preference if you want to ensure that you are using the latest plugin version:
-
-### Build from sources ###
-If you have the Eclipse Plugin Development Environment installed (PDE -comes with standard Eclipse distribution), the preferred way is to download the [eclipse-jpf](./eclipse-jpf) sources from the repository, build the plugin into your <eclipse>/dropins/plugins directory, and restart Eclipse. This ensures you are using the latest version of the plugin, and the build process will tell you if your Eclipse is compatible.
-
-### Install from attached plugin jar ###
-Alternatively, you can download one of the attached eclipse-jpf_<version>.jar files, place it into your <eclipse>/dropins/plugins directory, and restart Eclipse.
-
-### Install from update site ###
-The most convenient, but least up-to-date way to install eclipse-jpf is to use the Eclipse/Help/Install New Software... dialog, by entering the the eclipse-jpf update site URL:
-
-     http://babelfish.arc.nasa.gov/trac/jpf/raw-attachment/wiki/projects/eclipse-jpf/update
diff --git a/doc/install/eclipse-plugin/update.md b/doc/install/eclipse-plugin/update.md
deleted file mode 100644 (file)
index 18ccf75..0000000
+++ /dev/null
@@ -1 +0,0 @@
-This is the target location for the eclipse-jpf update site.
\ No newline at end of file
diff --git a/doc/install/eclipse-plugin/update/features.md b/doc/install/eclipse-plugin/update/features.md
deleted file mode 100644 (file)
index f22f5b8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Nothing to see here, just a place holder to upload the eclipse-jpf feature.
\ No newline at end of file
diff --git a/doc/install/eclipse-plugin/update/plugins.md b/doc/install/eclipse-plugin/update/plugins.md
deleted file mode 100644 (file)
index 180eefa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Nothing to see here, just a place holder to upload the eclipse-jpf plugin.
\ No newline at end of file
diff --git a/doc/install/index.md b/doc/install/index.md
deleted file mode 100644 (file)
index b7f40b8..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# How to Obtain and Install JPF #
-
-The JPF core and most of its extensions are pure Java applications, so they are not many platform requirements other than sufficient memory and a reasonably fast machine. Use of IDEs is optional, but most JPF modules include out-of-the-box configuration files for both Eclipse and Netbeans.
-
-You can obtain JPF sources from the [Mercurial](http://mercurial.selenic.com/wiki/) repositories, but it is not recommended to clone this directory itself (you most likely would get old sub-repository revisions). You need at least the core of JPF, [jpf-core](../jpf-core/index) which can be built with [Ant](http://ant.apache.org) from the command line, or directly opened as a [NetBeans](http://www.netbeans.org) or [Eclipse](http://www.eclipse.org) project.
-
-The JPF core project already come with its configuration file, but you have to create a per-site [site.properties](site-properties) file.
-
-If you use the JPF shells (graphical JPF front-ends), you might also want to install the corresponding NetBeans or Eclipse adapter plugins, although shells are standalone Java (swing) applications that can also be used without an IDE.
-
-Here are the details:
-
-  - [System requirements](requirements)
-  - [Downloading binary snapshots](snapshot)
-  - [Downloading sources from the Mercurial repositories](repositories)
-  - [Creating a site properties file](site-properties)
-  - [Building, testing, and running](build)
-  - [Installing the Eclipse plugin](eclipse-plugin)
-  - [Installing the NetBeans plugin](netbeans-plugin)
\ No newline at end of file
diff --git a/doc/install/netbeans-jpf.md b/doc/install/netbeans-jpf.md
deleted file mode 100644 (file)
index 539e0df..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# netbeans-jpf #
-
-This is a plugin to launch JPF on selected application properties (*.jpf) files from within NetBeans. No worries, this is a minimal plugin that mainly starts an external process (JPF), so it doesn't muck with your NetBeans views.
-
-The main functions are
-
- - start the JPF shell in an external process
- - wait for editor positioning requests from the JPF shell, and show the corresponding source lines
-
-Why is this named differently than all the other projects? Because it is a different kind of project: this is *not* a normal JPF project, i.e. it is not a freeform NetBeans project with the usual JPF directory structure and artifacts. It is a NetBeans module, and it's main artifact is a *.nbm file in the build directory.
\ No newline at end of file
diff --git a/doc/install/netbeans-plugin.md b/doc/install/netbeans-plugin.md
deleted file mode 100644 (file)
index c5360a4..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# Installing the NetBeans JPF plugin #
- 1. Download and install [jpf-core](../jpf-core/index), e.g. from the [Mercurial repository](../install/repositories)
- 2. -------------- take a break ---------------
- 3. Download the `gov-nasa-jpf-netbeans-runjpf.nbm` file from [here](http://babelfish.arc.nasa.gov/trac/jpf/attachment/wiki/install/netbeans-plugin/gov-nasa-jpf-netbeans-runjpf.nbm).
- 4. From within Netbeans go to **Tools**->**Plugins** (Alt+T followed by Alt+g)
- 5. Select the **Downloaded** tab
- 6. Click on **Add Plugins...** (Alt+A)
- 7. Select the `gov-nasa-jpf-netbeans-runjpf.nbm` file that was downloaded in step 3
- 8. Select **install**
- 9. Agree to the License agreement
- 10. Restart Netbeans
\ No newline at end of file
diff --git a/doc/install/repo_shell.md b/doc/install/repo_shell.md
deleted file mode 100644 (file)
index e5609b1..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-# Checkout and Build from Shell Prompt (Unix) #\r
-\r
-While there is a CVS repository on the JPF Sourceforge site, it is not in use anymore. The current version is kept in the Subversion repository.\r
-\r
-<note> We will shift to a distributed version control system (Mercurial or Git) soon</note>\r
-\r
-\r
-# SVN #\r
-\r
-This is not a general introduction of [nor do we cover details of [[https://sourceforge.net/svn/?group_id=136825|Subversion on Sourceforge]((SVN),)(http://subversion.tigris.org|Subversion]]). To obtain the current JPF version, execute the following command from a shell prompt:\r
-\r
-~~~~~~~~ {.bash}\r
->svn checkout https://javapathfinder.svn.sourceforge.net/svnroot/javapathfinder/trunk\r
-~~~~~~~~\r
-\r
-To update later-on, enter from within one of the javapathfinder directories\r
-\r
-\r
-~~~~~~~~ {.bash}\r
->svn update\r
-~~~~~~~~\r
-\r
-To commit (in case you are a project member and have a sourceforge account), use\r
-\r
-\r
-~~~~~~~~ {.bash}\r
->svn commit -m "commit message" \r
-~~~~~~~~\r
-\r
-In order to build and test JPF from the commandline, you need Ant and JUnit. If you do not want to use the scripts and versions that are provided with JPF, make sure you have set up your *CLASSPATH* to contain both tools. As of Ant 1.6.5 and JUnit 4.1, this involves the following environment settings:\r
-\r
-\r
-~~~~~~~~ {.bash}\r
->export PATH=$PATH:<your-ant-dir>/bin\r
->export CLASSPATH=<your-ant-dir>/lib/ant.jar:<your-junit-dir>/junit-4.1.jar\r
-~~~~~~~~\r
-\r
-~~~~~~~~\r
-<note tip> for your convenience, we have added all required external libraries \r
-and scripts to the *build-tools* directory, so you do not have to install \r
-any of the external components.</note>\r
-~~~~~~~~\r
-Now you can proceed as described in section Building JPF from a Command Line. For the impatient reader, this is mainly one command\r
-\r
-\r
-~~~~~~~~ {.bash}\r
->cd javapathfinder-trunk\r
->build-tools/bin/ant run-tests\r
-\r
-Buildfile: build.xml\r
-\r
-init:\r
-    [mkdir] Created dir: /users/pcmehlitz/projects/javapathfinder-trunk/build\r
- ...\r
-compile-jpf:\r
-    [javac] Compiling 543 source files to /users/pcmehlitz/projects/javapathfinder-trunk/build/jpf\r
- ...\r
-run-tests:\r
-     [echo] --- running Junit tests from build/test..\r
-    [junit] Running TestJavaLangObjectJPF\r
-    [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.876 sec\r
- ...\r
-BUILD SUCCESSFUL\r
-Total time: 2 minutes 25 seconds\r
-~~~~~~~~\r
-\r
-or (especially for non-Unix folk)\r
-\r
-\r
-~~~~~~~~ {.bash}\r
->java RunAnt run-tests\r
-~~~~~~~~\r
-\r
-which should compile the whole system and runs the regression test suite with the provided Ant and JUnit versions.
\ No newline at end of file
diff --git a/doc/install/repositories.md b/doc/install/repositories.md
deleted file mode 100644 (file)
index 7d43566..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-# JPF Source Repository Access #
-
-JPF sources are kept as [Mercurial](http://www.selenic.com/mercurial) repositories within the http://babelfish.arc.nasa.gov/hg/jpf directory. You need to clone the subrepositories (e.g. http://babelfish.arc.nasa.gov/hg/jpf/jpf-core) that you are interested in, **not** the root directory ../hg/jpf itself (which most likely will give you old subrepo revisions).
-
-We provide anonymous, public read access. If you want to push your changes back to the repository, and you are not a NASA Ames employee, you need to [obtain a JPF contributor account](wiki:about/account).
-
-Mercurial is a [Distributed Version Control System](http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/) (DVCS), like Git. If you are not familiar with this, it means "all repositories are created equal", and you have to read up a bit. The foremost authority is ["Mercurial: The Definite Guide"](http://hgbook.red-bean.com/).
-
-For the inpatient, we also provide a short [Mercurial primer](../devel/mercurial).
-
-## Command Line Access ##
-
-To check out the jpf-core use the mercurial command `clone`:
-
-~~~~~~~~ {.bash}
-> cd ~/projects
-
-> hg clone http://babelfish.arc.nasa.gov/hg/jpf/jpf-core
-destination directory: jpf-core
-requesting all changes
-...
-added 71 changesets with 2045 changes to 1694 files
-updating working directory
-683 files updated, 0 files merged, 0 files removed, 0 files unresolved
-~~~~~~~~
-
-The same process can be repeating by substituting `jpf-core` with the [project](../projects/index) you are interested in. You can install the projects wherever you want, but you have to remember where you installed them for the subsequent [site.properties](../install/site-properties) configuration.
-
-To update your local repository, change to its directory and do `pull` (don't forget the `-u` option, or your working directories will not get updated) 
-
-~~~~~~~~ {.bash}
-> cd ~/projects/jpf-core
-> hg pull -u
-~~~~~~~~
-
-If you want - and are allowed - to push back your changes, you use **`https://`**`babelfish.arc.nasa.gov/hg/jpf/<project>` as the URL, which will require entering your user-name and password. Before pushing the changes you have to commit the changes from your working directory to your local repository. 
-
-~~~~~~~~ {.bash}
-> cd ~/projects/jpf-core
-> hg commit -m "this commits to the local repository"
-~~~~~~~~
-
-The changes now can be pushed to the central repository using the following command
-
-~~~~~~~~ {.bash}
-> hg push https://babelfish.arc.nasa.gov/hg/jpf/jpf-core
-~~~~~~~~
-
-## Mercurial Support within NetBeans ##
-
-There is no need to install any plugins, NetBeans is distributed with Mercurial support.
-
-
-## Mercurial Plugin for Eclipse ##
-
-To work within Eclipse
-
-* Download and install the [MercurialEclipse](http://javaforge.com/project/HGE) plugin, which at the time of this writing is available from the update site: http://cbes.javaforge.com/update (the usual Eclipse spiel: **Help** -> **Install New Software...** -> **add site**, enter the update URL above) 
-
-* In the eclipse menu: **File** -> **Import** -> **Mercurial** -> **Clone repository using Mercurial** -> **Next**
-
-* In the repository location, URL, specify http://babelfish.arc.nasa.gov/hg/jpf/jpf-core
-
-* Check the box for 'Search for .project files in clone and use them to create projects'
-
-* Click on **Finish** 
-
-The steps listed above will clone the repository in your workspace. Right clicking on the project will show a 'Team' option that allows to perform all the version control operations. 
diff --git a/doc/install/requirements.md b/doc/install/requirements.md
deleted file mode 100644 (file)
index ccec451..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-# System Requirements #
-
-## Java ##
-Most of the JPF components, including the [jpf-core](../jpf-core/index), are pure Java applications. The minimal version is Java SE 8 (if you have to use JDK 1.7 or JDK 1.6 you have to check out the 'java-7' and 'java-1.6' branches of our repository, respectively), we generally advise to use the latest stable Java version that is available for your platform. You can find out about your java by running the following statement from the command line.
-
-~~~~~~~~ {.bash}
-> java -version
-java version "1.8.0_20"
-...
-~~~~~~~~
-
-JPF is a resource hungry application. We recommend at least 2Gb of memory, and generally use a `-Xmx1024m` setting when launching Java. The disk footprint for most JPF projects is fairly small, the jpf-core takes about 40M when fully expanded with sources, compiled classes and jar files. The binary distribution (jar files) takes less than 1.5M.
-
-Some JPF projects do require 3rd party native executables (like DLLs) that are platform specific. Please refer to the specific project pages for details.
-
-### Java specifics for Windows ###
-Make sure you have the JDK installed, otherwise there is no javac compiler available.
-
-In order to build JPF from a Windows Command Prompt (executing `ant.bat` from inside the respective JPF project directory), you have to set the `JAVA_HOME` environment variable. 
-
-### Java specifics for OS X ###
-On Mac OS X 10.10, Java 1.7 is default, but `/Applications/Utilities/Java Preferences.app` can change the setting. In some cases, it may be necessary to manually change the symlink that determines which version is default:
-
-~~~~~~~~ {.bash}
-sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/Current
-sudo ln -s 1.8 /System/Library/Frameworks/JavaVM.framework/Versions/Current
-~~~~~~~~
-
-## Mercurial (Version Control System) ##
-If you want to download the JPF source repositories, you need to install the [Mercurial](http://mercurial.selenic.com/wiki/) distributed version control system on your machine, which requires [Python](http://www.python.org). If you are using a Windows machine, you can install [TortoiseHg](http://tortoisehg.bitbucket.org/), which provides a Windows Explorer extension and includes Python.
-
-On some Mac OS X systems, it may be necessary to set the `LC_ALL` and `LANG` environment variables for Mercurial to work correctly.
-
-in `~/.bashrc`:
-
-~~~~~~~~ {.bash}
-export LC_ALL=en_US.UTF-8
-export LANG=en_US.UTF-8 
-~~~~~~~~
-
-in `~/.cshrc`:
-
-~~~~~~~~ {.bash}
-setenv LC_ALL en_US.UTF-8
-setenv LANG en_US.UTF-8 
-~~~~~~~~
-
-
-If you already have Eclipse installed, and want to download the source repositories from within the IDE, you need the [MercurialEclipse](http://javaforge.com/project/HGE) plugin, which you can install from this update-site: http://cbes.javaforge.com/update
-
-Note that NetBeans comes with Mercurial support by default.
-
-
-## Apache Ant ##
-
-Although you can also build from Eclipse, we use [Apache Ant](http://ant.apache.org) as our primary build system. **Ant is no longer included in the jpf-core distribution** so you have to install it separately. Currently (as of Ant 1.9.3), this involves
-
- * getting Ant binaries e.g. from http://www.apache.org/dist/ant/binaries/
- * setting the `ANT_HOME` environment variable to the directory where you unpacked the binaries
- * adding `ANT_HOME/bin` to your `PATH` environment variable
-
-
-## JUnit ##
-
-Our Ant script (build.xml) includes a `test` target which uses [JUnit](http://junit.org) to run regression tests. **JUnit is no longer included in the jpf-core distribution**. For JUnit-4.11 installation involves the following steps
-
- * get junit-<version>.jar and hamcrest-core-<version>.jar, e.g. from the links on https://github.com/junit-team/junit/wiki/Download-and-Install
- * add both jars to your `CLASSPATH` environment variable 
-
-
-## JPF IDE plugins ##
-
-JPF components come with project configurations for both [NetBeans](http://www.netbeans.org) and [Eclipse](http://www.eclipse.org), so you might want to use your favorite IDE. Since the JPF build process is [Ant](http://ant.apache.org)-based, NetBeans is generally a better fit because it is Ant-based and can make direct use of your JPF site configuration.
-
-If you want to install the [Eclipse plugin](./eclipse-jpf), you need an Eclipse version >= 3.5 (Galileo) **running under JavaSE-1.8**. Please see the [Installing the Eclipse JPF plugin](./eclipse-plugin) page for details.
-
-If you want to go with Eclipse and have to rebuild the JPF [Eclipse plugin](./eclipse-jpf), make sure you install the Eclipse Plugin Development Environment (PDE) from the respective Eclipse server.
-
-If you want to use the [NetBeans plugin](./netbeans-jpf), the minimal NetBeans version is 6.5.
\ No newline at end of file
diff --git a/doc/install/site-properties.md b/doc/install/site-properties.md
deleted file mode 100644 (file)
index 691fa4d..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# Creating  a site.properties file #
-
-The site.properties file tells JPF at startup time where to look for installed projects, so that it can add classpaths accordingly without you having to type off your fingers. It is a normal [Java properties](http://en.wikipedia.org/wiki/.properties) file, which supports a few additional things like key expansion.
-
-While you can tell JPF at startup time where to look for `site.properties`, we recommend using the default location, which is **`<user.home>/.jpf/site.properties`**. If you don't know what value the standard Java system property `user.home` has on your machine, please run the attached Java program. On Unix systems, this is your home directory.
-
-Assuming that you installed your JPF projects under `<user.home>/projects/jpf`, a typical `site.properties` looks like this:
-
-~~~~~~~~ {.bash}
-# JPF site configuration
-
-jpf-core = ${user.home}/projects/jpf/jpf-core
-
-# numeric extension
-jpf-numeric = ${user.home}/projects/jpf/jpf-numeric
-
-# annotation-based program properties extension
-jpf-aprop = ${user.home}/projects/jpf/jpf-aprop
-
-extensions=${jpf-core},${jpf-aprop}
-
-#... and all your other installed projects
-~~~~~~~~ 
-
-If you are a Windows user, and you want to enter absolute pathnames, don't use unquoted backslashes '\' since the `java.util.Properties` parser would interpret these as special chars (like `"\n"`). You can use ordinary slashes '/' instead. To avoid drive letters, use system properties like `${user.home}`.
-
-
-A sample site.properties file is attached to this page. Note that the "`${..}`" terms are automatically expanded by JPF, i.e. you do not have to enter explicit paths.
-
-Each installed project is defined by a "`<project-name> = <project-directory>`" key/value pair. The project name is usually the same as the repository name.
-
-Note that we don't require anymore that all projects are in the extensions list, **but** jpf-core (or wherever your JPF core classes are) now needs to be in there. In fact, you probably want to have only `jpf-core` in `extensions`, and use the `@using <project-name>` for the other ones from either your project properties (jpf.properties, for project dependencies) or - usually - from your application properties (*.jpf) files. See [JPF configuration](../user/config) for details.
\ No newline at end of file
diff --git a/doc/install/snapshot.md b/doc/install/snapshot.md
deleted file mode 100644 (file)
index d7839c1..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# Downloading Binary Snapshots #
-
-
-Available binary snapshots are attached as *.zip archives to the [jpf-core](../jpf-core/index) page. Just click the on the download link and tell your browser where to store them on disk, which you need to remember for your subsequent [site.properties](../install/site-properties) configuration. We recommend putting all JPF modules under a single parent directory that holds the site.properties file:
-
-~~~~~~~~ {.bash}
-jpf/
-     site.properties
-     jpf-core/
-     jpf-symbc/
-     …
-~~~~~~~~
-
-Many JPF modules are still fast moving, so we recommend using the source repositories to stay up-to-date. Our policy is to only push changes to this server which pass all regression tests
\ No newline at end of file
diff --git a/doc/intro/classification.md b/doc/intro/classification.md
deleted file mode 100644 (file)
index 667e755..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# JPF Key Features #
-
-By now, it should be clear that JPF is not just a model checker: it is a JVM that can be used for model checking. However, if you are familiar with formal methods, you might want to know what kind of model checking methods and features are supported.
-
-Some of the basic model checking traits are:
-
-* **Explicit State** model checking is JPF's standard mode of operation. It means JPF keeps track of concrete values of local variables, stackframes, heap objects and thread states. Other than the intentionally different scheduling behavior, JPF should produce the same results like a normal JVM. Of course it is slower (it is a JVM running on top of a JVM, doing a lot of additional work).
-
-* **Symbolic Execution** means that JPF can perform program execution with symbolic values obtained from how a certain variable was used along the current path of execution (e.g. `x>0 && x<43`). Moreover, JPF can even mix concrete and symbolic execution, or switch between them. Please see the Symbolic Pathfinder project documentation for details.
-
-* **State Matching** is a key mechanism to avoid unnecessary work. The execution state of a program mainly consists of heap and thread-stack snapshots. While JPF executes, it checks every new state if it already has seen an equal one, in which case there is no use to continue along the current execution path, and JPF can backtrack to the nearest non-explored non-deterministic choice. What variables contribute to state matching, and how state matching is performed can be controlled by the user.
-
-* **Backtracking** means that JPF can restore previous execution states, to see if there are unexplored choices left. For instance, if JPF reaches a program end state, it can walk backwards to find different possible scheduling sequences that have not been executed yet. While this theoretically can be achieved by re-executing the program from the beginning, backtracking is a much more efficient mechanism if state storage is optimized.
-
-* **Partial Order Reduction** is what JPF employs to minimize context switches between threads that do not result in interesting new program states. This is done on-the-fly, i.e. without prior analysis or annotation of the program, by examining which instructions can have inter-thread effects. While this is fast, it cannot handle the “diamond case”, since it cannot look ahead of the current execution. 
-
-JPF's flexibility is achieved by an architecture that provides a large number of extension points, of which the most important ones are:
-
- * search strategies - to control in which order the state space is searched
- * listeners - to monitor and interact with JPF execution (e.g. to check for new properties)
- * native peers - to model libraries and execute code at the host VM level
- * bytecode factories - to provide different execution models (like symbolic execution)
- * publishers - to generate specific reports
-
-In general, flexibility through configuration is JPF's answer to the scalability problem of software model checking.
\ No newline at end of file
diff --git a/doc/intro/index.md b/doc/intro/index.md
deleted file mode 100644 (file)
index 8fcec1f..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-# Introduction #
-JPF started as a software model checker, but nowadays, JPF is a runtime system with many different execution modes and extensions which go beyond model checking. All the various modes of JPF, while serving different purposes, used to verify Java programs by
-
- * detecting and explaining defects
- * collecting "deep" runtime information like coverage metrics
- * deducing interesting test vectors and creating corresponding test drivers
- * and many more...   
-
-Although JPF is mostly associated with software model checking, it can be applied in variety of ways.  People often confuse this with testing, and indeed JPF's notion of model checking can be close to systematic testing. Below we use a simple example that illustrates the differences.
-
-Here is the outline of this section:
-
-  * [What is JPF?](what_is_jpf)
-  * [Testing vs. Model Checking](testing_vs_model_checking)
-    * [Random value example](random_example)
-    * [Data race example](race_example)
-  * [JPF key features](classification)
diff --git a/doc/intro/race_example.md b/doc/intro/race_example.md
deleted file mode 100644 (file)
index bb7074b..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-# Example: Data Race #
-
-That's nice, but of course we also could have provoked the error in our random value example by using explicit loops instead of the `Random.nextInt()` calls, i.e. by explicitly enumerating all possible `a` and `b` values in our program. This would be typically done in a program that is a dedicated test driver, in a process which is called *systematic testing*. However, the program we want to verify might not be a test driver, and we might not even have the sources so that we could modify it accordingly.
-
-But the real show stopper for systematic testing lies within the instructions representing choices: at the application level, we might neither be aware of that there are choices, what the choice values are, nor be able to explicitly pick them.
-
-To demonstrate this point, let us look at a little concurrency example using two threads of execution. Quite obviously, the program produces different results depending on if line (2) or (4) gets executed first. But assuming we can't control what happens in (1) and (2), this time we cannot explicitly enumerate the choices - they are made by the system scheduler, i.e. outside of our application.
-
-~~~~~~~~ {.java}
-public class Racer implements Runnable {
-     int d = 42;
-     public void run () {
-          doSomething(1000);                   // (1)
-          d = 0;                               // (2)
-     }
-     public static void main (String[] args){
-          Racer racer = new Racer();
-          Thread t = new Thread(racer);
-          t.start();
-          doSomething(1000);                   // (3)
-          int c = 420 / racer.d;               // (4)
-          System.out.println(c);
-     }
-     static void doSomething (int n) {
-          // not very interesting..
-          try { Thread.sleep(n); } catch (InterruptedException ix) {}
-     }
-}
-~~~~~~~~
-
-Chances are, we don't encounter this defect at all during normal testing:
-
-~~~~~~~~ {.bash}
-> java Racer
-10
-> 
-~~~~~~~~
-
-Not so with JPF. Being a real virtual machine, there is nothing we can't control. And being a different kind of a Java virtual machine, JPF recognizes that 'racer' is an object that is shared between two threads, and hence executes all possible statement sequences / scheduling combinations in which this object can be accessed. This time, we give the complete output, which also shows the trace (the execution history) that lead to the defect found by JPF:
-
-~~~~~~~~ {.bash}
-> bin/jpf Racer
-JavaPathfinder v4.1 - (C) 1999-2007 RIACS/NASA Ames Research Center
-====================================================== system under test
-application: /Users/pcmehlitz/tmp/Racer.java
-
-====================================================== search started: 5/24/07 12:32 AM
-10
-10
-
-====================================================== error #1
-gov.nasa.jpf.jvm.NoUncaughtExceptionsProperty
-java.lang.ArithmeticException: division by zero
-        at Racer.main(Racer.java:20)
-
-====================================================== trace #1
------------------------------------------------------- transition #0 thread: 0
-gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet {>main}
-      [insn w/o sources](282)
-  Racer.java:15                  : Racer racer = new Racer();
-  Racer.java:1                   : public class Racer implements Runnable {
-      [insn w/o sources](1)
-  Racer.java:3                   : int d = 42;
-  Racer.java:15                  : Racer racer = new Racer();
-  Racer.java:16                  : Thread t = new Thread(racer);
-      [insn w/o sources](51)
-  Racer.java:16                  : Thread t = new Thread(racer);
-  Racer.java:17                  : t.start();
------------------------------------------------------- transition #1 thread: 0
-gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet {>main,Thread-0}
-  Racer.java:17                  : t.start();
-  Racer.java:19                  : doSomething(1000);                   // (3)
-  Racer.java:6                   : try { Thread.sleep(n); } catch (InterruptedException ix) {}
-      [insn w/o sources](2)
-  Racer.java:6                   : try { Thread.sleep(n); } catch (InterruptedException ix) {}
-  Racer.java:7                   : }
-  Racer.java:20                  : int c = 420 / racer.d;               // (4)
------------------------------------------------------- transition #2 thread: 1
-gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet {main,>Thread-0}
-  Racer.java:10                  : doSomething(1000);                   // (1)
-  Racer.java:6                   : try { Thread.sleep(n); } catch (InterruptedException ix) {}
-      [insn w/o sources](2)
-  Racer.java:6                   : try { Thread.sleep(n); } catch (InterruptedException ix) {}
-  Racer.java:7                   : }
-  Racer.java:11                  : d = 0;                               // (2)
------------------------------------------------------- transition #3 thread: 1
-gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet {main,>Thread-0}
-  Racer.java:11                  : d = 0;                               // (2)
-  Racer.java:12                  : }
------------------------------------------------------- transition #4 thread: 0
-gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet {>main}
-  Racer.java:20                  : int c = 420 / racer.d;               // (4)
-
-====================================================== search finished: 5/24/07 12:32 AM
->
-~~~~~~~~
-
-Looking at the output created by our test program, we see the result `"10"` printed twice, but that doesn't confuse us anymore. From our first example, we know this simply means that JPF first tried two scheduling sequences that normally terminated the program without provoking the defect, before finally picking the one that causes the error.
-
-It still might be a bit confusing that the printed trace contains some source lines twice. Ignoring the details of its choice generation mechanism, this is caused by JPF executing bytecode instructions, not source lines, and a single source line can easily get translated into a number of bytecode instructions. This would go away if we configure JPF so that it reports the executed bytecode, but at the cost of much larger trace that is harder to read. What is more interesting is that JPF tells us about the thread choices it made in each transition (the lines starting with `gov.nasa.jpf.jvm.ThreadChoice..`).
diff --git a/doc/intro/random_example.md b/doc/intro/random_example.md
deleted file mode 100644 (file)
index 3499e9f..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-# Example: `java.util.Random` #
-
-We start with a simple example that uses java.util.Random. Consider the following program that obtains two random values in (2) and (3), and then performs some computation (4) with them.
-
-~~~~~~~~ {.java}
-import java.util.Random;
-
-public class Rand {
-     public static void main (String[] args) {
-          Random random = new Random(42);      // (1)
-          
-          int a = random.nextInt(2);           // (2)
-          System.out.println("a=" + a);
-          
-          //... lots of code here
-          
-          int b = random.nextInt(3);           // (3)
-          System.out.println("  b=" + b);
-         
-          int c = a/(b+a -2);                  // (4)
-          System.out.println("    c=" + c);         
-     }
-}
-~~~~~~~~
-
-
-## Testing ##
-
-Executing this program with a normal Java VM yields something like the following output. If we don't provide an explicit seed when creating the Random object in (1), the result is going to differ between runs, but every run will choose just a single `a` and `b` value (i.e. print just a single `"a=.."` and `"b=.."` line.
-
-~~~~~~~~ {.java}
-> java Rand
-a=1
-  b=0
-    c=-1
-> 
-~~~~~~~~
-
-Let's look at a graphical representation of all the ways our program could be executed, and how it actually was executed in our test run. The nodes of the graph represent *program states*, and the edges *transitions* the execution could take from a certain state.
-
-![Figure 1: Random example](../graphics/sw-model-checking.svg){align=center width=700}
-
-## Model Checking ##
-
-Enter JPF - not much different results if we start JPF as a plain 'java' replacement. The only difference is that it (a) takes longer to complete, and (b) tells us something about a "search", which hints on that something more than in our test run is going on
-
-~~~~~~~~ {.bash}
-> bin/jpf Rand
-JavaPathfinder v4.1 - (C) 1999-2007 RIACS/NASA Ames Research Center
-====================================================== system under test
-application: /Users/pcmehlitz/tmp/Rand.java
-
-====================================================== search started: 5/23/07 11:48 PM
-a=1
-  b=0
-    c=-1
-
-====================================================== results
-no errors detected
-
-====================================================== search finished: 5/23/07 11:48 PM
->
-~~~~~~~~
-
-What is this "search" supposed to mean? Looking at source line (4) we realize that there is a potential problem: for certain `a` and `b` values, this expression can cause a division by zero `ArithmeticException`. Depending on the random seed used in (1), it's quite possible we would never encounter this case if we run (i.e. test) the program with a normal JVM.
-
-Re-enter JPF - but this time we tell it to not only consider single values for `a` and `b`, but look at all possible choices:
-
-~~~~~~~~ {.bash}
-> bin/jpf +cg.enumerate_random=true Rand
-JavaPathfinder v4.1 - (C) 1999-2007 RIACS/NASA Ames Research Center
-====================================================== system under test
-application: /Users/pcmehlitz/tmp/Rand.java
-
-====================================================== search started: 5/23/07 11:49 PM
-a=0
-  b=0
-    c=0
-  b=1
-    c=0
-  b=2
-
-====================================================== error #1
-gov.nasa.jpf.jvm.NoUncaughtExceptionsProperty
-java.lang.ArithmeticException: division by zero
-        at Rand.main(Rand.java:15)
-....
->
-~~~~~~~~
-
-What has happened? By specifying "+vm.enumerate_random=true" we told JPF to consider all possible values for expressions (2) and (3). JPF starts with `"a=0"`, then picks `"b=0"`, which yields a valid `"c=0"` value. But instead of terminating like a normal VM, JPF recognized that there are more choices left, so it backtracks to (3) and picks `"b=1"`. Again, no problem here with computing `"c=0"`. Back to (3), JPF now tries `"b=2"`, which of course spells disaster for our little program when executing (4), as can be seen by the following error report.
-
-Here is a graphical representation of this search process. It should be noted that JPF per default only runs up to the point where it finds an error or there are no more choices left to explore. But if we would somehow fix the `"a=0,b=2"` case, JPF would still find the `"a=1,b=1"` case in the next run, since it systematically tries all choices. No matter what error it finds, JPF also keeps the complete trace (execution path) how it got to this error (denoted by the red arrows), which means we don't have to debug the program to find out.
-
-![Figure 2: Random example](../graphics/sw-model-checking-2.svg){align=center width=450}
diff --git a/doc/intro/testing_vs_model_checking.md b/doc/intro/testing_vs_model_checking.md
deleted file mode 100644 (file)
index 56b41d5..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Testing vs. Model Checking #
-
-So what JPF does is test our program for defects? No, it usually does more, at least when used as a model checker. How does testing differ from model checking?
-
-Software testing is an empirical set of techniques where you execute your program with a number of inputs in order to find out if it behaves correctly. This comes with two parts that involve the right choices: test input and test oracle.
-
-![Figure 1: Testing](../graphics/states-testing.svg){align=center}
-
-Testing techniques differ on how we choose the input (random, "interesting" problem domain values like corner cases etc.), and on how much knowledge about the SUT and its execution environment we assume (black/grey/white box), which especially affects how we can define and check correct behavior. This involves a lot of educated guesses, or as Edsger Dijkstra has put it: "program testing can at best show the presence of errors but never their absence". We usually compensate this by performing "enough" tests - which would be the next guess. Testing complex systems can easily turn into finding a needle in a haystack. If you are a good tester, you make the right guesses and hit the defect that is inevitably there. If not, don't worry - your users will find it later.
-
-![Figure 2: Model checking](../graphics/states-mc.svg){align=center}
-
-[Model Checking](http://en.wikipedia.org/wiki/Model_checking) as a [Formal Method](http://en.wikipedia.org/wiki/Formal_methods) does not depend on guesses. At least as the theory goes, if there is a violation of a given specification, model checking will find it. Model checking is supposed to be a rigorous method that exhaustively explores all possible SUT behaviors. 
-
-To illustrate this, look at the [Random value example](random_example), which shows how testing differs from model checking if we have a program that uses a sequence of random values: the test always processes just one set of values at a time, and we have little control over which ones. Model checking doesn't stop until it has checked all data combinations or has found an error.
-
-With the random example, we can at least see the choices in our program. Consider a concurrent program, such as [Data race example](race_example) - do you know where the operating system switches between threads? All we know is that different scheduling sequences can lead to different program behavior (e.g. if there are data races), but there is little we can do in our tests to force scheduling variation. There are program/test spec combinations which are "untestable". Being a virtual machine, our software model checker doesn't suffer the same fate - it has complete control over all threads of our program, and can execute all scheduling combinations.
-
-![Figure 3: Threads interleaving](../graphics/interleavings.svg){align=center width=550}
-
-That is the theory. In reality "all possible" can be a pretty large number - too large for existing computing resources or our patience. Just assume the number of different scheduling sequences of a program consisting of N threads P,,1,, .. P,,N,, that each have n,,i,, atomic instruction sequences.
-
-For 2 threads with 2 atomic sections each this gives us 6 different scheduling combinations. For 8 sections the result is 12870, 16 sections yield 601080390 - that is why it is called *state explosion*. Software model checking has a scalability problem, even more so than model checking of hardware, since programs usually have a lot more states.
-
-There are several things we can do. First, we can optimize the model checker, which is simply an engineering feat. Next, we can find program states which are equivalent with respect to the properties we are checking, which can be done with various degrees of abstractions and value representations. Last, we can try to get to the defect first, before we run out of time or memory. But this is where the boundary between testing and model checking becomes blurred, as it involves things like heuristics about interesting input values or system behaviors, and these heuristics tend to drop reachable program states.
-
-JPF does all of the above to curb the state space explosion, and most things are configured instead of hardwired, so you don't depend on built-in heuristics. But no matter how much we shrink the state space, JPF can still observe a lot more about the program execution than normal tests (i.e. we can be more precise with our oracles), and it still knows about the execution history in case we find a defect, which is always just the first part - we also need to understand it so that it can be fixed eventually. 
-
diff --git a/doc/intro/what_is_jpf.md b/doc/intro/what_is_jpf.md
deleted file mode 100644 (file)
index e8a5ce2..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# What is JPF? #
-
-That depends on how you configure it. 
-First and foremost, there is no single, monolithic JPF - it is a runtime configured combination of different components. The project *jpf-core* is the essential component that constitutes the core structure of JPF. 
-Here we explain what *jpf-core* is.
-<!--- JPF is designed in a way which can be easily extended.
-We therefore restrict ourselves here to what the *jpf core* is, but keep in mind it is only primus inter pares among JPF components. --->
-
-## The Core : a VM that supports Model Checking ##
-
-![Figure 1: High level view of JPF](../graphics/jpf-basic.svg){align=center width=400}
-
-The JPF core is a Virtual Machine (VM) for Java™ bytecode. That means that JPF is a program which executes the system under test (SUT). The VM of JPF is able to handle bytecode instructions that are created by a standard Java compiler. While execution semantics of Java bytecodes are clearly defined in [Sun's Java virtual machine specifications](http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html/), we have little hardwired semantics in JPF - the VM instruction set is represented by a set of classes that can be replaced. 
-JPF is a special VM. JPF itself is written in Java, so it is not as fast as your normal Java. That implies  that JPF is VM which is running on top of another VM. 
-
-As JPF executes the SUT, it checks for certain properties which are given to JPF as input. Some of the properties that can be checked by JPF are unhandled exceptions, deadlocks, and user-defined assertions which are used to test properties of the code's behavior.
-JPF gets back to you with a report that says if the properties hold and/or which verification artifacts have been created by JPF for further analysis (like test cases). 
-
-JPF (theoretically) explores *all* potential executions in a systematic way. In contrast, an ordinary JVM executes the code in only one possible way.
-Basically, JPF can identify points, which represent *execution choices*, in your program from which the execution could proceed differently. Then it systematically explores all of them.
-Typical execution choices are different scheduling sequences or random values, but JPF allows you to introduce your own type of choices such as user input or state machine events.
-
-The number of paths can grow out of hand, and it usually will. This is known as the most challenging problem in software model checking referred to as *state space explosion problem*. 
-JPF uses different ways to mitigate this problem. The first line of defense employed by JPF is *state matching*: each time JPF reaches a choice point, it checks if it has already seen a similar program state, in which case it can safely abandon this path, *backtrack* to a previous choice point that has still unexplored choices, and proceed from there. That's right, JPF can restore program states, which is like telling a debugger "go back 100 instructions".
-
-So what are these features used for? Normally to find defects in the SUT, but what kind of defects? By now you know the answer: it depends on how you configure JPF. By default, the core checks for properties that can be identified by the VM without you having to specify them: deadlocks and unhandled exceptions (which also covers Java `assert` expressions). We call these *non-functional* properties, and no application should violate them. But JPF doesn't stop there - you can define your own properties, which is mostly done with so called *listeners*, little "plugins" that let you closely monitor all actions taken by JPF, like executing single instructions, creating objects, reaching a new program state and many more. An example of a property implemented in the form of a listener is a race detector, which identifies unsynchronized access to shared variables in concurrent programs (the JPF core comes with two of them).
-
-One additional feature that comes in handy in case JPF finds a defect is the complete execution history that leads to the defect, including every executed bytecode instruction. We call this a program *trace*, and it is invaluable to find out what really caused the defect. Think of a deadlock - usually there is not much you can directly deduce from a snapshot of call stacks.
-
-All this explains why JPF is called "a debugger toolbox on steroids": first it automatically executes your program in all possible ways to find defects you don't even know about yet, then it explains you what caused these defects.
-
-## Caveat : not a lightweight tool ##
-
-Of course that is the ideal world. In reality, this can require quite a lot of configuration and even some programming. JPF is not a "black box" tool like a compiler, and the learning curve can be steep. What makes this worse is that JPF cannot execute *native code* which is implemented in a language other than Java but invoked from Java applications. 
-Not because it doesn't know how to do that, but because it often doesn't make sense: native code like system calls to write to a file cannot easily be reverted - JPF would loose its capability to match or backtrack program states. But of course there is a remedy, and it is configurable: *native peers* and *model classes*. Native peers are classes that hold methods that are executed in lieu of real native methods. This code is executed by the real Java VM, not JPF, hence it can also speed up things. Model classes are simple replacements of standard classes, like `java.lang.Thread` that provide alternatives for native methods which are fully observable and backtrackable.
-
-If you are familiar with Java implementations, you know about the humongous proportions of the included libraries, and hence it is obvious that we cannot handle all of them, at least not yet. There is no theoretical limit, and implementing missing library methods is usually pretty easy, but you should be prepared to encounter `UnsatisfiedLinkErrors` and such if you let JPF loose on large production systems. Notorious white spots are `java.io` and `java.net`, but there are people working on it. Who knows, maybe you are interested to join the effort - JPF is open sourced and there is nothing you can't see. We now have more than two dozen major collaborators in industry, government and academia around the world.
-
-So what makes it worthwhile to invest in JPF? After all, it is a heavyweight tool, not a quick and simple bug finder. First, if you are looking for a research platform to try out your new software verification ideas, chances are you can get along with JPF in a fraction of time compared to native production VMs, which are typically optimized towards speed and care little about extensibility or observability.
-
-The second answer is that - as of this writing - there are bugs *only* JPF can find (before the fact, that is), and there are more and more Java applications that cannot afford to learn about these bugs after the fact. JPF is a tool for mission critical applications, where failure is not an option. No surprise it was started by NASA.
-
-
-
diff --git a/doc/jpf-core/AssertionProperty.md b/doc/jpf-core/AssertionProperty.md
deleted file mode 100644 (file)
index 21c49e8..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-# AssertionProperty #
-
-This listener adds some special capabilities for `java.lang.AssertionError` processing:
-
- * report `AssertionErrors` that are otherwise carelessly caught in `... catch (Throwable t) {..}` clauses
- * ignore AssertionErrors if `ap.go_on` is set
-
-`AssertionErrors` differ a bit from other exceptions - they should never be handled, and they usually represent functional properties (as opposed to non-functionals like `NullPointerExceptions` and `ArithmeticExceptions`). Consequently, it can be regarded as an error if an `AssertionError` is swallowed by a 'catch-all', and it is at least an option to ignore an unhandled `AssertionError`, e.g. to see what non-functional defects - if any - it might cause downstream.
-
-### Example 1: catch-all ###
-
-~~~~~~~~ {.java}
-public class CatchAll {
-  public static void main(String[] args){
-    try {
-      int d = 42;
-      //.. some stuff
-      assert d > 50 : "d below threshold";
-      int x = d - 50;
-      //.. some more stuff
-    } catch (Throwable t) { // bad
-      // ..I'm careless
-    }
-  }
-}
-~~~~~~~~
-
-Checked with:
-
-~~~~~~~~ {.bash}
->jpf +listener=.listener.AssertionProperty CatchAll
-~~~~~~~~
-
-Produces:
-
-~~~~~~~~
-JavaPathfinder v5.0 - (C) 1999-2007 RIACS/NASA Ames Research Center
-====================================================== system under test
-application: CatchAll.java
-
-====================================================== search started: 10/13/09 1:33 PM
-
-====================================================== error #1
-gov.nasa.jpf.listener.AssertionProperty
-d below threshold
-...
-~~~~~~~~
-
-
-### Example 2: go-on ###
-
-~~~~~~~~ {.java}
-public class GoOn {
-  public static void main (String[] args){
-    int d = 42;
-    // lots of computations...
-    assert d > 50 : "d below threshold";
-    int x = Math.max(0, d - 50);
-    // lots of more computations...
-    int y = 42000 / x;
-  }
-}
-~~~~~~~~
-
-Checked with 
-
-~~~~~~~~ {.bash}
->jpf +listener=.listener.AssertionProperty +ap.go_on GoOn
-~~~~~~~~
-
-Produces:
-
-~~~~~~~~ {.bash}
-JavaPathfinder v5.0 - (C) 1999-2007 RIACS/NASA Ames Research Center
-
-====================================================== system under test
-application: GoOn.java
-
-====================================================== search started: 10/13/09 1:59 PM
-WARNING - AssertionError: d below threshold
-       at GoOn.main(GoOn.java:5)
-
-====================================================== error #1
-gov.nasa.jpf.jvm.NoUncaughtExceptionsProperty
-java.lang.ArithmeticException: division by zero
-       at GoOn.main(GoOn.java:8)
-...
-~~~~~~~~
diff --git a/doc/jpf-core/ErrorTraceGenerator.md b/doc/jpf-core/ErrorTraceGenerator.md
deleted file mode 100644 (file)
index 0edf13c..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-## Error Trace Generator ##\r
-\r
-This is a listener to output a lightweight error trace. It prints the instructions at POR boundaries or points where there are multiple choices. An example is shown below.  \r
-\r
-~~~~~~~~\r
-\r
-====================### Lightweight Error Trace ###=======================\r
-\r
-\r
-Length of Error Trace: 35\r
---------------------------------------------------- Thread1\r
- Event.wait_for_event(oldclassic.java:79)\r
-      wait();\r
---------------------------------------------------- Thread2\r
- SecondTask.run(oldclassic.java:129)\r
-      if (count == event2.count) { // <race> ditto\r
---------------------------------------------------- Thread2\r
- SecondTask.run(oldclassic.java:127)\r
-      event1.signal_event();       // updates event1.count\r
---------------------------------------------------- Thread2\r
- SecondTask.run(oldclassic.java:133)\r
-      count = event2.count;        // <race> ditto\r
---------------------------------------------------- Thread1\r
- FirstTask.run(oldclassic.java:103)\r
-        event1.wait_for_event();\r
---------------------------------------------------- Thread1\r
-\r
-~~~~~~~~\r
-\r
-Configuration: **+listener=gov.nasa.jpf.listener.ErrorTraceGenerator**\r
-\r
-Note the Error trace generator does not have the same memory bottlenecks as **report.console.property_violation=trace** that stores every bytecode instruction executed along the path from the start of the program to the error state. The error trace generator dynamically recreates the counterexample by tracing back to the start from the error state. The head of the error trace (list shown in the example) represents the last instruction in the error trace while the tail represents the first instruction.  
\ No newline at end of file
diff --git a/doc/jpf-core/ExceptionInjector.md b/doc/jpf-core/ExceptionInjector.md
deleted file mode 100644 (file)
index 4ab7766..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-# ExceptionInjector #
-
-The ExceptionInjector is a listener that can throw user configured exceptions at arbitrary program locations. The main purpose is to ease the testing of exception handler code that would otherwise hard to reach, e.g. because it is not clear if/how an exception could be thrown in 3rd party code.
-
-## Properties ##
-
-~~~~~~~~ {.bash}
-**ei.exception** = <exception-spec>;... \
-
-  <exception-spec> := <type>'@'<location> \
-
-  <type> := <exception-classname>[[string-literal]('(') ')'] \
-
-  <location> := <classname>':'line | <classname>'.'<method-spec>[ [[BR](':'line])]
-~~~~~~~~
-
-Relative line numbers count from the first executable statement in the method body. They are mostly used to have tests that are more robust against changes in the target source file.
-
-If a method is given without a line offset, the exception is thrown before executing INVOKE instructions that call the specified method.
-
-If a line is specified (either absolute or method-body relative), the exception is thrown before executing the associated bytecode at this line.
-
-If more than one exception specification is given, these need to be separated by semicolons ';' (commas cannot be used because they can appear within argument type lists of the target method).
-
-Method argument types have to be specified the same way as they are reported by 'javap', i.e. with fully qualified type names in dot notation (e.g. "`foo(java.lang.String,int[])`"). Return types can be omitted.  
-
-`ei.throw_first` [`boolean`] - if true, throw exception on first bytecode instruction associated with the given (absolute or relative) source line. If false, throw on last associated bytecode instruction
-
-## Examples ##
-
-### (1) throw exception on absolute line 42 in xyz.MyClass: ###
-
-The application property file
-
-~~~~~~~~ {.bash}
-target = yxz.MyClass
-ei.exception = ArithmeticException@xyz.MyClass:42
-~~~~~~~~
-on file
-~~~~~~~~ {.java}
-1:  package x.y.z;
-    ..
-    public class MyClass {
-      ..
-      try {
-        ..
-42:     int z = x / y;
-        ..
-      } catch (ArithmeticException ax){
-        // the handler code to test
-      }
-     ..
-~~~~~~~~
-
-will throw an ArithmeticException on line 42 regardless of the 'x' and 'y' values. 
-
-### (2) throw a `Zapp("gotcha")` exception on (relative) line 2 in method body `xyz.MyClass.foo()` ###
-
-The application property file
-
-~~~~~~~~ {.bash}
-target = yxz.MyClass
-ei.exception = Zapp("gotcha")@xyz.MyClass.foo(int[]):2
-~~~~~~~~
-on file
-~~~~~~~~ {.java}
-    package x.y.z;
-    ..
-    public class MyClass {
-      ..
-      void foo (int[] whatever) {
-        // some comment (doesn't count for line offsets)
-+0:     int n = ..       // first statement line in foo()
-+1:     // some more comment (does count for line offsets)
-+2:     doSomething(n);  // can throw a Zapp exception 
-     ..
-~~~~~~~~
-will throw a Zapp("gotcha") exception on relative line 2 of method body xyz.MyClass.foo(). Note that the line offset counts from the first executable statement line within foo().
-
-
-### (3) throw an `IOException` when calling `File.createTempFile()` ###
-The application property file
-
-~~~~~~~~ {.bash}
-target = yxz.MyClass
-ei.exception = java.io.IOException@java.io.File.createTempFile(java.lang.String,java.lang.String)
-~~~~~~~~
-
-will throw an exception on the first call of File.createTempFile(), regardless of where this occurs and what the parameters to the call are
-
-~~~~~~~~ {.java}
-1:  package x.y.z;
-    ..
-    public class MyClass {
-      ..
-      try {
-        ..
-        File tmp = File.createTempFile(prefix,suffix);
-        ..
-      } catch (IOException iox) {
-        // the handler code to test
-      }
-     ..
-~~~~~~~~    
diff --git a/doc/jpf-core/IdleFilter.md b/doc/jpf-core/IdleFilter.md
deleted file mode 100644 (file)
index 03c6e98..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-# IdleFilter #
-
-The `gov.nasa.jpf.listener.IdleFilter` is a listener that can be used to close state spaces with loops. Consider a simple "busy waiting" loop
-
-~~~~~~~~ {.java}
-for (long l=0; l<10000000; l++);
-~~~~~~~~
-
-While not a good thing to do in general, it is benign if executed in a normal VM. For JPF, it causes trouble because it adds a lot of useless steps to the stored path, and slows down execution considerably.
-
-In addition, people who expect JPF to match states can get surprised by programs like
-
-~~~~~~~~ {.java}
-while (true){
-  // no transition break in here
-}
-~~~~~~~~
-not being state matched, and hence not terminating (it wouldn't terminate in a normal VM either). 
-
-`IdleFilter` is a little tool to deal with such (bad) loops. It counts the number of back-jumps it encounters within the same thread and stackframe, and if this number exceeds a configured threshold it takes one of the following actions:
-
- * warn - just prints out a warning that we have a suspicious loop
- * break - breaks the transition at the back-jump `goto` instruction, to allow state matching
- * prune - sets the transition ignored, i.e. prunes the search tree
- * jump - skips the back-jump. This is the most dangerous action since you better make sure the loop does not contain side-effects your program depends on.
-
-
-### Properties ###
-Consequently, there are two options:
-
- * `idle.max_backjumps = \<number\>` : max number of back-jumps that triggers the configured action (default 500)
- * `idle.action = warn|break|prune|jump` : action to take when number of back-jumps exceeds threshold
-
-### Examples ###
-
-**(1)** The test program
-
-~~~~~~~~ {.java}
-...
-public void testBreak () {
-  int y = 4;
-  int x = 0;
-
-  while (x != y) { // JPF should state match on the backjump
-    x = x + 1;
-    if (x > 3) {
-      x = 0;
-    }
-  }
-}
-~~~~~~~~
-
-would never terminate under JPF or a host VM. Running it with
-
-~~~~~~~~ {.bash}
-> bin/jpf +listener=.listener.IdleFilter +idle.action=break ...
-~~~~~~~~
-
-does terminate due to state matching and produces the following report
-
-~~~~~~~~ {.bash}
-...
-====================================================== search started: 4/8/10 4:14 PM
-[WARNING] IdleFilter breaks transition on suspicious loop in thread: main
-        at gov.nasa.jpf.test.mc.basic.IdleLoopTest.testBreak(gov/nasa/jpf/test/mc/basic/IdleLoopTest.java:42)
-...
-====================================================== results
-no errors detected
-~~~~~~~~
-
------
-**(2)** The following program would execute a long time under JPF
-
-~~~~~~~~ {.java}
-...
-public void testJump () {
-  for (int i=0; i<1000000; i++){
-    //...
-  }
-
-  System.out.println("Ok, jumped past loop");
-}
-~~~~~~~~
-
-If we run it with
-
-~~~~~~~~ {.bash}
-> bin/jpf +listener=.listener.IdleFilter +idle.action=jump ...
-~~~~~~~~
-
-JPF comes back quickly with the result
-
-~~~~~~~~ {.bash}
-====================================================== search started: 4/8/10 4:20 PM
-[WARNING] IdleFilter jumped past loop in: main
-        at gov.nasa.jpf.test.mc.basic.IdleLoopTest.testJump(gov/nasa/jpf/test/mc/basic/IdleLoopTest.java:74)
-Ok, jumped past loop
-...
-~~~~~~~~
diff --git a/doc/jpf-core/index.md b/doc/jpf-core/index.md
deleted file mode 100644 (file)
index 28fda0e..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# jpf-core #
-This is the basis for all JPF projects, i.e. you always need to install it. jpf-core contains the basic VM and model checking infrastructure, and can be used to check for concurrency defects like deadlocks, and unhandled exceptions like `NullPointerExceptions` and `AssertionErrors`.
-
-
-## Repository ##
-The Mercurial repository is on http://babelfish.arc.nasa.gov/hg/jpf/jpf-core
-
-## Properties ##
-jpf-core supports two rather generic properties, which are configured by default:
-
- * `gov.nasa.jpf.jvm.NoUncaughtExceptionsProperty`
- * `gov.nasa.jpf.jvm.NotDeadlockedProperty`
-
-There is no need to parameterize any of them. `NoUncaughtExceptionsProperty` covers all `Throwable` objects that are not handled within the application, i.e. would terminate the process.
-
-Some of the listeners (like `PreciseRaceDetector`) are `ListenerAdapter` instances, i.e. work as more specific Property implementations.
-
-## Listeners ##
-jpf-core includes a variety of [listeners](../devel/listener) that fall into three major categories:
-
- * program properties
- * execution monitoring
- * execution control
-
-Some of the main listeners are
-
- * [AssertionProperty](./AssertionProperty)
- * [IdleFilter](./IdleFilter)
- * [ExceptionInjector](./ExceptionInjector)
-
-## Properties ##
-jpf-core uses many JPF properties, you can find most of them in the `defaults.properties` file. The following ones are of interest for users
-
- * `listener` - a comma separated list of class names representing listeners that should be automatically instantiated and registered during JPF startup
- * `listener.autoload` - a comma separated list of annotation types. If JPF encounters such an annotation in one of the analyzed classes at runtime, it automatically loads and registered the associated listener
- * `listener.<annotation-type>` - class name of the listener associated with `<annotation-type>`
- * `vm.insn_factory.class` - class name of a [`BytecodeInstructionFactory`](../devel/bytecode_factory), e.g. to switch to the symbolic execution mode or to use specific bytecode implementations for checking numeric properties 
- * `vm.halt_on_throw (true|false)` - tells JPF if it should try to find a handler if it encounters an exception in the analyzed program (useful to avoid masking exceptions within handlers)
- * [`cg.randomize_choices`](../user/config/random) `(random|path|def)` - tells JPF if it should randomize the order of choices for each [`ChoiceGenerator`](../devel/choicegenerator), to avoid degenerated searches (e.g. always indexing with the main thread in scheduling choices).
- * `report.console.property_violation` - comma separated list of topics that should be printed by JPF if it detects an error. Possible values include 
-    - `error` error description
-    - `snapshot` thread stacks 
-    - `trace` instruction/statement trace (can be long and memory-expensive)
\ No newline at end of file
diff --git a/doc/papers/chicago-author-date.csl b/doc/papers/chicago-author-date.csl
deleted file mode 100644 (file)
index 595235f..0000000
+++ /dev/null
@@ -1,549 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never" page-range-format="chicago">
-  <info>
-    <title>Chicago Manual of Style 16th edition (author-date)</title>
-    <id>http://www.zotero.org/styles/chicago-author-date</id>
-    <link href="http://www.zotero.org/styles/chicago-author-date" rel="self"/>
-    <link href="http://www.chicagomanualofstyle.org/tools_citationguide.html" rel="documentation"/>
-    <author>
-      <name>Julian Onions</name>
-      <email>julian.onions@gmail.com</email>
-    </author>
-    <contributor>
-      <name>Sebastian Karcher</name>
-    </contributor>
-    <contributor>
-      <name>Richard Karnesky</name>
-      <email>karnesky+zotero@gmail.com</email>
-      <uri>http://arc.nucapt.northwestern.edu/Richard_Karnesky</uri>
-    </contributor>
-    <contributor>
-      <name>Andrew Dunning</name>
-      <email>andrew.dunning@utoronto.ca</email>
-    </contributor>
-    <category citation-format="author-date"/>
-    <category field="generic-base"/>
-    <summary>The author-date variant of the Chicago style</summary>
-    <updated>2014-05-23T03:53:32+00:00</updated>
-    <rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights>
-  </info>
-  <locale xml:lang="en">
-    <terms>
-      <term name="editor" form="verb-short">ed.</term>
-      <term name="container-author" form="verb">by</term>
-      <term name="translator" form="verb-short">trans.</term>
-      <term name="editortranslator" form="verb">
-        <single>edited and translated by</single>
-        <multiple>edited and translated by</multiple>
-      </term>
-      <term name="translator" form="short">trans.</term>
-    </terms>
-  </locale>
-  <macro name="secondary-contributors">
-    <choose>
-      <if type="chapter paper-conference" match="none">
-        <names variable="editor translator" delimiter=". ">
-          <label form="verb" text-case="capitalize-first" suffix=" "/>
-          <name and="text" delimiter=", "/>
-        </names>
-      </if>
-    </choose>
-  </macro>
-  <macro name="container-contributors">
-    <choose>
-      <if type="chapter paper-conference" match="any">
-        <group prefix=", " delimiter=", ">
-          <names variable="container-author" delimiter=", ">
-            <label form="verb" suffix=" "/>
-            <name and="text" delimiter=", "/>
-          </names>
-          <names variable="editor translator" delimiter=", ">
-            <label form="verb" suffix=" "/>
-            <name and="text" delimiter=", "/>
-          </names>
-        </group>
-      </if>
-    </choose>
-  </macro>
-  <macro name="editor">
-    <names variable="editor">
-      <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>
-      <label form="short" prefix=", "/>
-    </names>
-  </macro>
-  <macro name="translator">
-    <names variable="translator">
-      <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>
-      <label form="short" prefix=", "/>
-    </names>
-  </macro>
-  <macro name="recipient">
-    <choose>
-      <if type="personal_communication">
-        <choose>
-          <if variable="genre">
-            <text variable="genre" text-case="capitalize-first"/>
-          </if>
-          <else>
-            <text term="letter" text-case="capitalize-first"/>
-          </else>
-        </choose>
-      </if>
-    </choose>
-    <names variable="recipient" delimiter=", ">
-      <label form="verb" prefix=" " text-case="lowercase" suffix=" "/>
-      <name and="text" delimiter=", "/>
-    </names>
-  </macro>
-  <macro name="substitute-title">
-    <choose>
-      <if type="article-journal article-magazine article-newspaper review review-book" match="any">
-        <text macro="container-title"/>
-      </if>
-    </choose>
-  </macro>
-  <macro name="contributors">
-    <group delimiter=". ">
-      <names variable="author">
-        <name and="text" name-as-sort-order="first" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>
-        <label form="short" prefix=", "/>
-        <substitute>
-          <names variable="editor"/>
-          <names variable="translator"/>
-          <text macro="substitute-title"/>
-          <text macro="title"/>
-        </substitute>
-      </names>
-      <text macro="recipient"/>
-    </group>
-  </macro>
-  <macro name="contributors-short">
-    <names variable="author">
-      <name form="short" and="text" delimiter=", " initialize-with=". "/>
-      <substitute>
-        <names variable="editor"/>
-        <names variable="translator"/>
-        <text macro="substitute-title"/>
-        <text macro="title"/>
-      </substitute>
-    </names>
-  </macro>
-  <macro name="interviewer">
-    <names variable="interviewer" delimiter=", ">
-      <label form="verb" prefix=" " text-case="capitalize-first" suffix=" "/>
-      <name and="text" delimiter=", "/>
-    </names>
-  </macro>
-  <macro name="archive">
-    <group delimiter=". ">
-      <text variable="archive_location" text-case="capitalize-first"/>
-      <text variable="archive"/>
-      <text variable="archive-place"/>
-    </group>
-  </macro>
-  <macro name="access">
-    <group delimiter=". ">
-      <choose>
-        <if type="graphic report" match="any">
-          <text macro="archive"/>
-        </if>
-        <else-if type="article-journal bill book chapter legal_case legislation motion_picture paper-conference" match="none">
-          <text macro="archive"/>
-        </else-if>
-      </choose>
-      <choose>
-        <if variable="issued" match="none">
-          <group delimiter=" ">
-            <text term="accessed" text-case="capitalize-first"/>
-            <date variable="accessed" delimiter=" ">
-              <date-part name="month"/>
-              <date-part name="day"/>
-            </date>
-          </group>
-        </if>
-      </choose>
-      <choose>
-        <if type="legal_case" match="none">
-          <choose>
-            <if variable="DOI">
-              <text variable="DOI" prefix="doi:"/>
-            </if>
-            <else>
-              <text variable="URL"/>
-            </else>
-          </choose>
-        </if>
-      </choose>
-    </group>
-  </macro>
-  <macro name="title">
-    <choose>
-      <if variable="title" match="none">
-        <choose>
-          <if type="personal_communication" match="none">
-            <text variable="genre" text-case="capitalize-first"/>
-          </if>
-        </choose>
-      </if>
-      <else-if type="bill book graphic legislation motion_picture report song" match="any">
-        <text variable="title" text-case="title" font-style="italic"/>
-        <group prefix=" (" suffix=")" delimiter=" ">
-          <text term="version"/>
-          <text variable="version"/>
-        </group>
-      </else-if>
-      <else-if variable="reviewed-author">
-        <group delimiter=", ">
-          <text variable="title" font-style="italic" prefix="Review of "/>
-          <names variable="reviewed-author">
-            <label form="verb-short" text-case="lowercase" suffix=" "/>
-            <name and="text" delimiter=", "/>
-          </names>
-        </group>
-      </else-if>
-      <else-if type="legal_case interview" match="any">
-        <text variable="title"/>
-      </else-if>
-      <else>
-        <text variable="title" text-case="title" quotes="true"/>
-      </else>
-    </choose>
-  </macro>
-  <macro name="edition">
-    <choose>
-      <if type="bill book graphic legal_case legislation motion_picture report song" match="any">
-        <choose>
-          <if is-numeric="edition">
-            <group delimiter=" " prefix=". ">
-              <number variable="edition" form="ordinal"/>
-              <text term="edition" form="short" strip-periods="true"/>
-            </group>
-          </if>
-          <else>
-            <text variable="edition" prefix=". "/>
-          </else>
-        </choose>
-      </if>
-      <else-if type="chapter  paper-conference" match="any">
-        <choose>
-          <if is-numeric="edition">
-            <group delimiter=" " prefix=", ">
-              <number variable="edition" form="ordinal"/>
-              <text term="edition" form="short"/>
-            </group>
-          </if>
-          <else>
-            <text variable="edition" prefix=", "/>
-          </else>
-        </choose>
-      </else-if>
-    </choose>
-  </macro>
-  <macro name="locators">
-    <choose>
-      <if type="article-journal">
-        <choose>
-          <if variable="volume">
-            <text variable="volume" prefix=" "/>
-            <group prefix=" (" suffix=")">
-              <choose>
-                <if variable="issue">
-                  <text variable="issue"/>
-                </if>
-                <else>
-                  <date variable="issued">
-                    <date-part name="month"/>
-                  </date>
-                </else>
-              </choose>
-            </group>
-          </if>
-          <else-if variable="issue">
-            <group delimiter=" " prefix=", ">
-              <text term="issue" form="short"/>
-              <text variable="issue"/>
-              <date variable="issued" prefix="(" suffix=")">
-                <date-part name="month"/>
-              </date>
-            </group>
-          </else-if>
-          <else>
-            <date variable="issued" prefix=", ">
-              <date-part name="month"/>
-            </date>
-          </else>
-        </choose>
-      </if>
-      <else-if type="legal_case">
-        <text variable="volume" prefix=", "/>
-        <text variable="container-title" prefix=" "/>
-        <text variable="page" prefix=" "/>
-      </else-if>
-      <else-if type="bill book graphic legal_case legislation motion_picture report song" match="any">
-        <group prefix=". " delimiter=". ">
-          <group>
-            <text term="volume" form="short" text-case="capitalize-first" suffix=" "/>
-            <number variable="volume" form="numeric"/>
-          </group>
-          <group>
-            <number variable="number-of-volumes" form="numeric"/>
-            <text term="volume" form="short" prefix=" " plural="true"/>
-          </group>
-        </group>
-      </else-if>
-      <else-if type="chapter paper-conference" match="any">
-        <choose>
-          <if variable="page" match="none">
-            <group prefix=". ">
-              <text term="volume" form="short" text-case="capitalize-first" suffix=" "/>
-              <number variable="volume" form="numeric"/>
-            </group>
-          </if>
-        </choose>
-      </else-if>
-    </choose>
-  </macro>
-  <macro name="locators-chapter">
-    <choose>
-      <if type="chapter paper-conference" match="any">
-        <choose>
-          <if variable="page">
-            <group prefix=", ">
-              <text variable="volume" suffix=":"/>
-              <text variable="page"/>
-            </group>
-          </if>
-        </choose>
-      </if>
-    </choose>
-  </macro>
-  <macro name="locators-article">
-    <choose>
-      <if type="article-newspaper">
-        <group prefix=", " delimiter=", ">
-          <group>
-            <text variable="edition" suffix=" "/>
-            <text term="edition" prefix=" "/>
-          </group>
-          <group>
-            <text term="section" form="short" suffix=" "/>
-            <text variable="section"/>
-          </group>
-        </group>
-      </if>
-      <else-if type="article-journal">
-        <choose>
-          <if variable="volume issue" match="any">
-            <text variable="page" prefix=": "/>
-          </if>
-          <else>
-            <text variable="page" prefix=", "/>
-          </else>
-        </choose>
-      </else-if>
-    </choose>
-  </macro>
-  <macro name="point-locators">
-    <choose>
-      <if variable="locator">
-        <choose>
-          <if locator="page" match="none">
-            <choose>
-              <if type="bill book graphic legal_case legislation motion_picture report song" match="any">
-                <choose>
-                  <if variable="volume">
-                    <group>
-                      <text term="volume" form="short" suffix=" "/>
-                      <number variable="volume" form="numeric"/>
-                      <label variable="locator" form="short" prefix=", " suffix=" "/>
-                    </group>
-                  </if>
-                  <else>
-                    <label variable="locator" form="short" suffix=" "/>
-                  </else>
-                </choose>
-              </if>
-              <else>
-                <label variable="locator" form="short" suffix=" "/>
-              </else>
-            </choose>
-          </if>
-          <else-if type="bill book graphic legal_case legislation motion_picture report song" match="any">
-            <number variable="volume" form="numeric" suffix=":"/>
-          </else-if>
-        </choose>
-        <text variable="locator"/>
-      </if>
-    </choose>
-  </macro>
-  <macro name="container-prefix">
-    <text term="in" text-case="capitalize-first"/>
-  </macro>
-  <macro name="container-title">
-    <choose>
-      <if type="chapter paper-conference" match="any">
-        <text macro="container-prefix" suffix=" "/>
-      </if>
-    </choose>
-    <choose>
-      <if type="legal_case" match="none">
-        <text variable="container-title" text-case="title" font-style="italic"/>
-      </if>
-    </choose>
-  </macro>
-  <macro name="publisher">
-    <group delimiter=": ">
-      <text variable="publisher-place"/>
-      <text variable="publisher"/>
-    </group>
-  </macro>
-  <macro name="date">
-    <choose>
-      <if variable="issued">
-        <date variable="issued">
-          <date-part name="year"/>
-        </date>
-      </if>
-      <else-if variable="accessed">
-        <date variable="accessed">
-          <date-part name="year"/>
-        </date>
-      </else-if>
-    </choose>
-  </macro>
-  <macro name="day-month">
-    <date variable="issued">
-      <date-part name="month"/>
-      <date-part name="day" prefix=" "/>
-    </date>
-  </macro>
-  <macro name="collection-title">
-    <choose>
-      <if match="none" type="article-journal">
-        <choose>
-          <if match="none" is-numeric="collection-number">
-            <group delimiter=", ">
-              <text variable="collection-title" text-case="title"/>
-              <text variable="collection-number"/>
-            </group>
-          </if>
-          <else>
-            <group delimiter=" ">
-              <text variable="collection-title" text-case="title"/>
-              <text variable="collection-number"/>
-            </group>
-          </else>
-        </choose>
-      </if>
-    </choose>
-  </macro>
-  <macro name="collection-title-journal">
-    <choose>
-      <if type="article-journal">
-        <group delimiter=" ">
-          <text variable="collection-title"/>
-          <text variable="collection-number"/>
-        </group>
-      </if>
-    </choose>
-  </macro>
-  <macro name="event">
-    <group>
-      <text term="presented at" suffix=" "/>
-      <text variable="event"/>
-    </group>
-  </macro>
-  <macro name="description">
-    <choose>
-      <if type="interview">
-        <group delimiter=". ">
-          <text macro="interviewer"/>
-          <text variable="medium" text-case="capitalize-first"/>
-        </group>
-      </if>
-      <else>
-        <text variable="medium" text-case="capitalize-first" prefix=". "/>
-      </else>
-    </choose>
-    <choose>
-      <if variable="title" match="none"/>
-      <else-if type="thesis personal_communication speech" match="any"/>
-      <else>
-        <group delimiter=" " prefix=". ">
-          <text variable="genre" text-case="capitalize-first"/>
-          <choose>
-            <if type="report">
-              <text variable="number"/>
-            </if>
-          </choose>
-        </group>
-      </else>
-    </choose>
-  </macro>
-  <macro name="issue">
-    <choose>
-      <if type="legal_case">
-        <text variable="authority" prefix=". "/>
-      </if>
-      <else-if type="speech">
-        <group prefix=". " delimiter=", ">
-          <group delimiter=" ">
-            <text variable="genre" text-case="capitalize-first"/>
-            <text macro="event"/>
-          </group>
-          <text variable="event-place"/>
-          <text macro="day-month"/>
-        </group>
-      </else-if>
-      <else-if type="article-newspaper article-magazine personal_communication" match="any">
-        <text macro="day-month" prefix=", "/>
-      </else-if>
-      <else>
-        <group prefix=". " delimiter=", ">
-          <choose>
-            <if type="thesis">
-              <text variable="genre" text-case="capitalize-first"/>
-            </if>
-          </choose>
-          <text macro="publisher"/>
-        </group>
-      </else>
-    </choose>
-  </macro>
-  <citation et-al-min="4" et-al-use-first="1" disambiguate-add-year-suffix="true" disambiguate-add-names="true" disambiguate-add-givenname="true" givenname-disambiguation-rule="primary-name">
-    <layout prefix="(" suffix=")" delimiter="; ">
-      <group delimiter=", ">
-        <group delimiter=" ">
-          <text macro="contributors-short"/>
-          <text macro="date"/>
-        </group>
-        <text macro="point-locators"/>
-      </group>
-    </layout>
-  </citation>
-  <bibliography hanging-indent="true" et-al-min="11" et-al-use-first="7" subsequent-author-substitute="&#8212;&#8212;&#8212;" entry-spacing="0">
-    <sort>
-      <key macro="contributors"/>
-      <key variable="issued"/>
-    </sort>
-    <layout suffix=".">
-      <group delimiter=". ">
-        <text macro="contributors"/>
-        <text macro="date"/>
-        <text macro="title"/>
-      </group>
-      <text macro="description"/>
-      <text macro="secondary-contributors" prefix=". "/>
-      <text macro="container-title" prefix=". "/>
-      <text macro="container-contributors"/>
-      <text macro="edition"/>
-      <text macro="locators-chapter"/>
-      <text macro="collection-title-journal" prefix=", " suffix=", "/>
-      <text macro="locators"/>
-      <text macro="collection-title" prefix=". "/>
-      <text macro="issue"/>
-      <text macro="locators-article"/>
-      <text macro="access" prefix=". "/>
-    </layout>
-  </bibliography>
-</style>
diff --git a/doc/papers/index.md b/doc/papers/index.md
deleted file mode 100644 (file)
index 87fb93a..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-# Related Publications #
-
-JPF has been both a research target and a system in use for a number of years. A broad collection of papers and reports is available, including the following (incomplete) list
-
-> **Notes:** some of the older papers now have mostly historical relevance. JPF has undergone a lot of changes since 2000. If you need more recent information, especially about the design and usage of current 
-JPF versions, please consult the documentation.
-
-
----
-bibliography: ./references.bib
-csl: ./chicago-author-date.csl
-...
-
-## Core Papers ##
-
-@visser:2003
-
-@lerda:2001
-
-## JPF Infrastructure and Features ##
-
-@shafiei:breugel:2014
-
-@nshafiei:2012
-
-@kulikov:2010
-
-## Testing and Symbolic Execution ##
-
-@indradeep:2013
-
-@person:2008
-
-@pasareanu:2008
-
-@visser:2004
-
-@pasareanu:2004
-
-@artho:2003
-
-@khurshid:2003
-
-## Heuristic Search ##
-
-@groce:2004
-
-@groce:2002
-
-@groce:visser:2002
-
-## Verification of Networked Software ##
-
-@shafiei:2014
-
-@artho:2011
-
-@artho:2009
-
-@artho:2008
-
-## Explaining Counter Examples ##
-
-@grove:2003
-
-##  Applying Java PathFinder ##
-
-@shafiei:2013
-
-@stergiopoulos:2012
-
-@mehlitz:2008
-
-@penix:2005
-
-@giannakopoulou:2004
-
-@brat:2004
-
-@bordini:2003
-
-
-## Misc ##
-
-@havelund:2007
-
-@mansouri:2007
-
-@havelund:2002
-
-@pasareanu:dwyer:2003
-
-@brat:2001
-
-@visser:park:2000
-
-@havelund:2000
-
-@havelund:1999
-
-@havelund:skakkebaek:1999
-
-@havelund:Pressburger:1998
-
-## Papers from Darko Marinov's group ##
-
-@gligoric:2010
-
-@gligoric:jagannath:2010
-
-@lauterburg:2010
-
-@sobeih:2010
-
-@lauterburg:2009
-
-@gligoric:2009
-
-@damorim:2008
-
-@lauterburg:2008
-
-@gvero:2008
-
-@damorim:2007
-
-@zhou:2007
-
-@damorim:2006
-
-@damorim:pacheco:2006
-
-## References ##
\ No newline at end of file
diff --git a/doc/papers/references.bib b/doc/papers/references.bib
deleted file mode 100644 (file)
index 698195f..0000000
+++ /dev/null
@@ -1,636 +0,0 @@
-@article{visser:2003,
- author = {Visser, Willem and Havelund, Klaus and Brat, Guillaume and Park, Seungjoon and Lerda, Flavio},
- title = "{M}odel {C}hecking {P}rograms",
- journal = {Automated Software Engineering},
- volume = {10},
- number = {2},
- month = {April},
- year = {2003}, 
- pages = {203--232},
- publisher = {Kluwer Academic Publishers}, 
- url = "http://dl.acm.org/citation.cfm?id=641186"
- }
-
-@inproceedings{lerda:2001,
- author = {Lerda, Flavio and Visser, Willem},
- title = {Addressing Dynamic Issues of Program Model Checking},
- booktitle = {Proceedings of the 8th International SPIN Workshop on Model Checking of Software},
- year = {2001},
- pages = {80--102},
- publisher = {Springer},
- url = "http://dl.acm.org/citation.cfm?id=380921.380931",
-} 
-
-@inproceedings{khurshid:2003,
-    author = {Sarfraz Khurshid and Corina S. P\v{a}s\v{a}reanu and Willem Visser},
-    title = {Generalized Symbolic Execution for Model Checking and Testing},
-    booktitle = {Proceedings of the Ninth International Conference on Tools and Algorithms for the Construction and Analysis of Systems},
-    year = {2003},
-    pages = {553--568},
-    publisher = {Springer},
-    url = "http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.8.8862"
-}
-
-@article{visser:2004,
- author = {Visser, Willem and P\v{a}s\v{a}reanu, Corina S. and Khurshid, Sarfraz},
- title = {Test Input Generation with Java PathFinder},
- journal = {Proceedings of International Symposium on Software Testing and Analysis},
- volume = {29},
- number = {4},
- month = jul,
- year = {2004},
- pages = {97--107},
- publisher = {ACM},
- url = "http://dl.acm.org/citation.cfm?id=1007526",
-} 
-
-@article{pasareanu:2004,
-year={2004},
-volume={2989},
-series={Lecture Notes in Computer Science},
-title={Verification of Java Programs Using Symbolic Execution and Invariant Generation},
-url={http://link.springer.com/chapter/10.1007%2F978-3-540-24732-6_13#},
-publisher={Springer},
-author={Păsăreanu, Corina S. and Visser, Willem},
-pages={164-181},
-}
-
-@inproceedings{person:2008,
- author = {Person, Suzette and Dwyer, Matthew B. and Elbaum, Sebastian and P\v{a}s\v{a}reanu, Corina S.},
- title = {Differential Symbolic Execution},
- booktitle = {Proceedings of the 16th {ACM} {SIGSOFT} International Symposium on Foundations of Software Engineering},
- year = {2008},
- pages = {226--237},
- url = {http://doi.acm.org/10.1145/1453101.1453131},
- publisher = {ACM},
- }
-@inproceedings{pasareanu:2008,
-  author    = {Corina S. P\v{a}s\v{a}reanu and
-               Peter C. Mehlitz and
-               David H. Bushnell and
-               Karen Gundy{-}Burlet and
-               Michael R. Lowry and
-               Suzette Person and
-               Mark Pape},
-  title     = {Combining unit-level symbolic execution and system-level concrete
-               execution for testing {NASA} software},
-  booktitle = {Proceedings of the {ACM} {SIGSOFT} International Symposium on Software
-               Testing and Analysis},
-  pages     = {15--26},
-  year      = {2008},
-  url       = {http://doi.acm.org/10.1145/1390630.1390635},
-}
-
-@inproceedings{pasareanu:2007,
-  author    = {Corina S. P\v{a}s\v{a}reanu and
-               Willem Visser},
-  title     = {Symbolic Execution and Model Checking for Testing},
-  booktitle = {Hardware and Software: Verification and Testing, Third International
-               Haifa Verification Conference},
-  pages     = {17--18},
-  year      = {2007},
-  url       = {http://dx.doi.org/10.1007/978-3-540-77966-7_5},
-}
-
-@inproceedings{artho:2003,
-  author    = {Cyrille Artho and
-               Doron Drusinsky and
-               Allen Goldberg and
-               Klaus Havelund and
-               Michael R. Lowry and
-               Corina S. P\v{a}s\v{a}reanu and
-               Grigore Rosu and
-               Willem Visser},
-  title     = {Experiments with Test Case Generation and Runtime Analysis},
-  booktitle = {Abstract State Machines, Advances in Theory and Practice},
-  pages     = {87--107},
-  year      = {2003},
-  url       = {http://dx.doi.org/10.1007/3-540-36498-6_5},
-}
-
-@article{groce:2004,
-  author    = {Alex Groce and
-               Willem Visser},
-  title     = {Heuristics for model checking Java programs},
-  journal   = {International Journal on Software Tools for Technology Transfer},
-  volume    = {6},
-  number    = {4},
-  pages     = {260--276},
-  year      = {2004},
-  url       = {http://dx.doi.org/10.1007/s10009-003-0130-9},
-}
-
-@inproceedings{groce:2002,
-  author    = {Alex Groce and
-               Willem Visser},
-  title     = {Model checking Java programs using structural heuristics},
-  booktitle = {Proceedings of International Symposium on Software Testing and Analysis},
-  pages     = {12--21},
-  year      = {2002},
-  url       = {http://doi.acm.org/10.1145/566172.566175},
-}
-
-@inproceedings{groce:visser:2002,
-  author    = {Alex Groce and
-               Willem Visser},
-  title     = {Heuristic Model Checking for Java Programs},
-  booktitle = {Proceedings of the 9th International SPIN Workshop on Model Checking of Software},
-  pages     = {242--245},
-  year      = {2002},
-  url       = {http://dx.doi.org/10.1007/3-540-46017-9_21},
-}
-
-@inproceedings{artho:2011,
- author = {Leungwattanakit, Watcharin and Artho, Cyrille and Hagiya, Masami and Tanabe, Yoshinori and Yamamoto, Mitsuharu},
- title = {Model checking distributed systems by combining caching and process checkpointing},
- booktitle = {Proceedings of the 26th IEEE/ACM International Conference on International Conference on Automated Software Engineering},
- year = {2011},
- pages = {103--112},
- publisher = {IEEE},
-month={November},
- address = {Lawrence, KS, USA},
- url  = {​http://staff.aist.go.jp/c.artho/papers/checkpointing.pdf},
-} 
-
-@inproceedings{artho:2009,
- author = {Artho, Cyrille and Leungwattanakit, Watcharin and Hagiya, Masami and Tanabe, Yoshinori and Yamamoto, Mitsuharu},
- title = {Cache-Based model Checking of Networked Applications: From Linear to Branching Time},
- booktitle = {Proceedings of the 27th International Conference on Automated Software Engineering},
- year = {2009},
-month = {November},
- pages = {447--458},
- publisher = {IEEE},
- address = {Auckland, New Zealand},
- url = {​http://staff.aist.go.jp/c.artho/papers/ase-2009.pdf},
-}
-
-@inproceedings{artho:2008,
-author={Artho, Cyrille and Leungwattanakit, Watcharin and Hagiya, Masami and Tanabe, Yoshinori},
-title={Efficient Model Checking of Networked Applications},
-year={2008},
-volume={11},
-series={Lecture Notes in Business Information Processing},
-booktitle = {Proceedings of the 46th International Conference on Objects, Components, Models and Patterns},
-publisher={Springer},
-pages={22--40},
-address={Zurich, Switzerland},
-month={June/July},
-url = {http://staff.aist.go.jp/c.artho/papers/tools-2008.pdf}
-}
-
-@inproceedings{grove:2003,
-  author    = {Alex Groce and
-               Willem Visser},
-  title     = {What Went Wrong: Explaining Counterexamples},
-  booktitle = {Proceedings of the 10th International SPIN Workshop on Model Checking of Software},
-  pages     = {121--135},
-  year      = {2003},
-  url       = {http://dx.doi.org/10.1007/3-540-44829-2_8},
-  publisher = {Springer},
-  address = {Portland},
-}
-
-@article{penix:2005,
-  author    = {John Penix and
-               Willem Visser and
-               Seungjoon Park and
-               Corina S. P\v{a}s\v{a}reanu and
-               Eric Engstrom and
-               Aaron Larson and
-               Nicholas Weininger},
-  title     = {Verifying Time Partitioning in the {DEOS} Scheduling Kernel},
-  journal   = {Formal Methods in System Design},
-  volume    = {26},
-  number    = {2},
-  pages     = {103--135},
-  year      = {2005},
-  url       = {http://dx.doi.org/10.1007/s10703-005-1490-4},
-}
-
-@article{brat:2004,
-  author    = {Guillaume P. Brat and
-               Doron Drusinsky and
-               Dimitra Giannakopoulou and
-               Allen Goldberg and
-               Klaus Havelund and
-               Michael R. Lowry and
-               Corina S. Pasareanu and
-               Arnaud Venet and
-               Willem Visser and
-               Richard Washington},
-  title     = {Experimental Evaluation of Verification and Validation Tools on Martian
-               Rover Software},
-  journal   = {Formal Methods in System Design},
-  volume    = {25},
-  number    = {2-3},
-  pages     = {167--198},
-  year      = {2004},
-  url       = {http://dx.doi.org/10.1023/B:FORM.0000040027.28662.a4},
-}
-
-@inproceedings{bordini:2003,
-  author    = {Rafael H. Bordini and
-               Michael Fisher and
-               Carmen Pardavila and
-               Willem Visser and
-               Michael Wooldridge},
-  title     = {Model Checking Multi-Agent Programs with {CASP}},
-  booktitle = {Proceedings of Computer Aided Verification},
-  pages     = {110--113},
-  year      = {2003},
-  url       = {http://dx.doi.org/10.1007/978-3-540-45069-6_10},
-}
-
-@inproceedings{giannakopoulou:2004,
-  author    = {Dimitra Giannakopoulou and
-               Corina S. Pasareanu and
-               Jamieson M. Cobleigh},
-  title     = {Assume-Guarantee Verification of Source Code with Design-Level Assumptions},
-  booktitle = {26th International Conference on Software Engineering {(ICSE} 2004),
-               23-28 May 2004, Edinburgh, United Kingdom},
-  pages     = {211--220},
-  year      = {2004},
-  url       = {http://doi.ieeecomputersociety.org/10.1109/ICSE.2004.1317443},
-}
-
-@inproceedings{mehlitz:2008,
-  author    = {Peter Mehlitz},
-  title     = {Trust Your Model - Verifying Aerospace System Models with Java Pathfinder},
-  booktitle = {Aerospace Conference, 2008 IEEE},
-  pages     = {1--11},
-  year      = {2008},
-  url       = {http://ti.arc.nasa.gov/m/pub-archive/1402/1402%20(Mehlitz).pdf},
-}
-
-@inproceedings{stergiopoulos:2012,
- author = {Stergiopoulos, George and Tsoumas, Bill and Gritzalis, Dimitris},
- title = {Hunting Application-level Logical Errors},
- booktitle = {Proceedings of the 4th International Conference on Engineering Secure Software and Systems},
- year = {2012},
- address = {Eindhoven, The Netherlands},
- pages = {135--142},
- url = {http://dx.doi.org/10.1007/978-3-642-28166-2_13},
- publisher = {Springer},
-}
-
-@article{mansouri:2007,
- author = {Masoud Mansouri-Samani and John Penix and Lawrence Markosian},
- title = {Assume-Guarantee Verification of Source Code with Design-Level Assumptions},
- journal = {Software Assurance Research Program (SARP), NASA IV&V publication},
- year = {2007},
- pages = {203--232},
- publisher = {Kluwer Academic Publishers}, 
- url = {http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20080015887.pdf},    
- }
- @article{havelund:2002,
-  author    = {Klaus Havelund and Willem Visser},
-  title     = {Program Model Checking as a New Trend},
-  journal = {International Journal on Software Tools for Technology Transfer (STTT)},
-  volume = {4},
-  number = {1},
-  month = {October},
-  year = {2002},
-  url = {http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20030003734.pdf},
-}
-
-@article{pasareanu:dwyer:2003,
-  author  = "C. P\v{a}s\v{a}reanu and M. Dwyer and W. Visser.",
-  title   = "{Finding Feasible Abstract Counter-Examples}",
-  journal = "International Journal on Software Tools for Technology Transfer (STTT)",
-  year    = "2003",
-  volume  = "5",
-  number  = "1",
-  month   = "November",
-  url = "http://ti.arc.nasa.gov/m/profile/pcorina/papers/tacas_sttt01.ps"
-}
-
-@inproceedings{brat:2001,
- author = {Guillaume Brat and Willem Visser},
- title = {Combining Static Analysis and Model Checking for Software Analysis},
- booktitle = {Proceedings of the 15th IEEE International Conference on Automated Software Engineering},
- year = {2001},
- address = {San Diego, USA},
- month = {November},
- url = {http://dl.acm.org/citation.cfm?id=872568},
-}
-
-@inproceedings{visser:park:2000,
-    author = {Willem Visser and Seungjoon Park and John Penix},
-    title = {Using Predicate Abstraction to Reduce Object-Oriented Programs for Model Checking},
-    booktitle = {Proceedings of the 3rd ACM SIGSOFT Workshop on Formal Methods in Software Practice},
-    year = {2000},
-    pages = {3--12},
-    month = {August},
-    url = "http://ti.arc.nasa.gov/m/tech/rse/publications/papers/SIGSOFT00/fmsp00.pdf",
-}
-
-@article{havelund:2000,
-  author    = {Klaus Havelund and
-               Thomas Pressburger},
-  title     = {Model Checking {Java} Programs using {Java} PathFinder},
-  journal   = {International Journal on Software Tools for Technology Transfer (STTT)},
-  volume    = {2},
-  number    = {4},
-  pages     = {366--381},
-  year      = {2000},
-  url       = {http://www.havelund.com/Publications/jpf-sttt.ps.Z},
-}
-
-@inproceedings{havelund:1999,
-  author    = {Klaus Havelund},
-  title     = {Java PathFinder, {A} Translator from Java to Promela},
-  booktitle = {Theoretical and Practical Aspects of {SPIN} Model Checking},
-  month     = {July},
-  year      = {1999}, 
-  url       = {http://www.havelund.com/Publications/jpf1-spin-99.pdf},
-}
-
-@inproceedings{havelund:skakkebaek:1999,
-  author    = {Klaus Havelund and
-               Jens U. Skakkeb{\ae}k},
-  title     = {Applying Model Checking in Java Verification},
-  booktitle = {Theoretical and Practical Aspects of {SPIN} Model Checking, 5th and
-               6th International {SPIN} Workshops},
-  pages     = {216--231},
-  year      = {1999},
-  url       = {http://www.havelund.com/Publications/jpf-fm99.ps.Z},
-}
-
-@article{havelund:2007,
-  author    = {Klaus Havelund},
-  title     = {Java PathFinder User Guide},
-  booktitle = {Unpublished Report},
-  year = {1999},
-  url = {​http://www.havelund.com/Publications/jpf-manual.ps.Z},
-}
-
-@article{havelund:Pressburger:1998,
-  author    = {Klaus Havelund and Thomas Pressburger},
-  title     = {Java PathFinder, A Translator from Java to Promela},
-  booktitle = {Unpublished Report},
-  year = {1998},
-  url = {​​http://www.havelund.com/Publications/jpf1-report-99.pdf},
-}
-
-@inproceedings{gligoric:2010,
-  author    = {Milos Gligoric and
-               Tihomir Gvero and
-               Vilas Jagannath and
-               Sarfraz Khurshid and
-               Viktor Kuncak and
-               Darko Marinov},
-  title     = {Test generation through programming in {UDITA}},
-  booktitle = {Proceedings of the 32nd {ACM/IEEE} International Conference on Software
-               Engineering},
-  address   = {Cape Town, South Africa},
-  month     = {May},
-  pages     = {225--234},
-  year      = {2010},
-  url       = {http://mir.cs.illinois.edu/~marinov/publications/GligoricETAL10UDITA.pdf},
-}
-
-@inproceedings{gligoric:jagannath:2010,
-  author    = {Milos Gligoric and
-               Vilas Jagannath and
-               Darko Marinov},
-  title     = {MuTMuT: Efficient Exploration for Mutation Testing of Multithreaded
-               Code},
-  booktitle = {Third International Conference on Software Testing, Verification and
-               Validation},
-  pages     = {55--64},
-  month     = {April},
-  address   = {Paris, France},
-  year      = {2010},
-  url       = {http://mir.cs.illinois.edu/~marinov/publications/GligoricETAL10MuTMuT.pdf},
-}
-
-@inproceedings{lauterburg:2010,
-  author    = {Steven Lauterburg and
-               Rajesh K. Karmani and
-               Darko Marinov and
-               Gul Agha},
-  title     = {Evaluating Ordering Heuristics for Dynamic Partial-Order Reduction
-               Techniques},
-  booktitle = {Fundamental Approaches to Software Engineering},
-  address   = {Paphos, Cyprus},
-  month     = {March},
-  pages     = {308--322},
-  year      = {2010},
-  url       = {http://mir.cs.illinois.edu/~marinov/publications/LauterburgETAL10DPORHeuristics.pdf},
-}
-
-@inproceedings{lauterburg:2009,
-  author    = {Steven Lauterburg and
-               Mirco Dotta and
-               Darko Marinov and
-               Gul A. Agha},
-  title     = {A Framework for State-Space Exploration of Java-Based Actor Programs},
-  booktitle = {24th {IEEE/ACM} International Conference on Automated Software Engineering},
-  month     = {November},
-  address   = {Auckland, New Zealand},
-  pages     = {468--479},
-  year      = {2009},
-  url       = {http://mir.cs.illinois.edu/~marinov/publications/LauterburgETAL09Basset.pdf},
-}
-
-@article{sobeih:2010,
-  author    = {Ahmed Sobeih and
-               Marcelo d'Amorim and
-               Mahesh Viswanathan and
-               Darko Marinov and
-               Jennifer C. Hou},
-  title     = {Assertion Checking in J-Sim Simulation Models of Network Protocols},
-  journal   = {Simulation: Transactions of The Society for Modeling and Simulation International},
-  volume    = {86},
-  number    = {11},
-  pages     = {651--673},
-  year      = {2010},
-  url       = {http://dx.doi.org/10.1177/0037549709349326},
-}
-
-@inproceedings{gligoric:2009,
-  author    = {Milos Gligoric and
-               Tihomir Gvero and
-               Steven Lauterburg and
-               Darko Marinov and
-               Sarfraz Khurshid},
-  title     = {Optimizing Generation of Object Graphs in Java PathFinder},
-  booktitle = {Second International Conference on Software Testing Verification and Validation},
-  month     = {April},
-  address   = {Denver, Colorado, {USA}},
-  pages     = {51--60},
-  year      = {2009},
-  url       = {http://mir.cs.illinois.edu/~marinov/publications/GligoricETAL09OptimizingGeneration.pdf},
-}
-
-@article{damorim:2008,
-  author    = {Marcelo d'Amorim and
-               Steven Lauterburg and
-               Darko Marinov},
-  title     = {Delta Execution for Efficient State-Space Exploration of Object-Oriented Programs},
-  journal   = {{IEEE} Transactions on Software Engineering},
-  volume    = {34},
-  number    = {5},
-  pages     = {597--613},
-  year      = {2008},
-  month     = {September/October},
-  url       = {http://mir.cs.illinois.edu/~marinov/publications/dAmorimETAL08DeltaExecution.pdf},
-}
-
-@inproceedings{lauterburg:2008,
-  author    = {Steven Lauterburg and
-               Ahmed Sobeih and
-               Darko Marinov and
-               Mahesh Viswanathan},
-  title     = {Incremental state-space exploration for programs with dynamically
-               allocated data},
-  booktitle = {International Conference on Software Engineering},
-  address   = {Leipzig, Germany},
-  month     = {May},
-  pages     = {291--300},
-  year      = {2008},
-  url       = {​http://mir.cs.illinois.edu/~marinov/publications/LauterburgETAL08IncrementalChecking.pdf},
-}
-
-@inproceedings{gvero:2008,
-  author    = {Tihomir Gvero and
-               Milos Gligoric and
-               Steven Lauterburg and
-               Marcelo d'Amorim and
-               Darko Marinov and
-               Sarfraz Khurshid},
-  title     = {State extensions for java pathfinder},
-  booktitle = {International Conference on Software Engineering, Demo Papers},
-  address   = {Leipzig, Germany},
-  month     = {May},
-  pages     = {863--866},
-  year      = {2008},
-  url       = {http://mir.cs.illinois.edu/~marinov/publications/GligoricETAL09OptimizingGeneration.pdf},
-}
-
-@inproceedings{damorim:2007,
-  author    = {Marcelo d'Amorim and
-               Steven Lauterburg and
-               Darko Marinov},
-  title     = {Delta execution for efficient state-space exploration of object-oriented
-               programs},
-  booktitle = {Proceedings of the {ACM/SIGSOFT} International Symposium on Software
-               Testing and Analysis},
-  address   = {London, UK},
-  month     = {July},
-  pages     = {50--60},
-  year      = {2007},
-  url       = {http://mir.cs.illinois.edu/~marinov/publications/dAmorimETAL07DeltaExecution.pdf},
-}
-
-@inproceedings{zhou:2007,
- author = {Zhou, Yuanyuan and Marinov, Darko and Sanders, William and Zilles, Craig and d'Amorim, Marcelo and Lauterburg, Steven and Lefever, Ryan M. and Tucek, Joe},
- title = {Delta Execution for Software Reliability},
- booktitle = {Proceedings of the 3rd Workshop on on Hot Topics in System Dependability},
- series = {HotDep'07},
- year = {2007},
- address = {Edinburgh, UK},
- url = {http://mir.cs.illinois.edu/~marinov/publications/ZhouETAL07DeltaExecution.pdf},
- publisher = {USENIX Association},
-} 
-
-@inproceedings{damorim:2006,
-  author    = {Marcelo d'Amorim and
-               Ahmed Sobeih and
-               Darko Marinov},
-  title     = {Optimized Execution of Deterministic Blocks in Java PathFinder},
-  booktitle = {Proceedings of Formal Methods and Software Engineering, 8th International Conference
-               on Formal Engineering Methods},
-  address   = {Macao, China}, 
-  month     =  {November},
-  pages     = {549--567},
-  year      = {2006},
-  url       = {http://mir.cs.illinois.edu/~marinov/publications/dAmorimETAL06OptimizedDeterministicBlocks.pdf},
-}
-
-@inproceedings{damorim:pacheco:2006,
-  author    = {Marcelo d'Amorim and
-               Carlos Pacheco and
-               Tao Xie and
-               Darko Marinov and
-               Michael D. Ernst},
-  title     = {An Empirical Comparison of Automated Generation and Classification
-               Techniques for Object-Oriented Unit Testing},
-  booktitle = {Proceedings of 21st {IEEE/ACM} International Conference on Automated Software Engineering},
-  address   = {Tokyo, Japan},
-  month     = {September},
-  pages     = {59--68},
-  year      = {2006},
-  url       = {​http://mir.cs.illinois.edu/~marinov/publications/dAmorimETAL06Symclat.pdf},
-}
-
-@unpublished{kulikov:2010,
-  author = {Sergey Kulikov and Nastaran Shafiei and Franck van Breugel and Willem Visser},
-  title = {{Detecting Data Races with Java PathFinder}},
-  year = "2010",
-  url = {http://www.cse.yorku.ca/~franck/research/drafts/race.pdf}
-}
-
-@inproceedings{indradeep:2013,
-  author = {Ghosh, Indradeep and Shafiei, Nastaran and Li, Guodong and Chiang, Wei-Fan},
-  title = {{JST: an automatic test generation tool for industrial Java applications with strings}},
-  booktitle = {Proceedings of the 35th International Conference on Software Engineering},
-  year = {2013},
-  month = {May},
-  address = {San Francisco, CA, USA},
-  pages = {992--1001},
-  publisher = {IEEE},
-  url = {http://dl.acm.org/citation.cfm?id=2486925}
-} 
-
-@article{nshafiei:2012,
-  author = {Shafiei, Nastaran and Mehlitz, Peter C.},
-  journal = {ACM SIGSOFT Software Engineering Notes},
-  number = 6,
-  pages = {1-5},
-  title = {{Modeling class loaders in Java PathFinder version 7}},
-  volume = 37,
-  year = 2012,
-  month = {November},
-  url = {http://dl.acm.org/citation.cfm?id=2382800}
-}
-
-@article{shafiei:2014,
-  author = {Shafiei, Nastaran and Mehlitz, Peter C.},
-  journal = {ACM SIGSOFT Software Engineering Notes},
-  number = 1,
-  pages = {1-5},
-  title = {{Extending JPF to verify distributed systems}},
-  volume = 39,
-  year = 2014,
-  month = {January},
-  url = {http://dl.acm.org/citation.cfm?id=2560577},
-}
-
-@inproceedings{shafiei:2013,
-  author    = {Nastaran Shafiei and
-               Franck van Breugel},
-  title     = {Towards model checking of computer games with Java PathFinder},
-  booktitle = {Proceedings of the 3rd International Workshop on Games and Software
-               Engineering},
-  address   = {San Francisco, CA, USA},
-  month     = {May},
-  pages     = {15--21},
-  year      = {2013},
-  url       = {http://dl.acm.org/citation.cfm?id=2662596},
-}
-
-
-@inproceedings{shafiei:breugel:2014,
-  author    = {Nastaran Shafiei and
-               Franck van Breugel},
-  title     = {Automatic handling of native methods in Java PathFinder},
-  booktitle = {Proceedings of the International SPIN Workshop on Model Checking of Software},
-  address   = {San Jose, CA, USA},
-  month     = {July},
-  pages     = {97--100},
-  year      = {2014},
-  url       = {http://dl.acm.org/citation.cfm?id=2632363},
-}
\ No newline at end of file
diff --git a/doc/user/api.md b/doc/user/api.md
deleted file mode 100644 (file)
index fdfd9a6..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-# The Verify API #
-Although the primary purpose of JPF is to verify applications that are not JPF dependent, it can also be used to check programs that are explicitly written to execute under JPF. There are two ways to do this
-
- * use of jpf annotations such as `@gov.nasa.jpf.annotation.JPFConfig` and `@gov.nasa.jpf.annotation.FilterField`
- * use of the various `gov.nasa.jpf.vm.Verify` APIs
-
-The first method provides only directives to JPF (by means of Java annotations), and does not modify or add any specific code to your system under test. The second one is imperative and should only be used by JPF specific test drivers.
-
-## JPF Annotations ##
-The JPF core currently supports two annotation types: `@JPFConfig` and `@FilterField`
-
-~~~~~~~~ {.java}
-import gov.nasa.jpf.annotation.JPFConfig
-...
-@JPFConfig({"listener+=,gov.nasa.jpf.aprop.listener.SharedChecker", ..})
-public class MyClass {
-  ..
-}
-~~~~~~~~
-
-The `@JPFConfig` annotation allows to set JPF properties (<key>=<value> pairs) for classes and methods of your application, which is especially useful to add specific listeners. You have to be aware of the property effects though, since not all behavior can be changed at runtime, and you usually cannot reverse features with this method
-
-The `@FilterField` annotation is used to mark certain fields in your application as not relevant for state matching. This is useful if you have to add debugging information like counters that would otherwise increase the state space (i.e. would prevent state matching).
-
-~~~~~~~~ {.java}
-import gov.nasa.jpf.annotation.FilterField;
-...
-public class MyClass {
-  ..
-  @FilterField int counter;
-  ..
-}
-~~~~~~~~
-
-This does not change execution of your program in any way, and also does not affect backtracking within JPF (i.e. values are properly restored). It only tells JPF to ignore marked fields when hashing/matching program states.
-
-There is a [jpf-aprop](wiki:projects/jpf-aprop) JPF module that is dedicated to Java annotation based program properties such as `@Nonnull`, `@NonShared`, `@Immutable`, `@Requires` and many others.
-
-## The Verify API ##
-
-Sometimes it is useful to create JPF specific test drivers, like you create JUnit test cases. In this code, you can make explicit use of JPF APIs, since it is not supposed to run outside JPF. There are several categories of APIs which are encapsulated in the `gov.nasa.jpf.vm.Verify` class.
-
-### Data ChoiceGenerators ###
-Data ChoiceGenerators (CGs) are suitable for writing test drivers that are JPF aware. The idea is to obtain non-deterministic input values from JPF in a way that it can systematically analyze all relevant choices. In its most simple form, this can be used like
-
-~~~~~~~~ {.java}
-// test driver code
-import gov.nasa.jpf.vm.Verify;
-..
-boolean cond = Verify.getBoolean();
-// following code is executed for both cond=true AND cond=false
-..
-~~~~~~~~
-
-The `Verify` class contains methods for creating a number of different choice generators for builtin Java types, like
-
-~~~~~~~~ {.java}
-..
-int i = Verify.getInt(min,max); // evaluates for all values between 'min' and 'max' (inclusive)
-..
-double d = Verify.getDoubleFromSet(-42.0, 0.0, 42.0 ..); // evaluates all given values
-..
-~~~~~~~~ 
-
-
-CGs don't stop at value sets that can be completely enumerated based on their type (like boolean, and - at least theoretically - integers). JPF also supports configured heuristics based choice generators, where the values sets are application dependent and can be specified in property files.
-
-![Figure: Data ChoiceGenerators](../graphics/choicegen-example.svg){align=center width=750}
-
-Choice generator implementation is described in a [separate section](wiki:devel/choicegenerator) of this documentation.
-
-### Search Pruning ###
-
-Explicitly restricting the search is useful for highly application specific properties, where it is obvious that certain values are not of interest with respect to the property.
-
-~~~~~~~~ {.java}
-// ..compute some data..
-Verify.ignoreIf(data > someValue); // prune search if true
-// ..do some stuff with data..
-~~~~~~~~
-If the provided expression evaluates to true, JPF does not continue to execute the current path, and backtracks to the previous non-deterministic choice point.
-
-### State Annotation ###
-Based on certain value combinations, an application might give JPF hints about the relevance of a program state that can be subsequently used by Search and/or Heuristic implementations.
-
-~~~~~~~~ {.java}
-// ..compute some data
-Verify.interesting( data < someValue );
-// ..do some stuff with data
-~~~~~~~~
-
-This does not stop execution by JPF, but stores an 'interesting' attribute for the current state. Its more general version is used to attach arbitrary strings to states:
-
-~~~~~~~~ {.java}
-// ..compute some data
-if (data < someValue) {
-  Verify.setAnnotation("critical data value");
-  // ..do some stuff with dat
-~~~~~~~~
-
-Again, this category is about to become less important since Search- and VMListeners are superior mechanisms to store not just strings but arbitrary objects as state annotations.
-
-### Verification Output ###
-
-This is the most simple category, which is used to differentiate between normal program output (that is executed and analyzed by JPF), and output that is strictly verification relevant, i.e. should not appear when executing a program outside JPF. Not very surprising, it contains a number of print(..) methods.
-
-### Atomicity Control ###
-
-this category can be used to control the number of thread interleavings JPF has to analyze. While this is problematic in terms of missing potential defects, it is was often the only way to constrain the state space so that JPF could verify a given application.
-
-~~~~~~~~ {.java}
-Verify.beginAtomic();
-...
-// all code in here is executed by JPF in one transition
-...
-Verify.endAtomic();
-~~~~~~~~
-
-Direct atomicity control was mainly used before the automatic, on-the-fly partial order reduction (POR) was implemented, and only remains relevant for applications that are (still) problematic with respect to POR. JPF's on-the-fly POR implementation is described in a [separate section](../devel/partial_order_reduction) of this documentation.
-
-### Other Usages ###
-
-Some `Verify` methods support collecting information during JPF execution, which is persistent and can be later-on queried by JPF embedding code (programs that execute JPF). This uses an MJI trick where the [native peer](../devel/mji) class (`JPF_gov_nasa_jpf_vm_Verify`) is used to set some data during JPF execution, which can be later-on retrieved by model class code (through `gov.nasa.jpf.vm.Verify`) that is executed outside of JPF. This is currently used to implement counters, which in turn are used to verify JPF itself.
-
-It should be noted that while most of the Verify APIs have alternative implementations that enable execution outside of JPF, applications using them at least don't build outside the JPF environment. Their use therefore is only recommended for JPF specific test drivers.
\ No newline at end of file
diff --git a/doc/user/application_types.md b/doc/user/application_types.md
deleted file mode 100644 (file)
index 352e9c9..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-# JPF Application Goals and Types #
-
-By now, you already know that you run JPF on compiled Java programs, just like a normal VM. But what are the goals to apply JPF, and - based on these goals - what are the different JPF application types?
-
-## Why to Use JPF? ##
-Before we classify the different types of JPF applications, it is worth to spend a few thoughts on why we actually want to apply it. A word of caution: if you have a strictly sequential program with only a few well defined input values, you are probably better off writing a few tests - using JPF won't tell you much. There are two major reasons to run JPF:
-
-### Explore Execution Alternatives ###
-After all, JPF started as a software model checker, so its original domain is to explore execution choices, of which we have four different types:
-
-  - scheduling sequences - concurrent applications are still the major domain for JPF application because (a) defects like deadlocks and data races are subtle and usually spurious, and (b) the scheduler can usually not be controlled from a testing environment, i.e. this is hard to impossible to test. JPF on the other hand not only "owns" the scheduler (it is a virtual machine) and explores all interesting scheduling combinations, it even lets you define your own scheduling policies
-  - input data variation - JPF allows you to explore input value sets that can be defined by heuristics (e.g. a value below, at, and above a certain threshold). This is especially useful when writing test drivers
-  - environment events - program types like Swing or web applications usually react to external events like user input. Such events can be simulated by JPF as choice sets
-  - control flow choices - JPF can not only check how your program reacts to a concrete input, it can also turn around and systematically explore the program control structure (branch instructions) to compute input data values that would execute a certain part of your code.
-
-### Execution Inspection ###
-
-Even if your program does not have a lot of execution alternatives, you can make use of JPF's inspection capabilities. Being an extensible virtual machine, it is relatively easy to implement coverage analyzers, or non-invasive tests for conditions that would otherwise go unnoticed because they are hard or tedious to implement (like overflow in numerical instructions).
-
-## JPF Application Types ##
-There are three basic JPF application types, each of them having different strengths and weaknesses: JPF- aware, unaware, and "enabled" programs.
-
-![Figure: JPF application types](../graphics/app-types.svg){align=center width=800}
-
-### JPF Unaware Programs ###
-This is the usual case - you run JPF on an application that is not aware of verification in general, or JPF in particular. It just runs on any VM that is Java compatible. The typical reason to check such an application with JPF is to look for violations of so called non-functional properties that are hard to test for, such as deadlocks or race conditions. JPF is especially good at finding and explaining concurrency related defects, but you have to know the costs: JPF is much slower than a production VM (for a reason - it does a lot more than a normal byte code interpreter), and it might not support all the Java libraries that are used by the system under test.
-
-### JPF Dependent Programs ###
-On the other side of the spectrum we have applications that are models - their only purpose in life is to be verified by JPF (e.g. to check a certain algorithm), so Java just happens to be the implementation language because that is what JPF understands. Typically, these applications are based on a domain specific framework (such as the [statechart extension](../projects/jpf-statechart) that has been written so that JPF can verify the model. As a consequence, the model applications themselves are usually small, scale well, and do not require additional property specification. The downside is that it is quite expensive to develop the underlying domain frameworks.
-
-### JPF Enabled Programs ###
-The third category probably has the best return on investment - programs that can run on any VM, but contain Java annotations that represent properties which cannot easily be expressed with standard Java language. 
-
-For example, assume you have a class which instances are not thread safe, and hence are not supposed to be used as shared objects. You can just run JPF and see if it finds a defect (like a data race) which is caused by illegally using such an object in a multi-threaded context. But even if JPF out-of-the-box can handle the size of the state space and finds the defect, you probably still have to spend a significant effort to analyze a long trace to find the original cause (which might not even be visible in the program). It is not only more easy on the tool (means faster), but also better for understanding if you simply mark the non-threadsafe class with a `@NonShared` annotation. Now JPF only has to execute up to the point where the offending object reference escapes the creating thread, and can report an error that immediately shows you where and how to fix it. 
-
-There is an abundance of potential property-related annotations (such as `@NonNull` for a static analyzer and JPF), including support for more sophisticated, embedded languages to express pre- and post-conditions.
diff --git a/doc/user/components.md b/doc/user/components.md
deleted file mode 100644 (file)
index 55a01d2..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# JPF components #
-Java is more than a programming language. It is a set of layers that starts with a platform specific VM implementation (which is referred to as the *host VM*) that sits on top of native libraries written for and using your operating system. To this stack, we add JPF - a Java application that runs on top of the "host VM", but is itself a VM which then executes your System Under Test (SUT).
-
-![Figure 1: Different layers involved when using JPF](../graphics/jpf-layers.svg){align=center width=700}
-
-With all this recursion, it is easy to get confused about what Java code gets processed at which level. To make things worse,  most of the standard library class files (java.* classes) and some of the annotations get processed by both VMs, but of course in different instantiations. Purpose of this page is to shed some light on what code is associated with the different layers and parts of the system.
-
-In order to untangle, we have to step back and look at what components are involved when applying JPF to the SUT. We categorize the components with respect to two aspects:
-
- 1. processing VM (host VM, JPF)
- 1. associated distribution entity (host Java installation, JPF core, JPF extensions, SUT)
-
-Remember the [What is JPF](../intro/what_is_jpf) diagram from the introduction? This is a more detailed version of it. 
-
-![Figure 2: JPF infrastructure](../graphics/jpf-intro-new.svg){align=center width=800}
-
-Let us walk this diagram left-to-right. We start with the compiled Java application we want to verify. This is of course not part of the JPF distribution, but will be executed by JPF, so the corresponding class files do not have to be visible to the host VM (that runs JPF). However, the application code might use classes and interfaces that reside in the JPF distribution. Together, the application and such modeling libraries and/or annotations form the System under Test (SUT)
-
-Next comes the JPF core itself. By now we know this is mainly a VM that is written in Java itself, so you run it on whatever Java system is installed on your machine. This means all classes that constitute JPF need to be visible to the host JVM, e.g. by setting the global `CLASSPATH` environment variable (which is not the recommended way to do this). 
-
-Now comes the important part: **JPF is not a monolithic system**. It uses various configured components to do things such as
-
- * property implementation
- * library modeling
- * report generation
-
-and much more. Even if you don't specify anything when you run it, JPF will use a default configuration that pulls in a lot of components such as [listeners](../devel/listener), which do not have to be part of the [JPF core](../jpf-core/index), but can reside in their own JPF extension modules.
-
-If you do specify your own [configuration](../user/config), you can tell JPF to use components that live outside of the [JPF core](../jpf-core/index) distribution, either in one of the installed JPF extension modules, or in your own project. Either way, all these [listeners](../devel/listener), [native peers](../devel/mji), [publishers](../devel/report) and other components are at runtime part of the whole  JPF system, so they need to be visible to the host VM.
-
-The last part is the most tricky one - your application is most probably using standard Java libraries (e.g. `System.out.println()`), as do the classes that constitute JPF. Some of the standard library classes have to be replaced by JPF specific versions when JPF executes the SUT (e.g. classes such as `java.lang.Class`that have native methods), and JPF has a special [MJI](../devel/mji) mechanism to do that. However, most standard library classes have pure Java implementations, and we take these straight from the host-JVM installation. This means, standard libraries end up in JPF's classpath *and* the host JVM CLASSPATH: and their code is executed by JPF *and* the host VM, but the corresponding instances are different (for instance, a `java.lang.String` object has very different representations in the host VM and JPF).
-
-
-JPF keeps associated class paths separate. There are three different path settings in the JPF configuration:
-
- 1. `native_classpath` - this includes everything that has to be visible to the host VM, which includes mostly the classes of JPF itself, listeners, native peers and bytecode instruction sets. The `native_classpath` is dynamically constructed from your site.properties and jpf.properties [configuration files](../user/config) during JPF startup, and processed by the JPF classloader
- 2. `classpath` - this includes the classes that are executed by JPF, which include your SUT, and all libraries that are used by it (*-classes.jar of installed JPF components). Note that some of the library classes (like `java.lang.Thread`) are replaced by JPF specific versions. Again, this is constructed by JPF during startup from all your configured jpf.properties files, but processed by JPFs internal classfile lookup mechanism.
- 3. `sourcepath`  - depending on the reports that have to be generated by JPF, it might have to find SUT and library sources for the executed classfiles (bytecodes). This is how you tell JPF where these sources reside.
-
-You can set these path lists explicitly from your application property file or the command line, but it is better to let JPF collect them when processing the jpf.properties files of your installed JPF components, which all include  lines like
-
-~~~~~~~~ {/bash}
-<jpf-module>.native_classpath = ..
-<jpf-module>.classpath = ..
-<jpf-module>.sourcepath = ..
-~~~~~~~~
-
-A word of caution: if - during JPF startup - you encounter a message like
-
-~~~~~~~~ {.bash}
-...
-[SEVERE} error during VM runtime initialization: wrong model classes (check 'classpath')
-~~~~~~~~
-
-it means the `classpath` setting is wrong and JPF loads some of the standard library classes that have to be replaced with its own versions  - they need to be *modeled* (like `java.lang.Thread`, `java.lang.Class` and others - all part of jpf-classes.jar within the jpf-core module).
-
-This can also happen later-on with less essential library classes that are not part of jpf-core, but should be loaded from one of the installed extensions. In this case, this usually shows up as an `UnsatisfiedLinkError`
diff --git a/doc/user/config.md b/doc/user/config.md
deleted file mode 100644 (file)
index a57d07b..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-# Configuring JPF #
-
-JPF configuration can be intimidating. It is worth to think about why we need such a heavy mechanism before we dive into its details. Little in JPF is hardwired. Since JPF is such an open system that can be parameterized and extended in a variety of ways, there is a strong need for a general, uniform configuration mechanism. The challenge for this mechanism is that many of the parts which are subject to parameterization are configured themselves (i.e. options for optional JPF components like listeners). This effectively prohibits the use of a configuration object that contains concrete fields to hold configuration data, since this class would be a central "design bottleneck" for a potentially open number of JPF components like Searches, Instruction sets and Listeners.
-
-The goal is to have a configuration object that
-
-  * is based on string values
-  * can be extended at will
-  * is passed down in a hierarchical initialization process so that every component extracts only its own parameters
-
-We achieve this by means of a central dictionary object (`gov.nasa.jpf.Config`) which is initialized through a hierarchical set of Java property files that target three different initialization layers:
-
-  1. site: optionally installed JPF components
-  2. project: settings for each installed JPF module and (optionally) systems under test
-  3. application: the class and program properties JPF should check (this is part of your system under test)
-
-Initialization happens in a prioritized order, which means you can override anything from later configuration stages, all the way up to command line parameters. Actually, this can be even overridden by using the `Verify` API from system under test code, but this is a developer topic. Here is the blueprint, which we will examine in order of execution:
-
-![Figure: Configuring JPF](../graphics/properties.svg){align=center width=800}
-
-
-## Property Types ##
-
-Property specifications are processed in a hierarchical order: site properties, project properties, application properties and command line properties. Later stages can override previous stages. Each property is a `<key>=<value>` pair, but we do support some special notations (see below) for key/value expansion, value extension, and pseudo properties that act as directives.
-
-### Site Properties ###
-The site.properties file is machine specific and not part of any JPF project, which means you have to create a [ site.properties](wiki:install/site-properties) file as part of the install process. A sample site.properties might look like:
-
-~~~~~~~~
-jpf-core = ${user.home}/projects/jpf/jpf-core
-jpf-shell = ${user.home}/projects/jpf/jpf-shell
-jpf-awt = ${user.home}/projects/jpf/jpf-awt
-...
-extensions=${jpf-core},${jpf-shell}
-~~~~~~~~
-
-Each module is listed as a `<name>=<directory>` pair, and optionally added to the comma separated list of `extensions`. The order in which modules are added to `extensions` does matter, since it will determine the order in which each of these components is initialized, which basically maps to an ordered list of classpath entries (both for the host VM and JPF itself - paths are kept separate).
-
-Note that we do **not** require all modules being added to `extensions`, **but** jpf-core needs to be in there. Dependencies on modules not listed in `extensions` can be specified later-on with the `@using` directive. It is a good idea to keep the `extensions` list small to avoid conflicts, and to improve class load times (shorter classpaths). 
-
-Note also that the `extensions` entries are of the form `${<key>}`, which tells JPF to replace these expressions with the value that is associated to <key>. 
-
-Site properties have to be stored in the directory from where you start JPF, one of its parent directories, or a global `${user.home}/.jpf/site.properties`. We recommend a to keep it in a common root directory that contains all your JPF projects and modules.
-
-
-### Project Properties ###
-Each JPF module contains a jpf.properties file in its root directory, no matter if this is the jpf-core or an extension. System under test projects can contain a jpf.properties file to factor out common settings (such as class paths) for all JPF applications within this project.
-
-A project property file defines the JPF specific paths that need to be set for the module or system under test to work properly
-
- 1. `<module-name>.`**`native_classpath`**: the host VM classpath (i.e. the classes that constitute JPF itself)
- 1. `<module-name>.`**`classpath`**: the classpath JPF uses to execute the system under test
- 1. `<module-name>.`**`test_classpath`**: host VM and JPF classpath for regression tests
- 1. `<module-name>.`**`sourcepath`**: the path entries JPF uses to locate sources in case it needs to create program traces
-
-Additionally, `jpf.properties` should contain default values for all module or project specific settings (e.g. report options).
-
-An example project properties file might look like:
-
-~~~~~~~~ {.bash}
-jpf-aprop = ${config_path}
-
-#--- path specifications
-jpf-aprop.native_classpath = build/jpf-aprop.jar;lib/antlr-runtime-3.1.3.jar
-jpf-aprop.classpath = build/examples
-jpf-aprop.test_classpath = build/tests
-jpf-aprop.sourcepath = src/examples
-
-#--- other project specific settings
-listener.autoload=${listener.autoload},javax.annotation.Nonnull,...
-listener.javax.annotation.Nonnull=gov.nasa.jpf.aprop.listener.NonnullChecker
-...
-~~~~~~~~
-
-
-
-The first entry (`<module-name>=${config_path}`) in a jpf.properties should always define the module name. JPF automatically expands `${config_path}` with the pathname of the directory in which this jpf.properties file resides.
-
-jpf.properties are executed in order of definition within site.properties, with one caveat: if you start JPF from within a directory  that contains a jpf.properties file, this one will always take precedence, i.e. will be loaded last (overriding previous settings except of the command line). This way, we ensure that JPF developers can enforce priority of the component they are working on.
-
-Both site.properties and jpf.properties can define or override any key/value pairs they want, but keep in mind that you might end up with different system behavior depending on where you start JPF - avoid configuration force fights by keeping jpf.properties settings disjunct wherever you can.
-
-Please note that site and project properties have to be consistent, i.e. the module names (e.g. jpf-awt) in site.properties and jpf.properties need to be the same. This is also true for the build.xml Ant project names.
-
-It is perfectly fine to have a jpf.properties in a SUT that only uses JPF for verification. You need at least to set up the `classpath` so that JPF knows where to find the SUT classes.
-
-
-### Application Properties ###
-In order to run JPF, you need to tell it what main class it should start to execute. This is the minimal purpose of the *.jpf application properties files, which are part of your systems under test (SUT). Besides the `target` setting that defines the main class of your SUT, you can also define a list of `target_args` and any number of JPF properties that define how you want your application to be checked (listeners, search policy, bytecode factories etc.). A typical example looks like
-
-~~~~~~~~ {.bash}
-#--- dependencies on other JPF modules
-@using = jpf-awt
-@using = jpf-shell
-
-#--- what JPF should run
-target = RobotManager
-
-#--- other stuff that defines how to run JPF
-listener+=,.listener.OverlappingMethodAnalyzer
-
-shell=.shell.basicshell.BasicShell
-awt.script=${config_path}/RobotManager-thread.es
-cg.enumerate_random=true
-...
-~~~~~~~~
-
-The `@using = <module-name>` directive tells JPF to load the `jpf.properties` of the specified projects (defined in `site.properties`). This is the way to ensure proper path initialization of projects that are not listed in `extensions`. 
-
-### Command Line Properties ###
-Last not least, you can override or extend any of the previous settings by providing "**+**<key>=<value>" pairs as command line options. This is convenient for experiments if you have to determine the right settings values empirically
-
-
-## Special Property Syntax ##
-JPF supports a number of special notations that are valid Java properties syntax, but are only processed by JPF (and - to a certain extend - by Ant):
-
- * **`key=...${x}..`** - replaces `"${x}"` with whatever is currently stored under the key "`x`". This also works recursively, as in "`classpath = mypath;${classpath}`". Note that while Apache Ant does also support value expansion, but not recursively. In addition, JPF also supports expansion in the key part (i.e. left of the "`=`")
-
- * **`key+=val`** - appends val to whatever is currently stored under "`key`". Note that there can be no blank between key and "`+=`", which would not be parsed by Java. This expansion only works in JPF 
-
- * **`+key=val`** - in a properties file adds "`val`" in front of what is currently stored under "`key`". Note that if you want to use this from the command line, you have to use two "`++`", since command line options start with "+"
-
- * **`${config_path}`** - is automatically set to the directory pathname of the currently parsed property file. This can be useful to specify relative pathnames (e.g. input scripts for the jpf-awt extension)
-
- * **`${config}`** - is set to the file pathname of the currently parsed file
-
- * **`@requires=<key>`** - can be used to short-circuit loading of a properties file. This is a simple mechanism to control loading of jpf.properties file sections that are incompatible with other modules, and compares to `#ifdef` preprocessor directives. The respective keys are usually set from application properties (*.jpf) files. 
-Note this does not throw an exception if the required key is not defined, it just bails out of loading the properties file that contains the @requires directive
-
- * **`@include=<property-file>`** - recursively loads the properties file with the specified pathname. You can use the automatically defined `${config_path}` property to specify path names that are relative to where the file containing the `@include` directive is, or use `${<module-name>}` for paths that are relative to the specified module.
-
- * **`@using=<module-name>`** - is similar to `@include`, but loads the jpf.properties of the specified module name (which has to be defined in site.properties). Note that there is no `${..}` around the module name - otherwise it would be replaced. The `@using` directive is the preferred way to specify dependencies on modules that are not in the `extensions` list (i.e. automatically initialized).
-
- * **`@include_if = ?<key>?<properties-file>`** - is a conditional `@include` that only loads the properties file if the specified `<key>` is defined
-
- * **`@include_unless = ?<key>?<properties-file>`** - likewise loads the file only if `<key>` is not defined. Both of these directives are used rarely.   
-
- * Omitting the "`=..`" part in command line settings defaults to a "`true`" value for the corresponding key
-
- * Setting an empty value (`key=`) removes the key from the config dictionary
-
-## Debugging ##
-Depending on the number of installed and loaded projects, you can easily end up with hundreds of settings. There are two command line options you can use if you assume there is a configuration error:
-
- * **`-show`** - prints all Config entries after the initialization is complete
-
- * **`-log`** - lists the order in which properties files got loaded by JPF
-
-## Details on various options ##
-
-* [Randomization](config/random)
-
-* Error Reporting
diff --git a/doc/user/config/random.md b/doc/user/config/random.md
deleted file mode 100644 (file)
index 4fae737..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-## Randomization Options in JPF ##
-
-The randomization options in JPF allow the user to experiment in randomizing the order of choices explored. 
-
-`cg.randomize_choices` can have three possible values: random, path, def.
-
- * `random`: It explores random choices during program execution with **varying results among different trials**. The default seed used to generate different results is the **system time in milliseconds**
-
- * `path`: It explores random choices during program execution with **reproducible results among different trials**. The default seed used to generate reproducible results is **42**. The value of the seed can be changed by setting the seed config option.
-
- * `def`: No randomization, choices are explored using the default search order imposed by the model checker. 
-
-`cg.seed (_INT_)`: The user can specify a particular seed for the random number generator in order to obtain reproducible results in the presence of randomization. Note that this is effective only when the `path` option of `randomize_choices` is selected. 
-
-
diff --git a/doc/user/index.md b/doc/user/index.md
deleted file mode 100644 (file)
index 6626007..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# How to Use JPF #
-
-This section is where the real fun starts. Here you learn about
-
-  - [Different applications of JPF](application_types)
-  - [JPF's runtime components](components)
-  - [Starting JPF](run)
-  - [Configuring JPF](config)
-  - [Understanding JPF output](output)
-  - [Using JPF's Verify API in the system under test](api)
-
-All this assumes you are more interested in running JPF than in developing with/for it, so we will leave most of the JPF internals for the [developer section](../devel/index) of this wiki. 
-
-We do have to bother you with some basic concepts though. Keep in mind that JPF is usually not a black-box tool (such as a compiler). Most probably you have to configure it according to your needs because
-
-  * you have specific verification goals (properties)
-  * your application has a huge state space that is challenging for a model checker
-
-On the other hand, JPF is also not a "works-or-fails" tool. Depending on how much time you want to invest, you can adapt it to almost all application types and verification goals. And since JPF is open sourced, chances are somebody has already done that
diff --git a/doc/user/output.md b/doc/user/output.md
deleted file mode 100644 (file)
index 349242d..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-# Understanding JPF Output #
-
-There are three different ways a JPF run can produce output, each of them with a different purpose, but all controlled by the [general JPF configuration mechanism](config):
-
-  1. System under test output - what is the SUT doing?\
-
-  2. JPF logging - what is JPF doing?\
-
-  3. JPF reporting system - what is the result of the JPF run?\
-
-
-
-## System Under Test Output ##
-
-This is the most simple form of output, which usually just consists of `System.out.println(..)` calls embedded in the application code. There is only one caveat - since this is executed by JPF as part of the application, the same print statement might be executed several times:
-
-~~~~~~~~ {.java}
-public class MyApplication ..{
-    ...
-    boolean cond = Verify.getBoolean();
-    System.out.println("and the cond is: " + cond);
-    ...
-}
-~~~~~~~~
-
-will produce
-
-~~~~~~~~
-...
-and the cond is: true
-...
-and the cond is: false
-...
-~~~~~~~~
-
-The second execution of the print statement is of course preceded by a backtrack operation of JPF (the `Verify.getBoolean()` statement has two choices `{true,false}`), but the backtracking might not be visible, e.g. when running without the `ExecTracker` or `ChoiceTracker` listeners.
-
-Since it can be sometimes confusing to see the same output twice without knowing if there is an iteration in the application, or JPF did backtrack between executions, there are two configuration options to control the output behavior:
-
-`vm.tree_output = {true|false}` - means output is shown on the console each time a print statement is executed. This corresponds to the above example, and is the default behavior.
-
-`vm.path_output = {true|false}` - will not immediately print the output on the console, but store in the path for subsequent processing once JPF terminates (if the *output* topic is specified - see below). This should produce the same output as running the test application on a normal JVM.
-
-## Logging ##
-
-This is a more interesting form of JPF output, primarily intended to show what JPF does internally. For this purpose, it has to support various levels of details, ranging from severe errors to fine grained logging of JPF operations.
-
-JPF's logging mechanism does not reinvent the wheel, it piggybacks on the standard java.util.logging infrastructure. While this means it would be possible to use customized LogHandlers and Formatters (e.g. to log in XML format), there are specialized JPF incarnations of these classes, mainly to enable logging configuration via the standard JPF configuration mechanism rather than system properties.
-
-Using the JPF Logging involves two aspects: (1) controlling log output destination, and (2) setting log levels. Both are done with JPF property files.
-
-To set the default log level, use the `log.level` property (the supported levels being *severe,warning,info,fine,finer,finest*)
-
-If you want to log to a different console that possibly even runs on a remote machine, use the gov.nasa.jpf.tools.LogConsole on the machine that should display the log messages:
-
-~~~~~~~~ {.bash}
-$ java gov.nasa.jpf.tools.LogConsole <port>
-~~~~~~~~
-
-Then start JPF on the test machine, specifying where the log output should go:
-
-~~~~~~~~ {.bash}
-$ jpf +log.output=<host>:<port> ... MyTestApp
-~~~~~~~~
-
-The default host is "localhost", default port is 20000. If these are suitable settings, you can start the `LogConsole` without parameters, and just specify `+log.output=socket` when running JPF.
-
-
-If you develop your own JPF classes, please also check the [JPF logging API](../devel/logging) page.
-
-## Reports ##
-
-The JPF reporting system is used to show the outcome of a JPF run, to report property violations, print traces, show statistics and much more. This is in a way the most important part of the JPF user interface, and might involve various different output formats (text, XML, API calls) and targets (console, IDE). Depending on application and project, users might also need control over what items are displayed in which order. It is also obvious this needs to be an extensible mechanism, to adapt to new tools and properties. The JPF report system provides all this, again controlled by JPF's general configuration mechanism.
-
-The basic concept is that reporting depends on a predefined set of output phases, each of them with a configured, ordered list of topics. The output phases supported by the current system are:
-
-  * start - processed when JPF starts
-  * transition - processed after each transition
-  * property_violation - processed when JPF finds a property violation
-  * finished - processed when JPF terminates
-
-There is no standard transition topic yet (but it could be implemented in `PublisherExtensions`). The standard `property_violation` topics include:
-
-  * error - shows the type and details of the property violation found
-  * trace - shows the program trace leading to this property violation
-  * snapshot - lists each threads status at the time of the violation
-  * output - shows the program output for the trace (see above)
-  * statistics - shows property statistics information
-
-Last not least, the finished list of topics that usually summarizes the JPF run:
-
-  * result - reports if property violations were found, and shows a short list of them
-  * statistics - shows overall statistics information
-
-The system consists of three major components: (1) the Reporter, (2) any number of format specific Publisher objects, and (3) any number of tool-, property- and Publisher-specific PublisherExtension objects. Here is the blueprint:
-
-
-Again, there is separate [report system API](../devel/report) documentation if you are interested in JPF development.
diff --git a/doc/user/run.md b/doc/user/run.md
deleted file mode 100644 (file)
index ce3b515..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-# Running JPF #
-There are five general ways to run JPF, depending on your execution environment (command prompt or IDE) and desired level of configuration support. This page has to cover quite some ground, so bear with us
-
- 1. [from a command prompt (operating system shell)](#command-line)
- 2. [from an IDE (NetBeans, Eclipse) without using JPF plugins](#running-jpf-from-within-ide-without-plugins)
- 3. [from an IDE with JPF plugins installed](#running-jpf-from-within-ide-with-plugins)
- 4. [from within a JUnit test class](#launching-jpf-from-junit-tests)
- 5. [single tests from command line](#explicitly-running-tests-from-the-command-line)
- 6. [explicitly from an arbitrary Java program](#explicitly-launching-jpf-from-a-java-program)
-
-## Command Line ##
-
-There are several ways to run JPF from the command line, using varying degrees of its runtime infrastructure. The most simple way is to use the provided `bin/jpf` script of the jpf-core distribution. Go to the directory where your system under test (SUT) classes reside, and do a
-
-~~~~~~~~ {.bash}
-> <jpf-core-dir>/bin/jpf +classpath=. <application-main-class>
-~~~~~~~~  
-
-or preferably
-
-~~~~~~~~ {.bash}
-> <jpf-core-dir>/bin/jpf <application-property-file>.jpf
-~~~~~~~~  
-
-(see target specification below). If you want to avoid platform specific scripts, you only have to slightly expand this to
-
-~~~~~~~~ {.bash}
-> java -jar <jpf-core-dir>/build/RunJPF.jar +classpath=. <application-main-class>
-~~~~~~~~
-
-This makes use of the small RunJPF.jar startup jar that is part of the jpf-core distribution, which only includes the classes that are required to start the JPF bootstrapping process (esp. the JPF classloader). These classes automatically process the various [JPF configuration files](config). If your SUT is not trivial, it is also recommended to add a "-Xmx1024m" host VM option, to avoid running out of memory.
-
-Last (and probably most rarely), you can directly start JPF and give it an explicit classpath. This amounts to something like
-
-~~~~~~~~ {.bash}
-> java -classpath <jpf-core-dir>/build/jpf.jar gov.nasa.jpf.JPF +classpath=. <application-main-class>
-~~~~~~~~
-
-Of course, this gets quickly more complicated if you use JPF extensions, which require to add to both the host VM and the JPF classpath, which is completely automated if you use the RunJPF.jar method. Explicitly setting paths is only for rare occasions if you develop JPF components yourself.
-
-There are three different argument groups that are processed by JPF:
-
-#### (1) JPF command line options ####
-
-These options should come first (after RunJPF.jar), and all start with a hyphen ("-").  The set of currently supported options is:
-
- * -help : show usage information and exit
- * -log  : print the configuration steps
- * -show : print the configuration dictionary after configuration is complete
-
-The last two options are mostly used to debug if the JPF configuration does not work as expected. Usually you start with `-show`, and if you don't see the values you expect, continue with `-log` to find out how the values got set.
-
-
-#### (2) JPF properties ####
-
-This is the second group of options, which all start with a plus ("+") marker, and consist of "`+<key>=<value>`" pairs like
-
-~~~~~~~~ {.bash}
-.. +cg.enumerate_random=true
-~~~~~~~~
-
-All properties from the various JPF properties [configuration files](config) can be overridden from the command-line, which means there is no limit regarding number and values of options. If you want to extend an existing value, you can use any of the following notations
-
- * `+<key>+=<value>` - which appends <value>
- * `++<key>=<value>` - which prepends <value>
- * `+<key>=..${<key>}..` - which gives explicit control over extension positions
-
-Normal JPF properties `${<key>}` expansion is supported.
-
-If the `=<value>` part is omitted, a default value of `true` is assumed. If you want to set a value to null (i.e. remove a key), just skip the `<value>` part, as in `+<key>=`
-
-#### (3) target specification ####
-
-There are two ways to specify what application JPF should analyze
- * explicit classname and arguments
-
-~~~~~~~~ {.bash}
-> jpf ...  x.y.MyApplication arg1 arg2 ..
-~~~~~~~~
-
- * application property file (*.jpf)
-
-~~~~~~~~ {.bash}
-> jpf ... MyApplication.jpf
-~~~~~~~~
-
-We recommend using the second way, since it enables you to store all required settings in a text file that can be kept together with the SUT sources, and also allows you to start JPF from within !NetBeans or Eclipse just by selecting the *.jpf file (this is mainly what the IDE plugins are for). Please note that application property files require a "`target`" entry, as in
-
-~~~~~~~~ {.bash}
-# JPF application property file to verify x.y.MyApplication
-target = x.y.MyApplication
-target.args = arg1,arg2
-# Note that target_args in JPF 6 changed to target.args in JPF 7.
-...
-~~~~~~~~
-
-## Running JPF from within IDE without plugins ##
-
-You can start JPF from within !NetBeans or Eclipse without having the IDE specific JPF plugins installed. In this case, JPF uses the standard IDE consoles to report verification results. For details, please refer to the following pages:
-
- * [Running JPF from within NetBeans without plugin](run_nb)
- * [Running JPF from Eclipse without plugin](run_eclipse)
-
-Note that this is **not** the recommended way to run JPF from within an IDE, unless you want to debug JPF or your classes.
-
-## Running JPF from within IDE with plugins ##
-
-You can simplify launching JPF from within !NetBeans or Eclipse by using the respective plugins that are available from this server. In this case, you just have to create/select an application property (*.jpf) file within your test project, and use the IDE context menu to start a graphical JPF user interface. These so called "JPF shells" are separate applications (that can be configured through normal JPF properties), i.e. appear in a separate window, but can still communicate with the IDE, e.g. to position editor windows. You can find more details on
-
- * [Running JPF from within NetBeans with netbeans-jpf plugin](run_nb_plugin)
- * [Running JPF from Eclipse with eclipse-jpf plugin](run_eclipse_plugin)
-
-This is becoming the primary method of running JPF. The benefits are twofold: (1) this is executed outside of the IDE process, i.e. it doesn't crash the IDE if JPF runs out of memory, and (2) it makes use of all your standard JPF configuration (site.properties and jpf.properties), in the same way like running JPF from a command-line. 
-
-## Launching JPF from JUnit tests ##
-
-JPF comes with [JUnit](http://www.junit.org) based testing infrastructure that is used for its own regression test suite. This mechanism can also be used to create your own test drivers that are executed by JUnit, e.g. through an [Ant](http://ant.apache.org) build script. The source structure of your tests is quite simple
-
-~~~~~~~~ {.java}
-import gov.nasa.jpf.util.test.JPFTestSuite;
-import org.junit.Test;
-
-public class MyTest extends TestJPF {
-
-  @Test
-  public void testSomeFunction() {
-    if (verifyNoPropertyViolation(jpfOptions)) {  // specifies the test goal, "jpfOptions" are optional 
-       someFuntction(); ..                        // this section is verified by JPF
-    } 
-  }
-
-  //.. more @Test methods
-~~~~~~~~
-
-From a JUnit perspective, this is a completely normal test class. You can therefore execute such a test with the standard `<junit>` [Ant](http://ant.apache.org) task, like
-
-~~~~~~~~ {.xml}
-    <property file="${user.home}/.jpf/site.properties"/>
-    <property file="${jpf-core}/jpf.properties"/>
-    ...
-    <junit printsummary="on" showoutput="off" haltonfailure="yes"
-           fork="yes" forkmode="perTest" maxmemory="1024m">
-      ...
-      <classpath>
-        ...
-        <pathelement location="${jpf-core}/build/jpf.jar"/>
-      </classpath>
-
-      <batchtest todir="build/tests">
-        <fileset dir="build/tests">
-          ...
-          <include name="**/*Test.class"/>
-        </fileset>
-      </batchtest>
-    </junit>
-    ...
-~~~~~~~~
-
-Only jpf.jar needs to be in the host VM classpath when compiling and running the test, since `gov.nasa.jpf.util.test.TestJPF` will use the normal JPF configuration (site.properties and configured jpf.properties) to set up the required `native_classpath`, `classpath`, 'test_classpath` and `sourcepath` settings at runtime. Please refer to the [JPF configuration](config) page for details. 
-
-If you don't have control over the build.xml because of the IDE specific project type (e.g. if your SUT is configured as a NetBeans "Class Library Project"), you have to add jpf.jar as an external jar to your IDE project configuration.
-
-In addition to adding jpf.jar to your build.xml or your IDE project configuration, you might want to add a jpf.properties file to the root directory of your project, to set up things like where JPF finds classes and sources it should analyze (i.e. settings that should be common for all your tests). A generic example could be 
-
-~~~~~~~~ {.bash}
-  # example of JPF project properties file to set project specific paths
-
-  # no native classpath required if this is not a JPF project itself
-  myproject.native_classpath=...
-
-  # where does JPF find the classfiles to execute
-  myproject.classpath=build/classes
-
-  # where do test classes reside
-  myproject.test_classpath=build/test/classes
-
-  # other project common JPF settings like autoloaders etc.
-  listener.autoload+=,javax.annotation.Nonnull
-  listener.javax.annotation.Nonnull=.aprop.listener.NonnullChecker
-  ...
-~~~~~~~~
-
-You can find project examples here
-
- * [standard NetBeans project](../projects/standardnbproject) ("Java Class Library" or "Java Application")
- * Freeform NetBeans project (with user supplied build.xml)
- * standard Eclipse project (with user supplied build.xml)
-
-Please refer to the [Verify API](api) and the [JPF tests](../devel/jpf_tests) pages for details about JPF APIs (like `verifyNoPropertyViolation(..)` or `Verify.getInt(min,max)`) you can use within your test classes.
-
-Since JPF projects use the same infrastructure for their regression tests, you can find a wealth of examples under the `src/tests` directories of your installed JPF projects. 
-
-## Explicitly Running Tests from the command line ##
-
-You can also run your `TestJPF` derived test drivers by using the `bin/test` script (which in turn just a short for "`java -jar tools/RunTest.jar`", i.e. is platform independent):
-
-~~~~~~~~ {.bash}
-bin/test <test-class> [<test-method>]
-~~~~~~~~ 
-
-Note that each `verify..(jpfArgs)` uses its own `Config` instance in this case. If you want to specify temporary JPF options from the command-line when running `RunTest`, prefix them with `test` like in the following example
-
-~~~~~~~~ {.bash}
-bin/test +test.listener=.listener.ExecTracker gov.nasa.jpf.test.mc.basic.AttrsTest
-~~~~~~~~
-
-## Explicitly Launching JPF from a Java Program ##
-Since JPF is a pure Java application, you can also run it from your own application. The corresponding pattern looks like this:
-
-~~~~~~~~ {.java}
-public class MyJPFLauncher {
-  ...
-  public static void main(String[] args){
-    ..
-    try {
-
-      // this initializes the JPF configuration from default.properties, site.properties
-      // configured extensions (jpf.properties), current directory (jpf.properies) and
-      // command line args ("+<key>=<value>" options and *.jpf)
-      Config conf = JPF.createConfig(args);
-
-      // ... modify config according to your needs
-      conf.setProperty("my.property", "whatever");
-
-      // ... explicitly create listeners (could be reused over multiple JPF runs)
-      MyListener myListener = ... 
-
-      JPF jpf = new JPF(conf);
-
-      // ... set your listeners
-      jpf.addListener(myListener);
-
-      jpf.run();
-      if (jpf.foundErrors()){
-        // ... process property violations discovered by JPF
-      }
-    } catch (JPFConfigException cx){
-      // ... handle configuration exception
-      // ...  can happen before running JPF and indicates inconsistent configuration data
-    } catch (JPFException jx){
-      // ... handle exception while executing JPF, can be further differentiated into
-      // ...  JPFListenerException - occurred from within configured listener
-      // ...  JPFNativePeerException - occurred from within MJI method/native peer
-      // ...  all others indicate JPF internal errors
-    }
-  ...
-~~~~~~~~ 
-
-Please refer to the [Embedding JPF](../devel/embedded) developers documentation for details. If you start JPF through your own launcher application, you have to take care of setting up the required `CLASSPATH` entries so that it finds your (and JPFs) classes, or you can use the generic `gov.nasa.jpf.Main` to load and start your launcher class, which makes use of all the path settings you have in your [site.properties](../install/site-properties) and the directories holding project properties (jpf.properties) referenced therein (details on [how to configure JPF](../user/config). This brings us back to the command line at the top of this page, only that you specify which class should be loaded through `Main`:
-
-~~~~~~~~ {.bash}
-> java -jar .../RunJPF.jar -a MyJPFLauncher ...
-~~~~~~~~ 
-
-(note that `gov.nasa.jpf.Main` is the `Main-Class` entry of the executable RunJPF.jar, which also holds the `JPFClassLoader`). 
-
-Just for the sake of completeness, there is another way to start JPF explicitly through a `gov.nasa.jpf.JPFShell` implementation, which is using the normal `JPF.main()` to load your shell, which in turn instantiates and runs a `JPF` object. This is specified in your application property (*.jpf) file with the `shell=<your-shell-class>` option. Use this if your way to start JPF is optional, i.e. JPF could also be run normally with your *.jpf.
\ No newline at end of file
diff --git a/doc/user/run_eclipse.md b/doc/user/run_eclipse.md
deleted file mode 100644 (file)
index 72a8e3a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-## Running JPF within eclipse ##
-
-To run JPF in eclipse after building 
-
-* JPF click "Run"-->"Run" or click "Play"-->"Run As Dialog".
-
-* Select Java Application and click "New".
-
-* Click on the "Main" tab. Ensure the project selected is jpf-core and the in the Main Class pick `gov.nasa.jpf.JPF`.
-
-* Click on the "Arguments" tab. Specify the `<application-main-class>` in the Program Arguments. Any additional configuration properties can be specified. For example, 
-
-~~~~~~~~ {.bash}
-+cg.randomize_choices=true
-oldclassic
-~~~~~~~~
-
-* Click on "Run" to verify the application in JPF. The output of the program and the results will be displayed on the eclipse console window. 
-
-Alternatively you pick the run-jpf-core launch configuration and add the `<application-main-class>` of the system under test. The eclipse IDE detects the various launch configurations. When you click on the Run button they appear on the left column, pick "run-jpf-core". It is, however, recommended you run the application with the eclipse plugin for better performance and ease of usability.  
\ No newline at end of file
diff --git a/doc/user/run_eclipse_plugin.md b/doc/user/run_eclipse_plugin.md
deleted file mode 100644 (file)
index a2f40e8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# Running JPF from within Eclipse using eclipse-jpf #
-
-eclipse-jpf can be easily configured to run JPF from within Eclipse
-
- 1. Install eclipse-jpf (see [Installing Eclipse JPF plugin](../install/eclipse-plugin))
- 2. Make sure that the correct site.properties file is being used for JPF (The default is usually correct)
-   To see which site.properties file is being used:
-   3. From the Eclipse top menu go to **Window**->**Preferences**
-   4. Select **JPF Preferences**
-   5. Make sure that "Path to site.properties" is defined properly.
- 6. From either the **Package Explorer** view (On the left of the main Eclipse screen by default) right-click on the *.jpf with the JPF configuration wanted and select **Verify...**
- 7. Make sure that the **Console view** (Usually at the bottom of the main Eclipse screen) is opened to view the results from JPF
\ No newline at end of file
diff --git a/doc/user/run_nb.md b/doc/user/run_nb.md
deleted file mode 100644 (file)
index b6e60d9..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-# Running JPF from within NetBeans without JPF plugin #
-
-Please Note that the following description assumes NetBeans "freeform projects". In general, it is much better to use the JPF plugins, which not only make the configuration steps described below obsolete, but also work with other NetBeans project types.
-
-Since the NetBeans build process is Ant based, and Ant can read a subset of JPF configuration files, integration is fairly straight forward. Every JPF project comes with its own build.xml, and a `.../nbproject` directory that holds a NetBeans specific project.xml and ide-file-target.xml file, which can serve as templates for your own projects.
-
-Once everything is configured correctly, you can run JPF by selecting application property (*.jpf) files in the "project view", and do a "Run"->"Run File" from the NetBeans main menu (without the plugin, there will be no "run" item in the project view context menu, but hotkeys should still work).
-
-To make this work, you have to configure two NetBeans specific files:
-
-### nbproject/project.xml ###
-
-If you want to use JPF specific classes (like annotations), you have to make sure the NetBeans source checker will see them. You can achieve this by re-using the JPF property files to set the required classpaths, like
-
-~~~~~~~~ {.xml}
-...
-        <general-data xmlns="http://www.netbeans.org/ns/freeform-project/2">
-            <name>...</name>
-            <properties>
-                <property-file>${user.home}/.jpf/site.properties</property-file>
-                <property-file>${jpf-core}/jpf.properties</property-file>
-                ...                
-            </properties>
-         ...
-        <java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/2">
-            <compilation-unit>
-                <package-root>...</package-root>
-                <classpath mode="compile">...;${jpf-core.native_classpath}</classpath>
-            </compilation-unit>
-          ...
-~~~~~~~~
-
-This works for two reasons:
-
- * Ant supports `${key}` expansion from properties (as long as they are not self-recursive)
- * Ant properties are single-assignment, i.e. subsequent definitions of the same property name will be ignored
-
-The next step is required no matter if you use JPF types or not - you have to define file actions, which will link to the ide-file-targets.xml
-
-~~~~~~~~ {.xml}
-         ...
-            <ide-actions>
-                ...
-                <action name="run.single">
-                    <script>nbproject/ide-file-targets.xml</script>
-                    <target>run-selected-jpf</target>
-                    <context>
-                        <property>jpf.config</property>
-                        <folder>...</folder>
-                        <pattern>\.jpf$</pattern>
-                        <format>absolute-path</format>
-                        <arity>
-                            <one-file-only/>
-                        </arity>
-                    </context>
-                </action>
-           ...
-~~~~~~~~
-
-It seems this has to be defined for each source folder, which can require a number of redundant XML elements
-
-### nbproject/ide-file-targets.xml ###
-
-Within this file, you have to provide the scripts to run the actions defined in the project.xml. This can also make use of the JPF configuration files:
-
-~~~~~~~~ {.xml}
-<project basedir=".." name="....">
-
-    <property file="${user.home}/.jpf/site.properties"/>
-    <property file="${jpf-core}/jpf.properties"/>
-
-    <path id="base.path">
-        ...
-        <pathelement path="${jpf-core.native_classpath}"/>
-    </path>
-   ...
-    <target name="run-selected-jpf">
-        <fail unless="jpf.config">Must set property 'jpf.config'</fail>
-        <ant antfile="build.xml" inheritall="false" target="compile"/>
-
-        <java classname="gov.nasa.jpf.JPF" failonerror="true" fork="true">
-            <arg value="-c"/>
-            <arg value="${jpf.config}"/>
-            <classpath>
-                ...
-                <path refid="base.path"/>
-            </classpath>
-        </java>
-    </target>
-   ...
-~~~~~~~~
-
diff --git a/doc/user/run_nb_plugin.md b/doc/user/run_nb_plugin.md
deleted file mode 100644 (file)
index 134634e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# Running JPF from within NetBeans with netbeans-jpf plugin #
-netbeans-jpf can be easily configured to run JPF at the click of a mouse.
-
- 1. Install netbeans-jpf (see: [Installing the NetBeans JPF plugin](../install/netbeans-plugin))
- 2. Make sure the correct `site.properties` file is being used for JPF (The default is usually correct)\
-     To see which `site.properties` file is being used:
-   3. From the NetBeans top menu go to "Tools"->"Options" (Alt+T followed by Alt+O)
-   4. Select "Miscellaneous" from the top of the Options Window
-   5. Select the "Java Pathfinder" tab
-   6. Make sure that "Path to `site.properties`" is defined properly, uncheck "Use default `site.properties` location" to change the path
- 7. From either the "Projects" or "Files" view (on the left of the main NetBeans screen by default,) select the JPF properties file (i.e., a file with a `.jpf` extension) you would like to run. Right click on this file and select the "Verify..." menu item to run JPF.
- 8. To view the results, make sure that the "Output" View is open (On the bottom of the main NetBeans screen by default)
\ No newline at end of file
diff --git a/docs/devel/attributes.md b/docs/devel/attributes.md
new file mode 100644 (file)
index 0000000..69c7f83
--- /dev/null
@@ -0,0 +1,18 @@
+# The Attribute System #
+
+While JPF stores values for operands, local variables and fields very similar to a normal VM, it also features a storage extension mechanism that lets you associate arbitrary objects with stack slots (operands and locals), fields, and whole objects (ElementInfos). The attribute objects can be set/used in [native peers](mji) or [listeners](listener) to add state stored/restored information that automatically follows the data flow.
+
+Note that JPF does not restore attribute object values upon backtracking per default, only attribute references. If you need to make sure attribute values are restored, you have to use copy-on-write and then store back when accessing and modifying such attributes. 
+
+![Figure: JPF Attribute System](../graphics/attributes.svg){align=center width=650}
+
+JPF provides an API to set/access these attributes, which is located in `gov.nasa.jpf.vm.Fields` (for field attributes) and `gov.nasa.jpf.vm.StackFrame` (for local variables and operands). Once set, the VM copies the attributes each time it reads/writes the associated field or stackframe slot. 
+
+## Usage ##
+
+For example, such attributes can be used to represent symbolic values or numeric error bounds. It should be noted though that attributes impose additional runtime costs, which is also why we don't treat normal, concrete values just as a special kind of attribute (normal values are still stored separately as builtin types like `int`). The upside of this is that your attributes coexist with normal, concrete values, which for instance allows things like mixed symbolic and concrete execution.
+
+> **Note:** JPF now can associate attributes not only with fields of an object, but with the object as a whole. See the `gov.nasa.jpf.vm.ElementInfo` API for details.
+
+> **Note:** while there is an API to set/retrieve attributes based on type, there is no implementation
+yet that allows multiple attributes to be stored.
\ No newline at end of file
diff --git a/docs/devel/bytecode_factory.md b/docs/devel/bytecode_factory.md
new file mode 100644 (file)
index 0000000..6fb8c2c
--- /dev/null
@@ -0,0 +1,70 @@
+# Bytecode Factories #
+Normally, a VM defines the semantics of it's programming language. In case of Java, the corresponding instruction set represents a multi-threaded stack machine, where values are kept on the heap, or inside of local and/or operand slots within stack frames. The effect of Java bytecode instructions with respect to heap, locals and operands are described in [Sun's Java virtual machine specifications](http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html/).
+JPF is different. The VM of JPF and its associated constructs like `ThreadInfo`, `ClassInfo`, `ElementInfo` etc. provide all the necessary means to implement a normal Java interpreter. However, JPF delegates the use of these means to the instructions. Every bytecode that gets executed by JPF is represented by a corresponding `Instruction` object, which normally gets instantiated during class load time. The `Instruction` classes of the standard execution mode can be found in package `gov.nasa.jpf.jvm.bytecode`.
+
+When it comes to executing a bytecode, the VM simply calls the `execute()` method of this `Instruction` instance. The implementation of this method defines the execution semantics.
+
+The trick is now that JPF uses a configurable [abstract factory](http://en.wikipedia.org/wiki/Abstract_factory_pattern) to choose and instantiate the `Instruction` classes. By providing your own concrete `InstructionFactory`, together with a set of related `Instruction` classes, you can change the execution semantics of Java.
+
+![Figure: Bytecode Factories](../graphics/bc-factory.svg){align=center width=850}
+
+## Usages ##
+
+Why would it be useful to change the standard semantics? One reason is to extend normal semantics with additional checks. For example, this is performed by the JPF extension jpf-numeric which overrides numeric bytecode classes with versions that check for over-/underflow and silent NaN propagation (among other things). A much more involved example is the JPF extension jpf-symbc, which implements a symbolic execution mode for Java, e.g. to automatically generate test cases based on the program structure of an application. It does so by overriding branch instructions, turning them into state space branches represented by their own [ChoiceGenerators](choicegenerator), collecting the path conditions on the way, and feeding them to an external SAT solver.
+
+## Implementation ##
+
+Since there is a large number of Java bytecode instructions, it would be tedious having to implement all 250+ Instruction classes in order to override just a couple of them. You can reduce the effort in three ways:
+
+
+### GenericInstructionFactory ###
+
+
+Using the `GenericInstructionFactory` as a base class for your `InstructionFactory`. This only requires you to specify an alternative package where your bytecode classes reside, together with the set of bytecodes that should be overridden. The resulting code can be quite short, as can be seen in the *numeric* extension example:
+
+~~~~~~~~ {.java}
+public class NumericInstructionFactory extends GenericInstructionFactory {
+  // which bytecodes do we replace
+  static final String[] BC_NAMES = {
+    "DCMPG", "DCMPL",  "DADD", "DSUB", "DMUL", "DDIV",
+    "FCMPG", "FCMPL",  "FADD", "FSUB", "FMUL", "FDIV",
+                       "IADD", "ISUB", "IMUL", "IDIV",  "IINC", 
+                       "LADD", "LSUB", "LMUL", "LDIV"   
+  };
+  
+  // where do they reside
+  protected static final String BC_PREFIX = "gov.nasa.jpf.numeric.bytecode.";
+  
+  // what classes should use them
+  protected static final String[] DEFAULT_EXCLUDES = { "java.*", "javax.*" };
+  
+  public  NumericInstructionFactory (Config conf){    
+    super(conf, BC_PREFIX, BC_NAMES, null, DEFAULT_EXCLUDES);
+    
+    NumericUtils.init(conf);
+  }
+}
+~~~~~~~~
+
+
+### Super Delegation ###
+
+You can derive your overriding bytecode classes from the ones in `gov.nasa.jpf.jvm.bytecode`. If you just want to add some checks before or after performing the "normal" operation, you can use the standard `Instruction` classes as base classes, and call `super.execute(..)` from within your derived classes. 
+
+
+### Attributes ###
+
+As your execution semantics get more complex, you probably need to store and restore additional information that is associated with variables. JPF provides an automatically managed [attribute system](attributes) for this purpose. You can attach objects to locals, operands and fields, and JPF takes care of propagating these attribute objects whenever it manipulates stackframes or heap objects.
+
+
+## Configuration ##
+
+
+Configuring your bytecode factory just requires one JPF property, e.g.
+
+~~~~~~~~ {.bash}
+vm.insn_factory.class = gov.nasa.jpf.numeric.NumericInstructionFactory
+~~~~~~~~
+
+which can be either done from the command line or from within a *.jpf property file
diff --git a/docs/devel/choicegenerator.md b/docs/devel/choicegenerator.md
new file mode 100644 (file)
index 0000000..e8272eb
--- /dev/null
@@ -0,0 +1,212 @@
+# ChoiceGenerators #
+
+The goal of every model checker is to check if certain properties hold in states of the system under test. The way that choices are computed is a fundamental part of model checking, since they determine which states are checked. We refer to the mechanism used by JPF to capture choices as ChoiceGenerators.
+
+ChoiceGenerators can be approached from an application perspective, or from the JPF implementation perspective. In this section, we cover both perspectives.
+
+## Motivation ##
+
+Whenever the model checker reaches non-determinism in code, it needs to compute choices. Non-determinism can be due to thread scheduling or non-deterministic data acquisitions. Here, we present an example including data non-determinism to justify our implementation approach. JPF provides support for "random" data acquisition, using the interface `gov.nasa.jpf.jvm.Verify`.
+
+~~~~~~~~ {.java}
+...
+boolean b = Verify.getBoolean(); // evaluated by JPF for both `true` and `false`
+...
+~~~~~~~~
+
+This worked nicely for small sets of choice values (such as `{true,false}` for boolean), but the mechanism for enumerating all choices from a type specific interval becomes already questionable for large intervals (e.g. `Verify.getInt(0,10000)`), and fails completely if the data type does not allow finite choice sets at all (such as floating point types):
+
+![Figure 1: Motivation behind ChoiceGenerator](../graphics/cg-motivation.svg){align=center width=750}
+
+To handle this case, we have to leave the ideal world of model checking (that considers all possible choices), and make use of what we know about the real world - we have to use heuristics to make the set of choices finite and manageable. However, heuristics are application and domain specific, and it would be a bad idea to hardcode them into the test drivers we give JPF to analyze. This leads to a number of requirements for the JPF choice mechanism:
+
+  * choice mechanisms have to be decoupled (i.e. thread choices should be independent of data choices, double choices from int choices etc.)
+  * choice sets and enumeration should be encapsulated in dedicated, type specific objects. The VM should only know about the most basic types, and otherwise use a generic interface to obtain choices
+  * selection of classes representing (domain specific) heuristics, and parametrization of ChoiceGenerator instances should be possible at runtime, i.e. via JPF's configuration mechanism (properties)
+
+The diagram shown above depicts this with an example that uses a "randomly" chosen velocity value of type double. As an example heuristic we use a threshold model, i.e. we want to know how the system reacts below, at, and above a certain application specific value (threshold). We reduce an infinite set of choices to only three "interesting" ones. Of course, "interesting" is quite subjective, and we probably want to play with the values (delta, threshold, or even used heuristic) efficiently, without having to rebuild the application each time we run JPF.
+
+The code example does not mention the used `ChoiceGenerator` class (`DoubleThresholdGenerator`) at all, it just specifies a symbolic name `"velocity"`, which JPF uses to look up an associated class name from its configuration data (initialized via property files or the command line - see Configuring JPF Runtime Options). But it doesn't stop there. Most heuristics need further parameterization (e.g. threshold, delta), and we provide that by passing the JPF configuration data into the `ChoiceGenerator` constructors (e.g. the `velocity.threshold` property). Each `ChoiceGenerator` instance knows its symbolic name (e.g. `"velocity"`), and can use this name to look up whatever parameters it needs.
+
+## The JPF Perspective ##
+
+Having such a mechanism is nice to avoid test driver modification. But it would be much nicer to consistently use the same mechanism not just for data acquisition choices, but also scheduling choices (i.e. functionality that is not controlled by the test application). JPF's ChoiceGenerator mechanism does just this, but in order to understand it from an implementation perspective we have to take one step back and look at some JPF terminology:
+
+![Figure 2: States, Transitions and Choices](../graphics/cg-ontology.svg){align=center width=650}
+
+
+*State* is a snapshot of the current execution status of the application (mostly thread and heap states), plus the execution history (path) that lead to this state. Every state has a unique id number. State is encapsulated in the `SystemState` instance (almost, there is some execution history which is just kept by the JVM object). This includes three components:
+
+  * KernelState - the application snapshot (threads, heap)
+  * trail - the last Transition (execution history)
+  * current and next ChoiceGenerator - the objects encapsulating the choice enumeration that produces different transitions (but not necessarily new states)
+
+*Transition* is the sequence of instructions that leads from one state to the next. There is no context switch within a transition, it's all in the same thread. There can be multiple transitions leading out of one state (but not necessarily to a new state).
+
+*Choice* is what starts a new transition. This can be a different thread (i.e. scheduling choice), or different "random" data value.
+
+In other words, possible existence of choices is what terminates the last transition, and selection of a choice value precludes the next transition. The first condition corresponds to creating a new `ChoiceGenerator`, and letting the `SystemState` know about it. The second condition means to query the next choice value from this `ChoiceGenerator` (either internally within the VM, or in an instruction or native method).
+
+## How it comes to Life ##
+With this terminology, we are ready to have a look at how it all works. Let's assume we are in a transition that executes a `getfield` bytecode instruction (remember, JPF executes Java bytecode), and the corresponding object that owns this field is shared between threads. For simplicity's sake, let's further assume there is no synchronization when accessing this object, (or we have turned off the property `vm.sync_detection`). Let's also assume there are other runnable threads at this point. Then we have a choice - the outcome of the execution might depend on the order in which we schedule threads, and hence access this field. There might be a data race.
+
+![Figure 3: ChoiceGenerator Sequence](../graphics/cg-sequence.svg){align=center width=550}
+
+Consequently, when JPF executes this `getfield` instruction, the `gov.nasa.jpf.jvm.bytecode.GETFIELD.execute()` method does three things:
+
+  1. create a new `ChoiceGenerator` (`ThreadChoiceGenerator` in this case), that has all runnable threads at this point as possible choices
+  2. registers this `ChoiceGenerator` via calling `SystemState.setNextChoiceGenerator()`
+  3. schedules itself for re-execution (just returns itself as the next instruction to execute within the currently running thread)
+
+At this point, JPF ends this transition (which is basically a loop inside `ThreadInfo.executeStep()`), stores a snapshot of the current State, and then starts the next transition (let's ignore the search and possible backtracks for a moment). The `ChoiceGenerator` created and registered at the end of the previous transition becomes the new current `ChoiceGenerator`. Every state has exactly one current `ChoiceGenerator` object that is associated with it, and every transition has exactly one choice value of this `ChoiceGenerator` that kicks it off. Every transition ends in an instruction that produces the next `ChoiceGenerator`.
+
+The new transition is started by the `SystemState` by setting the previously registered `ChoiceGenerator` as the current one, and calling its `ChoiceGenerator.advance()` method to position it on its next choice. Then the `SystemState` checks if the current `ChoiceGenerator` is a scheduling point (just a `ThreadChoiceGenerator` used to encapsulate threads scheduling), and if so, it gets the next thread to execute from it (i.e. the `SystemState` itself consumes the choice). Then it starts the next transition by calling `ThreadInfo.executeStep()` on it.
+
+The `ThreadInfo.executeStep()` basically loops until an Instruction.execute() returns itself, i.e. has scheduled itself for re-execution with a new `ChoiceGenerator`. When a subsequent `ThreadInfo.executeStep()` re-executes this instruction (e.g. `GETFIELD.execute()`), the instruction notices that it is the first instruction in a new transition, and hence does not have to create a `ChoiceGenerator` but proceeds with it's normal operations.
+
+If there is no next instruction, or the Search determines that the state has been seen before, the VM backtracks. The `SystemState` is restored to the old state, and checks for not-yet-explored choices of its associated ChoiceGenerator by calling `ChoiceGenerator.hasMoreChoices()`. If there are more choices, it positions the `ChoiceGenerator` on the next one by calling `ChoiceGenerator.advance()`. If all choices have been processed, the system backtracks again (until it's first `ChoiceGenerator` is done, at which point we terminate the search).
+
+![Figure 4: ChoiceGenerator Implementation](../graphics/cg-impl.svg){align=center width=850}
+
+The methods that create `ChoiceGenerators` have a particular structure, dividing their bodies into two parts:
+
+  1. *top half* - (potentially) creates and registers a new `ChoiceGenerator`. This marks the end of a transition
+  2. *bottom half* - which does the real work, and might depend on acquiring a new choice value. This is executed at the beginning of the next transition
+
+To determine which branch you are in, you can call `ThreadInfo.isFirstStepInsn()`. This will return `true` if the currently executed instruction is the first one in the transition, which corresponds to the *bottom half* mentioned above.
+
+The only difference between scheduling choices and data acquisition choices is that the first ones are handled internally by the VM (more specifically: used by the `SystemState` to determine the next thread to execute), and the data acquisition is handled in the bottom half of `Instruction.execute()`, native method, or listener callback method (in which case it has to acquire the current `ChoiceGenerator` from the `SystemState`, and then explicitly call `ChoiceGenerator.getNextChoice()` to obtain the choice value). For a real example, look at the `JPF.gov_nasa_jpf_jvm_Verify.getBoolean()` implementation.
+
+As an implementation detail, creation of scheduling points are delegated to a `Scheduler` instance, which encapsulates a scheduling policy by providing a consistent set of `ThreadChoiceGenerators` for the fixed number of instructions that are scheduling relevant (`monitor_enter`, synchronized method calls, `Object.wait()` etc.). Clients of this `Scheduler` therefore have to be aware of that the policy object might not return a new `ChoiceGenerator`, in which case the client directly proceeds with the bottom half execution, and does not break the current transition.
+
+The standard classes and interfaces for the ChoiceGenerator mechanism can be found in package `gov.nasa.jpf.vm`, and include:
+
+  * `ChoiceGenerator`
+  * `BooleanChoiceGenerator`
+  * `IntChoiceGenerator`
+  * `DoublechoiceGenerator`
+  * `ThreadChoiceGenerator`
+  * `SchedulingPoint`
+  * `SchedulerFactory`
+  * `DefaultSchedulerFactory`
+
+Concrete implementations can be found in package `gov.nasa.jpf.vm.choice`, and include classes like:
+
+  * `IntIntervalGenerator`
+  * `IntChoiceFromSet`
+  * `DoubleChoiceFromSet`
+  * `DoubleThresholdGenerator`
+  * `ThreadChoiceFromSet`
+
+As the number of useful generic heuristics increases, we expect this package to be expanded.
+
+
+## Cascaded ChoiceGenerators ##
+There can be more than one `ChoiceGenerator` object associated with a transition. Such ChoiceGenerators are referred to as *cascaded*, since they give us a set of choice combinations for such transitions. 
+
+For example, assume that we want to create a listener that perturbs certain field values, i.e. it replaces the result operand that is pushed by a `getfield` instruction. This is easy to do from a listener, but the VM (more specifically our on-the-fly [partial order reduction](partial_order_reduction)) might already create a `ThreadChoiceGenerator` (scheduling point) for this `getfield` if it refers to a shared object, and the instruction might cause a data race. Without cascaded `ChoiceGenerators` we could only have the perturbation listener **or** the race detection, but not both. This is clearly a limitation we want to overcome, since you might not even know when JPF - or some of the other [listeners](listener) or [bytecode_factories](bytecode_factory) - create `ChoiceGenerators` that would collide with the ones you want to create in your listener.
+
+Using cascaded ChoiceGenerators requires little more than what we have already seen above. It only involves changes to two steps:
+
+ 1. ChoiceGenerator creation - you need to identify `ChoiceGenerators` with a `String` id. We can't use the type of the `ChoiceGenerator` - or it's associated choice type - to identify a particular instance, since different listeners might use different `ChoiceGenerator` instances of same types for different purposes. Resolving through unique types would throw us back to where we would have to know about all the other `ChoiceGenerators` created by all the other JPF components. We can't use the associated instruction either, because the whole point is that we can have more than one `ChoiceGenerator` for each of them. So we have to give our `ChoiceGenerator` instances names when we create them, as in
+~~~~~~~~ {.java}
+...
+IntChoiceFromSet cg = new IntChoiceFromSet("fieldPerturbator", 42, 43);
+~~~~~~~~
+
+The name should be reasonably unique, describing the context in which this choice is used. Don't go with "generic" names like "myChoice". In case of doubt, use the method name that creates the `ChoiceGenerator`. The reason why we need the *id* in the first place is that we later-on want to be able to retrieve a specific instance. Which brings us to:
+
+ 2. ChoiceGenerator retrieval - at some point we want to process the choice (usually within the *bottom half* of the method that created the `ChoiceGenerator`), so we need to tell JPF all we know about the `ChoiceGenerator` instance, namely id and type. The simple `SystemState.getChoiceGenerator()` we used above will only give us the last registered one, which might or might not be the one we registered ourselves. Retrieval is done with a new method `SystemState.getCurrentChoiceGenerator(id,cgType)`, which in the above case would look like:
+~~~~~~~~ {.java}
+...
+IntChoiceFromSet cg = systemState.getCurrentChoiceGenerator("fieldPerturbator", IntChoiceFromSet.class);
+assert cg != null : "required IntChoiceGenerator not found";
+...
+~~~~~~~~
+
+This method returns `null` if there is no `ChoiceGenerator` of the specified id and type associated with the currently executed instruction. If this is the bottom half of a method that created the instance, this is most likely an error condition that should be checked with an assertion. If the retrieval is in another method, existence of such a `ChoiceGenerator` instance could be optional and you therefore have it checked in an `if (cg != null) {..}' expression.
+
+This is all there is to it in case you don't refer to a particular execution state of an instruction. As an example, assume that you want to add some int choices on top of each `Verify.getInt(..)` call. Your listener would look like this:
+
+~~~~~~~~ {.java}
+  @Override
+  public void instructionExecuted(VM vm, ThreadInfo ti, Instruction nextInsn, Instruction executedInsn) {
+    SystemState ss = vm.getSystemState();
+
+    if (executedInsn instanceof EXECUTENATIVE) { // break on method call
+      EXECUTENATIVE exec = (EXECUTENATIVE) executedInsn;
+
+      if (exec.getExecutedMethodName().equals("getInt")){ // Verify.getInt(..) - this insn did create a CG on its own
+        if (!ti.isFirstStepInsn()){ // top half - first execution
+          IntIntervalGenerator cg = new IntIntervalGenerator("instrumentVerifyGetInt", 3,4);
+          ss.setNextChoiceGenerator(cg);
+          ...
+
+        } else { // bottom half - re-execution at the beginning of the next transition
+          IntIntervalGenerator cg = ss.getCurrentChoiceGenerator("instrumentVerifyGetInt", IntIntervalGenerator.class);
+          assert cg != null : "no 'instrumentVerifyGetInt' IntIntervalGenerator found";
+          int myChoice = cg.getNextChoice();
+          ... // process choice
+        }
+      }
+    }
+  }
+~~~~~~~~
+
+
+Sometimes what you do with your choice depends on the execution state of the instruction this `ChoiceGenerator` was created for, and you have to be aware of that the instruction might get re-executed (e.g. after processing the top half of another `ChoiceGenerator` creating method) before it has done what you depend on for your local choice processing. Consider our previous example of the field perturbation. Simply speaking, all we want to do in our listener is just swap operand stack values after a certain `getfield`. However, the partial order reduction of the VM might get in our way because it reschedules the instruction *before* it pushes the value if execution of this instruction might constitute a data race, and therefore required creation of a `ThreadChoiceGenerator` instance. What is worse is that the VM might do this conditionally - if there is only one runnable thread, there is no need for a scheduling point since there can't be a data race. Our own perturbator listener has to account for all that. Luckily, we can use `SystemState.getCurrentChoiceGenerator(id,type)` to unify all these cases, and we just have to restore execution state in case we want to re-execute the instruction ourselves. Here is an example:
+
+~~~~~~~~ {.java}
+  @Override
+  public void instructionExecuted(VM vm, ThreadInfo ti, Instruction nextInsn, Instruction executedInsn) {
+    SystemState ss = vm.getSystemState();
+
+    if (executedInsn instanceof GETFIELD){
+      GETFIELD getInsn = (GETFIELD) executedInsn;
+      FieldInfo fi = getInsn.getFieldInfo();
+      if (fi.getName().equals("perturbedFieldName")){
+
+        IntChoiceFromSet cg = ss.getCurrentChoiceGenerator("fieldReplace", IntChoiceFromSet.class);
+        StackFrame frame = ti.getModifiableTopFrame();
+        if (cg == null){
+
+          // we might get here after a preceding rescheduling exec, i.e.
+          // partial execution (with successive re-execution), or after
+          // non-rescheduling exec has been completed (only one runnable thread).
+          // In the first case we have to restore the operand stack so that
+          // we can re-execute
+          if (!ti.willReExecuteInstruction()){
+            // restore old operand stack contents
+            frame.pop();
+            frame.push(getInsn.getLastThis());
+          }
+
+          cg = new IntChoiceFromSet("fieldReplace", 42, 43);
+          ss.setNextChoiceGenerator(cg);
+          ti.reExecuteInstruction();
+
+        } else {
+          int v = cg.getNextChoice();
+          int n = frame.pop();
+          frame.push(v);
+        }
+      }
+    }
+  }
+~~~~~~~~
+
+These examples show you that at the beginning of each transition, there is a choice value for all the cascaded `ChoiceGenerators` associated with it. If you would add `choiceGeneratorAdvanced()` notifications to your listener, you would also see that JPF processes all related choice combinations.
+
+If you really want to see the context, there are a number of additional methods in `SystemState` that might help you:
+
+ * `getChoiceGenerator()` - returns only the last registered one
+ * `getChoiceGenerators()` - returns an array of all `ChoiceGenerators` in the current execution path
+ * `getLastChoiceGeneratorOfType(cgType)` - returns the last registered `ChoiceGenerator` in the path that is of the specified type
+ * `getCurrentChoiceGenerators()` - returns array of all cascaded `ChoiceGenerators` associated with the current transition
+ * `getCurrentChoiceGenerator(id)` - returns last registered `ChoiceGenerator` of cascade with specified *id*
+ * `getCurrentChoiceGenerator(id,cgType)` - our workhorse: last registered `ChoiceGenerator` of cascade with specified *id* and *cgType* (which can be a supertype of the actual one)
+ * etc.
+
+How does the system detect if a `ChoiceGenerator` is cascaded or not? Very simple - within `SystemState.setNextChoiceGenerator(cg)`, we just check if `SystemState` already had a registered next `ChoiceGenerator`, and if so, we set a cascaded attribute for this one. Other than that, we just maintain normal linear `ChoiceGenerator` linkage, which is accessible through `ChoiceGenerator.getPreviousChoiceGenerator()`. If you want to iterate through a cascade yourself, use the `ChoiceGenerator.getCascadedParent()` method, which returns `null` if there is none. Just be aware of that the last registered `ChoiceGenerator` (i.e. what `SystemState.getChoiceGenerator()` returns) does *not* have the cascaded attribute set (i.e. `ChoiceGenerator.isCascaded()` returns `false`).    
\ No newline at end of file
diff --git a/docs/devel/coding_conventions.md b/docs/devel/coding_conventions.md
new file mode 100644 (file)
index 0000000..fe629e9
--- /dev/null
@@ -0,0 +1,41 @@
+# Coding Conventions #
+JPF is an open system. In order to keep the source format reasonably consistent, we strive to keep the following minimal set of conventions
+
+  * Two space indentation (no tabs)
+  * Opening brackets in same line (class declaration, method declaration, control statements)
+  * No spaces after opening '(', or before closing ')'
+  * Method declaration parameters indent on column
+  * All files start with copyright and license information
+  * All public class and method declarations have preceding Javadoc comments
+  * We use *camelCase* instead of *underscore_names* for identifiers
+  * Type names are upper case 
+
+The following code snippet illustrates these rules.
+
+~~~~~~~~ {.java}
+/* <copyright notice goes here>
+ * <license referral goes here>
+ */
+
+/**
+ * this is my class declaration example
+ */
+    
+public class MyClass {
+   
+  /**
+   * this is my public method example
+   */
+  public void foo (int arg1, int arg2,
+                   int arg3) {
+    if (bar) {
+      ..
+    } else {
+      ..
+    }
+  }
+   ..
+}
+~~~~~~~~
+
+We consider modularity to be of greater importance than source format. With its new configuration scheme, there is no need to introduce dependencies of core classes towards optional extensions anymore. If you add something that is optional, and does not seamlessly fit into an existing directory, keep it separate by adding new directories. The core JPF classes should not contain any additional dependencies to external code.
diff --git a/docs/devel/create_project.md b/docs/devel/create_project.md
new file mode 100644 (file)
index 0000000..1eeb9b0
--- /dev/null
@@ -0,0 +1,91 @@
+# Creating a New JPF Module #
+
+So what do you have to do to create a new JPF module? For a quick shortcut to setting up *most* things,  use the `create_project` script of the [jpf-template module](wiki:projects/jpf-template).  
+
+However, jpf-template cannot do everything for you, so see below for more information on how to finish setting up your new project.
+
+Several steps are involved:
+
+### 1. get familiar with the JPF configuration ###
+You need to understand how your project will be looked up and initialized during JPF startup, and the place to learn that is the [JPF configuration](../user/config) page. Once you know what *[site properties](../install/site-properties)* and *project properties* are, you can proceed.
+
+### 2. get familiar with the standard JPF project layout ###
+Although this is mostly convention, and you can deviate if you really need to, please try hard not to.
+
+You can get the details from the [JPF Runtime Modules](modules) page, but the essence is that each project has two (possible) major build artifacts:
+
+ * `jpf-<module>.jar` - executed by the host (platform) VM (contains main classes and peers)
+ * `jpf-<module>-classes.jar` - executed by JPF (contains modeled classes)
+
+Consequently, your sources are kept in `src/main`, `src/peers`, `src/classes`, `src/annotations`, `src/tests` and `src/examples`. You might only have some of these, but please provide regression tests so that people can check if your project works as expected. 
+
+All 3rd party code that is required at runtime goes into a `lib` directory.
+
+We keep potential annotations separate (and provide additional `jpf-<module>-annotations.jar`) so that external projects (systems under test) can use them without relying on all JPF classes to be in their `classpath`. The idea is that this jar does not contain any code which could alter the system under test behavior if you execute it outside of JPF. 
+
+<The `tools` directory contains 3rd party libraries and tools that are used at build-time. For convenience reasons, we usually copy the small `RunJPF.jar` from the jpf-core in here, so that you can easily run JPF from the command line without the need for platform specific scripts or links, but that is completely optional.>
+
+### 3. create a jpf.properties file ###
+Within the root directory of each JPF module a project properties file is needed which is named `jpf.properties`. It contains the path settings the host VM and JPF need to know about at runtime. It looks like this:
+
+~~~~~~~~ {.bash}
+# standard header
+<module-name> = ${config_path}
+
+# classpath elements for the host VM (java)
+<module-name>.native_classpath = build/<module-name>.jar;lib/...
+
+# classpath elements for JPF
+<module-name>.classpath = build/<module-name>-classes.jar;...
+
+# sources JPF should know about when creating traces etc.
+<module-name>.sourcepath = src/classes;...
+~~~~~~~~
+
+You can add other JPF properties, but be aware of that this is always processed during JPF startup if you add your module to the `extensions` list in your [site.properties](../install/site-properties), and might conflict with other JPF modules. For this reason you should only add your module to `extensions` if you know it will always be used.
+
+
+### 4. create your build.xml ###
+Our build process is [Ant](http://ant.apache.org/) based, hence we need a `build.xml` file. The standard targets are
+
+ * `clean`
+ * `compile`
+ * `build` (the default, creates the jars and hence depends on compile)
+ * `test` (run JUnit regression tests, depends on build)
+ * `dist` (creates a binary-only distribution) 
+
+If you stick to the general layout, you can use a template like the one attached to this page (of course you need to replace `<your-project-name>`).
+
+Please note how `site.properties` and `jpf.properties` can be used from within the `build.xml` (Ant understands a subset of the JPF property syntax), which means you don't have to explicitly add the jars of other JPF components you depend on (at least jpf-core). You can reference them symbolically like this:
+
+~~~~~~~~ {.xml}
+  <property file="${user.home}/.jpf/site.properties"/>
+  <property file="${jpf-core}/jpf.properties"/>
+  ..
+  <!-- generic classpath settings -->
+  <path id="lib.path">
+
+    <!-- our own classes and libs come first -->
+    <pathelement location="build/main"/>
+    ...
+    <fileset dir=".">
+           <include name="lib/*.jar"/>
+    </fileset>
+
+    <!-- add in what we need from the core -->
+    <pathelement path="${jpf-core.native_classpath}"/>
+  </path>
+  ...
+~~~~~~~~
+
+### 5. add your module to your site.properties ###
+This is optional, you only need to do this if you want to be able to run your JPF module outside its own directory. If so, add an entry to your [site properties file](../install/site-properties) that looks like this:
+
+~~~~~~~~ {.bash}
+...
+<module-name> = <path to your JPF extension module>
+...
+~~~~~~~~
+
+### 6. publish your repository ###
+You can publish this wherever you want ([sourceforge](http://sourceforge.net), [bitbucket](http://bitbucket.org), [google code](http://code.google.com), or [github](http://github.com) are suitable free site supporting Mercurial), or ask us to host it on the JPF server. If you decide to use a 3rd party hosting service, please let us/the JPF community know about it (e.g. by posting to the mailing list at [java-pathfinder@googlegroups.com](https://groups.google.com/forum/#!forum/java-pathfinder).
\ No newline at end of file
diff --git a/docs/devel/design.md b/docs/devel/design.md
new file mode 100644 (file)
index 0000000..60e0fd3
--- /dev/null
@@ -0,0 +1,52 @@
+# JPF Top-level Design #
+
+JPF was designed around two major abstractions: (1) the *VM*, and (2) the *Search* component.
+
+## Virtual Machine (VM) ##
+
+The VM is the state generator. By executing bytecode instructions, the VM generates state representations that can be
+
+  * checked for equality (if a state has been visited before)
+  * queried (thread states, data values etc.)
+  * stored
+  * restored
+
+The main VM parameterizations are classes that implement the state management (matching, storing, backtracking). Most of the execution scheme is delegated to `SystemState`, which in turn uses `Scheduler`  to generate scheduling sequences of interest.
+
+There are three key methods of the VM employed by the Search component:
+
+  * `forward` - generate the next state, report if the generated state has a successor. If yes, store on a backtrack stack for efficient restoration.
+  * `backtrack` - restore the last state on the backtrack stack
+  * `restoreState` - restore an arbitrary state (not necessarily on the backtrack stack)
+
+![Figure: JPF top-level design](../graphics/jpf-abstractions.svg){align=center width=720}
+
+## Search Strategy ##
+
+At any state, the Search component is responsible for selecting the next state from which the VM should proceed, either by directing the VM to generate the next state (`forward`), or by telling it to backtrack to a previously generated one (`backtrack`). The Search component works as a driver for the VM.
+
+The Search component can be configured to check for certain properties by evaluating property objects (e.g. `NotDeadlockedProperty`, `NoAssertionsViolatedProperty`).
+
+The object encapsulating this component includes a search method which implements a strategy used to traverse the state space. The state space exploration continues until it is completely explored, or a property violation is found.
+ The Search component can be configured to use different strategies, such as depth-first search (`DFSearch`), and priority-queue based search that can be parameterized to do various search types based on selecting the most interesting state out of the set of all successors of a given state (`HeuristicSearch`).
+
+## Package Structure ##
+
+The implementation of the JPF core is partitioned into the following packages:
+
+### `gov.nasa.jpf` ###
+The main responsibility of this package is configuration and instantiation of the core JPF objects, namely the Search and VM. The configuration itself is encapsulated by the `Config` class, which contains various methods to create objects or read values from a hierarchy of property files and command line options (see Configuring JPF Runtime Options). Beyond the configuration, the JPF object has little own functionality. It is mainly a convenience construct to start JPF from inside a Java application without having to bother with its complex configuration.
+
+### `gov.nasa.jpf.vm` ###
+This package constitutes the main body of the core code, including the various constructs that implement the Java state generator. Conceptually, the major class is VM, but again this class delegates most of the work to a set of second level classes that together implement the major functionality of JPF. These classes can be roughly divided into three categories:
+
+(1) class management - classes are encapsulated by `ClassInfo` which mostly includes invariant information about fields and methods captured by `FieldInfo` and `MethodInfo`, respectively.
+
+(2) object model - all object data in JPF is stored as integer arrays encapsulated by `Fields` objects. The execution specific lock state of objects is captured by `Monitor` instances. `Fields` and `Monitor` instances together form the objects, which are stored as `ElementInfo`. The heap contains a dynamic array of `ElementInfo` objects where the array indices being used as object reference values
+
+(3) bytecode execution - the execution of bytecode instructions is performed through a collaboration of `SystemState` and `ThreadInfo`, which is also delegated to policy objects implementing the partial order reduction (POR). It starts with the `VM` object calling `SystemState.nextSuccessor()`, which descends into `ThreadInfo.executeStep()` (together, these two methods encapsulate the on-the-fly POR), which in turn calls `ThreadInfo.executeInstruction()` to perform the bytecode execution.
+The actual execution is again delegated to bytecode specific Instruction instances that per default reside in a sub-package `gov.nasa.jpf.vm.bytecode` (the set of bytecode classes to use can be configured via a `InstructionFactory` class which allows the user to define a different execution semantics)
+
+### `gov.nasa.jpf.search` ### 
+This package is relatively small and mainly contains the `Search` class, which is an abstract base for search policies. The major method that encapsulates the policy is `Search.search()`, which is the VM driver (that calls the methods`forward`, `backtrack` and `restore`). This package also contains the plain-vanilla depth-first search policy `DFSearch`.
+More policies can be found in the sub-package `gov.nasa.jpf.search.heuristic`, which uses a `HeuristicSearch` class in conjunction with configurable heuristic objects to prioritize a queue of potential successor states.
diff --git a/docs/devel/eclipse_plugin_update.md b/docs/devel/eclipse_plugin_update.md
new file mode 100644 (file)
index 0000000..35f663f
--- /dev/null
@@ -0,0 +1,36 @@
+## Hosting an Eclipse plugin update site ##
+
+The first step is to create the local version of the update site.  For example, chapter 18, section 3 of "Eclipse Plug-ins, 3rd edition" will explain how to do this.
+  
+> **Tip:** do not attempt to put the update site in the code repository.  
+
+The plugin and feature files are treated like binaries and bad things will happen.  Here is a sample update site for the mango plugin.
+
+![Local Site](../graphics/localsite.jpg){align=center width=430}
+
+Now you will re-create this directory structure within the wiki.  For the purpose of this discussion, let's pin down the jpf site:
+
+~~~~~~~~ {.bash}
+JPFHOME=http://babelfish.arc.nasa.gov/trac/jpf
+~~~~~~~~
+
+Now chose a home directory, say `HOME`.  For the mango plugin, 
+
+~~~~~~~~ {.bash}
+HOME=wiki/projects/jpf-mango
+~~~~~~~~
+
+Whatever choice of `HOME` you make, the update site you advertise to the world will be `JPFHOME/raw-attachment/HOME/update/`.
+
+
+The `raw-attachment` segment is the *trick* that makes everything work out.  The next step is to create the directory structure for the mirrored update site.  Within `JPFHOME/HOME`, create a link to `JPFHOME/HOME/update`.  Now go to the update page and add the attachments artifacts.jar, content.jar, and site.xml from your local update site.  Create links within `JPFHOME/HOME/update` to `JPFHOME/HOME/update/features` and `JPFHOME/HOME/update/plugins`.  
+
+Attach your feature jar to the features page, and your plugin jar to the plugins page.  That's all there is to it.
+
+> **Tip:** when updating your update site, be sure to sync your plugin and feature with new, higher, revision numbers.  Now rebuild the local site.  Delete all the corresponding attachments in the wiki, and repopulate with the updated versions.
+
+> **Bonus tip:** Once everything is working, you can delete the link to the update site.  This will prevent your visitors from accidentally going to an uninteresting page.  You can always access this page directly from the browser by entering `JPFHOME/HOME/update`.
+
+
+
+
diff --git a/docs/devel/embedded.md b/docs/devel/embedded.md
new file mode 100644 (file)
index 0000000..0ddd1c3
--- /dev/null
@@ -0,0 +1,27 @@
+# Embedded JPF #
+JPF can also be used embedded, i.e. called from another Java application. A basic code sequence to start JPF looks like this:
+
+~~~~~~~~ {.java}
+import gov.nasa.jpf.JPF;
+import gov.nasa.jpf.Config;
+
+void runJPF (String[] args) {
+   ..
+   MyListener listener = new MyListener(..);
+
+   // [optionally] if you pass through command line args, 
+   // 'null' any consumed args not to be JPF-processed
+   listener.filterArgs( args);
+   ..
+
+   Config config = JPF.createConfig( args);
+   // set special config key/value pairs here..
+
+   JPF jpf = new JPF( config);
+   jpf.addListener( listener);
+   jpf.run();
+   ..
+}
+~~~~~~~~
+
+Of course, you can also call `gov.nasa.jpf.JPF.main(args)` from within your application, if you don't need to control JPF's configuration or process it's output. 
diff --git a/docs/devel/index.md b/docs/devel/index.md
new file mode 100644 (file)
index 0000000..8394c9c
--- /dev/null
@@ -0,0 +1,23 @@
+# JPF Developer Guide #
+
+From the previous two sections, you have learned that JPF has one recurring, major theme: it is not a monolithic system, but rather a configured collection of components that implement different functions like state space search strategies, report generation and much more. Being adaptive is JPF's answer to the scalability problem of software model checking.
+
+This not only makes JPF a suitable system for research, but chances are that if are you serious enough about JPF application, you sooner or later end up extending it. This section includes the following topics which describe the different mechanisms that can be used to extend JPF.
+
+ * [Top-level design](design)
+ * Key mechanisms, such as 
+     - [ChoiceGenerators](choicegenerator)
+     - [Partial order reduction](partial_order_reduction)
+     - [Slot and field attributes](attributes)
+ * Extension mechanisms, such as
+     - [Listeners](listener)
+     - [Search Strategies](design)
+     - [Model Java Interface (MJI)](mji)
+     - [Bytecode Factories](bytecode_factory)
+ * Common utility infrastructures, such as
+     - [Logging system](loggin)
+     - [Reporting system](report)
+ * [Running JPF from within your application](embedded)
+ * [Writing JPF tests](jpf_tests)
+ * [Coding conventions](coding_conventions)
+ * [Hosting an Eclipse plugin update site](eclipse_plugin_update) 
\ No newline at end of file
diff --git a/docs/devel/jpf_tests.md b/docs/devel/jpf_tests.md
new file mode 100644 (file)
index 0000000..a445c5a
--- /dev/null
@@ -0,0 +1,148 @@
+# Writing JPF Tests #
+
+As a complex runtime system for (almost) arbitrary Java programs, it goes without saying that JPF needs a lot of regression tests. You can find these under the `src/tests` directories in (hopefully) all JPF projects. All tests follow the same scheme, which is motivated by the need to run tests in a number of different ways:
+
+  1. as part of the Ant-based build system, i.e. from build.xml
+  1. as explicitly invoked JUnit tests
+  1. by directly running JPF on the test application (i.e. without JUnit, either as a JPF `shell` or via RunTest.jar)
+  1. by running the test application on a normal JVM
+
+The rationale for this is to support various levels of inspection and debugging. 
+
+Each test conceptually consists of a test driver (e.g. executed under JUnit) which starts JPF from within its `@Test` annotated methods, and a class that is executed by JPF in order to check the verification goals. For convenience reasons, jpf-core provides infrastructure that enables you to implement both parts in the same class. This can be confusing at first - **the test class is used to start JPF on itself**.
+
+![Figure: Unit Testing in JPF](../graphics/new-testing.svg){align=center width=870}
+
+The `main()` method of `TestJPF` derived classes always look the same and can be safely copied between tests:
+
+~~~~~~~~ {.java}
+public static void main(String[] testMethods){
+  runTestsOfThisClass(testMethods);
+}
+~~~~~~~~
+
+This method serves two purposes. First, it is used to start the test outside JUnit, either on all `@Test` annotated instance methods, or just on the ones which names are provided as arguments. Second, it serves as the entry point for JPF when it executes the class. In this case, `TestJPF` takes care of invoking JPF on the test class and providing the name of the test method this was executed from.
+
+Other than that, test classes just consist of (almost) normal `@Test` annotated JUnit test methods, which all share the same structure
+
+~~~~~~~~ {.java}
+import org.junit.Test;
+
+@Test public void testX () {
+  if (verifyNoPropertyViolation(JPF_ARGS){
+    .. code to verify by JPF
+  }
+}
+~~~~~~~~
+
+The trick is the call to `verifyNoPropertyViolation()`, or any of the other `verifyXX()` methods of `TestJPF`. If executed by the host VM, i.e. from JUnit, it starts JPF on the same class and the containing method, and returns `false`. This means the corresponding `if` block is **not** executed by the host VM.
+
+When JPF is invoked, the argument to the main() method is set to the method name from which JPF got invoked, which causes `runTestsOfThisMethod()` to execute exactly this method again, but this time under JPF. Instead of re-executing the same `TestJPF.verifyX()` method again (and becoming infinitely recursive), we use a native peer `JPF_gov_nasa_jpf_util_test_TestJPF` which intercepts the `verifyX()` call and simply returns true, i.e. this time *only* the `if` block gets executed.
+
+The rest of the host VM executed `TestJPF.verifyX()` checks the results of the JPF run, and accordingly throws an `AssertionError` in case it does not correspond to the expected result. The most common goals are
+
+ * `verifyNoPropertyViolation` - JPF is not supposed to find an error
+ * `verifyPropertyViolation` - JPF is supposed to find the specified property violation
+ * `verifyUnhandledException` - JPF is supposed to detect an unhandled exception of the specified type
+ * `verifyAssertionError` - same for AssertionErrors
+ * `verifyDeadlock` - JPF is supposed to find a deadlock
+
+Each of these methods actually delegate running JPF to a corresponding method whose name does not start with 'verify..'. These workhorse methods expect explicit specification of the JPF arguments (including SUT main class name and method names), but they return JPF objects, and therefore can be used for more sophisticated JPF inspection (e.g. to find out about the number of states).
+
+`TestJPF` also provides some convenience methods that can be used within test methods to find out which environment the code is executed from:
+
+ * `isJPFRun()` - returns true if the code is executed under JPF
+ * `isJUnitRun()` - returns true if the code is executed under JUnit by the host VM
+ * `isRunTestRun()` - returns true if the code is executed by RunTest.jar
+
+Here is an example of a typical test method that uses some of these features:
+
+~~~~~~~~ {.java}
+  @Test public void testIntFieldPerturbation() {
+
+    if (!isJPFRun()){ // run this outside of JPF
+      Verify.resetCounter(0);
+    }
+
+    if (verifyNoPropertyViolation("+listener=.listener.Perturbator",
+                                  "+perturb.fields=data",
+                                  "+perturb.data.class=.perturb.IntOverUnder",...
+                                  "+perturb.data.delta=1")){
+      // run this under JPF
+      System.out.println("instance field perturbation test");
+
+      int d = data; // this should be perturbated
+      System.out.println("d = " + d);
+
+      Verify.incrementCounter(0);
+
+    } else { // run this outside of JPF
+      assert Verify.getCounter(0) == 3;
+    }
+  }
+~~~~~~~~
+
+## Running JPF tests from command line ##
+To run JPF tests from the command line, use the RunTest.jar either from `jpf-core/build`, or the one that is distributed with your project containing the tests (`tools/RunTest.jar` for JPF projects). This is an executable jar that expects the test class and (optional) method test names as arguments. If no method names are provided, all `@Test` annotated methods are executed. Most projects have a convenience script `bin/test` to execute RunTest.jar.
+
+~~~~~~~~ {.bash}
+> bin/test gov.nasa.jpf.test.mc.data.PerturbatorTest testIntFieldPerturbation
+
+......................................... testing testIntFieldPerturbation
+  running jpf with args: +listener=.listener.Perturbator +perturb.fields=data +perturb.data.class=.perturb.IntOverUnder +perturb.data.field=gov.nasa.jpf.test.mc.data.PerturbatorTest.data +perturb.data.delta=1 gov.nasa.jpf.test.mc.data.PerturbatorTest testIntFieldPerturbation
+JavaPathfinder v5.x - (C) RIACS/NASA Ames Research Center
+
+
+====================================================== system under test
+application: gov/nasa/jpf/test/mc/data/PerturbatorTest.java
+arguments:   testIntFieldPerturbation 
+
+====================================================== search started: 9/10/10 7:03 PM
+instance field perturbation test
+d = 43
+d = 42
+...
+====================================================== search finished: 9/10/10 7:03 PM
+......................................... testIntFieldPerturbation: Ok
+
+......................................... execution of testsuite: gov.nasa.jpf.test.mc.data.PerturbatorTest SUCCEEDED
+.... [1] testIntFieldPerturbation: Ok
+......................................... tests: 1, failures: 0, errors: 0
+~~~~~~~~
+
+## Running JPF tests under JUnit ##
+
+This is the preferred way to execute JPF regression tests, which is usually done from an Ant build.xml script containing a standard target such as
+
+~~~~~~~~ {.xml}
+  ...
+  <target name="test" depends="build" description="run core regression tests" if="have_tests">
+     ...
+     <junit printsummary="on" showoutput="off" haltonfailure="yes"
+            fork="yes" forkmode="perTest" maxmemory="1024m" outputtoformatters="true">
+       <classpath>
+         <path refid="lib.path"/>
+         <pathelement location="build/tests"/>
+         ...
+       </classpath>
+       <batchtest todir="build/tests">
+          <fileset dir="build/tests">
+            <exclude name="**/JPF_*.class"/>
+            <include name="**/*Test.class"/>
+          </fileset>
+      </batchtest>
+    </junit>
+  </target>
+~~~~~~~~
+
+Most JPF projects have build.xml files you can use as examples.
+
+Please note this means that you should not have any inner classes, interfaces, annotation types etc. with a name ending with `"Test"` since JUnit would interpret these as test cases and most likely complain about missing constructors and `main()` methods.
+
+## Debugging tests ##
+
+Typically, JPF tests are only executed from within an IDE if they fail and need to be debugged. 
+
+Under NetBeans, this can be done by selecting the test class, and then executing the *Debug File* command from the context menu. This will pop up a dialog that lets you enter a specific test method to debug. This method requires a properly set up ide-file-target.xml, which comes with most JPF projects.
+
+Under Eclipse, you can select the test class and then execute **Debug As..** -> **Java Application**.
diff --git a/docs/devel/listener.md b/docs/devel/listener.md
new file mode 100644 (file)
index 0000000..98af48c
--- /dev/null
@@ -0,0 +1,332 @@
+# Listeners #
+Listeners are perhaps the most important extension mechanism of JPF. They provide a way to observe, interact with and extend JPF execution with your own classes. Since listeners are dynamically configured at runtime, they do not require any modification to the JPF core. Listeners are executed at the same level like JPF, so there is hardly any limit of what you can do with them.
+
+![Figure 1: JPF Listeners](../graphics/listener-overview.svg){align=center width=800}
+
+The general principle is simple: JPF provides an observer pattern implementation that notifies registered observer instances about certain events at the search level and the VM level. These notifications cover a broad spectrum of JPF operations, from low level events like `instructionExecuted` to high level events like `searchFinished`. Each notification is parameterized with the corresponding source (either the `Search` or the `VM` instance), which can be then used by the notified listener to obtain more information about the event and the JPF's internal state.
+
+Configuration is usually done with the `listener` property, either from the command line, or a .jpf property file. Listeners can also be associated with annotations, to be automatically loaded whenever JPF encounters such an annotation. Applications can use the `@JPFConfig` annotation to explicitly specify JPF listeners. Lastly, if JPF is used in an embedded mode, listeners can be registered with an API.
+
+
+## Listener Types ##
+
+
+There are two basic listener interfaces, depending on corresponding event sources: `SearchListeners` and `VMListeners`. Since these interfaces are quite large, and listeners often need to implement both, we also provide "adapter" classes, i.e. implementors that contain all required method definitions with empty method bodies. Concrete listeners that extend these adapters therefore only have to override the notification methods they are interested in.
+
+The adapter classes are used for the majority of listener implementations, especially since they also support two other interfaces/extension mechanisms that are often used in conjunction with `Search` and `VMListeners`: 
+
+ 1. `Property` - to define program properties
+ 2. `PublisherExtension` - to produce output within [the JPF reporting system](report)
+
+`ListenerAdapter` is the bare adapter implementation for `SearchListener`, `VMListener` and `PublisherExtension`. This is what is mostly used to collect information during JPF execution (e.g. `CoverageAnalyzer` and `DeadlockAnalyzer`).
+
+`PropertyListenerAdapter` is used in case the listener implements a program property, i.e. it can terminate the search process. A prominent example of this category is `PreciseRaceDetector`.
+
+![Figure 2: Listener Types](../graphics/listeners.svg){align=center width=800}
+
+Choosing the right type for your listener is important, since JPF automatically registers listeners (and properties) based on this type. You can bypass and directly implement single listener interfaces, but then you also have to do the proper registrations.
+
+Usually, the notification alone is not enough, and the listener needs to acquire more information from JPF. For this purpose, we provide either the `Search` or the `VM` instance as notification arguments, and the listener has to use these as "Facades" to query or interact JPF. It therefore matters to implement the listener within the right package.
+
+
+## SearchListener ##
+
+
+`SearchListener` instances are used to monitor the state space search process, e.g. to create graphical representations of the state-graph. They provide notification methods for all major Search actions.
+
+~~~~~~~~ {.java}
+package gov.nasa.jpf.search;
+public interface SearchListener extends JPFListener {
+  void searchStarted (Search search);  
+  void stateAdvanced (Search search);       // got next state
+  void stateProcessed (Search search);      // state is fully explored
+  void stateBacktracked (Search search);    // state was backtracked one step (same path)
+  void stateStored (Search search);         // somebody stored the state
+  void stateRestored (Search search);       // previously generated state was restored (any path)
+  void propertyViolated (Search search);    // JPF encountered a property violation
+  void searchConstraintHit (Search search); // e.g. max search depth
+  void searchFinished (Search search);
+}}
+~~~~~~~~
+
+
+For the standard depth first search (`gov.nasa.jpf.search.DFSearch`), listener implementations can assume the following notification model:
+
+
+![Figure 3: Depth first listener notifications](../graphics/DFSListener.svg){align=center width=500}
+
+The most frequently used notifications are:
+
+`stateAdvanced` - to store additional, backtrackable state information in an associative array
+
+`stateBacktracked` - to restore additional state information
+
+`searchFinished` - to process listener results
+
+
+## VMListener ##
+
+
+This is a fat interface, reflecting various VM operations
+
+~~~~~~~~ {.java}
+package gov.nasa.jpf.jvm;
+public interface VMListener extends JPFListener {
+  //--- basic bytecode execution
+  void executeInstruction (JVM vm);  // JVM is about to execute the next instruction
+  void instructionExecuted (JVM vm); // JVM has executed an instruction
+
+  //--- thread operations (scheduling)
+  void threadStarted (JVM vm);       // new Thread entered run()
+  void threadBlocked (JVM vm);       // thread waits to acquire a lock
+  void threadWaiting (JVM vm);       // thread is waiting for signal
+  void threadNotified (JVM vm);      // thread got notified
+  void threadInterrupted (JVM vm);   // thread got interrupted
+  void threadTerminated (JVM vm);    // Thread exited run()
+  void threadScheduled (JVM vm);     // new thread was scheduled by JVM
+
+  //--- class management
+  void classLoaded (JVM vm);         // new class was loaded
+
+  //--- object operations
+  void objectCreated (JVM vm);       // new object was created
+  void objectReleased (JVM vm);      // object was garbage collected
+  void objectLocked (JVM vm);        // object lock acquired
+  void objectUnlocked (JVM vm);      // object lock released
+  void objectWait (JVM vm);          // somebody waits for object lock
+  void objectNotify (JVM vm);        // notify single waiter for object lock
+  void objectNotifyAll (JVM vm);     // notify all waiters for object lock
+
+  void gcBegin (JVM vm);             // start garbage collection
+  void gcEnd (JVM vm);               // garbage collection finished
+
+  void exceptionThrown (JVM vm);     // exception was thrown
+
+  //--- ChoiceGenerator operations  
+  void choiceGeneratorSet (JVM vm);  // new ChoiceGenerator registered
+  void choiceGeneratorAdvanced (JVM vm); // new choice from current ChoiceGenerator
+  void choiceGeneratorProcessed (JVM vm); // current ChoiceGenerator processed all choices  
+}
+~~~~~~~~
+
+
+The most commonly used methods are the instruction notifications:
+
+`executeInstruction` - is called before a bytecode instruction gets executed by the VM. The listener can even use this to skip and/or replace this instruction, which is useful for non-invasive instrumentation.
+
+`instructionExecuted` - is the post-execution notification, which is suitable to keep track of execution results (method invocations, assigned field values, branch results etc.)
+
+
+## Example ##
+
+The following example is a slightly abbreviated form our race detector. The basic idea is simple: every time we encounter a new scheduling point (i.e. new `ThreadChoiceGenerator` object) that is due to a field access on a shared object, we check if any of the other runnable threads is currently accessing the same field on the same object. If at least one operation is a `putfield`, we have a potential race.
+
+The example shows three aspects that are quite typical: 
+
+  1. listeners often use only a small number of notification methods
+
+  2. they often do not require a huge amount of code (most expensive operations are performed by the `VM` and the `Search` objects)
+
+  3. sometimes you have to dig deep into JPF internal constructs, to extract things like `ThreadInfo`, `FieldInfo` and `ChoiceGenerator` instances
+
+~~~~~~~~ {.java}
+public class PreciseRaceDetector extends PropertyListenerAdapter {
+  FieldInfo raceField;
+  ...
+  //--- the Property part
+  public boolean check(Search search, JVM vm) {
+    return (raceField == null);
+  }
+
+  //--- the VMListener part
+  public void choiceGeneratorSet(JVM vm) {
+    ChoiceGenerator<?> cg = vm.getLastChoiceGenerator();
+
+    if (cg instanceof ThreadChoiceFromSet) {
+      ThreadInfo[] threads = ((ThreadChoiceFromSet)cg).getAllThreadChoices();
+      ElementInfo[eiCandidates = new ElementInfo[threads.length](]);
+      FieldInfo[fiCandidates = new FieldInfo[threads.length](]);
+
+      for (int i=0; i<threads.length; i++) {
+        ThreadInfo ti = threads[i];
+        Instruction insn = ti.getPC();
+        
+        if (insn instanceof FieldInstruction) { // Ok, its a get/putfield
+          FieldInstruction finsn = (FieldInstruction)insn;
+          FieldInfo fi = finsn.getFieldInfo();
+
+          if (StringSetMatcher.isMatch(fi.getFullName(), includes, excludes)) {
+            ElementInfo ei = finsn.peekElementInfo(ti);
+
+            // check if we have seen it before from another thread
+            int idx=-1;
+            for (int j=0; j<i; j++) {
+              if ((ei ## eiCandidates[&& (fi ## fiCandidates[j](j])))) {
+                idx = j;
+                break;
+              }
+            }
+
+            if (idx >= 0){ // yes, we have multiple accesses on the same object/field
+              Instruction otherInsn = threads[idx].getPC();
+              if (isPutInsn(otherInsn) || isPutInsn(insn)) {
+                raceField = ((FieldInstruction)insn).getFieldInfo();
+                ..
+                return;
+              }
+            } else {
+              eiCandidates[i] = ei;
+              fiCandidates[i] = fi;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  public void executeInstruction (JVM jvm) {
+    if (raceField != null) {  // we're done, report as quickly as possible
+      ThreadInfo ti = jvm.getLastThreadInfo();
+      ti.breakTransition();
+    }
+  }
+}
+~~~~~~~~
+
+## Instantiation ##
+
+Explicit instantiation of a listener (e.g. from a JPF shell) can be done in any way. If the listener is specified as a JPF property, it's class either needs to have a default constructor, or a constructor that takes a single `gov.nasa.jpf.Config` argument. The `Config` object that is passed into this constructor by JPF is the same that was used for the initialization of JPF itself. This is the preferred method if the listener has to be parameterized. In case of the `PreciseRaceDetector` example, this can be used to filter relevant fields with regular expressions:
+
+~~~~~~~~ {.java}
+public class PreciseRaceDetector extends PropertyListenerAdapter {
+  ...
+  StringSetMatcher includes = null;
+  StringSetMatcher excludes = null;
+  
+  public PreciseRaceDetector (Config conf) {
+    includes = StringSetMatcher.getNonEmpty(conf.getStringArray("race.include"));
+    excludes = StringSetMatcher.getNonEmpty(conf.getStringArray("race.exclude"));
+  }
+  ...
+  public void choiceGeneratorSet(JVM vm) {
+    ...
+        FieldInfo fi =..
+        if (StringSetMatcher.isMatch(fi.getFullName(), includes, excludes))
+     ...
+  }
+~~~~~~~~
+
+
+## Configuration ##
+
+Listener configuration can be done in a number of ways: via JPF properties from the command line or a .jpf file, via JPF APIs from a JPF shell (a program invoking JPF), or from the system under test by using Java annotations (i.e. without code modification).
+
+Since listeners are executed by the host VM, they have to be in the `CLASSPATH` (`jpf-core.native_classpath` property).
+
+
+### command line ###
+
+
+the *listener* property can be used to specify a colon separated list of listener class names:
+
+~~~~~~~~ {.bash}
+bin/jpf ... +listener=x.y.MyFirstListener,x.z.MySecondListener ...
+~~~~~~~~
+
+
+### .jpf property file ###
+
+
+If you have several listeners and/or a number of other JPF options, it is more convenient to add the `listener` property to a .jpf file:
+
+~~~~~~~~ {.bash}
+# Racer-listener.jpf - JPF mode property file to detect data races in jpftest.Racer
+target = jpftest.Racer
+listener=gov.nasa.jpf.tools.PreciseRaceDetector
+~~~~~~~~
+
+
+### Autoload Annotations ###
+
+
+Consider your system under test is marked up with a Java annotation that represent properties. For example, you can use the `@NonNull` annotation to express that a method is not allowed to return a `null` value:
+
+~~~~~~~~ {.java}
+import gov.nasa.jpf.NonNull; 
+  ...
+  @NonNull X computeX (..) {
+    //.. some complex computation
+  }
+  ...
+~~~~~~~~
+
+You can use .jpf property files (or the command line, if you love to type) to tell JPF that it should automatically load and register a corresponding listener (e.g. `NonNullChecker`) if it encounters such a `@NonNull` annotation during class loading:
+
+~~~~~~~~ {.bash}
+..
+listener.autoload = gov.nasa.jpf.NonNull,...
+listener.gov.nasa.jpf.NonNull = gov.nasa.jpf.tools.NonNullChecker
+...
+~~~~~~~~
+
+
+### @JPFConfig annotation (SuT) ###
+
+
+You can also explicitly direct JPF to load the listener from within your application by using the `@JPFConfig` annotation:
+
+~~~~~~~~ {.java}
+import gov.nasa.jpf.JPFConfig;
+..
+// set JPF properties via properties at class load time
+@JPFConfig ({"listener+=.tools.SharedChecker", ..})
+public class TestNonShared implements Runnable {
+  ...
+}
+~~~~~~~~
+
+However, this is not recommended outside JPF tests - the application would run, but not compile without JPF.
+
+
+### Verify API (SuT) ###
+
+
+A less often used method is to set listeners is to use the `gov.nasa.jpf.vm.Verify` API from within your application. With this, you can control the exact load time of the listener (but be aware of backtracking). With this, the above example would become
+
+~~~~~~~~ {.java}
+import gov.nasa.jpf.vm.Verify;
+..
+public class TestNonShared implements Runnable {
+  ...
+  public static void main (String[] args){
+    
+    // set JPF properties programmatically
+    Verify.setProperties("listener+=.tools.SharedChecker", ...);
+    ..
+  }
+}
+~~~~~~~~
+
+This method should only be used in special cases (models written explicitly for JPF verification), since it does not run outside JPF.
+
+
+### JPF API (embedded mode) ###
+
+
+If JPF is explicitly started from within another application, listeners can be instantiated at will and configured via the `JPF.addListener(..)` API:
+
+~~~~~~~~ {.java}
+MyListener listener=new MyListener(..);
+..
+Config config = JPF.createConfig( args);
+JPF jpf = new JPF( config);
+jpf.addListener(listener);
+jpf.run();
+..
+~~~~~~~~
+
+Most listeners tend to fall into three major categories: 
+
+1. system class (e.g. for logging) - is usually configured via the default.properties.
+2. complex properties - is configured with an application specific mode property file.
+3. JPF debugging - is specified via the command line (`+key=value` overrides).
diff --git a/docs/devel/logging.md b/docs/devel/logging.md
new file mode 100644 (file)
index 0000000..3993fdf
--- /dev/null
@@ -0,0 +1,31 @@
+# The JPF Logging API #
+There is one simple rule: do not use `System.out` or `System.err` for any permanent logging
+
+
+Of course we all do this temporarily during debugging, but it really shouldn't stay in the code. The logging infrastructure is quite easy to use. Just declare a static `Logger` instance with an appropriate id (either package or logging topic) at the top of your class, and then use the `Logger` API to create output:
+
+~~~~~~~~ {.java}
+...
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+package x.y.z;
+
+class MyClass .. {
+  static Logger log = JPF.getLogger("x.y.z");
+  ...
+    log.severe("there was an error");
+  ...
+    log.warning("there was a problem");
+  ...
+    log.info("something FYI");
+  ...
+    if (log.isLoggable(Level.FINE)){    // (1) don't create garbage
+        log.fine("this is some detailed info about: " + something);
+    }
+  ...
+}
+~~~~~~~~
+
+Note that there is only one instance for each `Logger` ID, i.e. you can have a corresponding static field in all your relevant classes, and don't have to share the fields. Another aspect that is mostly important for the lower log levels (e.g. `FINE`) is that you should't concatenate log messages in operations that occur frequently, since the corresponding `StringBuilder` instances can cause performance degradations even if the log level is not set (the arguments still get evaluated). In this case, encapsulate the logging in `log.isLoggable(level){..}` blocks.
+
diff --git a/docs/devel/mercurial.md b/docs/devel/mercurial.md
new file mode 100644 (file)
index 0000000..b1b3051
--- /dev/null
@@ -0,0 +1,56 @@
+# Mercurial in 5 Minutes #\r
+\r
+[Mercurial](http://www.selenic.com/mercurial) is a *distributed version control system* (DVCS) of the same category such as the likes of [Git](http://git-scm.com/) or [Bazaar](http://bazaar.canonical.com/en/). If you know nothing else about DVCS, this means mostly one thing - **all repositories are created equal**. There is no such thing as a different repository format for public and private repositories. All repositories (that are synchronized) have the same, stored history information.\r
+\r
+Yes, this means you can finally synchronize your working repos with more than one "master" repository, e.g. with several local ones, closed workgroup repos, and a public master repo (that just happens to be designated as such).\r
+\r
+Each Mercurial repository consists of an (optional) working copy of your files, and a `.hg` directory in your repo root dir that holds all the version control info. Be careful not to delete the `.hg` dir, otherwise your repo is reduced to just a snapshot of your current working files.\r
+\r
+A central concept of DVCS is the *change set* - think of it as the diff of all files that have been changed when you do a commit. This is what DVCS store (e.g. Mercurial in the `.hg` dir) and compare between different repositories. One implication of this is that you can't do partial commits like in CVS or SVN (e.g. by just committing changes within a certain subdirectory). You always have to execute the Mercurial commands in the top dir of the repository you are working in.\r
+\r
+If you have previously worked with CVS or SVN, another difference you have to wrap your head around is that there are commands that work locally, and commands that interact with the remote repo. __The `commit` and `update` commands are only local__. The `push` and `pull` commands synchronize your local repo with an external one (like commit and update did in CVS/SVN).\r
+\r
+Here are the main commands to interact with Mercurial:\r
+\r
+![](mercurial.png)\r
+\r
+**hg clone <url>** - this is the first command that clones an external repository (either from `file:///...` or `http://...` URLs). It creates both a working copy and the `.hg` directory (with contents)\r
+\r
+**hg init** - is what you do if you create a local repository for which there is no external one yet. Just create your files, `cd` into the top directory, and execute the command (which will create the `.hg` for you)\r
+\r
+**hg pull [-u] <url>** - updates the repo you are currently in from the provided URL. Note that your working copy is only updated if you use the `-u` option\r
+\r
+**hg incoming <url>** - is the little brother of `pull`. It just tells you if there are changesets in the remote repository you would pull\r
+\r
+**hg status** - tells you if there are uncommitted changes in your working copy that have to be committed to the local `.hg` directory before you can `push` or `pull`\r
+\r
+**hg diff** - does a bit more, it also shows you a diff file with the uncommitted changes\r
+\r
+**hg add <file>** - adds a file to the repo\r
+\r
+**hg remove <file>** - removes a file from the repo\r
+\r
+**hg addremove** - adds all new files of the working copy that are not in the repository yet, and removes all which are not in the working copy anymore\r
+\r
+**hg commit** - saves changes in your working copy to your local `.hg`. Do this early and often, this is now just a local operation that doesn't change anything outside the repo you are working with\r
+\r
+**hg update** - would update your working copy from your local `.hg`. It is rarely used if you pull with the `-u` option\r
+\r
+**hg push <url>** - pushes the relevant changesets of your local `.hg` back to the external repo with the provided URL. Make sure you have no uncommitted changes (Mercurial would refuse to push), and - in case the external repo is shared - that you pulled/merged all changesets of the external repo before you push\r
+\r
+**hg outgoing <url>** - is the dry run version of a push, it tells you if there are changesets that would have to be pushed  \r
+\r
+**hg revert** - reverts your working copy to a previous version stored in your local `.hg`\r
+\r
+**hg heads** - tells you if there are branches in your repo, which usually happens if you pull from a changed external repo while having un-pushed local changes that are committed\r
+\r
+**hg merge** - gets rid of multiple heads. Make sure to get rid of these by merging as soon as you detect them, it only gets more difficult with more external and local changes. Once there are collisions, you are back to the CVS/SVN merge mess\r
+\r
+You can always obtain more information by executing\r
+~~~~~~~~\r
+#!sh\r
+> hg help [command]\r
+~~~~~~~~\r
+If you don't list a command, all available ones will be displayed.\r
+\r
+Commands that refer to external repos take URLs such as `http://babelfish.arc.nasa.gov/hg/jpf/jpf-core` as arguments.\r
diff --git a/docs/devel/mji.md b/docs/devel/mji.md
new file mode 100644 (file)
index 0000000..817cdd1
--- /dev/null
@@ -0,0 +1,214 @@
+# Model Java Interface (MJI) #
+## Purpose ##
+
+Even if it is just a Java application (i.e. solely consists of Java classes), JPF can be viewed as a Java Virtual Machine (JVM) in itself. The consequence is that (*.class) class files, and even the same files at times, are processed in two different ways in a JVM running JPF
+
+  * as ordinary Java classes managed and executed by the host JVM (standard Java library classes, JPF implementation classes)
+  * as "modeled" classes managed and processed (verified) by JPF
+
+Class lookup in both layers is based on the CLASSPATH environment variable / command line parameter, but this should not obfuscate the fact that we have to clearly distinguish between these two modes. In particular, JPF (i.e. the "Model" layer) has its own class and object model, which is completely different and incompatible to the (hidden) class and object models of the underlying host JVM executing JPF
+
+![Figure 1: JPF Layers](../graphics/jpf-layers.svg){align=center width=560}
+
+Each standard JVM supports a so called Java Native Interface (JNI), that is used to delegate execution from the Java level (i.e. JVM controlled bytecode) down into the (platform dependent) native layer (machine code). This is normally used to interface certain functionalities to the platform OS / architecture (e.g. I/O or graphics).
+
+Interestingly enough, there exists a analogous need to lower the "execution" level in JPF, from JPF controlled bytecode into JVM controlled bytecode. According to this analogy, the JPF specific interface is called Model Java interface (MJI).
+
+Even though MJI offers a wide range of applications, there are three major usages for delegating bytecode execution into the host JVM:
+
+ 1. Interception of native methods - without a abstraction lowering mechanism, JPF would be forced to completely ignore native methods, i.e. would fail on applications relying on the side effects of such methods, which is not acceptable (even if  many native methods indeed can be ignored if we restrict the set of verification targets)
+
+ 2. Interfacing of JPF system level functionality - some system level functions of standard library classes (esp. java.lang.Class, java.lang.Thread) have to be intercepted even if they are not native because they have to affect the JPF internal class, object and thread model (etc. loading classes, creating / starting threads). It should be noted that MJI can also be used to extend the functionality of JPF without changing its implementation.
+
+3. State space reduction - by delegating bytecode execution into the non-state-tracked host JVM, we can cut off large parts of the state space, provided that we know the corresponding method side effects are not relevant for property verification (e.g. `System.out.println(..)`)
+
+Besides these standard usages, there exist more exotic applications like collecting information about JPF state space exploration and making it available both to JPF and the verification target.
+
+
+## MJI Components ##
+
+
+The basic functionality of MJI consists of a mechanism to intercept method invocations, and delegate them by means of Java reflection calls to dedicated classes. There are two types of classes involved, residing at different layers:
+
+  * Model Classes - these classes execute by the VM of JPF, which might be completely unknown to the host JVM
+  * Native Peers - these classes, implemented by `NativePeer` subclasses, contain the implementations of the methods to intercept, and to execute by the host JVM
+
+As part of the JPF implementation, MJI automatically takes care of determining which method invocations have to be intercepted by looking up the corresponding native peer methods
+
+![Figure 2: MJI Functions](../graphics/mji-functions.svg){align=center width=600}
+
+This would not be very useful without being able to access the JPF object model (or other JPF intrinsics), from inside the native peer methods. Instead of requiring all native peers implementation to reside in a JPF internal package, there exists an interface class `MJIEnv` that provide access to the JPF internal structure in a controlled way. `NativePeer` classes  residing in `gov.nasa.jpf.vm` (i.e. the same package as `MJIEnv`) can reach all internal JPF features. Outside this package, the available API in `MJIEnv` is mostly restricted to the access JPF object (getting and setting values).
+
+![Figure 3: MJI Call Sequence](../graphics/mji-call.svg){align=center width=580}
+
+Before a native peer method can be used, JPF has to establish the correspondence between the model class and the native peer. This takes place at load time of the model class. MJI uses a special name mangling scheme to lookup native peers, using the model class package name and class name to deduce the native peer class name.
+
+![Figure 3: MJI name mangling](../graphics/mji-mangling.svg){align=center width=560}
+
+Since the model class package is encoded in the native peer name, the package of the native peer can be chosen freely. In analogy to JNI, native peers methods names include the signature of the model method by encoding its parameter types. If there is no potential ambiguity, i.e. mapping from native peer methods to model class methods is unique, signature encoding is not required.
+
+Each native peer, which is an instance of a `NativePeer` subclass, is associated with exactly one `ClassInfo` instance.
+All the native peer methods to be intercepted have to be `public` and annotated with `gov.nasa.jpf.annotation.MJI`. 
+Moreover, MJI requires them to have two parameters: 
+
+  * An instance of `MJIEnv` which can be used to access JPF internal constructs
+  * An integer which is a handle for the corresponding JPF `this` object (or the `java.lang.Class` object in case of a static method) including the method to be intercepted
+
+See [Mangling for MJI](mji/mangling) for more details and examples of mangling.
+
+Going beyond the JNI analogy, MJI can also be used to intercept
+
+  * non-native methods (i.e. the lookup process is driven by the methods found in the native peer, not the `native` attributes in the model class. This can be particularly useful in case the class is used from both as a model class and a JVM class (e.g. `gov.nasa.jpf.vm.Verify`), using a method body that directly refers to the native peer
+  * class initialization (the corresponding native peer method has to be named `$clinit(MJIEnv env, int clsRef)`)
+  * constructors (the corresponding native peer method has to be named `$init__<sig>(MJIEnv env,int objRef, <ctor-params>)` and the normal signature mangling rules apply)
+
+
+It is important to note that type correspondence does NOT include references. All references (object types) on the JPF side are transformed in handles (int values) on the JVM side. The passed in `MJIEnv` parameter has to be used to convert/analyze the JPF object. Since MJI per default uses the standard Java reflection call mechanism, there is a significant speed penalty (lookup, parameter conversion etc.), which again is a analogy to JNI.
+
+Even if it is not directly related to MJI, it should be mentioned that some JPF specific model classes cannot be loaded via the CLASSPATH (e.g. `java.lang.Class`), since they contain JPF based code that is not compatible with the host JVM (e.g. relying on native methods that refer to JPF functionality). Such classes should be kept in separate directories / jars that are specified with the JPF command line option `-jpf-bootclasspath` or `-jpf-classpath`. This is mostly the case for system classes. On the other hand, model classes don't have to be JPF specific. It is perfectly fine to provide a native peer for a standard Java class (e.g. `java.lang.Character`), if only certain methods from that standard class needs to be intercepted. Native peers can contain any number of non-"native" methods and fields, but those should not be annotated with `@MJI` to avoid lookup problems.
+
+## Tools ##
+
+To ease the tedious process of manually mangle method names, MJI includes a tool to automatically create skeletons of native peers from a given Model class, called `GenPeer`. The translation process uses Java reflection, i.e. the model class needs to be in the CLASSPATH and is specified in normal dot notation (i.e. not as a file).
+
+![Figure 4: The GenPeer tool](../graphics/genpeer.svg){align=center width=470}
+
+There exist a number of command line options that can be displayed by calling `GenPeer` without arguments. `GenPeer` per default writes to stdout, i.e. the output has to be redirected into a file.
+
+Since method invocation by reflection used to be a slow operation, we previously also had a tool called `GenPeerDispatcher`, which used method signature hash-codes to explicitly dispatch native peer methods. With recent improvements in JVM performance, this tool became obsolete.
+
+
+## Example ##
+
+
+The following example is an excerpt of a JPF regression test, showing how to intercept various different method types, and using `MJIEnv` to access JPF objects.
+
+
+### Model class (JPF side) ###
+
+
+This is executed by JPF, which means it needs to be in JPF's  `vm.classpath` setting. 
+
+~~~~~~~~ {.java}
+public class TestNativePeer {
+    static int sdata;
+    
+    static {
+      // only here to be intercepted
+    }
+    
+    int idata;
+    
+    TestNativePeer (int data) {
+      // only here to be intercepted
+
+    }
+  
+    public void testClInit () {
+      if (sdata != 42) {
+        throw new RuntimeException("native 'clinit' failed");
+      }
+    }
+
+    public void testInit () {
+      TestNativePeer t = new TestNativePeer(42);
+
+      if (t.idata != 42) {
+        throw new RuntimeException("native 'init' failed");
+      }
+    }
+
+    native int nativeInstanceMethod (double d, char c, boolean b, int i);
+
+    public void testNativeInstanceMethod () {
+
+      int res = nativeInstanceMethod(2.0, '?', true, 40);
+      if (res != 42) {
+        throw new RuntimeException("native instance method failed");
+      }
+    }
+    
+    native long nativeStaticMethod (long l, String s);
+
+    public void testNativeStaticMethod () {
+      long res =  nativeStaticMethod(40, "Blah");
+
+      if (res != 42) {
+        throw new RuntimeException("native instance method failed");
+
+      }
+    }
+    
+    native void nativeException ();
+    
+    public void testNativeException () {
+      try {
+        nativeException();
+      } catch (UnsupportedOperationException ux) {
+        String details = ux.getMessage();
+
+        if ("caught me".equals(details)) {
+          return;
+        } else {
+          throw new RuntimeException("wrong native exception details: " +
+                                     details);
+        }
+      } catch (Throwable t) {
+        throw new RuntimeException("wrong native exception type: " +
+                                   t.getClass());
+      }
+
+      throw new RuntimeException("no native exception thrown");
+    }
+  }
+~~~~~~~~
+
+
+### Native Peer class (host VM side) ###
+
+
+This is executed by the host VM (i.e. at the same level like JPF itself), so make sure it is in your CLASSPATH.
+
+~~~~~~~~ {.java}
+public class JPF_gov_nasa_jpf_vm_TestNativePeer {
+
+    @MJI
+    public static void $clinit (MJIEnv env, int rcls) {
+      env.setStaticIntField(rcls, "sdata", 42);
+    }
+
+    @MJI
+    public static void $init__I (MJIEnv env, int robj, int i) {
+      env.setIntField(robj, "idata", i);
+    }
+
+    // preferably use full signature mangling
+    @MJI
+    public static int nativeInstanceMethod__DCZI__I (MJIEnv env, int robj,
+                                            double d, char c,
+                                            boolean b, int i) {
+      if ((d ## 2.0) && (c  ## '?') && b) {
+        return i + 2;
+      }
+      return 0;
+    }
+
+    //..but it also works without, if there is no overloading (don't be lazy!) 
+    @MJI
+    public static long nativeStaticMethod (MJIEnv env, int rcls,
+                                           long l, int stringRef) {
+      String s = env.getStringObject(stringRef);
+      if ("Blah".equals(s)) {
+        return l + 2;
+      }
+      return 0;
+    }
+
+    @MJI
+    public static void nativeException____V (MJIEnv env, int robj) {
+      env.throwException("java.lang.UnsupportedOperationException",
+                         "caught me");
+    }
+  }
+~~~~~~~~
+
diff --git a/docs/devel/mji/mangling.md b/docs/devel/mji/mangling.md
new file mode 100644 (file)
index 0000000..5e2847a
--- /dev/null
@@ -0,0 +1,200 @@
+# Mangling for MJI #
+## Mangling Methods ##
+Suppose your method looks like 
+
+~~~~~~~~ {.java}
+T1 foo(T2 x, T3 y, ...)
+~~~~~~~~
+
+where the `Ti` are Java types.
+
+If `T1` is a primitive type or `void`, then the mangled MJI method looks
+like
+
+~~~~~~~~ {.java}
+public static T1 foo__MT2MT3...__MT1(...)
+~~~~~~~~
+
+where the `MTi` are the mangled versions of the `Ti`.  
+Mangling of types is described in the Mangling Types section below. 
+Note that `T1` appears twice, once not mangled (`T1`) and once mangled
+(`MT1`).  The `__` is two consecutive underscores: `_` followed by
+`_`.
+
+As a not-so-special case, if `foo` has no arguments, then the mangled method
+will have four consecutive underscores:
+
+~~~~~~~~ {.java}
+  `T1 foo()`[[br]]
+~~~~~~~~
+
+goes to
+
+~~~~~~~~ {.java}
+  `public static T1 foo____MT1(...)`
+~~~~~~~~
+
+If `T1` is not a primitive type, then the mangled `MJI` method looks like 
+
+~~~~~~~~ {.java}
+  `public static int foo__MT2MT3...__MT1`
+~~~~~~~~
+
+where the `MTi` are as above.  Note that `T1` only appears once in this
+case.  The method's return type is `int`.  As before, a method with no
+arguments gets mangled to something with four consecutive underscores.
+
+Also, the use of generics is ignored when mangling names.
+
+
+## Mangling Constructors ##
+Constructors are treated as methods named `$init` with return type `void`.
+
+
+## Mangling Static Initializers ##
+Static initializers are treated as methods named `$clinit` with no
+arguments and return type `void`.  Thus, their MJI versions always
+have the mangled signature:
+
+~~~~~~~~ {.java}
+public static void $clinit____V (MJIEnv env, int clsObjRef)
+~~~~~~~~
+
+or the equivalent unmangled signature:
+
+~~~~~~~~ {.java}
+public static void $clinit (MJIEnv env, int clsObjRef)
+~~~~~~~~
+
+
+## Mangling Types ##
+  - Convert primitives and `void` as follows
+
+    |Java Type|Mangled Type|
+    | ------- |:---:|
+    |`boolean`|`Z`|
+    |`byte`   |`B`|
+    |`char`   |`C`|
+    |`short`  |`S`|
+    |`int`    |`I`|
+    |`long`   |`J`|
+    |`float`  |`F`|
+    |`double` |`D`|
+    |`void`   |`V`|
+
+  - Convert a non-array reference type `T` in package `x.y`
+    (e.g. `java.lang.String`) as follows
+    - `x.y.T`   --> `Lx_y_T_2`
+    - Example: `java.lang.String` --> `Ljava_lang_String_2`
+
+  - Convert an array of primitive type `T`
+    (e.g. `byte[]`) as follows:
+    - `T[]` --> `_3MT`  where `MT` is the mangled version of `T`
+      (e.g. for `T=byte`, `MT=B`)
+    - Example: `byte[]` --> `_3B`
+
+  - Convert an array of reference type `T` in package `x.y`
+    (e.g. `java.lang.String[]`) as follows:
+    - `x.y.T[]` --> `_3Lx_y_T_2`
+    - Example: `java.lang.String[]` --> `_3Ljava_lang_String_2`
+
+
+## Method Examples ##
+
+ `void` return type, single primitive argument:
+
+~~~~~~~~ {.java}
+  public static void resetCounter(int id)
+-->
+  public static final void resetCounter__I__V(MJIEnv env, int objref, int id)
+~~~~~~~~
+
+ Primitive return type, no arguments:
+
+~~~~~~~~ {.java}
+  public native boolean isArray()
+-->
+  public static boolean isArray____Z(MJIEnv env, int objref)
+~~~~~~~~
+
+ Primitive return type, single primitive argument:
+
+~~~~~~~~ {.java}
+  public static double abs(double a)
+-->
+  public static double abs__D__D(MJIEnv env, int clsObjRef, double a)
+~~~~~~~~
+
+ Primitive return type, two primitive arguments:
+
+~~~~~~~~ {.java}
+  public static long min(long a, long b)
+--> 
+  public static long min__JJ__J(MJIEnv env, int clsObjRef, long a, long b)
+~~~~~~~~
+
+
+ `void` return type, arguments include an array of a primitive type:
+
+~~~~~~~~ {.java}
+  public native void write (byte[] buf, int off, int len);
+-->
+  public static void write___3BII__V(MJIEnv env, int objref,
+                                     int bufRef, int off, int len)
+~~~~~~~~
+
+
+ `void` return type, argument is an array of a reference type: 
+
+~~~~~~~~ {.java}
+   public static void print(String s)
+-->
+  public static void print___3Ljava_lang_String_2__V(MJIEnv env, int clsRef, int argsRef)
+~~~~~~~~
+
+ Array of reference types returned, no arguments: 
+~~~~~~~~ {.java}
+  public native Annotation[] getAnnotations()
+-->
+  public static int getAnnotations_____3Ljava_lang_annotation_Annotation_2(MJIEnv env, int robj)
+~~~~~~~~
+   Notice there are 5 underscores before the `3L`: two marking the
+   arguments, two marking the return type, and one from the `_3`
+   signalling an array.
+
+ Array of reference types using generics returned, no arguments:
+
+~~~~~~~~ {.java}
+  public native Class<?>[] getParameterTypes()
+-->
+  public static int getParameterTypes_____3Ljava_lang_Class_2(MJIEnv env, int objref)
+~~~~~~~~
+    
+Note: the use of generics is ignored in the mangling.
+
+
+
+## Constructor Examples ##
+
+Constructors are treated as though they were methods named `$init`
+returning `void`, so the method examples above should also be helpful
+for constructors.  Here are a few more examples.
+
+In the class `ConsoleOutputStream`:
+
+~~~~~~~~ {.java}
+  public ConsoleOutputStream()
+-->
+  public static void $init____V(MJIEnv env, int objref)
+~~~~~~~~
+
+In the class `AtomicLongFieldUpdater`:
+
+~~~~~~~~ {.java}
+  protected AtomicLongFieldUpdater(Class<T> objClass, String fieldName)
+-->
+  public static void $init__Ljava_lang_Class_2Ljava_lang_String_2__V
+                         (MJIEnv env, int objRef,
+                          int tClsObjRef, int fNameRef)
+~~~~~~~~
diff --git a/docs/devel/modules.md b/docs/devel/modules.md
new file mode 100644 (file)
index 0000000..45e84d7
--- /dev/null
@@ -0,0 +1,21 @@
+# JPF Runtime Modules #
+
+JPF is partitioned into separate projects that all follow the same directory layout and build process. Modules can be distributed as source or binary distributions. Binary distributions are just slices through the directory tree of a source distribution that preserve the permanent build artifact, i.e. both distribution forms are runtime-compatible.
+
+![Figure: JPF Modules](../graphics/jpf-project.svg){align=center width=750}
+The main artifacts are the *.jar files created and stored in the `build` directory. We can divide this into classes that are executed by the host VM (i.e. have to be in JPF's `native_classpath` setting), and classes that are executed by JPF itself (i.e. have to be in JPF's `classpath` setting). The first category includes [listeners](listener) and [native peers](mji), the second one model classes (compiled from `src/classes`) and annotations, i.e. the system under test code.
+
+The build process is [Ant](http://ant.apache.org/) based, which means every source distribution comes with a build.xml script that implements the basic build targets `clean`, `compile`, `build` and `test`.
+
+We do not include required 3rd party runtime and build libraries in the project distributions.
+The `compile` Ant target uses the standard `javac` command which requires a full JDK installation. `test` generally executes a JUnit based regression test suite. Both JUnit and Ant libraries are also need to be installed.
+
+<included in the jpf-core distribution, which also contains the minimal RunAnt.jar executable jar which can be distributed with other JPF projects to use the jpf-core provided 3rd party build tools.>
+
+<The `lib` directory contains 3rd party libraries that are required at runtime of the project (like bcel.jar in jpf-core).>
+
+<tools contains programs and libraries that are used by the build process (like ant.jar and junit.jar in jpf-core).>
+
+For convenience reasons, JPF modules come with corresponding NetBeans and Eclipse configurations, i.e. can be directly opened as projects within these IDEs.
+
diff --git a/docs/devel/partial_order_reduction.md b/docs/devel/partial_order_reduction.md
new file mode 100644 (file)
index 0000000..7077a48
--- /dev/null
@@ -0,0 +1,67 @@
+# On-the-fly Partial Order Reduction #
+
+The number of different scheduling combinations is the prevalent factor for the state space size of concurrent programs. Fortunately, for most practical purposes it is not necessary to explore all possible instruction interleavings for all threads. The number of scheduling induced states can be significantly reduced by grouping all instruction sequences in a thread that cannot have effects outside this thread itself, collapsing them into a single transition. This technique is called partial order reduction (POR), and typically results in more than 70% reduction of state spaces.
+
+JPF employs an on-the-fly POR that does not rely on user instrumentation or static analysis. JPF automatically determines at runtime which instructions have to be treated as state transition boundaries. If POR is enabled (configured via `vm.por` property), a forward request to the VM executes all instructions in the current thread until one of the following conditions is met:
+
+ - the next instruction is scheduling relevant
+ - the next instruction yields a "nondeterministic" result (i.e. simulates random value data acquisition)
+
+Detection of both conditions are delegated to the instruction object itself (`Instruction.execute()`), passing down information about the current VM execution state and threading context. If the instruction is a transition breaker, it creates a ChoiceGenerator and schedules itself for re-execution.
+
+~~~~~~~~ {.java}
+executeStep () {
+  ..
+  do {
+    if ((nextPc # executeInstruction()) #= pc) {
+      break;
+    } else {
+      pc = nextPc;
+    }
+    ..
+  } while (pc != null);
+  ..
+}
+~~~~~~~~
+
+Each bytecode instruction type corresponds to a concrete gov.nasa.jpf.Instruction subclass that determines scheduling relevance based on the following factors:
+
+ * **Instruction Type** - due to the stack based nature of the JVM, only about 10% of the Java bytecode instructions are scheduling relevant, i.e. can have effects across thread boundaries. The interesting instructions include direct synchronization (`monitorEnter`, `monitorexit`, `invokeX` on synchronized methods), field access (`putX`, `getX`), array element access (`Xaload`, `Xastore`), and invoke calls of certain Thread (`start()`, `sleep()`, `yield()`, `join()`) and Object methods (`wait()`, `notify()`).
+ * **Object Reachability** - besides direct synchronization instructions, field access is the major type of interaction between threads. However, not all putX / getX instructions have to be considered, only the ones referring to objects that are reachable by at least two threads can cause data races. While reachability analysis is an expensive operation, the VM already performs a similar task during garbage collection, which is extended to support POR.
+ * **Thread and Lock Information** - even if the instruction type and the object reachability suggest scheduling relevance, there is no need to break the current transition in case there is no other runnable thread. In addition, lock acquisition and release (`monitorenter`, `monitorexit`) do not have to be considered as transition boundaries if there they happen recursively - only the first and the last lock operation can lead to rescheduling.
+
+![Figure 1: Scheduling Relevance Filters](../graphics/por-scheduling-relevance.svg){align=center width=650}
+
+While JPF uses these informations to automatically deduce scheduling relevance, there exist three mechanisms to explicitly control transition boundaries (i.e. potential thread interleavings)
+
+ 1. `Attributor` - a configurable concrete class of this type is used by JPF during class loading to determine object, method and field attributes of selected classes and class sets. The most important attributes with respect to POR are method atomicity and scheduling relevance levels: (a) never relevant, (b) always scheduling relevant, (c) only relevant in the context of other runnables. (d) only relevant of top-level lock. The default Attributor executes all java code atomically, which is can be too aggressive (i.e. can cause `BlockedAtomicExceptions`).
+
+ 2. `VMListener` - a listener can explicitly request a reschedule by calling `ThreadInfo.yield()` in response of a instruction execution notification.
+
+ 3. `Verify` - a class that serves as an API to communicate between the test application and JPF, and contains `beginAtomic()`, `endAtomic()` functions to control thread interleaving
+
+The main effort of JPFs POR support relates to extending its precise mark and sweep collector. POR reachability is a subset of collector reachability, hence the mechanism piggybacks on the mark phase object traversal. It is complicated by the fact that certain reference chains exist only in the (hidden) VM implementation layer. For instance, every thread has a reference to its ThreadGroup, and the ThreadGroup objects in turn have references to all included threads, hence - from a garbage collection perspective - all threads within a group are mutually reachable. If the application under test does not use Java reflection and runtime queries like thread enumeration, POR reachability should follow accessibility rules as closely as possible. While JPF's POR does not yet support protected and private access modifiers, it includes a mechanism to specify that certain fields should not be used to promote POR reachability. This attribute is set via the configured Attributor at class load time.
+
+![Figure 2: Mark Phase of Reachability Analysis](../graphics/por-mark.svg){align=center width=460}
+
+With this mechanism, calculating POR reachability becomes a straight forward approach that is divided into two phases. Phase 1 non-recursively marks all objects of the root set (mostly static fields and thread stacks), recording the id of the referencing thread. In case an object is reachable from a static field, or from two threads, it's status is set to shared. Phase 2 recursively traverses all heap objects, propagating either a set shared status or the referencing thread id through all reference fields that are not marked as reachability firewalls. Again, if the traversal hits an object that is already marked as referenced by another thread, it promotes the object status to shared, and from there propagates the shared status instead of the thread id.
+
+To further reduce irrelevant context switches, JPF can check for lock protection to determine if a field access is scheduling relevant. If the property `vm.por.sync_detection` is set to true, JPF looks for potential lock candidates when analyzing `GET_x/SET_x` instructions. The policy of detecting lock candidates is configurable with the property `vm.por.fieldlockinfo.class`, the default `gov.nasa.jpf.jvm.StatisticFieldLockInfo` just defers the decision by recording the set of locks held when executing the field instruction, computing the set intersection at subsequent accesses. If the set does not get empty for a configurable number of field accesses, the field is marked as lock protected, and henceforth not treated as transition boundary. If however the set should afterwards become empty, a warning like
+
+~~~~~~~~ {.bash}
+Warning: unprotected field access of: Event@70.count in thread: "Thread-1" oldclassic.java:107
+   sync-detection assumed to be protected by: Event@70
+   found to be protected by: {}
+   >>> re-run with 'vm.por.sync_detection=false' or exclude field from checks <<<
+~~~~~~~~
+
+is issued, and the field access is again treated as transition breaker.
+
+The set of fields to be analyzed can be specified with the properties `vm.por.include_fields` and `vm.por.exclude_fields`. Per default, fields of system library classes are not analyzed (this is esp. useful to avoid context switches for global objects like `System.out`).
+
+Even with all these optimizations, some unwanted transition breakers are likely to remain. This is mostly due to two constraints:
+
+ * JPF only considers reachability, not accessibility
+ * write once, read multiple conditions cannot be detected a priori for fields that are not final, or inside immutable objects (like `java.lang.String`)
+
+Especially the last issue might be subject to further enhancements
diff --git a/docs/devel/report.md b/docs/devel/report.md
new file mode 100644 (file)
index 0000000..aecfd6b
--- /dev/null
@@ -0,0 +1,70 @@
+# The JPF Report API #
+The JPF report system consists of three major components: 
+
+  - the `Reporter`
+  - any number of format specific `Publisher` objects
+  - any number of tool-, property-, Publisher-specific `PublisherExtension` objects
+
+Here is the blueprint:
+
+![Figure: JPF Report System](../graphics/report.svg){align=center width=800}
+
+The `Reporter` is the data collector. It also manages and notifies `Publisher` extensions when a certain output phase is reached. The `Publishers` are the format (e.g. text, XML) specific output producers, the most prominent one being the `ConsolePublisher` (for normal, readable text output on consoles). `PublisherExtensions` can be registered for specific `Publishers` at startup time, e.g. from Listeners implementing properties or analysis modes such as `DeadlockAnalyzer`. This is so common that the `ListenerAdapter` actually implements all the required interface methods so that you just have to override the ones you are interested in.
+
+Configuration is quite easy, and involves only a handful of JPF properties that are all in the report category. The first property specifies the Reporter class itself, but is not likely to be redefined unless you have to implement different data collection modes.
+
+~~~~~~~~ {.bash}
+report.class=gov.nasa.jpf.report.Reporter
+~~~~~~~~
+
+The next setting specifies a list of Publisher instances to use, using symbolic names:
+
+~~~~~~~~ {.bash}
+report.publisher=console,xml
+~~~~~~~~
+
+Each of these symbolic names has to have a corresponding class name defined:
+
+~~~~~~~~ {.bash}
+report.console.class=gov.nasa.jpf.report.ConsolePublisher
+~~~~~~~~
+
+Finally, we have to specify for each symbolic publisher name and output phase what topics should be processed in which order, e.g.
+
+~~~~~~~~ {.bash}
+report.console.property_violation=error,trace,snapshot
+~~~~~~~~
+
+Again, the order of these topics matters, and gives you complete control over the report format. As usual, please refer to `defaults.properties` for default values.
+
+Publisher classes can have their own, additional properties. For instance, the `ConsolePublisher` implementation can be further configured with respect to the information that is included in traces (bytecodes, method names etc.), and to redirect output (file, socket). Please refer to the constructor of this class for further details.
+
+~~~~~~~~ {.bash}
+# save report to file
+report.console.file=My_JPF_report
+~~~~~~~~
+
+All of the involved core classes and interfaces reside in the `gov.nasa.jpf.report` package. The most common way to extend the system is to use your own `PublisherExtension` implementation, which involves two steps:
+
+  - implement the required phase and format specific methods
+  - register the extension for a specific Publisher class
+
+
+The `DeadlockAnalyzer` (which is a listener to analyze concurrency defects) can be used as an example of how to do this:
+
+~~~~~~~~ {.java}
+public class DeadlockAnalyzer extends ListenerAdapter {
+  ...
+  public DeadlockAnalyzer (Config config, JPF jpf){
+    jpf.addPublisherExtension(ConsolePublisher.class, this);  // (1)
+    ...
+  }
+  ...
+  public void publishPropertyViolation (Publisher publisher) { // (2)
+    PrintWriter pw = publisher.getOut();
+    publisher.publishTopicStart("thread ops " + publisher.getLastErrorId());
+    
+    ... // use 'pw' to generate the output
+  }
+}
+~~~~~~~~
diff --git a/docs/graphics/DFSListener.svg b/docs/graphics/DFSListener.svg
new file mode 100644 (file)
index 0000000..1684827
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="62 54 384 228" width="32pc" height="19pc" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2005-10-21 18:50:44 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="588.0188" height="768.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id26_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id27_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id28_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id29_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id30_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id31_Graphic" filter="url(#Shadow)"/></g><g id="id26_Graphic"><path d="M 91.05 67 L 155.45 67 C 163.0676 67 169.25 71.704 169.25 77.5 C 169.25 83.296 163.0676 88 155.45 88 L 91.05 88 C 83.4324 88 77.25 83.296 77.25 77.5 C 77.25 71.704 83.4324 67 91.05 67" fill="white"/><path d="M 91.05 67 L 155.45 67 C 163.0676 67 169.25 71.704 169.25 77.5 C 169.25 83.296 163.0676 88 155.45 88 L 91.05 88 C 83.4324 88 77.25 83.296 77.25 77.5 C 77.25 71.704 83.4324 67 91.05 67" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id27_Graphic"><path d="M 352.55 67 L 416.95 67 C 424.5676 67 430.75 71.704 430.75 77.5 C 430.75 83.296 424.5676 88 416.95 88 L 352.55 88 C 344.9324 88 338.75 83.296 338.75 77.5 C 338.75 71.704 344.9324 67 352.55 67" fill="white"/><path d="M 352.55 67 L 416.95 67 C 424.5676 67 430.75 71.704 430.75 77.5 C 430.75 83.296 424.5676 88 416.95 88 L 352.55 88 C 344.9324 88 338.75 83.296 338.75 77.5 C 338.75 71.704 344.9324 67 352.55 67" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id28_Graphic"><path d="M 136.475 118 L 211.025 118 C 219.8432 118 227 122.704 227 128.5 C 227 134.296 219.8432 139 211.025 139 L 136.475 139 C 127.6568 139 120.5 134.296 120.5 128.5 C 120.5 122.704 127.6568 118 136.475 118" fill="white"/><path d="M 136.475 118 L 211.025 118 C 219.8432 118 227 122.704 227 128.5 C 227 134.296 219.8432 139 211.025 139 L 136.475 139 C 127.6568 139 120.5 134.296 120.5 128.5 C 120.5 122.704 127.6568 118 136.475 118" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id29_Graphic"><path d="M 231.1125 183 L 301.6375 183 C 309.9796 183 316.75 187.704 316.75 193.5 C 316.75 199.296 309.9796 204 301.6375 204 L 231.1125 204 C 222.7704 204 216 199.296 216 193.5 C 216 187.704 222.7704 183 231.1125 183" fill="white"/><path d="M 231.1125 183 L 301.6375 183 C 309.9796 183 316.75 187.704 316.75 193.5 C 316.75 199.296 309.9796 204 301.6375 204 L 231.1125 204 C 222.7704 204 216 199.296 216 193.5 C 216 187.704 222.7704 183 231.1125 183" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id30_Graphic"><path d="M 247.55 148.5 L 311.95 148.5 C 319.5676 148.5 325.75 153.204 325.75 159 C 325.75 164.796 319.5676 169.5 311.95 169.5 L 247.55 169.5 C 239.9324 169.5 233.75 164.796 233.75 159 C 233.75 153.204 239.9324 148.5 247.55 148.5" fill="white"/><path d="M 247.55 148.5 L 311.95 148.5 C 319.5676 148.5 325.75 153.204 325.75 159 C 325.75 164.796 319.5676 169.5 311.95 169.5 L 247.55 169.5 C 239.9324 169.5 233.75 164.796 233.75 159 C 233.75 153.204 239.9324 148.5 247.55 148.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id31_Graphic"><path d="M 202.55 231 L 284.45 231 C 294.1376 231 302 235.704 302 241.5 C 302 247.296 294.1376 252 284.45 252 L 202.55 252 C 192.8624 252 185 247.296 185 241.5 C 185 235.704 192.8624 231 202.55 231" fill="white"/><path d="M 202.55 231 L 284.45 231 C 294.1376 231 302 235.704 302 241.5 C 302 247.296 294.1376 252 284.45 252 L 202.55 252 C 192.8624 252 185 247.296 185 241.5 C 185 235.704 192.8624 231 202.55 231" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 131.82329 138.16666 C 132.88209 140.61086 134.72058 143.048855 135 145.5 C 135.27942 147.951145 134.72904 151.04185 133.5 152.875 C 132.27096 154.70815 129.874775 156.1667 127.625 156.5 C 125.375225 156.8333 121.604006 156.31236 120 154.875 C 118.395994 153.43764 117.02568 150.964375 118 147.875 C 118.33188 146.82268 119.04462 145.594735 119.94362 144.28092" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 300.2699 236.20079 C 302.39772 235.01331 304.5007 234.23864 306.654 232.638 C 308.8073 231.03736 312.13694 229.05675 313.191 226.596 C 314.24506 224.13525 314.7705 221.5729 312.979 217.872 C 312.15253 216.16467 310.59337 214.11944 308.80859 211.9702" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(89.5 71.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".25927734" y="10" textLength="68.481445">searchStarted</tspan></text><text transform="translate(349.5 70.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".203125" y="10" textLength="74.59375">searchFinished</tspan></text><text transform="translate(127 121.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="4.6135254" y="10" textLength="72.77295">stateAdvanced</tspan></text><text transform="translate(241 152.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".044433594" y="10" textLength="47.68994">propertyV</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="47.541016" y="10" textLength="32.41455">iolated</tspan></text><text transform="translate(224.5 187.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".31274414" y="10" textLength="84.37451">stateBacktracked</tspan></text><text transform="translate(194.5 234.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".203125" y="10" textLength="96.59375">searchConstraintHit</tspan></text><path d="M 168.67215 76.98571 L 180.57215 76.98571 L 190.47357 76.98571 C 195.94198 76.98571 200.375 81.41873 200.375 86.88714 L 200.375 106.1 L 200.375 108.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 226.33107 127.98571 L 238.23107 127.98571 L 272.23107 127.98571 C 277.75392 127.98571 282.23107 123.50856 282.23107 117.98571 L 282.23107 87.5 C 282.23107 81.977153 286.70823 77.5 292.23107 77.5 L 326.85 77.5 L 328.85 77.5" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 200.375 139 L 200.375 150.9 L 200.375 154.54757 C 200.375 156.56207 202.00807 158.19515 204.02257 158.19515 L 221.89 158.19515 L 223.89 158.19515" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 325.17215 158.48571 L 337.07215 158.48571 L 375.7735 158.48571 C 381.29635 158.48571 385.7735 154.00856 385.7735 148.48571 L 385.7735 99.9 L 385.7735 97.9" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 316.11719 192.98571 L 328.01719 192.98571 L 388.22082 192.98571 C 393.74367 192.98571 398.22082 188.50856 398.22082 182.98571 L 398.22082 99.9 L 398.22082 97.9" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 301.26512 240.98571 L 313.16512 240.98571 L 400.5722 240.98571 C 406.09504 240.98571 410.5722 236.50856 410.5722 230.98571 L 410.5722 99.9 L 410.5722 97.9" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 173.23588 139 L 173.23588 150.9 L 173.23588 182.69515 C 173.23588 188.218 177.71303 192.69515 183.23588 192.69515 L 204.1438 192.69515 L 206.1438 192.69515" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 146.75778 139 L 146.75778 150.9 L 146.75778 230.69515 C 146.75778 236.218 151.23493 240.69515 156.75778 240.69515 L 173.15087 240.69515 L 175.15087 240.69515" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 242.93519 252 L 242.93519 263.9 L 242.93519 267.45 C 242.93519 269.41061 241.3458 271 239.38519 271 L 109 271 C 103.47715 271 99 266.52285 99 261 L 99 132.5183 C 99 129.854546 101.1594 127.69515 103.82315 127.69515 L 108.646305 127.69515 L 110.646305 127.69515" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 226.71194 203.16666 C 227.59954 205.40255 229.22284 207.77799 229.375 209.875 C 229.52716 211.97201 228.85404 214.12516 227.625 215.75 C 226.39596 217.37484 224.22894 219.08339 222 219.625 C 219.77106 220.16661 215.89567 220.14572 214.25 219 C 212.60433 217.85428 210.99047 215.69356 212.125 212.75 C 212.54779 211.65307 213.48253 210.31699 214.64302 208.87548" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/docs/graphics/app-types.svg b/docs/graphics/app-types.svg
new file mode 100644 (file)
index 0000000..f845707
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="20 24 747 537" width="747pt" height="537pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2015-01-05 22:17:29 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><filter id="Shadow_2" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker_2" viewBox="-9 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M -8 0 L 0 3 L 0 -3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Lucida Grande" font-size="11" panose-1="2 11 6 0 4 5 2 2 2 4" units-per-em="1000" underline-position="-97.65625" underline-thickness="48.828125" slope="0" x-height="530.27344" cap-height="722.65625" ascent="966.7969" descent="-210.9375" font-weight="500"><font-face-src><font-face-name name="LucidaGrande"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="15" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-800" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 8 8" markerWidth="8" markerHeight="8" color="black"><g><path d="M 5.5999994 0 L 0 -2.0999998 L 0 2.0999998 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Times New Roman" font-size="20" panose-1="2 2 8 3 7 5 5 2 3 4" units-per-em="1000" underline-position="-108.88672" underline-thickness="95.214844" slope="0" x-height="456.54297" cap-height="662.10938" ascent="891.1133" descent="-216.3086" font-weight="bold"><font-face-src><font-face-name name="TimesNewRomanPS-BoldMT"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -2 4 4" markerWidth="4" markerHeight="4" color="black"><g><path d="M 1.6 0 L 0 -.6 L 0 .6 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>App Types</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id50_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id65_Graphic" filter="url(#Shadow)"/></g><g filter="url(#Shadow_2)"><path d="M 327.333 77.9986 L 474.333 77.9986 C 480.40813 77.9986 485.333 82.92347 485.333 88.9986 L 485.333 311.5916 C 485.333 317.66673 480.40813 322.5916 474.333 322.5916 L 327.333 322.5916 C 321.25787 322.5916 316.333 317.66673 316.333 311.5916 L 316.333 88.9986 C 316.333 82.92347 321.25787 77.9986 327.333 77.9986 Z" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g><g id="id50_Graphic"><path d="M 282.2563 114.6481 C 282.2563 109.43795 281.63467 108.79335 277.09383 103.6371 L 277.04586 103.58375 C 272.48103 98.3736 272.43356 98.3736 267.74881 98.3736 C 261.51097 98.3736 233.309 98.3736 233.309 98.3736 L 233.309 153.3736 L 282.2563 153.3736 L 282.2563 114.6481 Z" fill="white"/><path d="M 282.2563 114.6481 C 282.2563 109.43795 281.63467 108.79335 277.09383 103.6371 L 277.04586 103.58375 C 272.48103 98.3736 272.43356 98.3736 267.74881 98.3736 C 261.51097 98.3736 233.309 98.3736 233.309 98.3736 L 233.309 153.3736 L 282.2563 153.3736 L 282.2563 114.6481 Z M 282.2563 114.3797 C 282.2563 109.43795 282.20833 109.43795 272.43356 109.43795 L 272.43356 109.43795 C 272.43356 98.4275 272.43356 98.3736 268.03564 98.3736" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="31.2632" y1="385.317" x2="755.896" y2="385.317" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="16,9,1,9"/><line x1="300.567" y1="128.5" x2="506.433" y2="128.5" marker-end="url(#Arrow_Marker)" marker-start="url(#Arrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(118.333 406.626)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="133.21924">non-functional properties</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="110.08594"> unhandled exceptions</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="37" textLength="41.561523">     (incl. </tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="40.95996" y="37" textLength="73.95996">AssertionError)</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="51" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="51" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="51" textLength="52.58838"> deadlocks</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="65" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="65" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="65" textLength="29.95459"> races</tspan></text><text transform="translate(118.333 318.229)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="119.8291">restricted choice types</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="111.91211"> scheduling sequences</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="38" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="38" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="38" textLength="88.04297"> java.util.Random </tspan></text><text transform="translate(118.333 478.959)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="107.572266">improved inspection</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="93.5376"> coverage statistics</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="38" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="38" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="38" textLength="97.22217"> exact object counts</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="52" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="52" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="52" textLength="78.87451"> execution costs</tspan></text><text transform="translate(36.33314 309.333) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="15" textLength="72.53174">constraints</tspan></text><text transform="translate(38.9582 487.959) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="15" textLength="40.86914">benefi</tspan><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="40.86914" y="15" textLength="11.6674805">ts</tspan></text><text transform="translate(527.5 202)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="152.81836">restricted application models</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="26.280762"> UML</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="37.952148" y="24" textLength="73.981445"> statemachines</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="38" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="38" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="38" textLength="151.620605"> does not run w/o JPF libraries </tspan></text><text transform="translate(118.666 200.667)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="72.12842">runtime costs</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="130.23291"> order of magnitude slower</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="38" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="38" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="38" textLength="109.430664"> state storage memory</tspan></text><text transform="translate(118.333 244.97)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="127.13379">standard library support</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="116.77832"> java.net, javax.swing, ..</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="37" textLength="151.01367">     (needs abstraction models) </tspan></text><text transform="translate(528.197 437.293)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="158.89307">functional (domain) properties</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="120.430664"> built-in into JPF libraries</tspan></text><text transform="translate(118.666 288.728)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="160.74072">functional property impl. costs</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="123.49756"> listeners, MJI knowledge</tspan></text><text transform="translate(528.197 467.96)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="6.7192383">fl</tspan><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="6.7192383" y="10" textLength="94.166016">exible state space</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="73.36914"> domain specifi</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="85.44336" y="24" textLength="45.853027">c choices</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="37" textLength="63.572266">     (e.g. UML</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="63.169434" y="37" textLength="91.58789"> &quot;enabling events&quot;)</tspan></text><text transform="translate(528.864 511.294)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="163.80762">runtime costs &amp; library support</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="149.80518"> usually not a problem, domain</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="37" textLength="147.96289">     libs can control state space</tspan></text><text transform="translate(142 114.334)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="57.481445">runs on any</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="23" textLength="22">JVM</tspan></text><text transform="translate(597.018 112.38)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="44.63379">runs only</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="23" textLength="50.746094">under JPF</tspan></text><text transform="translate(528.197 406.626)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="102.066895">low modeling costs</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="165.08594"> statemachine w/o layout hassle,..</tspan></text><text transform="translate(527.833 247.333)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="131.40918">initial domain impl. costs</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="12.074219" y="24" textLength="126.55371"> domain libs can be tricky </tspan></text><text transform="translate(408 85.8125)" fill="black"><tspan font-family="Lucida Grande" font-size="11" font-weight="500" x="0" y="11" textLength="65.5542">&quot;sweet spot&quot;</tspan></text><text transform="translate(345.41 172.334)" fill="red"><tspan font-family="Helvetica" font-size="11" font-weight="bold" fill="red" x="0" y="10" textLength="93.51074">annotate program</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="12.074219" y="24" textLength="67.251465"> requirements</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="38" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="6.1123047" y="38" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="12.074219" y="38" textLength="89.86914"> sequences (UML)</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="52" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="6.1123047" y="52" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="12.074219" y="52" textLength="79.46533"> contracts (PbC)</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="66" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="6.1123047" y="66" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="12.074219" y="66" textLength="26.286133"> tests</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="79" textLength="23.22461">    …</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="92" textLength="3.0561523"> </tspan></text><text transform="translate(345.41 259.291)" fill="red"><tspan font-family="Helvetica" font-size="11" font-weight="bold" fill="red" x="0" y="10" textLength="87.41992">analyze program</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="24" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="6.1123047" y="24" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="12.074219" y="24" textLength="72.13379"> symbolic exec</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="38" textLength="15.280762">     </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="15.280762" y="38" textLength="11">→</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="26.280762" y="38" textLength="45.251465"> test data</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="0" y="52" textLength="6.1123047">  </tspan><tspan font-family="Lucida Grande" font-size="11" font-weight="500" fill="red" x="6.1123047" y="52" textLength="5.961914">■</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="red" x="12.074219" y="52" textLength="105.77295"> thread safety / races </tspan></text><path d="M 443.077 271.319 C 448.50012 269.28287 455.12626 268.07605 459.348 265.21 C 463.56974 262.34395 467.8014 258.03911 468.41 254.121 C 469.0186 250.20289 466.9996 245.38813 463 241.699 C 460.3534 239.25783 455.78244 237.2113 451.19748 235.16785" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(241.566 140.124)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="10" textLength="29.453125">*.class</tspan></text><g id="id65_Graphic"><path d="M 424.2383 117.1085 C 424.2383 111.89835 423.61667 111.25375 419.07583 106.0975 L 419.02786 106.04415 C 414.46303 100.834 414.41556 100.834 409.7308 100.834 C 403.49297 100.834 375.291 100.834 375.291 100.834 L 375.291 155.834 L 424.2383 155.834 L 424.2383 117.1085 Z" fill="white"/><path d="M 424.2383 117.1085 C 424.2383 111.89835 423.61667 111.25375 419.07583 106.0975 L 419.02786 106.04415 C 414.46303 100.834 414.41556 100.834 409.7308 100.834 C 403.49297 100.834 375.291 100.834 375.291 100.834 L 375.291 155.834 L 424.2383 155.834 L 424.2383 117.1085 Z M 424.2383 116.8401 C 424.2383 111.89835 424.19033 111.89835 414.41556 111.89835 L 414.41556 111.89835 C 414.41556 100.8879 414.41556 100.834 410.01764 100.834" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(385.548 142.585)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="10" textLength="25.014648">*.java</tspan></text><text transform="translate(381.548 115.758)" fill="blue"><tspan font-family="Times New Roman" font-size="20" font-weight="bold" fill="blue" x="0" y="18" textLength="33.046875">@V</tspan></text><path d="M 574.3423 117.1085 C 574.3423 111.89835 573.72067 111.25375 569.17983 106.0975 L 569.13186 106.04415 C 564.56703 100.834 564.51956 100.834 559.8348 100.834 C 553.59697 100.834 525.395 100.834 525.395 100.834 L 525.395 155.834 L 574.3423 155.834 L 574.3423 117.1085 Z" fill="white"/><path d="M 574.3423 117.1085 C 574.3423 111.89835 573.72067 111.25375 569.17983 106.0975 L 569.13186 106.04415 C 564.56703 100.834 564.51956 100.834 559.8348 100.834 C 553.59697 100.834 525.395 100.834 525.395 100.834 L 525.395 155.834 L 574.3423 155.834 L 574.3423 117.1085 Z M 574.3423 116.8401 C 574.3423 111.89835 574.29433 111.89835 564.51956 111.89835 L 564.51956 111.89835 C 564.51956 100.8879 564.51956 100.834 560.12164 100.834" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><ellipse cx="543.737" cy="113.0895" rx="5.3750086" ry="4.0625065" fill="yellow"/><ellipse cx="543.737" cy="113.0895" rx="5.3750086" ry="4.0625065" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><ellipse cx="556.987" cy="126.2145" rx="5.3750086" ry="4.0625065" fill="red"/><ellipse cx="556.987" cy="126.2145" rx="5.3750086" ry="4.0625065" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><ellipse cx="538.987" cy="135.2145" rx="5.3750086" ry="4.0625065" fill="blue"/><ellipse cx="538.987" cy="135.2145" rx="5.3750086" ry="4.0625065" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 549.51266 113.920245 C 550.629 114.080814 551.84554 113.92592 552.862 114.402 C 553.87846 114.87808 555.03463 115.563874 555.612 116.777 C 555.80122 117.17458 555.9176 117.662774 555.9969 118.19702" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 559.38672 130.37215 C 560.37838 132.09026 562.65776 134.17099 562.362 135.527 C 562.06624 136.88301 560.5531 138.39227 557.612 138.509 C 555.40905 138.596435 551.6817 137.6995 548.14292 136.92421" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 538.68525 130.65814 C 538.5775 129.031255 537.41597 126.75709 538.362 125.777 C 539.30803 124.79691 542.22674 124.81438 544.362 124.777 C 545.42796 124.75834 546.5616 124.8872 547.71222 125.05311" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(535.842 142.467)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="10" textLength="25.014648">*.java</tspan></text><text transform="translate(198.618 42.3331)" fill="black"><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="15" textLength="88.374023">JPF unaware</tspan><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="33" textLength="63.354492">programs</tspan></text><text transform="translate(354.033 33.4506)" fill="black"><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="15" textLength="84.22119">JPF enabled</tspan><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="33" textLength="63.354492">programs</tspan></text><text transform="translate(498.368 43.1018)" fill="black"><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="15" textLength="101.74072">JPF dependent</tspan><tspan font-family="Helvetica" font-size="15" font-style="italic" font-weight="500" x="0" y="33" textLength="63.354492">programs</tspan></text></g></g></svg>
diff --git a/docs/graphics/attributes.svg b/docs/graphics/attributes.svg
new file mode 100644 (file)
index 0000000..2aa20a4
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="98 7 445 412" width="445pt" height="412pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2011-05-16 18:21:11 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><font-face font-family="Helvetica" font-size="8" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="8" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><filter id="Shadow_2" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation=".75079507"/><feOffset in="blur" result="offset" dx=".5" dy=".5"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><filter id="Shadow_3" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation=".75079507"/><feOffset in="blur" result="offset" dx="1" dy="1"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="black"><g><path d="M 4.7999992 0 L 0 -1.7999997 L 0 1.7999997 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Courier New" font-size="9" panose-1="2 7 6 9 2 2 5 2 4 4" units-per-em="1000" underline-position="-232.91016" underline-thickness="100.097656" slope="0" x-height="443.35938" cap-height="591.79688" ascent="832.51953" descent="-300.29297" font-weight="bold"><font-face-src><font-face-name name="CourierNewPS-BoldMT"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="black"><g><path d="M 4 0 L 0 -1.5 L 0 1.5 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledBall_Marker" viewBox="-4 -3 5 6" markerWidth="5" markerHeight="6" color="black"><g><circle cx="-1.4999993" cy="0" r="1.4999987" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Courier New" font-size="10" panose-1="2 7 6 9 2 2 5 2 4 4" units-per-em="1000" underline-position="-232.91016" underline-thickness="100.097656" slope="0" x-height="443.35938" cap-height="591.79688" ascent="832.51953" descent="-300.29297" font-weight="bold"><font-face-src><font-face-name name="CourierNewPS-BoldMT"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" viewBox="-6 -3 7 6" markerWidth="7" markerHeight="6" color="black"><g><path d="M -4.8000002 0 L 0 1.8000001 L 0 -1.8000001 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1090.9091" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1200" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_4" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="#404040"><g><path d="M 4 0 L 0 -1.5 L 0 1.5 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledBall_Marker_2" viewBox="-4 -3 5 6" markerWidth="5" markerHeight="6" color="#404040"><g><circle cx="-1.4999993" cy="0" r="1.4999987" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><path d="M 129.05398 137.779 L 521.01013 137.779 C 526.53298 137.779 531.01013 142.25615 531.01013 147.779 C 531.01013 147.78732 531.01012 147.795646 531.0101 147.80397 L 530.5015 351.50493 C 530.4877 357.02776 525.99938 361.49372 520.47655 361.47993 C 520.47598 361.47993 520.4754 361.47993 520.47483 361.47992 L 319.923 360.94463 C 314.40018 360.92988 309.935 356.4408 309.94973 350.91797 C 309.94984 350.8784 309.95018 350.83881 309.95075 350.79924 L 310.80437 292.10691 C 310.88469 286.58465 306.47312 282.04286 300.95085 281.96255 C 300.923 281.96214 300.89516 281.96185 300.86732 281.96168 L 130.49925 280.90729 C 125.04834 280.87355 120.62861 276.48048 120.56189 271.02987 L 119.05473 147.9014 C 118.98713 142.37896 123.40915 137.84735 128.93158 137.77975 C 128.97238 137.77925 129.01318 137.779 129.05398 137.779 Z" fill="#fcffec"/><path d="M 129.05398 137.779 L 521.01013 137.779 C 526.53298 137.779 531.01013 142.25615 531.01013 147.779 C 531.01013 147.78732 531.01012 147.795646 531.0101 147.80397 L 530.5015 351.50493 C 530.4877 357.02776 525.99938 361.49372 520.47655 361.47993 C 520.47598 361.47993 520.4754 361.47993 520.47483 361.47992 L 319.923 360.94463 C 314.40018 360.92988 309.935 356.4408 309.94973 350.91797 C 309.94984 350.8784 309.95018 350.83881 309.95075 350.79924 L 310.80437 292.10691 C 310.88469 286.58465 306.47312 282.04286 300.95085 281.96255 C 300.923 281.96214 300.89516 281.96185 300.86732 281.96168 L 130.49925 280.90729 C 125.04834 280.87355 120.62861 276.48048 120.56189 271.02987 L 119.05473 147.9014 C 118.98713 142.37896 123.40915 137.84735 128.93158 137.77975 C 128.97238 137.77925 129.01318 137.779 129.05398 137.779 Z" stroke="#dabc2a" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="335.637" y="278.727" width="102.191" height="50.5717" fill="#faffc4"/><rect x="335.637" y="278.727" width="102.191" height="50.5717" stroke="#ffc189" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow)"><rect x="335.805" y="149.616" width="102.191" height="119.14" fill="#faffc4"/><rect x="335.805" y="149.616" width="102.191" height="119.14" stroke="#ffc189" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow)"><rect x="131.795" y="149.616" width="97.7571" height="95.5241" fill="#faffc4"/><rect x="131.795" y="149.616" width="97.7571" height="95.5241" stroke="#ffc189" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 119.83489 292.59206 L 291.39527 293.14156 C 296.91809 293.15925 301.38088 297.65072 301.36319 303.17354 C 301.36314 303.18956 301.36305 303.2056 301.36292 303.22162 L 300.91446 359.19774 C 300.87032 364.707 305.2906 369.21415 310.79969 369.2772 L 430.69996 370.6495 C 436.17774 370.7122 440.58542 375.17053 440.58552 380.64867 L 440.58582 397.60582 C 440.58592 403.12867 436.10885 407.6059 430.586 407.606 C 430.58594 407.606 430.58588 407.606 430.58582 407.606 L 120.528715 407.606 C 115.03568 407.606 110.57097 403.17527 110.52901 397.6824 L 109.80315 302.6684 C 109.76096 297.14571 114.20378 292.63449 119.72647 292.5923 C 119.76261 292.59202 119.79875 292.59194 119.83489 292.59206 Z" fill="#e5ffe3"/><path d="M 119.83489 292.59206 L 291.39527 293.14156 C 296.91809 293.15925 301.38088 297.65072 301.36319 303.17354 C 301.36314 303.18956 301.36305 303.2056 301.36292 303.22162 L 300.91446 359.19774 C 300.87032 364.707 305.2906 369.21415 310.79969 369.2772 L 430.69996 370.6495 C 436.17774 370.7122 440.58542 375.17053 440.58552 380.64867 L 440.58582 397.60582 C 440.58592 403.12867 436.10885 407.6059 430.586 407.606 C 430.58594 407.606 430.58588 407.606 430.58582 407.606 L 120.528715 407.606 C 115.03568 407.606 110.57097 403.17527 110.52901 397.6824 L 109.80315 302.6684 C 109.76096 297.14571 114.20378 292.63449 119.72647 292.5923 C 119.76261 292.59202 119.79875 292.59194 119.83489 292.59206 Z" stroke="#0e9319" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="337.865" y="68.4215" width="102.191" height="60" fill="white"/><rect x="337.865" y="68.4215" width="102.191" height="60" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(342.865 68.4215)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="8" textLength="77.808594">dup(), push(), pop(), ..</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="18" textLength="15.984375">------</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="28" textLength="70.253906">getOperandAttr(idx)</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="38" textLength="82.703125">setOperandAttr(idx,obj)</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="48" textLength="58.246094">getLocalAttr(idx)</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="58" textLength="70.695312">setLocalAttr(idx,obj)</tspan></text><rect x="337.865" y="28.4215" width="102.191" height="40" fill="white"/><rect x="337.865" y="28.4215" width="102.191" height="40" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(342.865 28.4215)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="8" textLength="35.570312">int[] locals</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="18" textLength="58.6875">Object[] localAttr</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="28" textLength="48.476562">int[] operands</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="38" textLength="71.59375">Object[] operandAttr</tspan></text><rect x="337.865" y="18.4215" width="102.191" height="10" fill="white"/><rect x="337.865" y="18.4215" width="102.191" height="10" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(342.865 18.4215)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="23.415812" y="8" textLength="45.359375">StackFrame</tspan></text><rect x="133.561" y="59.0283" width="102.191" height="70" fill="white"/><rect x="133.561" y="59.0283" width="102.191" height="70" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(138.561 59.0283)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="8" textLength="25.351562">getIntV</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="24.761719" y="8" textLength="41.792969">alue(idx), ...</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="18" textLength="24.902344">setIntV</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="24.3125" y="18" textLength="50.23828">alue(idx, v), ...</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="28" textLength="15.984375">------</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="38" textLength="56.460938">getFieldAttr(idx)</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="48" textLength="68.910156">setFieldAttr(idx,obj)</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="58" textLength="52.015625">getObjectAttr()</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" fill="blue" x="0" y="68" textLength="62.242188">setObjectAttr(obj)</tspan></text><rect x="133.561" y="29.0283" width="102.191" height="30" fill="white"/><rect x="133.561" y="29.0283" width="102.191" height="30" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(138.561 29.0283)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="8" textLength="38.242188">int[] values</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="18" textLength="33.789062">Object[] fi</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="33.789062" y="18" textLength="27.121094">eldAttrs</tspan><tspan font-family="Helvetica" font-size="8" font-weight="500" x="0" y="28" textLength="59.13672">Object objectAttr</tspan></text><rect x="133.561" y="19.0283" width="102.191" height="10" fill="white"/><rect x="133.561" y="19.0283" width="102.191" height="10" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(138.561 19.0283)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="34.536906" y="8" textLength="23.117188">Fields</tspan></text><rect x="350.285" y="163.457" width="75.3187" height="100" fill="white"/><rect x="350.285" y="163.457" width="75.3187" height="100" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="330.498" y1="193.894" x2="425.604" y2="193.894" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="387.872" y1="153.139" x2="387.872" y2="263.946" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow_2)"><rect x="353.396" y="167.278" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.396" y="167.278" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.198" y="167.048" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.198" y="167.048" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="353.396" y="178.857" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.396" y="178.857" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.198" y="178.627" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.198" y="178.627" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_2)"><rect x="353.396" y="199.952" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.396" y="199.952" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.198" y="199.722" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.198" y="199.722" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="353.396" y="211.531" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.396" y="211.531" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.198" y="211.301" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.198" y="211.301" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="353.396" y="223.11" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.396" y="223.11" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.198" y="222.88" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.198" y="222.88" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(335.377 190.062) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="23.009766">locals</tspan></text><text transform="translate(355.071 149.616)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="26.015625">values</tspan></text><text transform="translate(393.961 149.616)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="37.019531">attributes</tspan></text><text transform="translate(335.474 236.5) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="37.529297">operands</tspan></text><text transform="translate(309.594 187.863)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="18.505371">slots</tspan></text><rect x="144.642" y="183.546" width="75.3187" height="55.3838" fill="white"/><rect x="144.642" y="183.546" width="75.3187" height="55.3838" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="182.229" y1="173.228" x2="182.229" y2="239.159" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow_2)"><rect x="147.753" y="187.367" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="147.753" y="187.367" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="184.555" y="187.137" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="184.555" y="187.137" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="147.753" y="198.946" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="147.753" y="198.946" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="184.555" y="198.716" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="184.555" y="198.716" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_2)"><rect x="147.753" y="211.041" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="147.753" y="211.041" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="184.555" y="210.811" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="184.555" y="210.811" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="147.753" y="222.62" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="147.753" y="222.62" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="184.555" y="222.39" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="184.555" y="222.39" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(134.303 169.705)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">fi</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="4.5" y="9" textLength="41.02295">eld-values</tspan></text><text transform="translate(188.318 169.705)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="37.019531">attributes</tspan></text><line x1="234.498" y1="231.537" x2="322.887" y2="231.537" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="329.357" y1="206.886" x2="240.379" y2="206.886" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(259.457 194.858)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="43.20703">putfield</tspan></text><path d="M 428.964 210.165 L 447.019 210.165 L 447.019 228.737 L 435.664 228.737" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(259.457 221.198)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="43.20703">getfield</tspan></text><text transform="translate(449.973 209.928)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="16.202637">dup</tspan><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="17" textLength="10.801758">..</tspan></text><path d="M 428.169 168.156 L 497.385 168.156 L 497.385 237.983 L 434.869 237.983" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(500.669 202.849)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="27.004395">iload</tspan><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="17" textLength="10.801758">..</tspan></text><path d="M 429.803 200.798 L 456.803 200.798 L 456.803 180.798 L 434.503 180.798" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(458.813 182.982)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="32.405273">istore</tspan><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="17" textLength="10.801758">..</tspan></text><g filter="url(#Shadow_3)"><rect x="353.166" y="236.151" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.166" y="236.151" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="389.968" y="235.921" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="389.968" y="235.921" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><rect x="350.674" y="286.352" width="75.3187" height="34.5028" fill="white"/><rect x="350.674" y="286.352" width="75.3187" height="34.5028" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow_2)"><rect x="353.785" y="290.173" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.785" y="290.173" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.587" y="289.943" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.587" y="289.943" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="353.785" y="301.752" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="353.785" y="301.752" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="390.587" y="301.522" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="390.587" y="301.522" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 428.734 249.545 L 489.176 249.545 L 489.176 306.698 L 434.116 306.698" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow_3)"><rect x="352.936" y="248.531" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="352.936" y="248.531" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_3)"><rect x="389.738" y="248.301" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="389.738" y="248.301" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(454.692 309.299)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="70.211426">invokevirtual</tspan><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="17" textLength="10.801758">..</tspan></text><path d="M 428.603 291.278 L 446.659 291.278 L 446.659 259.189 L 434.503 259.189" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(448.227 265.618)" fill="black"><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="7" textLength="32.405273">return</tspan><tspan font-family="Courier New" font-size="9" font-weight="bold" x="0" y="17" textLength="10.801758">..</tspan></text><g filter="url(#Shadow)"><rect x="214.377" y="301.379" width="54" height="34" fill="white"/><rect x="214.377" y="301.379" width="54" height="34" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(219.377 308.379)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="6" y="8" textLength="32">attribute</tspan><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="10.220703" y="18" textLength="23.558594">object</tspan></text></g><path d="M 199.193 249.815 L 199.193 318.925 L 207.97754 318.8113" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 406.74574 294.90896 L 406.242 315.583 L 272.50995 315.01889" marker-end="url(#FilledArrow_Marker_2)" marker-start="url(#FilledBall_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(118.282 316.108)" fill="blue"><tspan font-family="Courier New" font-size="10" font-weight="bold" fill="blue" x="0" y="8" textLength="72.01172">setAttr(i,o)</tspan></text><text transform="translate(142.52 386.429)" fill="blue"><tspan font-family="Courier New" font-size="10" font-weight="bold" fill="blue" x="0" y="8" textLength="60.009766">getAttr(i)</tspan></text><g filter="url(#Shadow)"><rect x="208.685" y="363.774" width="65" height="34" fill="white"/><rect x="208.685" y="363.774" width="65" height="34" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(213.685 365.774)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="0" y="8" textLength="33.34375">- listener</tspan><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="0" y="18" textLength="46.21875">- Instruction</tspan><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="0" y="28" textLength="47.128906">- native peer</tspan></text></g><path d="M 201.48924 382.13757 L 191.346 382.486 L 191.55037 253.65499" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 280.88496 380.90578 L 403.869 381.314 L 403.869 332.244" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="241.23884" y1="363.274" x2="241.30251" y2="342.57897" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4,4"/><text transform="translate(280.538 386.363)" fill="blue"><tspan font-family="Courier New" font-size="10" font-weight="bold" fill="blue" x="0" y="8" textLength="66.010742">get?Attr(i)</tspan></text><text transform="translate(362.525 383.486)" fill="blue"><tspan font-family="Courier New" font-size="10" font-weight="bold" fill="blue" x="0" y="8" textLength="78.012695">set?Attr(i,o)</tspan></text><text transform="translate(250.716 143.057)" fill="red"><tspan font-family="Helvetica" font-size="11" font-style="italic" font-weight="500" fill="red" x=".4946289" y="10" textLength="44.010742">JPF core</tspan></text><text transform="translate(123.34 347.446)" fill="red"><tspan font-family="Helvetica" font-size="11" font-style="italic" font-weight="500" fill="red" x="14.221924" y="10" textLength="19.556152">JPF</tspan><tspan font-family="Helvetica" font-size="11" font-style="italic" font-weight="500" fill="red" x=".45581055" y="23" textLength="47.08838">extension</tspan></text><text transform="translate(257.781 101.477)" fill="blue"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="blue" x=".25878906" y="10" textLength="38.911133">attribute </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="blue" x="38.623047" y="10" textLength="16.118164">API</tspan></text><g filter="url(#Shadow_3)"><rect x="184.386" y="157.024" width="31.437" height="7.22235" fill="#e6e6e6"/><rect x="184.386" y="157.024" width="31.437" height="7.22235" stroke="#646464" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(140.259 155.826)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="40.016602">object-attr</tspan></text><line x1="342.24" y1="282.597" x2="342.24" y2="275.551" marker-end="url(#FilledArrow_Marker_4)" marker-start="url(#FilledBall_Marker_2)" stroke="#404040" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="363.056" y="337.39" width="77" height="16.4457" fill="white" fill-opacity=".76"/><rect x="363.056" y="337.39" width="77" height="16.4457" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(368.056 341.61285)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="12.833984" y="8" textLength="41.332031">ThreadInfo</tspan></text></g><g filter="url(#Shadow)"><rect x="156.551" y="257.852" width="77" height="16.4457" fill="white" fill-opacity=".76"/><rect x="156.551" y="257.852" width="77" height="16.4457" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(161.551 261.07485)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="bold" x="10.609375" y="8" textLength="45.78125">ElementInfo</tspan></text></g></g></g></svg>
diff --git a/docs/graphics/bc-factory.svg b/docs/graphics/bc-factory.svg
new file mode 100644 (file)
index 0000000..f69c951
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="-2 3 732 514" width="61pc" height="514pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2011-05-16 18:32:22 +0000</dc:date></metadata><defs><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="black"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 0 M 0 -3 L 8 0 L 0 3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Courier" font-size="11" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Courier" font-size="11" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker_2" viewBox="-1 -4 9 8" markerWidth="9" markerHeight="8" color="gray"><g><path d="M 6.3999996 0 L 0 0 M 0 -2.3999999 L 6.3999996 0 L 0 2.3999999" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Times New Roman" font-size="14" panose-1="2 2 5 3 5 4 5 9 3 4" units-per-em="1000" underline-position="-108.88672" underline-thickness="48.828125" slope="-1166.6423" x-height="430.17578" cap-height="662.10938" ascent="891.1133" descent="-216.3086" font-style="italic" font-weight="500"><font-face-src><font-face-name name="TimesNewRomanPS-ItalicMT"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><path d="M 487.518 259.358 L 549.518 259.358 C 558.35456 259.358 565.518 266.52144 565.518 275.358 L 565.518 341.358 C 565.518 350.19456 558.35456 357.358 549.518 357.358 L 487.518 357.358 C 478.68144 357.358 471.518 350.19456 471.518 341.358 L 471.518 275.358 C 471.518 266.52144 478.68144 259.358 487.518 259.358 Z" fill="#e6e6e6"/><path d="M 487.518 259.358 L 549.518 259.358 C 558.35456 259.358 565.518 266.52144 565.518 275.358 L 565.518 341.358 C 565.518 350.19456 558.35456 357.358 549.518 357.358 L 487.518 357.358 C 478.68144 357.358 471.518 350.19456 471.518 341.358 L 471.518 275.358 C 471.518 266.52144 478.68144 259.358 487.518 259.358 Z" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 275.368 259.358 L 337.368 259.358 C 346.20456 259.358 353.368 266.52144 353.368 275.358 L 353.368 356.407 C 353.368 365.24356 346.20456 372.407 337.368 372.407 L 275.368 372.407 C 266.53144 372.407 259.368 365.24356 259.368 356.407 L 259.368 275.358 C 259.368 266.52144 266.53144 259.358 275.368 259.358 Z" fill="#e6e6e6"/><path d="M 275.368 259.358 L 337.368 259.358 C 346.20456 259.358 353.368 266.52144 353.368 275.358 L 353.368 356.407 C 353.368 365.24356 346.20456 372.407 337.368 372.407 L 275.368 372.407 C 266.53144 372.407 259.368 365.24356 259.368 356.407 L 259.368 275.358 C 259.368 266.52144 266.53144 259.358 275.368 259.358 Z" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 26.8252 54.5645 L 26.8252 19.3645 C 26.8252 16.9357 37.5772 14.9645 50.8252 14.9645 C 64.0732 14.9645 74.8252 16.9357 74.8252 19.3645 L 74.8252 54.5645 C 74.8252 56.9933 64.0732 58.9645 50.8252 58.9645 C 37.5772 58.9645 26.8252 56.9933 26.8252 54.5645" fill="white"/><path d="M 26.8252 54.5645 L 26.8252 19.3645 C 26.8252 16.9357 37.5772 14.9645 50.8252 14.9645 C 64.0732 14.9645 74.8252 16.9357 74.8252 19.3645 L 74.8252 54.5645 C 74.8252 56.9933 64.0732 58.9645 50.8252 58.9645 C 37.5772 58.9645 26.8252 56.9933 26.8252 54.5645 M 26.8252 19.3645 C 26.8252 21.7933 37.5772 23.7645 50.8252 23.7645 C 64.0732 23.7645 74.8252 21.7933 74.8252 19.3645" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(31.8252 32.1645)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="1.328125" y="11" textLength="35.34375">*.class</tspan></text><rect x="494.553" y="61.0215" width="121.415" height="28" fill="white"/><rect x="494.553" y="61.0215" width="121.415" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(499.553 61.0215)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="99.375">Instruction ifeq(tgt)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan></text><rect x="494.553" y="35.0215" width="121.415" height="26" fill="white"/><rect x="494.553" y="35.0215" width="121.415" height="26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(499.553 35.0215)" fill="#404040"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#404040" x="30.96873" y="10" textLength="49.47754">«interface»</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="3.0346484" y="23" textLength="105.3457">InstructionFactory</tspan></text><rect x="639.695" y="200.846" width="61.7822" height="28" fill="white"/><rect x="639.695" y="200.846" width="61.7822" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(644.695 207.846)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="20.890123" y="11" textLength="10.001953">...</tspan></text><line x1="555.26" y1="152.712" x2="555.26028" y2="102.5215" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 304.67782 189.418 L 304.67782 182.418 L 304.67782 151.623 L 308.217 151.623 L 666.902 151.623 L 669.7412 151.623 L 669.7412 193.34685 L 669.7412 200.34685" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="515.096" y1="189.418" x2="515.93555" y2="151.623" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="352.606" y="107.24" width="121.415" height="14" fill="white"/><rect x="352.606" y="107.24" width="121.415" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(357.606 107.24)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="108.714844">Instruction execute()</tspan></text><rect x="352.606" y="93.2401" width="121.415" height="14" fill="white"/><rect x="352.606" y="93.2401" width="121.415" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(357.606 93.2401)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="24.708477" y="11" textLength="61.998047">Instruction</tspan></text><g filter="url(#Shadow)"><rect x="275.683" y="314.395" width="61.7822" height="28" fill="white"/><rect x="275.683" y="314.395" width="61.7822" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(280.683 321.395)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="11.8901234" y="11" textLength="28.001953">IFEQ</tspan></text></g><g filter="url(#Shadow)"><rect x="485.885" y="314.395" width="61.7822" height="28" fill="white"/><rect x="485.885" y="314.395" width="61.7822" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(490.885 321.395)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="11.8901234" y="11" textLength="28.001953">IFEQ</tspan></text></g><g filter="url(#Shadow)"><rect x="275.427" y="270.568" width="61.7822" height="28" fill="white"/><rect x="275.427" y="270.568" width="61.7822" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(280.427 277.568)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="20.890123" y="11" textLength="10.001953">...</tspan></text></g><g filter="url(#Shadow)"><rect x="485.885" y="270.857" width="61.7822" height="28" fill="white"/><rect x="485.885" y="270.857" width="61.7822" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(490.885 277.857)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="20.890123" y="11" textLength="10.001953">...</tspan></text></g><path d="M 246.11 247.41 L 245.412 327.791 L 265.2835 327.98724" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4,4"/><line x1="245.776" y1="285.8723" x2="265.02941" y2="285.4575" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4,4"/><path d="M 578.975 247.41 L 578.337 328.532 L 558.06717 328.4869" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4,4"/><line x1="578.68897" y1="283.77946" x2="558.06563" y2="284.1384" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4,4"/><path d="M 414.287 327.791 L 413.53368 157.12295 C 419.03363 157.09867 418.98507 146.09878 413.48513 146.12305 L 413.43488 134.73987" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="337.9652" y1="328.21897" x2="414.287" y2="327.791" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="485.385" y1="328.21" x2="414.287" y2="327.791" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(149.162 384.451)" fill="blue"><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="79.21289">Instruction </tspan><tspan font-family="Courier" font-size="11" font-weight="bold" fill="blue" x="79.21289" y="10" textLength="46.20752">execute</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="125.42041" y="10" textLength="39.606445"> (){..</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="23" textLength="151.82471">  cond = popCondition()</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="36" textLength="72.611816">  if (cond)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="49" textLength="138.62256">    return jumpTarget</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="62" textLength="39.606445">  else</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="75" textLength="158.42578">    return getNextInsn()</tspan></text><path d="M 329.824 76.4422 L 412.748 76.4422 L 412.87469 83.34177" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="216.085" y="82.7095" width="113.739" height="14" fill="white"/><rect x="216.085" y="82.7095" width="113.739" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(221.085 82.7095)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="78.708984">setCode(code)</tspan></text><rect x="216.085" y="54.7095" width="113.739" height="28" fill="white"/><rect x="216.085" y="54.7095" width="113.739" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(221.085 54.7095)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="36.011719">factory</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="91.38281">Instruction[] code</tspan></text><rect x="216.085" y="40.7095" width="113.739" height="14" fill="white"/><rect x="216.085" y="40.7095" width="113.739" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(221.085 40.7095)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="19.546258" y="11" textLength="64.646484">MethodInfo</tspan></text><line x1="329.824" y1="62.127" x2="484.653" y2="62.054543" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="74.8252" y1="36.9645" x2="93.35158" y2="36.74587" marker-end="url(#StickArrow_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="337.7092" y1="284.6111" x2="485.385" y2="284.8139" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="50.7243" y1="176.837" x2="717.844" y2="176.837" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="16,9,1,9"/><text transform="translate(53.112 183.541)" fill="red"><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x=".23876953" y="12" textLength="31.875977">concr</tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="31.595215" y="12" textLength="132.166016">ete execution semantics</tspan></text><text transform="translate(53.612 153.212)" fill="red"><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x=".130859375" y="12" textLength="161.73828">abstract execution semantics</tspan></text><text transform="translate(153.46 299.483)" fill="red"><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x=".25439453" y="12" textLength="31.875977">concr</tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="31.61084" y="12" textLength="50.134766">ete value</tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="14.182617" y="28" textLength="53.634766">execution</tspan></text><text transform="translate(592.455 317.551)" fill="red"><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x=".20849609" y="12" textLength="83.58301">symbolic value</tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="15.182617" y="28" textLength="53.634766">execution</tspan></text><text transform="translate(266.575 349.18)" fill="black"><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" x=".13964844" y="12" textLength="79.720703">instruction set</tspan></text><text transform="translate(414.822 364.88)" fill="blue"><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="79.21289">Instruction </tspan><tspan font-family="Courier" font-size="11" font-weight="bold" fill="blue" x="79.21289" y="10" textLength="46.20752">execute</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="125.42041" y="10" textLength="33.005371">(){..</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="23" textLength="158.42578">  if (!firstStepInsn()){</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="36" textLength="250.84082">    setNextCG(new PCChoiceGenerator())</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="49" textLength="99.016113">    return this</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="62" textLength="19.803223">  }</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="75" textLength="224.43652">  popCondition() // not interested</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="88" textLength="211.23438">  cond = getCG().getNextChoice()</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="101" textLength="99.016113">  if (cond){...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="114" textLength="138.62256">    return jumpTarget</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="127" textLength="85.813965">  } else {...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="140" textLength="158.42578">    return getNextInsn()</tspan></text><text transform="translate(617.76 80.3873)" fill="red"><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="7.2963867" y="12" textLength="22.16211">per </tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="29.458496" y="11.753906" textLength="3.5"> </tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x="32.958496" y="12" textLength="49.745117">bytecode</tspan><tspan font-family="Times New Roman" font-size="14" font-style="italic" font-weight="500" fill="red" x=".091308594" y="28" textLength="89.817383">factory methods</tspan></text><rect x="232.381" y="215.418" width="139.537" height="28" fill="white"/><rect x="232.381" y="215.418" width="139.537" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(237.381 215.418)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="99.375">Instruction ifeq(tgt)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan></text><rect x="232.381" y="189.418" width="139.537" height="26" fill="white"/><rect x="232.381" y="189.418" width="139.537" height="26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(237.381 189.418)" fill="#404040"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#404040" x="7.3270938" y="10" textLength="16.123047">gov</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#404040" x="22.712836" y="10" textLength="99.49707">.nasa.jpf.jvm.bytecode</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="12.0956484" y="23" textLength="105.3457">InstructionFactory</tspan></text><rect x="429.84" y="215.418" width="174" height="28" fill="white"/><rect x="429.84" y="215.418" width="174" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(434.84 215.418)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="99.375">Instruction ifeq(tgt)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan></text><rect x="429.84" y="189.418" width="174" height="26" fill="white"/><rect x="429.84" y="189.418" width="174" height="26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(434.84 189.418)" fill="#404040"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#404040" x="39.5708" y="10" textLength="16.123047">gov</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#404040" x="54.956543" y="10" textLength="69.472656">.nasa.jpf.symbc</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="2.6523438" y="23" textLength="158.69531">SymbolicInstructionFactory</tspan></text><text transform="translate(12.40741 223.195)" fill="blue"><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="79.21289">Instruction </tspan><tspan font-family="Courier" font-size="11" font-weight="bold" fill="blue" x="79.21289" y="10" textLength="26.404297">ifeq</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="105.61719" y="10" textLength="112.21826">(int jumpTarget){</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="23" textLength="191.43115">  return new IFEQ(jumpTarget)</tspan></text><rect x="101.651" y="55.837" width="84.557" height="14" fill="white"/><rect x="101.651" y="55.837" width="84.557" height="14" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(106.651 55.837)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="10.2726406" y="11" textLength="54.01172">ClassInfo</tspan></text><rect x="101.651" y="29.149" width="84.557" height="14" fill="white"/><rect x="101.651" y="29.149" width="84.557" height="14" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(106.651 29.149)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="10.93182" y="11" textLength="52.69336">ClassFile</tspan></text><rect x="101.651" y="83.6054" width="84.557" height="14" fill="white"/><rect x="101.651" y="83.6054" width="84.557" height="14" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(106.651 83.6054)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="1.6095547" y="11" textLength="71.33789">CodeBuilder</tspan></text><line x1="215.602" y1="62.1806" x2="194.508" y2="62.1806" marker-end="url(#StickArrow_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="186.208" y1="90.6054" x2="207.785" y2="90.6054" marker-end="url(#StickArrow_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.01023" y1="43.149" x2="144.06628" y2="48.008652" marker-end="url(#StickArrow_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="143.92952" y1="69.837" x2="143.92953" y2="75.3054" marker-end="url(#StickArrow_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="345.178" y="20.3772" width="84.557" height="14" fill="white"/><rect x="345.178" y="20.3772" width="84.557" height="14" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(350.178 20.3772)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="18.285336" y="11" textLength="30.65625">Confi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="48.941586" y="11" textLength="7.330078">g</tspan></text><path d="M 387.45665 34.3772 L 387.457 51.2746 L 338.124 51.2746" marker-end="url(#StickArrow_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(435.518 12.0618)" fill="blue"><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="165.02686">vm.insn_factory.class=...</tspan></text></g></g></svg>
diff --git a/docs/graphics/cg-impl.svg b/docs/graphics/cg-impl.svg
new file mode 100644 (file)
index 0000000..07a14cb
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="5 12 774 590" width="774pt" height="590pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-02 07:14:49 +0000</dc:date></metadata><defs><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="black"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="539.55078" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="bold"><font-face-src><font-face-name name="Helvetica-BoldOblique"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="1176.0376"/><g><title>Layer 1</title><path d="M 624 341 L 640 341 L 640 441.1" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(42.3333 21.6667)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="129.62109">initNextTransition</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="129.62109" y="11" textLength="43.20703">(){...</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="115.21875">  curCg = nextCg</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="108.01758">  nextCg = null</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="53" textLength="122.41992">  curCg.advance()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="67" textLength="144.02344">   ..setExecThread()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="81" textLength="36.00586">  ...</tspan></text><text transform="translate(19.7895 260)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="122.41992">executeTransition</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="122.41992" y="11" textLength="36.00586">(){..</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="172.82812">  isFirstStepInsn = true</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="158.42578">  while (pc != null) {</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="53" textLength="237.63867">    nextPc = executeInstruction()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="67" textLength="208.83398">    if (ss.breakTransition())</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="81" textLength="79.21289">      break</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="95" textLength="57.609375">    else</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="109" textLength="122.41992">      pc = nextPc</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="123" textLength="194.43164">    isFirstStepInsn = false</tspan></text><text transform="translate(252.667 349.409)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="64.810547">execute()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="64.810547" y="11" textLength="21.603516">{..</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="180.0293">  if (!ti.isFirstStepInsn</tspan><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="180.0293" y="25" textLength="14.402344">()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="194.43164" y="25" textLength="21.603516">) {</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="180.0293">    ChoiceGenerator cg = </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="53" textLength="259.24219">          ..createMonitorEnterCG(..)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="67" textLength="144.02344">    if (cg != null){</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="81" textLength="252.04102">      ss.setNextChoiceGenerator(cg)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="95" textLength="194.43164">      return this // repeat</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="109" textLength="21.603516">  }</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="137" textLength="93.615234">  ei.lock(ti)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="151" textLength="165.62695">  return getNextPc(ti);</tspan></text><rect x="458.041" y="280.5" width="90" height="14" fill="white"/><rect x="458.041" y="280.5" width="90" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(463.041 280.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="50.021484">execute()</tspan></text><rect x="458.041" y="266.5" width="90" height="14" fill="white"/><rect x="458.041" y="266.5" width="90" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(463.041 266.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="9.0009766" y="11" textLength="61.998047">Instruction</tspan></text><rect x="254" y="65" width="152" height="42" fill="white"/><rect x="254" y="65" width="152" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(259 65)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="47.34375">initNextT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="46.904297" y="11" textLength="53.34961">ransition()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="37.347656">breakT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="36.908203" y="25" textLength="53.34961">ransition()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="140.05664">setNextChoiceGenerator()</tspan></text><rect x="254" y="37" width="152" height="28" fill="white"/><rect x="254" y="37" width="152" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(259 37)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="38.021484">nextCg</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="32.009766">curCg</tspan></text><rect x="254" y="23" width="152" height="14" fill="white"/><rect x="254" y="23" width="152" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(259 23)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="34.982422" y="11" textLength="72.035156">SystemState</tspan></text><rect x="547.541" y="60" width="113.459" height="28" fill="white"/><rect x="547.541" y="60" width="113.459" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(552.541 60)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="98.033203">hasMoreChoices()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="53.361328">advance()</tspan></text><rect x="547.541" y="46" width="113.459" height="14" fill="white"/><rect x="547.541" y="46" width="113.459" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(552.541 46)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="3.0498125" y="11" textLength="97.359375">ChoiceGenerator</tspan></text><rect x="472" y="153" width="101" height="14" fill="white"/><rect x="472" y="153" width="101" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(477 153)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="86.70117">getNextChoice()</tspan></text><rect x="472" y="139" width="101" height="14" fill="white"/><rect x="472" y="139" width="101" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(477 139)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="52.03711">threadSet</tspan></text><rect x="472" y="125" width="101" height="14" fill="white"/><rect x="472" y="125" width="101" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(477 125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="16.496094" y="11" textLength="58.007812">ThreadCG</tspan></text><rect x="596" y="153" width="101" height="14" fill="white"/><rect x="596" y="153" width="101" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(601 153)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="86.70117">getNextChoice()</tspan></text><rect x="596" y="139" width="101" height="14" fill="white"/><rect x="596" y="139" width="101" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(601 139)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="54.046875">doubleSet</tspan></text><rect x="596" y="125" width="101" height="14" fill="white"/><rect x="596" y="125" width="101" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(601 125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="16.167969" y="11" textLength="58.664062">DoubleCG</tspan></text><rect x="713.438" y="125" width="54" height="18" fill="white"/><rect x="713.438" y="125" width="54" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(718.438 127)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="16.999023" y="11" textLength="10.001953">...</tspan></text><rect x="495" y="190" width="54" height="18" fill="white"/><rect x="495" y="190" width="54" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(500 192)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="16.999023" y="11" textLength="10.001953">...</tspan></text><rect x="85.4035" y="207" width="118" height="42" fill="white"/><rect x="85.4035" y="207" width="118" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(90.4035 207)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="49.359375">executeT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="48.919922" y="11" textLength="53.34961">ransition()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="105.38086">executeInstruction()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="87.35156">isFirstStepInsn()</tspan></text><rect x="85.4035" y="193" width="118" height="14" fill="white"/><rect x="85.4035" y="193" width="118" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(90.4035 193)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="64.04297">{pc, nextPc}</tspan></text><rect x="85.4035" y="179" width="118" height="14" fill="white"/><rect x="85.4035" y="179" width="118" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(90.4035 179)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="23.000977" y="11" textLength="61.998047">ThreadInfo</tspan></text><line x1="609.041" y1="112" x2="609.041" y2="101.5" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 521.57353 125 L 521 112 L 740.403 112 L 740.438 125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="646.4202" y1="125" x2="646.3708" y2="112" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="522" y1="190.257" x2="522" y2="179.757" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="366.5" y="327.5" width="90" height="18" fill="white"/><rect x="366.5" y="327.5" width="90" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(371.5 329.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="2.6699219" y="11" textLength="74.660156">MonitorEnter</tspan></text><rect x="553.5" y="327.5" width="68" height="18" fill="white"/><rect x="553.5" y="327.5" width="68" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(558.5 329.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="6.658203" y="11" textLength="44.683594">Invoke..</tspan></text><rect x="476.703" y="327.5" width="54" height="18" fill="white"/><rect x="476.703" y="327.5" width="54" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(481.703 329.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="16.999023" y="11" textLength="10.001953">...</tspan></text><line x1="503.5" y1="318.5" x2="503.5" y2="308" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 411.5 327.5 L 411.5 318.5 L 587.458 318.5 L 587.5 327.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="503.703" y1="327.5" x2="503.87076" y2="318.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="573.5" y="363.833" width="83" height="18" fill="white"/><rect x="573.5" y="363.833" width="83" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(578.5 365.833)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="4.1767578" y="11" textLength="64.646484">MethodInfo</tspan></text><rect x="591.5" y="399.833" width="83" height="18" fill="white"/><rect x="591.5" y="399.833" width="83" height="18" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(596.5 401.833)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="5.4804688" y="11" textLength="62.039062">NativePeer</tspan></text><text transform="translate(463.041 446)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="160.0957">e.g. JPF_gov_nasa_jpf_vm_V</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="159.43945" y="11" textLength="22.669922">erify</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="181.22461" y="11" textLength="91.39453">.getBoolean(env)</tspan></text><line x1="210" y1="469.665" x2="362" y2="469.665" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="8,4,1,4"/><text transform="translate(35 434.665)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="bold" fill="red" x="0" y="11" textLength="43.32422">top half</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="43.32422" y="11" textLength="81.38672">: executed on fi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="124.71094" y="11" textLength="70.69922">rst invocation</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="208.78125">optionally sets next CG and reexecutes</tspan></text><text transform="translate(35 475.665)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="bold" fill="red" x="0" y="11" textLength="65.320312">bottom half</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="65.320312" y="11" textLength="124.722656">: executed on revisit (or</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="187.42969">if no CG created because of policy)</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="39" textLength="165.43945">does semantic action based on</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="53" textLength="102.703125">current CGs choice</tspan></text><line x1="585" y1="131" x2="586" y2="246" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="8,4,1,4"/><text transform="translate(468 224)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="101.396484">scheduling choices</tspan></text><text transform="translate(601.5 224)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="127.41211">data acquisition choices</tspan></text><path d="M 700 163 L 747 163 L 747 546.1" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><line x1="406" y1="71" x2="537.641" y2="71" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 194 249 C 222 278.6667 258.6663 285.99975 307.333 289.333 C 352.12157 292.40069 408.50888 290.38684 448.14126 290.04641" marker-end="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><circle cx="263.333" cy="171" r="8.000013" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(261.933 164)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="6.673828">1</tspan></text><circle cx="314.667" cy="277.333" r="8.000013" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(313.267 270.333)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="6.673828">2</tspan></text><circle cx="374.5" cy="207.333" r="8.000013" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(373.1 200.333)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="6.673828">3</tspan></text><line x1="426.041" y1="531.45" x2="585" y2="531.45" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="8,4,1,4"/><text transform="translate(424.333 511.333)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="39.363281">top half</tspan></text><text transform="translate(423.667 536.333)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="36.685547">bottom</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="19.347656">half</tspan></text><text transform="translate(465 466.95)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="194.43164">if (!ti.isFirstStepInsn()){</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="158.42578">  cg = new BooleanCG()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="223.23633">  ss.setNextChoiceGenerator(cg)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="53" textLength="194.43164">  env.repeatInvocation() ..</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="81" textLength="57.609375">} else {</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="95" textLength="216.03516">  cg = ss.getChoiceGenerator()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="109" textLength="288.04688">  return ((BooleanCG)cg).getNextChoice()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="123" textLength="7.201172">}</tspan></text><text transform="translate(56 126.333)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="108.01758">breakTransition</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="108.01758" y="11" textLength="43.20703">(){...</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="165.62695">  return nextCg != null</tspan></text><path d="M 301.333 106 C 299.99966 155.3333 295.3337 164.6667 280.667 179 C 267.09314 192.2653 251.8064 204.10311 213.1948 210.54982" marker-end="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 458.041 277.333 C 382.6786 281.99966 361.33353 214.0001 353 187.667 C 345.40257 163.6599 344.73164 148.240585 344.60825 115.9" marker-end="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/></g></g></svg>
diff --git a/docs/graphics/cg-motivation.svg b/docs/graphics/cg-motivation.svg
new file mode 100644 (file)
index 0000000..e8c750c
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="36 72 668 428" width="668pt" height="428pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2010-02-22 05:27:10 +0000</dc:date></metadata><defs><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 0 M 0 -3 L 8 0 L 0 3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker_2" viewBox="-9 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M -8 0 L 0 0 M 0 3 L -8 0 L 0 -3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Lucida Grande" font-size="12" panose-1="2 11 6 0 4 5 2 2 2 4" units-per-em="1000" underline-position="-97.65625" underline-thickness="48.828125" slope="0" x-height="530.27344" cap-height="722.65625" ascent="966.7969" descent="-210.9375" font-weight="500"><font-face-src><font-face-name name="LucidaGrande"/></font-face-src></font-face><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Lucida Grande" font-size="14" panose-1="2 11 6 0 4 5 2 2 2 4" units-per-em="1000" underline-position="-97.65625" underline-thickness="48.828125" slope="0" x-height="530.27344" cap-height="722.65625" ascent="966.7969" descent="-210.9375" font-weight="500"><font-face-src><font-face-name name="LucidaGrande"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><line x1="401.4" y1="354" x2="449.6" y2="354" marker-end="url(#StickArrow_Marker)" marker-start="url(#StickArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="425.5" y1="331" x2="425.5" y2="364" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="440.5" y1="338" x2="440.5" y2="364" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="410.5" y1="338" x2="410.5" y2="364" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(412 316)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".38085938" y="12" textLength="7.330078">T</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="7.5" y="12" textLength="9.919922"> ±</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="17.419922" y="12" textLength="12.199219"> Δ</tspan></text><circle cx="425.5" cy="354" r="3.0000048" fill="white"/><circle cx="425.5" cy="354" r="3.0000048" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="440.5" cy="354" r="3.0000048" fill="white"/><circle cx="440.5" cy="354" r="3.0000048" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="410.5" cy="354" r="3.0000048" fill="white"/><circle cx="410.5" cy="354" r="3.0000048" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(250.5215 365.55046)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="21.603516">.. </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="295.24805">double v = Verify.getDouble(&quot;velocity&quot;); </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="14.402344">..</tspan></text><text transform="translate(220.02 434.55)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="468.07617">velocity.class = gov.nasa.jpf.jvm.choice.DoubleThresholdGenerator</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="187.23047">velocity.threshold = 13250</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="144.02344">velocity.delta = 500</tspan></text><text transform="translate(132.175 372.129)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".020996094" y="13" textLength="93.95801">application code</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="14.13501" y="29" textLength="65.72998">(test driver)</tspan></text><text transform="translate(50 436)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="32.280518" y="13" textLength="27.459961">confi</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="59.74048" y="13" textLength="50.59082">guration </tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".49780273" y="29" textLength="123.55713">(e.g. mode property fi</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="124.05493" y="29" textLength="14.447266">le)</tspan></text><path d="M 474.5 396 C 475.1666 401.49945 481.8328 409.25033 476.5 412.5 C 471.1672 415.74967 475.91332 414.91673 442.5 415.5 C 409.08668 416.08327 308.41342 414.83345 276 416 C 243.58658 417.16655 250.58307 418.91703 248 422.5 C 246.49657 424.5854 249.56637 427.63104 253.21663 430.79843" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(476.5 345.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".32714844" y="12" textLength="29.683594">C = { </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="29.799805" y="12" textLength="7.330078">T</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="36.473633" y="12" textLength="3.9960938">-</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="40.469727" y="12" textLength="68.203125">Δ, T, T+ Δ }</tspan></text><text transform="translate(77.73514 82.637407)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="136.822266">Verify.getBoolean()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="129.62109">Verify.getInt(0,4)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="67" textLength="180.0293">Verify.getDouble(1.0,1.5)</tspan></text><text transform="translate(267.733 84)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="12" textLength="82.376953">C = { true, false</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="82.376953" y="12" textLength="7.6992188"> }</tspan></text><text transform="translate(267.233 111)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="12" textLength="89.72461">C = { 0, 1, 2, 3, 4</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="89.72461" y="12" textLength="7.6992188"> }</tspan></text><text transform="translate(373.733 83.6349)" fill="red"><tspan font-family="Lucida Grande" font-size="14" font-weight="500" fill="red" x="0" y="14" textLength="10.698242">✓</tspan></text><text transform="translate(374.733 108.635)" fill="red"><tspan font-family="Helvetica" font-size="14" font-weight="bold" fill="red" x="0" y="14" textLength="8.551758">?</tspan></text><text transform="translate(404.733 111)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="279.48633">potentially large sets with lots of uninteresting values</tspan></text><text transform="translate(374.733 135.635)" fill="red"><tspan font-family="Helvetica" font-size="14" font-weight="bold" fill="red" x="0" y="14" textLength="17.103516">??</tspan></text><text transform="translate(404.733 138)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="22.68164">no fi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="22.68164" y="11" textLength="166.08398">nite value set without heuristics</tspan></text><text transform="translate(267.233 138)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="13" textLength="29.683594">C = { </tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="29.683594" y="13" textLength="9.267578">∞</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="38.951172" y="13" textLength="7.6992188"> }</tspan></text><text transform="translate(214.675 327.129)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".3239746" y="13" textLength="144.35205">e.g. &quot;Threshold&quot; heuristic</tspan></text><path d="M 327 180.284 L 327 211.409 L 320 211.409 L 334 221.784 L 348 211.409 L 341 211.409 L 341 180.284 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(202 247.12)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="63.86914" y="14" textLength="125.26172">Choice Generators</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="122.41211" y="31" textLength="8.1757812">+</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x=".09326172" y="48" textLength="35.765625">Confi</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="35.858887" y="48" textLength="217.04785">gurable Heuristic Choice Models</tspan></text><text transform="translate(411 238)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="169.42383">JPF internal object to store and </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="144.08203">enumerate a set of choices</tspan></text><text transform="translate(468 283)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="25.347656">confi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="25.347656" y="11" textLength="96.720703">gurable classes to</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="182.09766">create ChoiceGenerator instances</tspan></text><rect x="107" y="225.12" width="140" height="43" fill="white"/><rect x="107" y="225.12" width="140" height="43" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112 225.12)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="98.033203">hasMoreChoices()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="53.361328">advance()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="40" textLength="90.035156">getNextChoice() </tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="90.035156" y="40" textLength="12">→</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="102.035156" y="40" textLength="9.3339844"> x</tspan></text><rect x="107" y="211.12" width="140" height="14" fill="white"/><rect x="107" y="211.12" width="140" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112 211.12)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="73.382812">choiceSet: {x}</tspan></text><rect x="107" y="197.12" width="140" height="14" fill="white"/><rect x="107" y="197.12" width="140" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112 197.12)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="12.9833984" y="11" textLength="104.033203">xChoiceGenerator</tspan></text></g></g></svg>
diff --git a/docs/graphics/cg-ontology.svg b/docs/graphics/cg-ontology.svg
new file mode 100644 (file)
index 0000000..fab55e3
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="131 133 625 388" width="625pt" height="388pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2010-02-22 02:58:46 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation=".48301078"/><feOffset in="blur" result="offset" dx="1" dy="1"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Courier" font-size="13" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id139_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id140_Graphic" filter="url(#Shadow)"/></g><path d="M 284.70481 177.8364 L 284.70481 177.8364 C 294.09105 185.10919 295.80434 198.61399 288.53156 208.00022 C 288.53156 208.00022 288.53156 208.00022 288.53156 208.00022 L 231.091 282.13285 C 223.81822 291.51909 210.31342 293.23238 200.92719 285.9596 L 200.92719 285.9596 C 191.54095 278.68681 189.82766 265.18201 197.10044 255.79578 L 254.541 181.66315 C 261.81378 172.27691 275.31858 170.56362 284.70481 177.8364 C 284.70481 177.8364 284.70481 177.8364 284.70481 177.8364 Z" fill="#ffccc3" fill-opacity=".25"/><path d="M 284.70481 177.8364 L 284.70481 177.8364 C 294.09105 185.10919 295.80434 198.61399 288.53156 208.00022 C 288.53156 208.00022 288.53156 208.00022 288.53156 208.00022 L 231.091 282.13285 C 223.81822 291.51909 210.31342 293.23238 200.92719 285.9596 L 200.92719 285.9596 C 191.54095 278.68681 189.82766 265.18201 197.10044 255.79578 L 254.541 181.66315 C 261.81378 172.27691 275.31858 170.56362 284.70481 177.8364 C 284.70481 177.8364 284.70481 177.8364 284.70481 177.8364 Z" stroke="#ff97a0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id139_Graphic"><circle cx="269.28125" cy="195.78125" r="18.281279" fill="white"/><circle cx="269.28125" cy="195.78125" r="18.281279" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id140_Graphic"><circle cx="215.5" cy="267.5" r="15.500025" fill="white"/><circle cx="215.5" cy="267.5" r="15.500025" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="258.01217" y1="210.80888" x2="225.10027" y2="254.69777" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(145.432 221)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".19897461" y="13" textLength="7.940918">T</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="7.6638184" y="13" textLength="49.137207">ransition</tspan></text><rect x="231" y="217" width="75" height="11" fill="blue" fill-opacity=".14"/><rect x="231" y="217" width="75" height="11" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(253.562 187)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".3227539" y="13" textLength="30.354492">State</tspan></text><text transform="translate(312.5 213)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".21044922" y="14" textLength="43.579102">Choice</tspan></text><line x1="267" y1="144" x2="268.45463" y2="177.01808" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 205.51021 279.9999 L 183.932 307 L 183.932 307 L 183.932 307" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="224.25289" y1="280.89727" x2="240" y2="305" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="276.61163" y1="213.07815" x2="294.378" y2="255" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(360.562 248)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="116.74414">Scheduling Choice</tspan></text><text transform="translate(360.562 343)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="77.041016">Data Choice</tspan></text><text transform="translate(405.562 361)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="13" textLength="249.64062">boolean b = Verify.getBoolean();</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="29" textLength="335.45459">double d = Verify.getDouble(&quot;MyHeuristic&quot;);</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="45" textLength="15.602539">..</tspan></text><text transform="translate(405.562 268)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="13" textLength="171.62793">synchronized (..) {..}</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="29" textLength="70.211426">wait (..)</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="45" textLength="140.42285">x = mySharedObject</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="61" textLength="15.602539">..</tspan></text><text transform="translate(360.562 424)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="92.59961">Control Choice</tspan></text><text transform="translate(405.562 448)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="13" textLength="109.217773">if (&lt;cond&gt;) ..</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="29" textLength="210.63428">INVOKECG.setInvocations(..)</tspan><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="0" y="45" textLength="15.602539">..</tspan></text><path d="M 332.571 233.32 L 332.571 433.328 L 355.562 433.328" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="333.347" y1="256.576" x2="355.562" y2="256.576" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="332.571" y1="351.929" x2="354.787" y2="351.929" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/docs/graphics/cg-sequence.svg b/docs/graphics/cg-sequence.svg
new file mode 100644 (file)
index 0000000..5e0ff92
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="133 132 503 243" width="503pt" height="243pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2006-05-05 17:02:45 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation=".48301078"/><feOffset in="blur" result="offset" dx="1" dy="1"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 8 8" markerWidth="8" markerHeight="8" color="black"><g><path d="M 5.6000004 0 L 0 -2.1000001 L 0 2.1000001 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="black"><g><path d="M 4.7999992 0 L 0 -1.7999997 L 0 1.7999997 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id4_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id5_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id22_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id7_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id17_Graphic" filter="url(#Shadow)"/></g><path d="M 237.89106 230.97335 L 237.89106 230.97335 C 243.97415 235.39297 245.32265 243.9071 240.90303 249.99018 C 240.90303 249.99018 240.90303 249.99018 240.90303 249.99018 L 213.52887 287.66748 C 209.10925 293.75057 200.59513 295.09907 194.51204 290.67945 L 194.51204 290.67945 C 188.42895 286.25983 187.08045 277.7457 191.50007 271.66262 L 218.87423 233.98532 C 223.29385 227.90223 231.80797 226.55373 237.89106 230.97335 Z" fill="#ffccc3" fill-opacity=".25"/><path d="M 237.89106 230.97335 L 237.89106 230.97335 C 243.97415 235.39297 245.32265 243.9071 240.90303 249.99018 C 240.90303 249.99018 240.90303 249.99018 240.90303 249.99018 L 213.52887 287.66748 C 209.10925 293.75057 200.59513 295.09907 194.51204 290.67945 L 194.51204 290.67945 C 188.42895 286.25983 187.08045 277.7457 191.50007 271.66262 L 218.87423 233.98532 C 223.29385 227.90223 231.80797 226.55373 237.89106 230.97335 Z" stroke="#ff97a0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 197.99853 196.87463 L 197.99853 196.87463 C 203.38779 192.9742 210.91857 194.18114 214.819 199.5704 C 214.819 199.5704 214.819 199.5704 214.819 199.5704 L 240.80254 235.4721 C 244.70297 240.86136 243.49603 248.39214 238.10677 252.29257 L 238.10677 252.29257 C 232.71751 256.193 225.18673 254.98606 221.2863 249.5968 C 221.2863 249.5968 221.2863 249.5968 221.2863 249.5968 L 195.30276 213.6951 C 191.40233 208.30584 192.60927 200.77506 197.99853 196.87463 Z" fill="#ffccc3" fill-opacity=".25"/><path d="M 197.99853 196.87463 L 197.99853 196.87463 C 203.38779 192.9742 210.91857 194.18114 214.819 199.5704 C 214.819 199.5704 214.819 199.5704 214.819 199.5704 L 240.80254 235.4721 C 244.70297 240.86136 243.49603 248.39214 238.10677 252.29257 L 238.10677 252.29257 C 232.71751 256.193 225.18673 254.98606 221.2863 249.5968 C 221.2863 249.5968 221.2863 249.5968 221.2863 249.5968 L 195.30276 213.6951 C 191.40233 208.30584 192.60927 200.77506 197.99853 196.87463 Z" stroke="#ff97a0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id4_Graphic"><circle cx="205.5" cy="207.5" r="10.500017" fill="white"/><circle cx="205.5" cy="207.5" r="10.500017" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id5_Graphic"><circle cx="176.5" cy="241.5" r="10.500017" fill="white"/><circle cx="176.5" cy="241.5" r="10.500017" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id22_Graphic"><circle cx="156.5" cy="280.5" r="10.500017" fill="white"/><circle cx="156.5" cy="280.5" r="10.500017" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id7_Graphic"><circle cx="229.5" cy="240.5" r="10.500017" fill="white"/><circle cx="229.5" cy="240.5" r="10.500017" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="198.36125" y1="215.86957" x2="183.63874" y2="233.13042" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="211.97076" y1="216.39733" x2="223.02918" y2="231.60271" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="171.47923" y1="251.2905" x2="161.52077" y2="270.7095" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id17_Graphic"><circle cx="201.5" cy="280.5" r="10.500017" fill="white"/><circle cx="201.5" cy="280.5" r="10.500017" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="182.43751" y1="250.76253" x2="195.56247" y2="271.23748" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="223.19091" y1="249.51298" x2="207.80908" y2="271.48702" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="233.83421" y1="250.61316" x2="246" y2="279" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(255 275)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><line x1="197.32751" y1="290.68088" x2="189" y2="311" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="237.95824" y1="247.5337" x2="277" y2="280" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="205.49625" y1="290.75125" x2="213" y2="310" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(195 307)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(330 250)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="29.355469">get_fi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="29.355469" y="11" textLength="16.013672">eld</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="74.039062">monitor_enter</tspan></text><text transform="translate(330 197)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="10.001953">...</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="29.355469">get_fi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="29.355469" y="25" textLength="16.013672">eld</tspan></text><text transform="translate(330 316)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="74.039062">monitor_enter</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan></text><path d="M 312 246 L 397 246 C 404.73199 246 411 252.26801 411 260 L 411 282 C 411 289.73199 404.73199 296 397 296 L 312 296 C 304.26801 296 298 289.73199 298 282 L 298 260 C 298 252.26801 304.26801 246 312 246 Z" fill="#ffccc3" fill-opacity=".25"/><path d="M 312 246 L 397 246 C 404.73199 246 411 252.26801 411 260 L 411 282 C 411 289.73199 404.73199 296 397 296 L 312 296 C 304.26801 296 298 289.73199 298 282 L 298 260 C 298 252.26801 304.26801 246 312 246 Z" stroke="#ff97a0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 312 179 L 397 179 C 404.73199 179 411 185.26801 411 193 L 411 215 C 411 222.73199 404.73199 229 397 229 L 312 229 C 304.26801 229 298 222.73199 298 215 L 298 193 C 298 185.26801 304.26801 179 312 179 Z" fill="#ffccc3" fill-opacity=".25"/><path d="M 312 179 L 397 179 C 404.73199 179 411 185.26801 411 193 L 411 215 C 411 222.73199 404.73199 229 397 229 L 312 229 C 304.26801 229 298 222.73199 298 215 L 298 193 C 298 185.26801 304.26801 179 312 179 Z" stroke="#ff97a0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 312 314 L 397 314 C 404.73199 314 411 320.26801 411 328 L 411 350 C 411 357.73199 404.73199 364 397 364 L 312 364 C 304.26801 364 298 357.73199 298 350 L 298 328 C 298 320.26801 304.26801 314 312 314 Z" fill="#ffccc3" fill-opacity=".25"/><path d="M 312 314 L 397 314 C 404.73199 314 411 320.26801 411 328 L 411 350 C 411 357.73199 404.73199 364 397 364 L 312 364 C 304.26801 364 298 357.73199 298 350 L 298 328 C 298 320.26801 304.26801 314 312 314 Z" stroke="#ff97a0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(460.266 141)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="106.61328">ChoiceGenerator</tspan></text><path d="M 386 218 L 456 218 L 456 224.5" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 456 246 L 456 255 L 387.7 255" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(301 193.5)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".2241211" y="14" textLength="8.551758">T</tspan></text><text transform="translate(310 201.5)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".27807617" y="10" textLength="2.4438477">j</tspan></text><text transform="translate(301 259.178)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".2241211" y="14" textLength="8.551758">T</tspan></text><text transform="translate(309 267.178)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="14.985352">j+1</tspan></text><text transform="translate(300 327.178)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".2241211" y="14" textLength="8.551758">T</tspan></text><text transform="translate(308 335.178)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="14.985352">j+2</tspan></text><path d="M 406 287 L 455 287 L 455 293.5" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 455 315 L 455 324 L 412.7 324" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(452 228)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="21">CG</tspan></text><text transform="translate(475.15 236)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="5.5">k</tspan></text><text transform="translate(452 297)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="21">CG</tspan></text><text transform="translate(475.15 305)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="2.4438477">l</tspan></text><text transform="translate(431 200)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="58.68164">setNextCG</tspan></text><text transform="translate(431 256)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="78.708984">getNextChoice</tspan></text><text transform="translate(323.5 141)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="8.551758">T</tspan><tspan font-family="Helvetica" font-size="14" font-weight="500" x="8.0390625" y="14" textLength="52.916992">ransition</tspan></text><text transform="translate(198.707 241.273)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(203.818 238.508)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">1</tspan></text><text transform="translate(205.471 248.397)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(225.2 255.48)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(231.407 251.619)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">2</tspan></text><text transform="translate(231.69 262.33)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(248.814 242.537)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(255.295 238.95)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">3</tspan></text><text transform="translate(255.578 249.661)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(223.631 231.98)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49804688" y="11" textLength="8.0039062">S</tspan></text><text transform="translate(231.712 236.938)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(513.826 231.676)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(518.798 228.5)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">1</tspan></text><text transform="translate(520.589 238.389)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(529.688 231.676)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(535.248 228.5)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">2</tspan></text><text transform="translate(536.451 238.389)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(506.378 228.326)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".32910156" y="13" textLength="4.341797">{</tspan></text><text transform="translate(506.378 296.609)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".32910156" y="13" textLength="4.341797">{</tspan></text><text transform="translate(559.536 228.326)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".32910156" y="13" textLength="4.341797">}</tspan></text><text transform="translate(544.246 296.609)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".32910156" y="13" textLength="4.341797">}</tspan></text><text transform="translate(526.246 232.672)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".33300781" y="11" textLength="3.3339844">,</tspan></text><text transform="translate(495.88 228.328)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".20410156" y="13" textLength="7.591797">=</tspan></text><text transform="translate(495.882 296.807)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".20410156" y="13" textLength="7.591797">=</tspan></text><text transform="translate(181.122 141)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="0" y="14" textLength="32.689453">State</tspan></text><path d="M 595.073 343 L 595.073 238.537 L 583.773 238.537" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(569.537 344.5)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="51.351562">backtrack</tspan></text><text transform="translate(570.537 218.5)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="45.36914">advance</tspan></text><text transform="translate(546.227 231.545)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(551.787 228.369)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">2</tspan></text><text transform="translate(552.99 238.258)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="4.5">k</tspan></text><text transform="translate(542.785 232.541)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".33300781" y="11" textLength="3.3339844">,</tspan></text><text transform="translate(513.076 299.926)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="6">c</tspan></text><text transform="translate(518.048 296.75)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="5.005371">1</tspan></text><text transform="translate(519.839 306.639)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="1.9995117">l</tspan></text><text transform="translate(527.938 299.926)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(525.496 300.922)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".33300781" y="11" textLength="3.3339844">,</tspan></text><text transform="translate(417.5 185.5)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="42.029297">execute</tspan></text><text transform="translate(340.5 159)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="63.375">{Instruction}</tspan></text><text transform="translate(195.631 272.98)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49804688" y="11" textLength="8.0039062">S</tspan></text><text transform="translate(204.712 277.938)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="1.9995117">l</tspan></text></g></g></svg>
diff --git a/docs/graphics/choicegen-example.svg b/docs/graphics/choicegen-example.svg
new file mode 100644 (file)
index 0000000..675ec8d
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="36 72 663 436" width="663pt" height="436pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2006-05-03 17:51:17 +0000</dc:date></metadata><defs><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 0 M 0 -3 L 8 0 L 0 3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker_2" viewBox="-9 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M -8 0 L 0 0 M 0 3 L -8 0 L 0 -3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Lucida Grande" font-size="12" panose-1="2 11 6 0 4 5 2 2 2 4" units-per-em="1000" underline-position="-97.65625" underline-thickness="48.828125" slope="0" x-height="530.27344" cap-height="722.65625" ascent="966.7969" descent="-210.9375" font-weight="500"><font-face-src><font-face-name name="LucidaGrande"/></font-face-src></font-face><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Lucida Grande" font-size="14" panose-1="2 11 6 0 4 5 2 2 2 4" units-per-em="1000" underline-position="-97.65625" underline-thickness="48.828125" slope="0" x-height="530.27344" cap-height="722.65625" ascent="966.7969" descent="-210.9375" font-weight="500"><font-face-src><font-face-name name="LucidaGrande"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><line x1="401.4" y1="354" x2="449.6" y2="354" marker-end="url(#StickArrow_Marker)" marker-start="url(#StickArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="425.5" y1="331" x2="425.5" y2="364" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="440.5" y1="338" x2="440.5" y2="364" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="410.5" y1="338" x2="410.5" y2="364" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(412 316)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".38085938" y="12" textLength="7.330078">T</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="7.5" y="12" textLength="9.919922"> ±</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="17.419922" y="12" textLength="12.199219"> Δ</tspan></text><circle cx="425.5" cy="354" r="3.0000048" fill="white"/><circle cx="425.5" cy="354" r="3.0000048" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="440.5" cy="354" r="3.0000048" fill="white"/><circle cx="440.5" cy="354" r="3.0000048" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="410.5" cy="354" r="3.0000048" fill="white"/><circle cx="410.5" cy="354" r="3.0000048" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(250.5215 365.55046)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="21.603516">.. </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="295.24805">double v = Verify.getDouble(&quot;velocity&quot;); </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="14.402344">..</tspan></text><text transform="translate(220.01942 434.54995)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="230.4375">velocity.class = DoubleThreshold</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="187.23047">velocity.threshold = 13250</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="144.02344">velocity.delta = 500</tspan></text><text transform="translate(132.175 372.129)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".020996094" y="13" textLength="93.95801">application code</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="14.13501" y="29" textLength="65.72998">(test driver)</tspan></text><text transform="translate(50 436)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="32.280518" y="13" textLength="27.459961">confi</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="59.74048" y="13" textLength="50.59082">guration </tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".49780273" y="29" textLength="123.55713">(e.g. mode property fi</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="124.05493" y="29" textLength="14.447266">le)</tspan></text><path d="M 474.5 396 C 475.1666 401.49945 481.8328 409.25033 476.5 412.5 C 471.1672 415.74967 475.91332 414.91673 442.5 415.5 C 409.08668 416.08327 308.41342 414.83345 276 416 C 243.58658 417.16655 250.58307 418.91703 248 422.5 C 246.49657 424.5854 249.56637 427.63104 253.21663 430.79843" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(476.5 345.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".32714844" y="12" textLength="29.683594">C = { </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="29.799805" y="12" textLength="7.330078">T</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="36.473633" y="12" textLength="3.9960938">-</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="40.469727" y="12" textLength="68.203125">Δ, T, T+ Δ }</tspan></text><text transform="translate(77.73514 82.637407)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="136.822266">Verify.getBoolean()</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="129.62109">Verify.getInt(0,4)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="67" textLength="180.0293">Verify.getDouble(1.0,1.5)</tspan></text><text transform="translate(267.733 84)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="12" textLength="82.376953">C = { true, false</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="82.376953" y="12" textLength="7.6992188"> }</tspan></text><text transform="translate(267.233 111)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="12" textLength="89.72461">C = { 0, 1, 2, 3, 4</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="89.72461" y="12" textLength="7.6992188"> }</tspan></text><text transform="translate(373.733 83.6349)" fill="black"><tspan font-family="Lucida Grande" font-size="14" font-weight="500" x="0" y="14" textLength="10.698242">✓</tspan></text><text transform="translate(374.733 108.635)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="0" y="14" textLength="8.551758">?</tspan></text><text transform="translate(404.733 111)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="279.48633">potentially large sets with lots of uninteresting values</tspan></text><text transform="translate(374.733 135.635)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="0" y="14" textLength="17.103516">??</tspan></text><text transform="translate(404.733 138)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="22.68164">no fi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="22.68164" y="11" textLength="166.08398">nite value set without heuristics</tspan></text><text transform="translate(267.233 138)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="13" textLength="29.683594">C = { </tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="29.683594" y="13" textLength="9.267578">∞</tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="38.951172" y="13" textLength="7.6992188"> }</tspan></text><text transform="translate(200.175 327.129)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".0021972656" y="13" textLength="173.99561">e.g. &quot;DoubleThresholdChoice&quot;</tspan></text><path d="M 327 180.284 L 327 211.409 L 320 211.409 L 334 221.784 L 348 211.409 L 341 211.409 L 341 180.284 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(202 247.12)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="63.86914" y="14" textLength="125.26172">Choice Generators</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="122.41211" y="31" textLength="8.1757812">+</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x=".09326172" y="48" textLength="35.765625">Confi</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="35.858887" y="48" textLength="217.04785">gurable Heuristic Choice Models</tspan></text><text transform="translate(411 238)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="169.42383">JPF internal object to store and </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="144.08203">enumerate a set of choices</tspan></text><text transform="translate(468 283)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="25.347656">confi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="25.347656" y="11" textLength="96.720703">gurable classes to</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="182.09766">create ChoiceGenerator instances</tspan></text><rect x="107" y="225.12" width="140" height="43" fill="white"/><rect x="107" y="225.12" width="140" height="43" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112 225.12)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="98.033203">hasMoreChoices()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="53.361328">advance()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="40" textLength="90.035156">getNextChoice() </tspan><tspan font-family="Lucida Grande" font-size="12" font-weight="500" x="90.035156" y="40" textLength="12">→</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="102.035156" y="40" textLength="9.3339844"> x</tspan></text><rect x="107" y="211.12" width="140" height="14" fill="white"/><rect x="107" y="211.12" width="140" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112 211.12)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="73.382812">choiceSet: {x}</tspan></text><rect x="107" y="197.12" width="140" height="14" fill="white"/><rect x="107" y="197.12" width="140" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(112 197.12)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="12.9833984" y="11" textLength="104.033203">xChoiceGenerator</tspan></text></g></g></svg>
diff --git a/docs/graphics/genpeer.svg b/docs/graphics/genpeer.svg
new file mode 100644 (file)
index 0000000..6887428
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="65 35 468 408" width="39pc" height="34pc" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-04 01:29:55 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Monaco" font-size="12" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="576" height="734"/><g><title>Layer 1</title><g><xl:use xl:href="#id1_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id6_Graphic" filter="url(#Shadow)"/></g><g id="id1_Graphic"><path d="M 266.75 164 L 266.75 231.5 L 262 231.5 L 271.5 254 L 281 231.5 L 276.25 231.5 L 276.25 164 Z" fill="white"/><path d="M 266.75 164 L 266.75 231.5 L 262 231.5 L 271.5 254 L 281 231.5 L 276.25 231.5 L 276.25 164 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id6_Graphic"><ellipse cx="271.5" cy="202.5" rx="46.500074" ry="19.500031" fill="white"/><ellipse cx="271.5" cy="202.5" rx="46.500074" ry="19.500031" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(239.3 194)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="4.1829102" y="14" textLength="56.03418">GenPeer</tspan></text></g><text transform="translate(133 44.125)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="100.816406">package x.y.z;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="108.01758">class MyClass {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="44" textLength="36.00586">  ...</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="60" textLength="273.64453">  native String foo (int i, String s);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="76" textLength="7.201172">}</tspan></text><text transform="translate(79 257.125)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="180.0293">class JPF_x_y_z_MyClass {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="36.00586">  ...</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="44" textLength="43.20703">  @MJI</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="60" textLength="108.01758">  public static</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="76" textLength="439.27148">      int foo__ILjava_lang_String__2 (MJIEnv env, int objRef,</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="92" textLength="403.26562">                                      int i, int sRef) {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="108" textLength="187.23047">    int ref = MJIEnv.NULL;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="124" textLength="180.0293">    // &lt;2do&gt; fill in body</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="140" textLength="108.01758">    return ref;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="156" textLength="21.603516">  }</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="172" textLength="7.201172">}</tspan></text><text transform="translate(93.5 147.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x=".21777344" y="11" textLength="48.955078">&quot;java gov</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="48.288086" y="11" textLength="115.39453">.nasa.jpf.GenPeer x.y</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="162.79785" y="11" textLength="213.98438">.z.MyClass &gt; JPF_x_y_z_MyClass.java&quot;</tspan></text></g></g></svg>
diff --git a/docs/graphics/interleavings.svg b/docs/graphics/interleavings.svg
new file mode 100644 (file)
index 0000000..4dfa19e
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="7 283 477 166" width="477pt" height="166pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-11-19 20:18:08 +0000</dc:date></metadata><defs><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Hoefler Text" font-size="14" panose-1="2 3 6 2 5 5 6 2 2 3" units-per-em="1000" underline-position="0" underline-thickness="67.471858" slope="0" x-height="425" cap-height="689.5" ascent="720.99304" descent="-279.00696" font-weight="500"><font-face-src><font-face-name name="HoeflerText-Regular"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="8" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><rect x="116" y="335.875" width="9" height="17" fill="#ceccff"/><rect x="116" y="335.875" width="9" height="17" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="116" y="355.875" width="9" height="21.5" fill="#ceccff"/><rect x="116" y="355.875" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="116" y="388.375" width="9" height="33" fill="#ceccff"/><rect x="116" y="388.375" width="9" height="33" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="148.5" y="335.875" width="9" height="21.5" fill="#ffd1d7"/><rect x="148.5" y="335.875" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="148.5" y="360.375" width="9" height="21.5" fill="#ffd1d7"/><rect x="148.5" y="360.375" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="148.5" y="393.875" width="9" height="21.5" fill="#ffd1d7"/><rect x="148.5" y="393.875" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="184" y="336.375" width="9" height="26.5" fill="#d6ffc8"/><rect x="184" y="336.375" width="9" height="26.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="184" y="365.875" width="9" height="14" fill="#d6ffc8"/><rect x="184" y="365.875" width="9" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="184" y="394.375" width="9" height="21.5" fill="#d6ffc8"/><rect x="184" y="394.375" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(183.5 376)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(148 376.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(115.5 372.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(101 337)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".9411621" y="10" textLength="6.1176758">1</tspan></text><text transform="translate(100.5 361)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".9411621" y="10" textLength="6.1176758">2</tspan></text><text transform="translate(115.5 309.5)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".33105469" y="14" textLength="9.3378906">P</tspan></text><text transform="translate(119.5 318)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="1.49731445" y="9" textLength="5.005371">1</tspan></text><text transform="translate(148.5 309.875)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".33105469" y="14" textLength="9.3378906">P</tspan></text><text transform="translate(152.5 318.375)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="1.49731445" y="9" textLength="5.005371">2</tspan></text><text transform="translate(183.5 309.875)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".33105469" y="14" textLength="9.3378906">P</tspan></text><text transform="translate(187.5 318.375)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x=".75024414" y="9" textLength="6.4995117">N</tspan></text><text transform="translate(101.5 394.375)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".4411621" y="10" textLength="6.1176758">n</tspan></text><text transform="translate(106.5 400.375)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="1.49731445" y="9" textLength="5.005371">1</tspan></text><text transform="translate(135.5 397.375)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".4411621" y="10" textLength="6.1176758">n</tspan></text><text transform="translate(140.5 403.375)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="1.49731445" y="9" textLength="5.005371">2</tspan></text><rect x="254" y="355.875" width="9" height="21.5" fill="#ffd1d7"/><rect x="254" y="355.875" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="254" y="380.375" width="9" height="26.5" fill="#d6ffc8"/><rect x="254" y="380.375" width="9" height="26.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(253.5 402)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(21.5 367.375)" fill="black"><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="14.499" y="13" textLength="10.276">A</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="24.075" y="13" textLength="5.166">t</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="29.031" y="13" textLength="29.47">omic</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x=".121" y="30" textLength="6.188">I</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="5.735" y="30" textLength="23.394">nstr</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="29.479" y="30" textLength="43.4">uctions</tspan></text><text transform="translate(128 292.5)" fill="black"><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x=".175" y="13" textLength="48.65">Threads</tspan></text><rect x="254.5" y="416.375" width="9" height="21.5" fill="#d6ffc8"/><rect x="254.5" y="416.375" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(240 339.5)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".9411621" y="10" textLength="6.1176758">1</tspan></text><text transform="translate(239.5 359)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".9411621" y="10" textLength="6.1176758">2</tspan></text><text transform="translate(257 309.875)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".05517578" y="14" textLength="3.8896484">I</tspan></text><text transform="translate(260 317.5)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="1.49731445" y="9" textLength="5.005371">1</tspan></text><text transform="translate(230.5 418.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".38574219" y="11" textLength="15.228516">∑n</tspan></text><text transform="translate(244.5 426.375)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="3.0002441" y="9" textLength="1.9995117">i</tspan></text><text transform="translate(296.5 309.875)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x=".05517578" y="14" textLength="3.8896484">I</tspan></text><text transform="translate(299.5 317.5)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x=".25146484" y="9" textLength="7.4970703">M</tspan></text><text transform="translate(276.5 310.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(166.5 310.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(170.5 397.375)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".4411621" y="10" textLength="6.1176758">n</tspan></text><text transform="translate(175.5 403.375)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x=".75024414" y="9" textLength="6.4995117">N</tspan></text><rect x="297.5" y="336.375" width="9" height="26.5" fill="#d6ffc8"/><rect x="297.5" y="336.375" width="9" height="26.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="297.5" y="365.375" width="9" height="17" fill="#ceccff"/><rect x="297.5" y="365.375" width="9" height="17" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="254" y="335.875" width="9" height="17" fill="#ceccff"/><rect x="254" y="335.875" width="9" height="17" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="297.5" y="384.875" width="9" height="21.5" fill="#ffd1d7"/><rect x="297.5" y="384.875" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(297 402)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><rect x="298" y="416.375" width="9" height="21.5" fill="#ffd1d7"/><rect x="298" y="416.375" width="9" height="21.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(276.5 364.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(166.5 355.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".49902344" y="11" textLength="10.001953">...</tspan></text><text transform="translate(239.5 292.5)" fill="black"><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x=".224" y="13" textLength="6.188">I</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="5.838" y="13" textLength="12.838">nt</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="18.466" y="13" textLength="28.182">erlea</tspan><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="46.858" y="13" textLength="29.918">vings</tspan></text><path d="M 210.5 369.125 L 224 369.125 L 224 366.375 L 228.5 371.875 L 224 377.375 L 224 374.625 L 210.5 374.625 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(394 355.375)" fill="black"><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="0" y="13" textLength="46.102">(∑    n )!</tspan></text><text transform="translate(397 382.375)" fill="black"><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="0" y="13" textLength="44.674">∏   (n !)</tspan></text><text transform="translate(408 351.375)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="1.1113281" y="8" textLength="5.7773438">N</tspan></text><text transform="translate(406 365.375)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="3.0507812" y="8" textLength="10.8984375">i=1</tspan></text><text transform="translate(426 365.375)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="3.1113281" y="8" textLength="1.7773438">i</tspan></text><text transform="translate(408 379.375)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="1.1113281" y="8" textLength="5.7773438">N</tspan></text><text transform="translate(406 392.375)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="3.0507812" y="8" textLength="10.8984375">i=1</tspan></text><text transform="translate(428 392.375)" fill="black"><tspan font-family="Helvetica" font-size="8" font-weight="500" x="3.1113281" y="8" textLength="1.7773438">i</tspan></text><line x1="380.5" y1="378.375" x2="457" y2="378.375" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(345 368.5)" fill="black"><tspan font-family="Hoefler Text" font-size="14" font-weight="500" x="8.394" y="13" textLength="26.712">M = </tspan></text><rect x="342.5" y="346.375" width="130" height="61.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/docs/graphics/jpf-abstractions.svg b/docs/graphics/jpf-abstractions.svg
new file mode 100644 (file)
index 0000000..b636c6f
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="5 32 709 537" width="709pt" height="537pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-11-26 21:24:31 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="black"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker_2" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="gray"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Monaco" font-size="10" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker" viewBox="-1 -4 9 8" markerWidth="9" markerHeight="8" color="blue"><g><path d="M 6.3999996 0 L 0 0 M 0 -2.3999999 L 6.3999996 0 L 0 2.3999999" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Ball_Marker" viewBox="-6 -4 7 8" markerWidth="7" markerHeight="8" color="blue"><g><circle cx="-2.3999988" cy="0" r="2.3999977" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><rect x="67.3713" y="354" width="232.664" height="103.055" fill="#dee4ff"/><rect x="67.3713" y="354" width="232.664" height="103.055" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="251.917" y="60.5674" width="137.5" height="101.779" fill="#fff9ab"/><rect x="251.917" y="60.5674" width="137.5" height="101.779" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="45" y="191.359" width="261" height="127.641" fill="#aebcff"/><rect x="45" y="191.359" width="261" height="127.641" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="336" y="193" width="367" height="236.266" fill="#a7ffb4"/><rect x="336" y="193" width="367" height="236.266" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="126.92008" y="233.5" width="105.75" height="14" fill="white"/><rect x="126.92008" y="233.5" width="105.75" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(131.92008 233.5)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="47.34375">search ()</tspan></text></g><g filter="url(#Shadow)"><rect x="126.92008" y="219.5" width="105.75" height="14" fill="white"/><rect x="126.92008" y="219.5" width="105.75" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(131.92008 219.5)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="37.330078">VM vm</tspan></text></g><g filter="url(#Shadow)"><rect x="126.92008" y="205.5" width="105.75" height="14" fill="white"/><rect x="126.92008" y="205.5" width="105.75" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(131.92008 205.5)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="red" x="27.862305" y="11" textLength="40.02539">Search</tspan></text></g><line x1="179.49" y1="268.089" x2="179.59506" y2="260.99852" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="353.25" y="219.5" width="105.75" height="42" fill="white"/><rect x="353.25" y="219.5" width="105.75" height="42" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(358.25 219.5)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="51.339844">forward ()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="25" textLength="62.677734">backtrack ()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="39" textLength="76.69336">restoreState ()</tspan></text></g><g filter="url(#Shadow)"><rect x="353.25" y="205.5" width="105.75" height="14" fill="white"/><rect x="353.25" y="205.5" width="105.75" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(358.25 205.5)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="red" x="38.875" y="11" textLength="18">VM</tspan></text></g><g filter="url(#Shadow)"><rect x="60.625" y="289" width="105.75" height="14" fill="white"/><rect x="60.625" y="289" width="105.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(65.625 289)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="47.34375">search ()</tspan></text></g><g filter="url(#Shadow)"><rect x="60.625" y="275" width="105.75" height="14" fill="white"/><rect x="60.625" y="275" width="105.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(65.625 275)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="19.864258" y="11" textLength="56.021484">DFSearch</tspan></text></g><g filter="url(#Shadow)"><rect x="263.917" y="105.328" width="114" height="14" fill="white"/><rect x="263.917" y="105.328" width="114" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(268.917 105.328)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="28.669922">run ()</tspan></text></g><g filter="url(#Shadow)"><rect x="263.917" y="91.3279" width="114" height="14" fill="white"/><rect x="263.917" y="91.3279" width="114" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(268.917 91.3279)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="90.697266">search, vm, confi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="90.697266" y="11" textLength="6.673828">g</tspan></text></g><g filter="url(#Shadow)"><rect x="263.917" y="77.3279" width="114" height="14" fill="white"/><rect x="263.917" y="77.3279" width="114" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(268.917 77.3279)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="red" x="40.996094" y="11" textLength="22.007812">JPF</tspan></text></g><path d="M 263.917 113.349 L 31.6528 111.887 L 31 284 L 43.1 284" marker-end="url(#Arrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 377.917 111.887 L 483.589 111.925 L 483.312 205.5 L 468.9 205.5" marker-end="url(#Arrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><line x1="232.67008" y1="226.5" x2="343.35009" y2="226.04105" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="371.194" y="340.3" width="122" height="28" fill="white"/><rect x="371.194" y="340.3" width="122" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(376.194 340.3)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="49.359375">executeT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="48.919922" y="11" textLength="56.683594">ransition ()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="25" textLength="108.714844">executeInstruction ()</tspan></text></g><g filter="url(#Shadow)"><rect x="371.194" y="326.3" width="122" height="14" fill="white"/><rect x="371.194" y="326.3" width="122" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(376.194 326.3)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="25.000977" y="11" textLength="61.998047">ThreadInfo</tspan></text></g><g filter="url(#Shadow)"><rect x="341.325" y="292.463" width="145" height="28" fill="white"/><rect x="341.325" y="292.463" width="145" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(346.325 292.463)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="74.689453">initializeNextT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="74.25" y="11" textLength="53.34961">ransition()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="25" textLength="74.033203">executeNextT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="73.59375" y="25" textLength="53.34961">ransition()</tspan></text></g><g filter="url(#Shadow)"><rect x="341.325" y="278.463" width="145" height="14" fill="white"/><rect x="341.325" y="278.463" width="145" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(346.325 278.463)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="31.482422" y="11" textLength="72.035156">SystemState</tspan></text></g><g filter="url(#Shadow)"><rect x="591.25" y="232.411" width="82.375" height="20.589" fill="white"/><rect x="591.25" y="232.411" width="82.375" height="20.589" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(596.25 235.7055)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="9.1816406" y="11" textLength="54.01172">ClassInfo</tspan></text></g><g filter="url(#Shadow)"><rect x="605.438" y="258.411" width="82.375" height="20.589" fill="white"/><rect x="605.438" y="258.411" width="82.375" height="20.589" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(610.438 261.7055)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="3.8642578" y="11" textLength="64.646484">MethodInfo</tspan></text></g><g filter="url(#Shadow)"><rect x="606.25" y="284.411" width="82.375" height="20.589" fill="white"/><rect x="606.25" y="284.411" width="82.375" height="20.589" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(611.25 287.7055)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="11.191406" y="11" textLength="49.992188">FieldInfo</tspan></text></g><g filter="url(#Shadow)"><rect x="500.625" y="279.161" width="82.375" height="20.589" fill="white"/><rect x="500.625" y="279.161" width="82.375" height="20.589" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(505.625 282.4555)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="1.8515625" y="11" textLength="68.671875">ElementInfo</tspan></text></g><g filter="url(#Shadow)"><rect x="515.594" y="305.161" width="67.0625" height="20.589" fill="white"/><rect x="515.594" y="305.161" width="67.0625" height="20.589" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(520.594 308.4555)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="11.1933594" y="11" textLength="34.675781">Fields</tspan></text></g><g filter="url(#Shadow)"><rect x="515.938" y="330.161" width="67.0625" height="20.589" fill="white"/><rect x="515.938" y="330.161" width="67.0625" height="20.589" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(520.938 333.4555)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="6.538086" y="11" textLength="43.986328">Monitor</tspan></text></g><g filter="url(#Shadow)"><rect x="485.938" y="251.456" width="82.375" height="20.589" fill="white"/><rect x="485.938" y="251.456" width="82.375" height="20.589" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(490.938 254.7505)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="16.511719" y="11" textLength="39.351562">Statics</tspan></text></g><text transform="translate(374.731 408.79)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".12988281" y="11" textLength="106.740234">bytecode  execution</tspan></text><text transform="translate(611.5 312.411)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".31054688" y="11" textLength="62.378906">type + code</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="18.161133" y="25" textLength="26.677734">mgnt</tspan></text><text transform="translate(536.5 357.572)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".4892578" y="11" textLength="32.021484">object</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".158203125" y="25" textLength="32.683594">model</tspan></text><rect x="251.917" y="43.7905" width="78" height="17.1216" fill="#fff9ab"/><rect x="251.917" y="43.7905" width="78" height="17.1216" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(256.917 45.3513)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="2.0869141" y="11" textLength="19.347656">gov</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="20.549805" y="11" textLength="45.36328">.nasa.jpf</tspan></text><rect x="45" y="173" width="114" height="18" fill="#aebcff"/><rect x="45" y="173" width="114" height="18" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(50 175)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".41113281" y="11" textLength="19.347656">gov</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="18.874023" y="11" textLength="84.714844">.nasa.jpf.search</tspan></text><g filter="url(#Shadow)"><rect x="183.625" y="377.236" width="105.75" height="14" fill="white"/><rect x="183.625" y="377.236" width="105.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(188.625 377.236)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="47.34375">search ()</tspan></text></g><g filter="url(#Shadow)"><rect x="183.625" y="363.236" width="105.75" height="14" fill="white"/><rect x="183.625" y="363.236" width="105.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(188.625 363.236)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="2.1865234" y="11" textLength="91.376953">HeuristicSearch</tspan></text></g><path d="M 113.5 275 L 113.5 268 L 236.5 268 L 236.5 356.236 L 236.5 363.236" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="336" y="175" width="97.375" height="18" fill="#a7ffb4"/><rect x="336" y="175" width="97.375" height="18" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(341 177)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="2.109375" y="11" textLength="19.347656">gov</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="20.572266" y="11" textLength="64.69336">.nasa.jpf.vm</tspan></text><rect x="67.3713" y="336" width="162" height="18" fill="#dee4ff"/><rect x="67.3713" y="336" width="162" height="18" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(72.3713 338)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".40234375" y="11" textLength="19.347656">gov</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="18.865234" y="11" textLength="132.73242">.nasa.jpf.search.heuristic</tspan></text><line x1="236.275" y1="419.43" x2="236.39227" y2="404.73557" marker-end="url(#UMLInheritance_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="396" y="467.057" width="166.625" height="90" fill="#deffe8"/><rect x="396" y="467.057" width="166.625" height="90" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="396" y="449.057" width="162" height="18" fill="#deffe8"/><rect x="396" y="449.057" width="162" height="18" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(401 451.057)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="8.4033203" y="11" textLength="19.347656">gov</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="26.866211" y="11" textLength="116.73047">.nasa.jpf.vm.bytecode</tspan></text><g filter="url(#Shadow)"><rect x="416.125" y="485.057" width="122" height="14" fill="white"/><rect x="416.125" y="485.057" width="122" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(421.125 485.057)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="53.35547">execute ()</tspan></text></g><g filter="url(#Shadow)"><rect x="416.125" y="471.057" width="122" height="14" fill="white"/><rect x="416.125" y="471.057" width="122" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(421.125 471.057)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="25.000977" y="11" textLength="61.998047">Instruction</tspan></text></g><line x1="476.365" y1="520.646" x2="476.3219" y2="512.5568" marker-end="url(#UMLInheritance_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="459.25" y="525.351" width="43" height="18" fill="white"/><rect x="459.25" y="525.351" width="43" height="18" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(464.25 527.351)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="11.4990234" y="11" textLength="10.001953">...</tspan></text></g><rect x="455.25" y="521.351" width="43" height="18" fill="white"/><rect x="455.25" y="521.351" width="43" height="18" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(460.25 523.351)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="11.4990234" y="11" textLength="10.001953">...</tspan></text><path d="M 371.194 347.3 L 353.25 347.55 L 353.25 485.057 L 406.225 485.057" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="251.917" y="274.824" width="43" height="18" fill="white"/><rect x="251.917" y="274.824" width="43" height="18" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(256.917 276.824)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="11.4990234" y="11" textLength="10.001953">...</tspan></text></g><path d="M 235.68224 268 L 272.978 268 L 273.417 274.824" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow)"><rect x="183.4" y="433.43" width="105.75" height="14" fill="white"/><rect x="183.4" y="433.43" width="105.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(188.4 433.43)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="47.34375">search ()</tspan></text></g><g filter="url(#Shadow)"><rect x="183.4" y="419.43" width="105.75" height="14" fill="white"/><rect x="183.4" y="419.43" width="105.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(188.4 419.43)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="10.199219" y="11" textLength="75.351562">BFSHeuristic</tspan></text></g><g filter="url(#Shadow)"><rect x="108" y="419.253" width="43" height="18" fill="white"/><rect x="108" y="419.253" width="43" height="18" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(113 421.253)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="11.4990234" y="11" textLength="10.001953">...</tspan></text></g><path d="M 235.682 410.984 L 129.425 410.984 L 129.5 419.253" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(31 471.057)" fill="blue"><tspan font-family="Monaco" font-size="10" font-weight="500" fill="blue" x="0" y="10" textLength="102.0166">while (notDone) {</tspan><tspan font-family="Monaco" font-size="10" font-weight="500" fill="blue" x="0" y="24" textLength="96.015625"> ..vm.forward();</tspan><tspan font-family="Monaco" font-size="10" font-weight="500" fill="blue" x="0" y="38" textLength="108.01758"> ..vm.backtrack();</tspan><tspan font-family="Monaco" font-size="10" font-weight="500" fill="blue" x="0" y="52" textLength="156.02539"> if (!properties.check()){</tspan><tspan font-family="Monaco" font-size="10" font-weight="500" fill="blue" x="0" y="66" textLength="168.02734">   reportError(); break; ...</tspan></text><path d="M 48.938554 304.05756 C 43.085163 312.15881 30.529805 331.16365 22.8773 354.647 C 12.6393 386.0645 17.02699 410.2525 22.8773 427.469 C 26.786267 438.97245 34.286499 452.55632 39.54308 460.30485" marker-end="url(#StickArrow_Marker)" marker-start="url(#Ball_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(142.526 127.115)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="0" y="13" textLength="90.67627">search.class=...</tspan></text><text transform="translate(405.865 127)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="0" y="13" textLength="68.98633">vm.class=...</tspan></text><g filter="url(#Shadow)"><rect x="396.381" y="390.67" width="105.75" height="14" fill="white"/><rect x="396.381" y="390.67" width="105.75" height="14" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(401.381 390.67)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="gray" x="0" y="11" textLength="85.365234">push (), pop() ...</tspan></text></g><g filter="url(#Shadow)"><rect x="396.381" y="376.67" width="105.75" height="14" fill="white"/><rect x="396.381" y="376.67" width="105.75" height="14" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(401.381 377.67)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="13.855469" y="11" textLength="68.039062">StackFrame</tspan></text></g><g filter="url(#Shadow)"><rect x="292.164" y="131.276" width="82.375" height="20.589" fill="white"/><rect x="292.164" y="131.276" width="82.375" height="20.589" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(297.164 134.5705)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="17.194336" y="11" textLength="30.65625">Confi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="47.850586" y="11" textLength="7.330078">g</tspan></text></g><g filter="url(#Shadow)"><rect x="488.713" y="222.411" width="67.0625" height="20.589" fill="white"/><rect x="488.713" y="222.411" width="67.0625" height="20.589" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(493.713 225.7055)" fill="gray"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="gray" x="13.859375" y="11" textLength="29.34375">Heap</tspan></text></g></g></g></svg>
diff --git a/docs/graphics/jpf-basic.svg b/docs/graphics/jpf-basic.svg
new file mode 100644 (file)
index 0000000..fdfae11
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="162 106 384 214" width="32pc" height="214pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-11-19 18:37:23 +0000</dc:date></metadata><defs><font-face font-family="Helvetica" font-size="18" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-857.14286" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><rect x="299.965" y="117" width="99.4872" height="56.0076" fill="#fffab4"/><rect x="299.965" y="117" width="99.4872" height="56.0076" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(304.965 134.0038)" fill="black"><tspan font-family="Helvetica" font-size="18" font-weight="bold" x="28.23774" y="18" textLength="33.011719">JPF</tspan></text><path d="M 206.06 166.232 L 206.06 123.032 C 206.06 120.0512 218.156 117.632 233.06 117.632 C 247.964 117.632 260.06 120.0512 260.06 123.032 L 260.06 166.232 C 260.06 169.2128 247.964 171.632 233.06 171.632 C 218.156 171.632 206.06 169.2128 206.06 166.232" fill="#dfdbff"/><path d="M 206.06 166.232 L 206.06 123.032 C 206.06 120.0512 218.156 117.632 233.06 117.632 C 247.964 117.632 260.06 120.0512 260.06 123.032 L 260.06 166.232 C 260.06 169.2128 247.964 171.632 233.06 171.632 C 218.156 171.632 206.06 169.2128 206.06 166.232 M 206.06 123.032 C 206.06 126.0128 218.156 128.432 233.06 128.432 C 247.964 128.432 260.06 126.0128 260.06 123.032" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(211.06 139.332)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="2.8554688" y="13" textLength="38.289062">*.class</tspan></text><path d="M 438.51 119.263 L 510.51 119.263 L 510.51 162.463 C 488.91 157.063 460.11 178.663 438.51 167.863 Z" fill="#ffcac7"/><path d="M 438.51 119.263 L 510.51 119.263 L 510.51 162.463 C 488.91 157.063 460.11 178.663 438.51 167.863 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(443.51 135.563)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="14.0200195" y="13" textLength="33.95996">report</tspan></text><path d="M 322.497 264.402 L 322.497 221.202 C 322.497 218.2212 334.593 215.802 349.497 215.802 C 364.401 215.802 376.497 218.2212 376.497 221.202 L 376.497 264.402 C 376.497 267.3828 364.401 269.802 349.497 269.802 C 334.593 269.802 322.497 267.3828 322.497 264.402" fill="#dfdbff"/><path d="M 322.497 264.402 L 322.497 221.202 C 322.497 218.2212 334.593 215.802 349.497 215.802 C 364.401 215.802 376.497 218.2212 376.497 221.202 L 376.497 264.402 C 376.497 267.3828 364.401 269.802 349.497 269.802 C 334.593 269.802 322.497 267.3828 322.497 264.402 M 322.497 221.202 C 322.497 224.1828 334.593 226.602 349.497 226.602 C 364.401 226.602 376.497 224.1828 376.497 221.202" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(327.497 237.502)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x="10.7995605" y="13" textLength="22.400879">*.jpf</tspan></text><text transform="translate(176 185.642)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x=".154296875" y="14" textLength="90.26172">System under </tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="90.16992" y="14" textLength="8.551758">T</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="97.16992" y="14" textLength="18.675781">est</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="8.1967773" y="31" textLength="99.606445">(Java bytecode)</tspan></text><text transform="translate(418.768 185.485)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x=".46923828" y="14" textLength="9.3378906">V</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="9.041504" y="14" textLength="22.558594">erifi</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="31.600098" y="14" textLength="80.930664">cation Result</tspan></text><text transform="translate(290.911 276.286)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="3.4726562" y="14" textLength="61.461914">JPF Confi</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="64.93457" y="14" textLength="50.592773">guration</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x=".35888672" y="31" textLength="92.59961">Properties to V</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="92.19287" y="31" textLength="26.448242">erify</tspan></text><path d="M 266.46 140.155075 L 288.70305 140.155075 L 288.70305 134.628 L 296.1174 145.68215 L 288.70305 156.7363 L 288.70305 151.209225 L 266.46 151.209225 Z" fill="white"/><path d="M 266.46 140.155075 L 288.70305 140.155075 L 288.70305 134.628 L 296.1174 145.68215 L 288.70305 156.7363 L 288.70305 151.209225 L 266.46 151.209225 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 404.611 140.078075 L 426.85405 140.078075 L 426.85405 134.551 L 434.2684 145.60515 L 426.85405 156.6593 L 426.85405 151.132225 L 404.611 151.132225 Z" fill="white"/><path d="M 404.611 140.078075 L 426.85405 140.078075 L 426.85405 134.551 L 434.2684 145.60515 L 426.85405 156.6593 L 426.85405 151.132225 L 404.611 151.132225 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 344.23062 209.36985 L 344.23062 187.1268 L 338.70355 187.1268 L 349.7577 179.71245 L 360.81185 187.1268 L 355.28478 187.1268 L 355.28478 209.36985 Z" fill="white"/><path d="M 344.23062 209.36985 L 344.23062 187.1268 L 338.70355 187.1268 L 349.7577 179.71245 L 360.81185 187.1268 L 355.28478 187.1268 L 355.28478 209.36985 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/docs/graphics/jpf-intro-new.svg b/docs/graphics/jpf-intro-new.svg
new file mode 100644 (file)
index 0000000..56fc211
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="3 18 771 561" width="771pt" height="561pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2009-04-10 01:07:23 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 8 8" markerWidth="8" markerHeight="8" color="blue"><g><path d="M 5.6000004 0 L 0 -2.1000001 L 0 2.1000001 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-7 -4 8 8" markerWidth="8" markerHeight="8" color="blue"><g><path d="M -5.6000004 0 L 0 2.1000001 L 0 -2.1000001 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><filter id="Shadow_2" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" viewBox="-8 -4 9 8" markerWidth="9" markerHeight="8" color="black"><g><path d="M -6.3999996 0 L 0 2.3999999 L 0 -2.3999999 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-923.0769" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="15" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_4" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="blue"><g><path d="M 4 0 L 0 -1.5 L 0 1.5 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_5" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#ff8987"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_6" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id267_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id10_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id312_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id320_Graphic" filter="url(#Shadow)"/></g><line x1="437.4379" y1="41.027123" x2="519.2401" y2="40.616177" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="145.336" y1="40.4099" x2="424.873" y2="40.4099" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 135.678 89.1207 L 493.624 89.1207 C 500.25142 89.1207 505.624 94.493283 505.624 101.1207 L 505.624 477.0257 C 505.624 483.65312 500.25142 489.0257 493.624 489.0257 L 135.678 489.0257 C 129.05058 489.0257 123.678 483.65312 123.678 477.0257 L 123.678 101.1207 C 123.678 94.493283 129.05058 89.1207 135.678 89.1207 Z" fill="white"/><path d="M 135.678 89.1207 L 493.624 89.1207 C 500.25142 89.1207 505.624 94.493283 505.624 101.1207 L 505.624 477.0257 C 505.624 483.65312 500.25142 489.0257 493.624 489.0257 L 135.678 489.0257 C 129.05058 489.0257 123.678 483.65312 123.678 477.0257 L 123.678 101.1207 C 123.678 94.493283 129.05058 89.1207 135.678 89.1207 Z" stroke="#999" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 530.289 141.229 L 734.049 141.229 L 734.049 281.1298 C 672.921 263.6422 591.417 333.5926 530.289 298.6174 Z" fill="white"/><path d="M 530.289 141.229 L 734.049 141.229 L 734.049 281.1298 C 672.921 263.6422 591.417 333.5926 530.289 298.6174 Z" stroke="silver" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(538.789 143.229)" fill="#7e7e7e"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="9" textLength="149.41406">------------------------------------ error path</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="20" textLength="5.0009766">..</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="31" textLength="38.53125">Step #14 </tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="38.373047" y="31" textLength="41.027344">Thread #1</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="42" textLength="193.5791">  oldclassic.java:95           event2.waitForEvent();</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="53" textLength="122.541504">  oldclassic.java:37         wait();</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="75" textLength="163.92041">------------------------------------ thread stacks</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="86" textLength="33.51709">Thread: </tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="33.358887" y="86" textLength="36.518555">Thread-0</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="97" textLength="181.58643">        at java.lang.Object.wait(Object.java:429)</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="108" textLength="184.57471">        at Event.waitForEvent(oldclassic.java:37)</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="119" textLength="27.505371">         ..</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="#7e7e7e" x="0" y="130" textLength="126.140625">========================</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#7e7e7e" x="0" y="142" textLength="114.49707">  1 Error Found: Deadlock</tspan></text><g filter="url(#Shadow_2)"><path d="M 30.1245 156.971 L 226.4705 156.971 C 233.09792 156.971 238.4705 162.34358 238.4705 168.971 L 238.4705 349.105 C 238.4705 355.73242 233.09792 361.105 226.4705 361.105 L 30.1245 361.105 C 23.497083 361.105 18.1245 355.73242 18.1245 349.105 L 18.1245 168.971 C 18.1245 162.34358 23.497083 156.971 30.1245 156.971 Z" fill="#ffd3db"/><path d="M 30.1245 156.971 L 226.4705 156.971 C 233.09792 156.971 238.4705 162.34358 238.4705 168.971 L 238.4705 349.105 C 238.4705 355.73242 233.09792 361.105 226.4705 361.105 L 30.1245 361.105 C 23.497083 361.105 18.1245 355.73242 18.1245 349.105 L 18.1245 168.971 C 18.1245 162.34358 23.497083 156.971 30.1245 156.971 Z" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 146.022 97.9336 L 482.417 97.9336 C 489.04442 97.9336 494.417 103.30618 494.417 109.9336 L 494.417 422.0106 C 494.417 428.63802 489.04442 434.0106 482.417 434.0106 L 146.022 434.0106 C 139.39458 434.0106 134.022 428.63802 134.022 422.0106 L 134.022 109.9336 C 134.022 103.30618 139.39458 97.9336 146.022 97.9336 Z" fill="#fffbbf" fill-opacity=".57"/><path d="M 146.022 97.9336 L 482.417 97.9336 C 489.04442 97.9336 494.417 103.30618 494.417 109.9336 L 494.417 422.0106 C 494.417 428.63802 489.04442 434.0106 482.417 434.0106 L 146.022 434.0106 C 139.39458 434.0106 134.022 428.63802 134.022 422.0106 L 134.022 109.9336 C 134.022 103.30618 139.39458 97.9336 146.022 97.9336 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g filter="url(#Shadow_2)"><path d="M 271.936 111.498 L 305.1668 111.498 C 311.79422 111.498 317.1668 116.87058 317.1668 123.498 L 317.1668 396.268 C 317.1668 402.89542 311.79422 408.268 305.1668 408.268 L 271.936 408.268 C 265.30858 408.268 259.936 402.89542 259.936 396.268 L 259.936 123.498 C 259.936 116.87058 265.30858 111.498 271.936 111.498 Z" fill="white"/><path d="M 271.936 111.498 L 305.1668 111.498 C 311.79422 111.498 317.1668 116.87058 317.1668 123.498 L 317.1668 396.268 C 317.1668 402.89542 311.79422 408.268 305.1668 408.268 L 271.936 408.268 C 265.30858 408.268 259.936 402.89542 259.936 396.268 L 259.936 123.498 C 259.936 116.87058 265.30858 111.498 271.936 111.498 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(264.936 242.883)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="10.7775094" y="14" textLength="25.675781">JPF</tspan><tspan font-family="Helvetica" font-size="14" font-weight="bold" x="7.667158" y="31" textLength="31.896484">Core</tspan></text></g><path d="M 346.726 196.737 L 410.101 196.737 C 414.976 196.737 414.976 196.737 414.976 198.91808 L 414.976 197.82754 C 417.4135 197.82754 417.4135 197.82754 417.4135 200.00862 L 417.4135 198.91808 C 419.851 198.91808 419.851 198.91808 419.851 201.09916 L 419.851 229.45322 C 419.851 231.6343 419.851 231.6343 414.976 231.6343 L 351.601 231.6343 C 346.726 231.6343 346.726 231.6343 346.726 230.54376 C 344.2885 230.54376 344.2885 230.54376 344.2885 229.45322 C 341.851 229.45322 341.851 229.45322 341.851 227.27214 L 341.851 198.91808 C 341.851 196.737 341.851 196.737 346.726 196.737 Z" fill="#fefff6"/><path d="M 346.726 196.737 L 410.101 196.737 C 414.976 196.737 414.976 196.737 414.976 198.91808 L 414.976 227.27214 C 414.976 229.45322 414.976 229.45322 410.101 229.45322 L 346.726 229.45322 C 341.851 229.45322 341.851 229.45322 341.851 227.27214 L 341.851 198.91808 C 341.851 196.737 341.851 196.737 346.726 196.737 M 414.976 197.82754 C 417.4135 197.82754 417.4135 197.82754 417.4135 200.00862 L 417.4135 229.45322 C 417.4135 230.54376 417.4135 230.54376 412.5385 230.54376 L 349.1635 230.54376 C 344.2885 230.54376 344.2885 230.54376 344.2885 229.45322 M 417.4135 198.91808 C 419.851 198.91808 419.851 198.91808 419.851 201.09916 L 419.851 229.45322 C 419.851 231.6343 419.851 231.6343 414.976 231.6343 L 351.601 231.6343 C 346.726 231.6343 346.726 231.6343 346.726 230.54376" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.411 198.35354)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="3.9934375" y="11" textLength="48.703125">bytecode</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="20.341094" y="25" textLength="16.0078125">set</tspan></text><path d="M 346.726 284.892 L 410.101 284.892 C 414.976 284.892 414.976 284.892 414.976 287.07308 L 414.976 285.98254 C 417.4135 285.98254 417.4135 285.98254 417.4135 288.16362 L 417.4135 287.07308 C 419.851 287.07308 419.851 287.07308 419.851 289.25416 L 419.851 317.60822 C 419.851 319.7893 419.851 319.7893 414.976 319.7893 L 351.601 319.7893 C 346.726 319.7893 346.726 319.7893 346.726 318.69876 C 344.2885 318.69876 344.2885 318.69876 344.2885 317.60822 C 341.851 317.60822 341.851 317.60822 341.851 315.42714 L 341.851 287.07308 C 341.851 284.892 341.851 284.892 346.726 284.892 Z" fill="#fefff6"/><path d="M 346.726 284.892 L 410.101 284.892 C 414.976 284.892 414.976 284.892 414.976 287.07308 L 414.976 315.42714 C 414.976 317.60822 414.976 317.60822 410.101 317.60822 L 346.726 317.60822 C 341.851 317.60822 341.851 317.60822 341.851 315.42714 L 341.851 287.07308 C 341.851 284.892 341.851 284.892 346.726 284.892 M 414.976 285.98254 C 417.4135 285.98254 417.4135 285.98254 417.4135 288.16362 L 417.4135 317.60822 C 417.4135 318.69876 417.4135 318.69876 412.5385 318.69876 L 349.1635 318.69876 C 344.2885 318.69876 344.2885 318.69876 344.2885 317.60822 M 417.4135 287.07308 C 419.851 287.07308 419.851 287.07308 419.851 289.25416 L 419.851 317.60822 C 419.851 319.7893 419.851 319.7893 414.976 319.7893 L 351.601 319.7893 C 346.726 319.7893 346.726 319.7893 346.726 318.69876" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.411 286.50854)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="7.336211" y="11" textLength="42.017578">listener/</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.334258" y="25" textLength="44.021484">property</tspan></text><path d="M 346.726 240.755 L 410.101 240.755 C 414.976 240.755 414.976 240.755 414.976 242.93608 L 414.976 241.84554 C 417.4135 241.84554 417.4135 241.84554 417.4135 244.02662 L 417.4135 242.93608 C 419.851 242.93608 419.851 242.93608 419.851 245.11716 L 419.851 273.47122 C 419.851 275.6523 419.851 275.6523 414.976 275.6523 L 351.601 275.6523 C 346.726 275.6523 346.726 275.6523 346.726 274.56176 C 344.2885 274.56176 344.2885 274.56176 344.2885 273.47122 C 341.851 273.47122 341.851 273.47122 341.851 271.29014 L 341.851 242.93608 C 341.851 240.755 341.851 240.755 346.726 240.755 Z" fill="#fefff6"/><path d="M 346.726 240.755 L 410.101 240.755 C 414.976 240.755 414.976 240.755 414.976 242.93608 L 414.976 271.29014 C 414.976 273.47122 414.976 273.47122 410.101 273.47122 L 346.726 273.47122 C 341.851 273.47122 341.851 273.47122 341.851 271.29014 L 341.851 242.93608 C 341.851 240.755 341.851 240.755 346.726 240.755 M 414.976 241.84554 C 417.4135 241.84554 417.4135 241.84554 417.4135 244.02662 L 417.4135 273.47122 C 417.4135 274.56176 417.4135 274.56176 412.5385 274.56176 L 349.1635 274.56176 C 344.2885 274.56176 344.2885 274.56176 344.2885 273.47122 M 417.4135 242.93608 C 419.851 242.93608 419.851 242.93608 419.851 245.11716 L 419.851 273.47122 C 419.851 275.6523 419.851 275.6523 414.976 275.6523 L 351.601 275.6523 C 346.726 275.6523 346.726 275.6523 346.726 274.56176" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.411 242.37154)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="2.329375" y="11" textLength="55.365234">publisher/ </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="18.343047" y="25" textLength="20.003906">-ext</tspan></text><path d="M 346.726 110.242 L 410.101 110.242 C 414.976 110.242 414.976 110.242 414.976 112.42308 L 414.976 111.33254 C 417.4135 111.33254 417.4135 111.33254 417.4135 113.51362 L 417.4135 112.42308 C 419.851 112.42308 419.851 112.42308 419.851 114.60416 L 419.851 142.95822 C 419.851 145.1393 419.851 145.1393 414.976 145.1393 L 351.601 145.1393 C 346.726 145.1393 346.726 145.1393 346.726 144.04876 C 344.2885 144.04876 344.2885 144.04876 344.2885 142.95822 C 341.851 142.95822 341.851 142.95822 341.851 140.77714 L 341.851 112.42308 C 341.851 110.242 341.851 110.242 346.726 110.242 Z" fill="#fefff6"/><path d="M 346.726 110.242 L 410.101 110.242 C 414.976 110.242 414.976 110.242 414.976 112.42308 L 414.976 140.77714 C 414.976 142.95822 414.976 142.95822 410.101 142.95822 L 346.726 142.95822 C 341.851 142.95822 341.851 142.95822 341.851 140.77714 L 341.851 112.42308 C 341.851 110.242 341.851 110.242 346.726 110.242 M 414.976 111.33254 C 417.4135 111.33254 417.4135 111.33254 417.4135 113.51362 L 417.4135 142.95822 C 417.4135 144.04876 417.4135 144.04876 412.5385 144.04876 L 349.1635 144.04876 C 344.2885 144.04876 344.2885 144.04876 344.2885 142.95822 M 417.4135 112.42308 C 419.851 112.42308 419.851 112.42308 419.851 114.60416 L 419.851 142.95822 C 419.851 145.1393 419.851 145.1393 414.976 145.1393 L 351.601 145.1393 C 346.726 145.1393 346.726 145.1393 346.726 144.04876" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.411 111.85854)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="11.00125" y="11" textLength="34.6875">choice</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="2.6604297" y="25" textLength="51.36914">generator</tspan></text><path d="M 346.726 328.15 L 410.101 328.15 C 414.976 328.15 414.976 328.15 414.976 330.33108 L 414.976 329.24054 C 417.4135 329.24054 417.4135 329.24054 417.4135 331.42162 L 417.4135 330.33108 C 419.851 330.33108 419.851 330.33108 419.851 332.51216 L 419.851 360.86622 C 419.851 363.0473 419.851 363.0473 414.976 363.0473 L 351.601 363.0473 C 346.726 363.0473 346.726 363.0473 346.726 361.95676 C 344.2885 361.95676 344.2885 361.95676 344.2885 360.86622 C 341.851 360.86622 341.851 360.86622 341.851 358.68514 L 341.851 330.33108 C 341.851 328.15 341.851 328.15 346.726 328.15 Z" fill="#fefff6"/><path d="M 346.726 328.15 L 410.101 328.15 C 414.976 328.15 414.976 328.15 414.976 330.33108 L 414.976 358.68514 C 414.976 360.86622 414.976 360.86622 410.101 360.86622 L 346.726 360.86622 C 341.851 360.86622 341.851 360.86622 341.851 358.68514 L 341.851 330.33108 C 341.851 328.15 341.851 328.15 346.726 328.15 M 414.976 329.24054 C 417.4135 329.24054 417.4135 329.24054 417.4135 331.42162 L 417.4135 360.86622 C 417.4135 361.95676 417.4135 361.95676 412.5385 361.95676 L 349.1635 361.95676 C 344.2885 361.95676 344.2885 361.95676 344.2885 360.86622 M 417.4135 330.33108 C 419.851 330.33108 419.851 330.33108 419.851 332.51216 L 419.851 360.86622 C 419.851 363.0473 419.851 363.0473 414.976 363.0473 L 351.601 363.0473 C 346.726 363.0473 346.726 363.0473 346.726 361.95676" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.411 329.76654)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="2.6721484" y="11" textLength="51.345703">serializer/</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="7.673125" y="25" textLength="41.34375">restorer</tspan></text><path d="M 154.52 285.36 L 217.895 285.36 C 222.77 285.36 222.77 285.36 222.77 287.54108 L 222.77 286.45054 C 225.2075 286.45054 225.2075 286.45054 225.2075 288.63162 L 225.2075 287.54108 C 227.645 287.54108 227.645 287.54108 227.645 289.72216 L 227.645 318.07622 C 227.645 320.2573 227.645 320.2573 222.77 320.2573 L 159.395 320.2573 C 154.52 320.2573 154.52 320.2573 154.52 319.16676 C 152.0825 319.16676 152.0825 319.16676 152.0825 318.07622 C 149.645 318.07622 149.645 318.07622 149.645 315.89514 L 149.645 287.54108 C 149.645 285.36 149.645 285.36 154.52 285.36 Z" fill="#fefff6"/><path d="M 154.52 285.36 L 217.895 285.36 C 222.77 285.36 222.77 285.36 222.77 287.54108 L 222.77 315.89514 C 222.77 318.07622 222.77 318.07622 217.895 318.07622 L 154.52 318.07622 C 149.645 318.07622 149.645 318.07622 149.645 315.89514 L 149.645 287.54108 C 149.645 285.36 149.645 285.36 154.52 285.36 M 222.77 286.45054 C 225.2075 286.45054 225.2075 286.45054 225.2075 288.63162 L 225.2075 318.07622 C 225.2075 319.16676 225.2075 319.16676 220.3325 319.16676 L 156.9575 319.16676 C 152.0825 319.16676 152.0825 319.16676 152.0825 318.07622 M 225.2075 287.54108 C 227.645 287.54108 227.645 287.54108 227.645 289.72216 L 227.645 318.07622 C 227.645 320.2573 227.645 320.2573 222.77 320.2573 L 159.395 320.2573 C 154.52 320.2573 154.52 320.2573 154.52 319.16676" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(156.205 293.97654)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".31960937" y="11" textLength="56.05078">annotation</tspan></text><line x1="249.343" y1="60.98" x2="249.343" y2="410.723" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="10,3,2,3"/><text transform="translate(130.465 327.122)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".47558594" y="11" textLength="106.04883"> (optional) in-source</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="17.148438" y="25" textLength="72.703125">property spec</tspan></text><path d="M 155.56714 196.608 L 221.63501 196.608 C 226.71716 196.608 226.71716 196.608 226.71716 198.78908 L 226.71716 197.69854 C 229.25823 197.69854 229.25823 197.69854 229.25823 199.87962 L 229.25823 198.78908 C 231.7993 198.78908 231.7993 198.78908 231.7993 200.97016 L 231.7993 229.32422 C 231.7993 231.5053 231.7993 231.5053 226.71716 231.5053 L 160.64929 231.5053 C 155.56714 231.5053 155.56714 231.5053 155.56714 230.41476 C 153.02607 230.41476 153.02607 230.41476 153.02607 229.32422 C 150.485 229.32422 150.485 229.32422 150.485 227.14314 L 150.485 198.78908 C 150.485 196.608 150.485 196.608 155.56714 196.608 Z" fill="#fefff6"/><path d="M 155.56714 196.608 L 221.63501 196.608 C 226.71716 196.608 226.71716 196.608 226.71716 198.78908 L 226.71716 227.14314 C 226.71716 229.32422 226.71716 229.32422 221.63501 229.32422 L 155.56714 229.32422 C 150.485 229.32422 150.485 229.32422 150.485 227.14314 L 150.485 198.78908 C 150.485 196.608 150.485 196.608 155.56714 196.608 M 226.71716 197.69854 C 229.25823 197.69854 229.25823 197.69854 229.25823 199.87962 L 229.25823 229.32422 C 229.25823 230.41476 229.25823 230.41476 224.17608 230.41476 L 158.10822 230.41476 C 153.02607 230.41476 153.02607 230.41476 153.02607 229.32422 M 229.25823 198.78908 C 231.7993 198.78908 231.7993 198.78908 231.7993 200.97016 L 231.7993 229.32422 C 231.7993 231.5053 231.7993 231.5053 226.71716 231.5053 L 160.64929 231.5053 C 155.56714 231.5053 155.56714 231.5053 155.56714 230.41476" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(157.11129 198.22454)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.0831523" y="11" textLength="39.357422">domain</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="1.7569804" y="25" textLength="56.009766">framework</tspan></text><text transform="translate(172.599 163.656)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".158203125" y="11" textLength="32.683594">model</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".1640625" y="25" textLength="32.671875">library</tspan></text><g id="id267_Graphic"><path d="M 32.187544 235.617 L 102.98351 235.617 C 108.429356 235.617 108.429356 235.617 108.429356 238.3499 L 108.429356 236.98345 C 111.15228 236.98345 111.15228 236.98345 111.15228 239.71634 L 111.15228 238.3499 C 113.8752 238.3499 113.8752 238.3499 113.8752 241.08279 L 113.8752 276.6104 C 113.8752 279.3433 113.8752 279.3433 108.429356 279.3433 L 37.633388 279.3433 C 32.187544 279.3433 32.187544 279.3433 32.187544 277.97685 C 29.464622 277.97685 29.464622 277.97685 29.464622 276.6104 C 26.7417 276.6104 26.7417 276.6104 26.7417 273.87751 L 26.7417 238.3499 C 26.7417 235.617 26.7417 235.617 32.187544 235.617 Z" fill="white"/><path d="M 32.187544 235.617 L 102.98351 235.617 C 108.429356 235.617 108.429356 235.617 108.429356 238.3499 L 108.429356 273.87751 C 108.429356 276.6104 108.429356 276.6104 102.98351 276.6104 L 32.187544 276.6104 C 26.7417 276.6104 26.7417 276.6104 26.7417 273.87751 L 26.7417 238.3499 C 26.7417 235.617 26.7417 235.617 32.187544 235.617 M 108.429356 236.98345 C 111.15228 236.98345 111.15228 236.98345 111.15228 239.71634 L 111.15228 276.6104 C 111.15228 277.97685 111.15228 277.97685 105.706434 277.97685 L 34.910466 277.97685 C 29.464622 277.97685 29.464622 277.97685 29.464622 276.6104 M 111.15228 238.3499 C 113.8752 238.3499 113.8752 238.3499 113.8752 241.08279 L 113.8752 276.6104 C 113.8752 279.3433 113.8752 279.3433 108.429356 279.3433 L 37.633388 279.3433 C 32.187544 279.3433 32.187544 279.3433 32.187544 277.97685" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(33.48437 248.18452)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="red" x=".57964937" y="11" textLength="63.339844">application</tspan></text></g><line x1="122.237904" y1="240.46846" x2="153.34371" y2="230.27844" marker-start="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="122.17559" y1="275.74486" x2="150.254375" y2="285.63264" marker-start="url(#FilledArrow_Marker_3)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="341.351" y1="127.69064" x2="316.791" y2="127.69" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="341.851" y1="170.78465" x2="316.816" y2="170.46" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="341.851" y1="214.18565" x2="316.816" y2="214.088" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="341.3511" y1="258.1939" x2="316.816" y2="257.715" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="341.35102" y1="302.33574" x2="316.816" y2="302.095" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="341.35116" y1="345.5861" x2="316.816" y2="344.97" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="23.7492" y1="70.7573" x2="238.504" y2="70.7573" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="132.098" y="60.4708" width="34" height="16" fill="white"/><text transform="translate(137.098 60.4708)" fill="blue"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="13" textLength="23.841797">SuT</tspan></text><line x1="260.26599" y1="70.768543" x2="485.89801" y2="70.312557" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="304.843" y="53.864" width="82" height="32" fill="white"/><text transform="translate(309.843 53.864)" fill="blue"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="13" textLength="55.649902">execution</tspan><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="29" textLength="71.538086">environment</tspan></text><path d="M 346.569 372.698 L 409.944 372.698 C 414.819 372.698 414.819 372.698 414.819 374.87908 L 414.819 373.78854 C 417.2565 373.78854 417.2565 373.78854 417.2565 375.96962 L 417.2565 374.87908 C 419.694 374.87908 419.694 374.87908 419.694 377.06016 L 419.694 405.41422 C 419.694 407.5953 419.694 407.5953 414.819 407.5953 L 351.444 407.5953 C 346.569 407.5953 346.569 407.5953 346.569 406.50476 C 344.1315 406.50476 344.1315 406.50476 344.1315 405.41422 C 341.694 405.41422 341.694 405.41422 341.694 403.23314 L 341.694 374.87908 C 341.694 372.698 341.694 372.698 346.569 372.698 Z" fill="#fefff6"/><path d="M 346.569 372.698 L 409.944 372.698 C 414.819 372.698 414.819 372.698 414.819 374.87908 L 414.819 403.23314 C 414.819 405.41422 414.819 405.41422 409.944 405.41422 L 346.569 405.41422 C 341.694 405.41422 341.694 405.41422 341.694 403.23314 L 341.694 374.87908 C 341.694 372.698 341.694 372.698 346.569 372.698 M 414.819 373.78854 C 417.2565 373.78854 417.2565 373.78854 417.2565 375.96962 L 417.2565 405.41422 C 417.2565 406.50476 417.2565 406.50476 412.3815 406.50476 L 349.0065 406.50476 C 344.1315 406.50476 344.1315 406.50476 344.1315 405.41422 M 417.2565 374.87908 C 419.694 374.87908 419.694 374.87908 419.694 377.06016 L 419.694 405.41422 C 419.694 407.5953 419.694 407.5953 414.819 407.5953 L 351.444 407.5953 C 346.569 407.5953 346.569 407.5953 346.569 406.50476" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.254 374.31454)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="10.336211" y="11" textLength="36.017578">search</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="7.0022266" y="25" textLength="42.685547">strategy</tspan></text><line x1="341.19404" y1="390.13999" x2="316.659" y2="389.813" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(265.13 289.673)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="10.326172" y="11" textLength="25.347656">Java</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="6.995117" y="25" textLength="32.009766">virtual</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".32128906" y="39" textLength="45.357422">machine</tspan></text><path d="M 118.697 248.87425 L 168.44068 248.87425 L 168.44068 239.294 L 185.0219 258.4545 L 168.44068 277.615 L 168.44068 268.03475 L 118.697 268.03475 Z" fill="#ebe8ff"/><path d="M 118.697 248.87425 L 168.44068 248.87425 L 168.44068 239.294 L 185.0219 258.4545 L 168.44068 277.615 L 168.44068 268.03475 L 118.697 268.03475 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(123.348 250.672)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".1484375" y="11" textLength="48.703125">bytecode</tspan></text><text transform="translate(484.521 250.515)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".32617188" y="11" textLength="31.347656">report</tspan></text><text transform="translate(141.086 102.486)" fill="red"><tspan font-family="Helvetica" font-size="15" font-weight="500" fill="red" x="0" y="15" textLength="26.66748">JPF</tspan></text><line x1="627.333" y1="314.722" x2="627.333" y2="320.178" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="624.70977" y1="327.42927" x2="618.59018" y2="334.78068" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="613.34386" y1="341.08335" x2="607.2231" y2="348.43661" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="604.6" y1="355.688" x2="604.6" y2="361.143" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 597.527 364.956 C 594.45664 365.32263 591.13855 366.62494 588.315 366.056 C 585.49145 365.48706 582.53897 363.92343 580.584 361.542 C 578.62903 359.16057 576.91747 355.24282 576.584 351.766 C 576.25053 348.28918 577.16148 343.96717 578.583 340.679 C 580.00452 337.39083 582.44243 334.16829 585.114 332.035 C 587.78557 329.90171 591.53098 328.46127 594.614 327.878 C 597.69702 327.29473 600.5994 327.27322 603.614 328.535 C 605.1366 329.1723 606.66708 330.34182 608.19938 331.6403" marker-end="url(#FilledArrow_Marker_4)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="631.00532" y1="326.1034" x2="651.1297" y2="336.10659" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="652.24505" y1="341.1374" x2="635.57295" y2="362.0376" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="634.06917" y1="369.20604" x2="636.22385" y2="377.31395" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 651.872 350.006 C 649.0306 353.83895 644.38623 358.33382 643.347 361.506 C 642.30777 364.67818 643.85634 367.09003 645.636 369.041 C 647.41566 370.99197 651.09246 372.4959 654.026 373.213 C 656.95954 373.9301 660.37495 373.87278 663.239 373.344 C 666.10305 372.81522 669.20403 371.84615 671.212 370.04 C 673.21997 368.23385 675.44765 365.4452 675.288 362.506 C 675.12835 359.5668 672.3428 355.48602 670.254 352.403 C 669.2545 350.92772 668.0666 349.58246 666.82558 348.27392" marker-end="url(#FilledArrow_Marker_4)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="658.56888" y1="339.55327" x2="693.57913" y2="354.62173" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="628.534" y1="402.73847" x2="634.65403" y2="410.0915" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="646.02086" y1="402.73835" x2="639.9001" y2="410.09161" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="697.2711" y1="360.34232" x2="697.0259" y2="373.76468" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="696.951" y1="381.964" x2="696.951" y2="387.418" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="694.32786" y1="394.66935" x2="688.2071" y2="402.02261" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="682.9609" y1="408.32537" x2="676.84107" y2="415.6776" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="699.57414" y1="394.66935" x2="705.6949" y2="402.02261" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="627.333" cy="310.622" r="3.6000058" fill="yellow"/><circle cx="627.333" cy="310.622" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="627.333" cy="324.278" r="3.6000058" fill="yellow"/><circle cx="627.333" cy="324.278" r="3.6000058" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="615.967" cy="337.932" r="3.6000058" fill="white"/><circle cx="615.967" cy="337.932" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="604.6" cy="351.588" r="3.6000058" fill="white"/><circle cx="604.6" cy="351.588" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="604.6" cy="365.243" r="3.6000058" fill="blue"/><circle cx="604.6" cy="365.243" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="654.802" cy="337.932" r="3.6000058" fill="yellow"/><circle cx="654.802" cy="337.932" r="3.6000058" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="633.016" cy="365.243" r="3.6000058" fill="blue"/><circle cx="633.016" cy="365.243" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="697.346" cy="356.243" r="3.6000058" fill="yellow"/><circle cx="697.346" cy="356.243" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="637.277" cy="381.277" r="3.6000058" fill="white"/><circle cx="637.277" cy="381.277" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="648.644" cy="399.587" r="3.6000058" fill="white"/><circle cx="648.644" cy="399.587" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="625.911" cy="399.587" r="3.6000058" fill="white"/><circle cx="625.911" cy="399.587" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="637.277" cy="413.243" r="3.6000058" fill="white"/><circle cx="637.277" cy="413.243" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="696.951" cy="391.518" r="3.6000058" fill="white"/><circle cx="696.951" cy="391.518" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="708.318" cy="405.174" r="3.6000058" fill="white"/><circle cx="708.318" cy="405.174" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="685.584" cy="405.174" r="3.6000058" fill="white"/><circle cx="685.584" cy="405.174" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="674.218" cy="418.829" r="3.6000058" fill="white"/><circle cx="674.218" cy="418.829" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="696.951" cy="377.864" r="3.6000058" fill="red"/><circle cx="696.951" cy="377.864" r="3.6000058" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(581.584 332.815)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="2.0389578" y="11" textLength="20.021484">end</tspan></text><text transform="translate(645.152 355.212)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="1.5648078" y="11" textLength="26.021484">seen</tspan></text><text transform="translate(698.473 307.269)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="1.88925" y="11" textLength="52.6875">error-path</tspan></text><text transform="translate(703.341 369.88)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="6.2222578" y="11" textLength="47.35547">property </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="6.219328" y="25" textLength="44.027344">violation</tspan></text><path d="M 680.049 343.105 C 688.4935 338.63578 694.70723 336.80062 705.385 329.696 C 716.06277 322.59138 737.21352 311.11894 744.122 300.473 C 751.03048 289.82706 751.51837 281.20713 746.84 265.814 C 742.84603 252.67272 730.70992 233.928 720.8592 216.75722" marker-end="url(#FilledArrow_Marker_5)" stroke="#ff8987" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><line x1="618.13855" y1="341.41063" x2="630.84446" y2="361.76436" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="635.11422" y1="384.7611" x2="628.07376" y2="396.10288" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="639.4399" y1="384.76102" x2="646.4811" y2="396.10298" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 706.065 373.189 C 710.36857 367.52657 717.165 361.63612 718.977 356.2 C 720.789 350.76388 723.2802 345.6655 716.938 340.569 C 710.5958 335.4725 690.9995 330.71432 680.92 325.618 C 670.8405 320.52168 663.47663 316.3302 656.455 309.988 C 651.8553 305.83336 648.22683 300.7056 644.6155 295.56124" marker-end="url(#FilledArrow_Marker_5)" stroke="#ff8987" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(313.697 453.368)" fill="red"><tspan font-family="Helvetica" font-size="15" font-weight="500" fill="red" x="0" y="15" textLength="71.68213">host - JVM</tspan></text><line x1="429.938" y1="29.5677" x2="429.938" y2="410.892" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="10,3,2,3"/><rect x="225.929" y="30.9748" width="100" height="16" fill="white"/><text transform="translate(230.929 30.9748)" fill="blue"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="13" textLength="89.59082">JPF distribution</tspan></text><path d="M 437.51213 154.523 L 483.03984 154.523 C 486.54197 154.523 486.54197 154.523 486.54197 156.70408 L 486.54197 155.61354 C 488.29303 155.61354 488.29303 155.61354 488.29303 157.79462 L 488.29303 156.70408 C 490.0441 156.70408 490.0441 156.70408 490.0441 158.88516 L 490.0441 187.23922 C 490.0441 189.4203 490.0441 189.4203 486.54197 189.4203 L 441.01426 189.4203 C 437.51213 189.4203 437.51213 189.4203 437.51213 188.32976 C 435.76107 188.32976 435.76107 188.32976 435.76107 187.23922 C 434.01 187.23922 434.01 187.23922 434.01 185.05814 L 434.01 156.70408 C 434.01 154.523 434.01 154.523 437.51213 154.523 Z" fill="#fefff6"/><path d="M 437.51213 154.523 L 483.03984 154.523 C 486.54197 154.523 486.54197 154.523 486.54197 156.70408 L 486.54197 185.05814 C 486.54197 187.23922 486.54197 187.23922 483.03984 187.23922 L 437.51213 187.23922 C 434.01 187.23922 434.01 187.23922 434.01 185.05814 L 434.01 156.70408 C 434.01 154.523 434.01 154.523 437.51213 154.523 M 486.54197 155.61354 C 488.29303 155.61354 488.29303 155.61354 488.29303 157.79462 L 488.29303 187.23922 C 488.29303 188.32976 488.29303 188.32976 484.7909 188.32976 L 439.2632 188.32976 C 435.76107 188.32976 435.76107 188.32976 435.76107 187.23922 M 488.29303 156.70408 C 490.0441 156.70408 490.0441 156.70408 490.0441 158.88516 L 490.0441 187.23922 C 490.0441 189.4203 490.0441 189.4203 486.54197 189.4203 L 441.01426 189.4203 C 437.51213 189.4203 437.51213 189.4203 437.51213 188.32976" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(440.13068 163.13954)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="13.953601" y="11" textLength="10.001953">...</tspan></text><path d="M 346.726 153.336 L 410.101 153.336 C 414.976 153.336 414.976 153.336 414.976 155.51708 L 414.976 154.42654 C 417.4135 154.42654 417.4135 154.42654 417.4135 156.60762 L 417.4135 155.51708 C 419.851 155.51708 419.851 155.51708 419.851 157.69816 L 419.851 186.05222 C 419.851 188.2333 419.851 188.2333 414.976 188.2333 L 351.601 188.2333 C 346.726 188.2333 346.726 188.2333 346.726 187.14276 C 344.2885 187.14276 344.2885 187.14276 344.2885 186.05222 C 341.851 186.05222 341.851 186.05222 341.851 183.87114 L 341.851 155.51708 C 341.851 153.336 341.851 153.336 346.726 153.336 Z" fill="#fefff6"/><path d="M 346.726 153.336 L 410.101 153.336 C 414.976 153.336 414.976 153.336 414.976 155.51708 L 414.976 183.87114 C 414.976 186.05222 414.976 186.05222 410.101 186.05222 L 346.726 186.05222 C 341.851 186.05222 341.851 186.05222 341.851 183.87114 L 341.851 155.51708 C 341.851 153.336 341.851 153.336 346.726 153.336 M 414.976 154.42654 C 417.4135 154.42654 417.4135 154.42654 417.4135 156.60762 L 417.4135 186.05222 C 417.4135 187.14276 417.4135 187.14276 412.5385 187.14276 L 349.1635 187.14276 C 344.2885 187.14276 344.2885 187.14276 344.2885 186.05222 M 417.4135 155.51708 C 419.851 155.51708 419.851 155.51708 419.851 157.69816 L 419.851 186.05222 C 419.851 188.2333 419.851 188.2333 414.976 188.2333 L 351.601 188.2333 C 346.726 188.2333 346.726 188.2333 346.726 187.14276" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.411 154.95254)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="12.334258" y="11" textLength="32.021484">native</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="16.336211" y="25" textLength="24.017578">peer</tspan></text><path d="M 437.68213 285.265 L 483.20984 285.265 C 486.71197 285.265 486.71197 285.265 486.71197 287.44608 L 486.71197 286.35554 C 488.46303 286.35554 488.46303 286.35554 488.46303 288.53662 L 488.46303 287.44608 C 490.2141 287.44608 490.2141 287.44608 490.2141 289.62716 L 490.2141 317.98122 C 490.2141 320.1623 490.2141 320.1623 486.71197 320.1623 L 441.18426 320.1623 C 437.68213 320.1623 437.68213 320.1623 437.68213 319.07176 C 435.93107 319.07176 435.93107 319.07176 435.93107 317.98122 C 434.18 317.98122 434.18 317.98122 434.18 315.80014 L 434.18 287.44608 C 434.18 285.265 434.18 285.265 437.68213 285.265 Z" fill="#fefff6"/><path d="M 437.68213 285.265 L 483.20984 285.265 C 486.71197 285.265 486.71197 285.265 486.71197 287.44608 L 486.71197 315.80014 C 486.71197 317.98122 486.71197 317.98122 483.20984 317.98122 L 437.68213 317.98122 C 434.18 317.98122 434.18 317.98122 434.18 315.80014 L 434.18 287.44608 C 434.18 285.265 434.18 285.265 437.68213 285.265 M 486.71197 286.35554 C 488.46303 286.35554 488.46303 286.35554 488.46303 288.53662 L 488.46303 317.98122 C 488.46303 319.07176 488.46303 319.07176 484.9609 319.07176 L 439.4332 319.07176 C 435.93107 319.07176 435.93107 319.07176 435.93107 317.98122 M 488.46303 287.44608 C 490.2141 287.44608 490.2141 287.44608 490.2141 289.62716 L 490.2141 317.98122 C 490.2141 320.1623 490.2141 320.1623 486.71197 320.1623 L 441.18426 320.1623 C 437.68213 320.1623 437.68213 320.1623 437.68213 319.07176" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(440.30068 293.88154)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="13.953601" y="11" textLength="10.001953">...</tspan></text><path d="M 437.68213 242.749 L 483.20984 242.749 C 486.71197 242.749 486.71197 242.749 486.71197 244.93008 L 486.71197 243.83954 C 488.46303 243.83954 488.46303 243.83954 488.46303 246.02062 L 488.46303 244.93008 C 490.2141 244.93008 490.2141 244.93008 490.2141 247.11116 L 490.2141 275.46522 C 490.2141 277.6463 490.2141 277.6463 486.71197 277.6463 L 441.18426 277.6463 C 437.68213 277.6463 437.68213 277.6463 437.68213 276.55576 C 435.93107 276.55576 435.93107 276.55576 435.93107 275.46522 C 434.18 275.46522 434.18 275.46522 434.18 273.28414 L 434.18 244.93008 C 434.18 242.749 434.18 242.749 437.68213 242.749 Z" fill="#fefff6"/><path d="M 437.68213 242.749 L 483.20984 242.749 C 486.71197 242.749 486.71197 242.749 486.71197 244.93008 L 486.71197 273.28414 C 486.71197 275.46522 486.71197 275.46522 483.20984 275.46522 L 437.68213 275.46522 C 434.18 275.46522 434.18 275.46522 434.18 273.28414 L 434.18 244.93008 C 434.18 242.749 434.18 242.749 437.68213 242.749 M 486.71197 243.83954 C 488.46303 243.83954 488.46303 243.83954 488.46303 246.02062 L 488.46303 275.46522 C 488.46303 276.55576 488.46303 276.55576 484.9609 276.55576 L 439.4332 276.55576 C 435.93107 276.55576 435.93107 276.55576 435.93107 275.46522 M 488.46303 244.93008 C 490.2141 244.93008 490.2141 244.93008 490.2141 247.11116 L 490.2141 275.46522 C 490.2141 277.6463 490.2141 277.6463 486.71197 277.6463 L 441.18426 277.6463 C 437.68213 277.6463 437.68213 277.6463 437.68213 276.55576" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(440.30068 251.36554)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="13.953601" y="11" textLength="10.001953">...</tspan></text><path d="M 482.577 248.71725 L 532.32068 248.71725 L 532.32068 239.137 L 548.9019 258.2975 L 532.32068 277.458 L 532.32068 267.87775 L 482.577 267.87775 Z" fill="#ebe8ff"/><path d="M 482.577 248.71725 L 532.32068 248.71725 L 532.32068 239.137 L 548.9019 258.2975 L 532.32068 277.458 L 532.32068 267.87775 L 482.577 267.87775 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="439.75" y="31.1434" width="73" height="16" fill="white"/><text transform="translate(444.75 31.1434)" fill="blue"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="13" textLength="62.149902">extensions</tspan></text><g id="id10_Graphic"><path d="M 277.115 548.62458 L 277.115 511.94762 C 277.115 509.4169 287.67938 507.363 300.6962 507.363 C 313.71302 507.363 324.2774 509.4169 324.2774 511.94762 L 324.2774 548.62458 C 324.2774 551.1553 313.71302 553.2092 300.6962 553.2092 C 287.67938 553.2092 277.115 551.1553 277.115 548.62458" fill="white"/><path d="M 277.115 548.62458 L 277.115 511.94762 C 277.115 509.4169 287.67938 507.363 300.6962 507.363 C 313.71302 507.363 324.2774 509.4169 324.2774 511.94762 L 324.2774 548.62458 C 324.2774 551.1553 313.71302 553.2092 300.6962 553.2092 C 287.67938 553.2092 277.115 551.1553 277.115 548.62458 M 277.115 511.94762 C 277.115 514.47833 287.67938 516.53224 300.6962 516.53224 C 313.71302 516.53224 324.2774 514.47833 324.2774 511.94762" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(282.115 524.0784)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="6.5191883" y="14" textLength="24.124023">*.jpf</tspan></text></g><g id="id312_Graphic"><rect x="407.819" y="548.116" width="1.0188" height=".125" fill="white"/><rect x="407.819" y="548.116" width="1.0188" height=".125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 77.7265 380.014 L 77.7265 519.852 C 77.7265 527.584 83.994514 533.852 91.7265 533.852 L 257.324 533.852" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 422.082 415.5 L 421.1825 519.97253 C 421.11634 527.6572 414.86798 533.852 407.18302 533.852 L 344.365 533.852" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 336.8 397.341 L 336.8 401.679 C 336.8 409.41099 343.06801 415.679 350.8 415.679 L 473.80245 415.679 C 481.53444 415.679 487.80245 409.41099 487.80245 401.679 C 487.80245 401.41993 487.79526 401.16092 487.7809 400.90225 L 487.583 397.341" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><line x1="299.826" y1="501.253" x2="298.89868" y2="401.12458" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(327.878 553.383)" fill="blue"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="13" textLength="54.183594">JPF confi</tspan><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="54.183594" y="13" textLength="46.979004">guration</tspan></text><text transform="translate(496.924 250.84)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".32617188" y="11" textLength="31.347656">report</tspan></text><path d="M 139.874 445.218 L 99.1214 445.218 L 99.1214 291.09" marker-end="url(#FilledArrow_Marker_6)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 207.836 451.331 L 245.532 451.331 L 245.532 442.89" marker-end="url(#FilledArrow_Marker_6)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(202.648 452.006)" fill="blue"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="13" textLength="50.59082">standard</tspan><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" fill="blue" x="0" y="29" textLength="76.584473">Java libraries</tspan></text><g filter="url(#Shadow_2)"><path d="M 152.821 462.01758 L 152.821 425.34062 C 152.821 422.8099 163.38538 420.756 176.4022 420.756 C 189.41902 420.756 199.9834 422.8099 199.9834 425.34062 L 199.9834 462.01758 C 199.9834 464.5483 189.41902 466.6022 176.4022 466.6022 C 163.38538 466.6022 152.821 464.5483 152.821 462.01758" fill="white"/><path d="M 152.821 462.01758 L 152.821 425.34062 C 152.821 422.8099 163.38538 420.756 176.4022 420.756 C 189.41902 420.756 199.9834 422.8099 199.9834 425.34062 L 199.9834 462.01758 C 199.9834 464.5483 189.41902 466.6022 176.4022 466.6022 C 163.38538 466.6022 152.821 464.5483 152.821 462.01758 M 152.821 425.34062 C 152.821 427.87133 163.38538 429.92524 176.4022 429.92524 C 189.41902 429.92524 199.9834 427.87133 199.9834 425.34062" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(157.821 437.4714)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="6.1329578" y="14" textLength="24.896484">*.jar</tspan></text></g><g id="id320_Graphic"><path d="M 147.727 455.90558 L 147.727 419.22862 C 147.727 416.6979 158.29138 414.644 171.3082 414.644 C 184.32502 414.644 194.8894 416.6979 194.8894 419.22862 L 194.8894 455.90558 C 194.8894 458.4363 184.32502 460.4902 171.3082 460.4902 C 158.29138 460.4902 147.727 458.4363 147.727 455.90558" fill="white"/><path d="M 147.727 455.90558 L 147.727 419.22862 C 147.727 416.6979 158.29138 414.644 171.3082 414.644 C 184.32502 414.644 194.8894 416.6979 194.8894 419.22862 L 194.8894 455.90558 C 194.8894 458.4363 184.32502 460.4902 171.3082 460.4902 C 158.29138 460.4902 147.727 458.4363 147.727 455.90558 M 147.727 419.22862 C 147.727 421.75933 158.29138 423.81324 171.3082 423.81324 C 184.32502 423.81324 194.8894 421.75933 194.8894 419.22862" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(152.727 431.3594)" fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" x="6.1329578" y="14" textLength="24.896484">*.jar</tspan></text></g></g></g></svg>
diff --git a/docs/graphics/jpf-layers.svg b/docs/graphics/jpf-layers.svg
new file mode 100644 (file)
index 0000000..ada4957
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="8 66 540 266" width="45pc" height="266pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-02 21:48:18 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="red"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-857.14286" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="576" height="734"/><g><title>Layer 1</title><g><xl:use xl:href="#id1_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id30_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id4_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id6_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id9_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id11_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id14_Graphic" filter="url(#Shadow)"/></g><g id="id1_Graphic"><rect x="100" y="281" width="287" height="34" fill="white"/><rect x="100" y="281" width="287" height="34" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(105 291)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="106.490234" y="11" textLength="64.01953">platform OS</tspan></text></g><g id="id30_Graphic"><path d="M 165 208 L 325 208 L 324 273 L 301 273 L 301 232 L 189 232 L 189 273 L 165 273 Z" fill="white"/><path d="M 165 208 L 325 208 L 324 273 L 301 273 L 301 232 L 189 232 L 189 273 L 165 273 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(217.5 213.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".4921875" y="11" textLength="50.015625">host JVM</tspan></text><g id="id4_Graphic"><path d="M 204 241 L 282 241 C 288 241 288 241 288 243.125 L 288 242.0625 C 291 242.0625 291 242.0625 291 244.1875 L 291 243.125 C 294 243.125 294 243.125 294 245.25 L 294 272.875 C 294 275 294 275 288 275 L 210 275 C 204 275 204 275 204 273.9375 C 201 273.9375 201 273.9375 201 272.875 C 198 272.875 198 272.875 198 270.75 L 198 243.125 C 198 241 198 241 204 241 Z" fill="white"/><path d="M 204 241 L 282 241 C 288 241 288 241 288 243.125 L 288 270.75 C 288 272.875 288 272.875 282 272.875 L 204 272.875 C 198 272.875 198 272.875 198 270.75 L 198 243.125 C 198 241 198 241 204 241 M 288 242.0625 C 291 242.0625 291 242.0625 291 244.1875 L 291 272.875 C 291 273.9375 291 273.9375 285 273.9375 L 207 273.9375 C 201 273.9375 201 273.9375 201 272.875 M 291 243.125 C 294 243.125 294 243.125 294 245.25 L 294 272.875 C 294 275 294 275 288 275 L 210 275 C 204 275 204 275 204 273.9375" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(204.92 242.215)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="20.029258" y="11" textLength="35.355469">native </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="15.034141" y="25" textLength="42.01172">libraries</tspan></text></g><rect x="100" y="228" width="287" height="18" fill="red" fill-opacity=".09"/><rect x="100" y="228" width="287" height="18" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id6_Graphic"><path d="M 204 167 L 282 167 C 288 167 288 167 288 169.125 L 288 168.0625 C 291 168.0625 291 168.0625 291 170.1875 L 291 169.125 C 294 169.125 294 169.125 294 171.25 L 294 198.875 C 294 201 294 201 288 201 L 210 201 C 204 201 204 201 204 199.9375 C 201 199.9375 201 199.9375 201 198.875 C 198 198.875 198 198.875 198 196.75 L 198 169.125 C 198 167 198 167 204 167 Z" fill="white"/><path d="M 204 167 L 282 167 C 288 167 288 167 288 169.125 L 288 196.75 C 288 198.875 288 198.875 282 198.875 L 204 198.875 C 198 198.875 198 198.875 198 196.75 L 198 169.125 C 198 167 198 167 204 167 M 288 168.0625 C 291 168.0625 291 168.0625 291 170.1875 L 291 198.875 C 291 199.9375 291 199.9375 285 199.9375 L 207 199.9375 C 201 199.9375 201 199.9375 201 198.875 M 291 169.125 C 294 169.125 294 169.125 294 171.25 L 294 198.875 C 294 201 294 201 288 201 L 210 201 C 204 201 204 201 204 199.9375" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(204.92 168.215)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="19.704062" y="11" textLength="36.00586">library </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="16.033164" y="25" textLength="40.013672">classes</tspan></text></g><path d="M 165 136 L 325 136 L 324 201 L 301 201 L 301 160 L 189 160 L 189 201 L 165 201 Z" fill="yellow"/><path d="M 165 136 L 325 136 L 324 201 L 301 201 L 301 160 L 189 160 L 189 201 L 165 201 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(179.5 140.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".14160156" y="11" textLength="118.7168">JPF (Java application)</tspan></text><g id="id9_Graphic"><path d="M 204 95 L 282 95 C 288 95 288 95 288 97.125 L 288 96.0625 C 291 96.0625 291 96.0625 291 98.1875 L 291 97.125 C 294 97.125 294 97.125 294 99.25 L 294 126.875 C 294 129 294 129 288 129 L 210 129 C 204 129 204 129 204 127.9375 C 201 127.9375 201 127.9375 201 126.875 C 198 126.875 198 126.875 198 124.75 L 198 97.125 C 198 95 198 95 204 95 Z" fill="white"/><path d="M 204 95 L 282 95 C 288 95 288 95 288 97.125 L 288 124.75 C 288 126.875 288 126.875 282 126.875 L 204 126.875 C 198 126.875 198 126.875 198 124.75 L 198 97.125 C 198 95 198 95 204 95 M 288 96.0625 C 291 96.0625 291 96.0625 291 98.1875 L 291 126.875 C 291 127.9375 291 127.9375 285 127.9375 L 207 127.9375 C 201 127.9375 201 127.9375 201 126.875 M 291 97.125 C 294 97.125 294 97.125 294 99.25 L 294 126.875 C 294 129 294 129 288 129 L 210 129 C 204 129 204 129 204 127.9375" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(204.92 96.215)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="13.024375" y="11" textLength="49.365234">modeled </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="16.033164" y="25" textLength="40.013672">classes</tspan></text></g><rect x="100" y="123" width="287" height="18" fill="red" fill-opacity=".2"/><rect x="100" y="123" width="287" height="18" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id11_Graphic"><path d="M 465 203.2 L 465 172.8 C 465 170.7024 475.528 169 488.5 169 C 501.472 169 512 170.7024 512 172.8 L 512 203.2 C 512 205.2976 501.472 207 488.5 207 C 475.528 207 465 205.2976 465 203.2" fill="white"/><path d="M 465 203.2 L 465 172.8 C 465 170.7024 475.528 169 488.5 169 C 501.472 169 512 170.7024 512 172.8 L 512 203.2 C 512 205.2976 501.472 207 488.5 207 C 475.528 207 465 205.2976 465 203.2 M 465 172.8 C 465 174.8976 475.528 176.6 488.5 176.6 C 501.472 176.6 512 174.8976 512 172.8" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(470 182.9)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.5" y="11" textLength="24">rt.jar</tspan></text></g><path d="M 464.51608 194.23311 C 443.01287 199.82151 425.91675 206.03935 400 211 C 374.08325 215.96065 330.83115 228.3329 309 224 C 291.02341 220.43213 284.5698 205.10993 275.4076 192.55293" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 464.5003 187.15195 C 425.33746 185.76811 380.41338 195.52407 347 183 C 316.59513 171.60358 295.70486 141.75243 271.34544 118.638844" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><g id="id14_Graphic"><path d="M 465 152.2 L 465 121.8 C 465 119.7024 475.528 118 488.5 118 C 501.472 118 512 119.7024 512 121.8 L 512 152.2 C 512 154.2976 501.472 156 488.5 156 C 475.528 156 465 154.2976 465 152.2" fill="white"/><path d="M 465 152.2 L 465 121.8 C 465 119.7024 475.528 118 488.5 118 C 501.472 118 512 119.7024 512 121.8 L 512 152.2 C 512 154.2976 501.472 156 488.5 156 C 475.528 156 465 154.2976 465 152.2 M 465 121.8 C 465 123.8976 475.528 125.6 488.5 125.6 C 501.472 125.6 512 123.8976 512 121.8" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 464.51156 142.2503 C 428.34466 150.166075 387.9154 172.37441 356 166 C 327.09537 160.22692 305.15832 131.006355 280.72651 110.193924" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(104.5 227.125)" fill="red"><tspan font-family="Helvetica" font-size="14" font-weight="bold" fill="red" x=".106933594" y="14" textLength="21.786133">JNI</tspan></text><text transform="translate(104.5 122.125)" fill="red"><tspan font-family="Helvetica" font-size="14" font-weight="bold" fill="red" x=".33105469" y="14" textLength="23.33789">MJI</tspan></text><text transform="translate(470.5 131.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".328125" y="11" textLength="35.34375">*.class</tspan></text><text transform="translate(439 95.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x=".14746094" y="11" textLength="94.70508">system under test</tspan></text><text transform="translate(450.5 212.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="1.8095703" y="11" textLength="78.714844">standard Java </tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="11.149414" y="25" textLength="56.701172">installation</tspan></text><text transform="translate(411.5 219.125) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="13" font-weight="500" x=".30761719" y="13" textLength="51.301758">CLASSP</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="50.65088" y="13" textLength="8.6708984">A</tspan><tspan font-family="Helvetica" font-size="13" font-weight="500" x="58.36328" y="13" textLength="17.329102">TH</tspan></text><line x1="57" y1="205" x2="366" y2="205" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,4,1,4"/><line x1="57" y1="132" x2="92" y2="132" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,4,1,4"/><line x1="138" y1="132" x2="365" y2="132" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,4,1,4"/><text transform="translate(54.5 75.125)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x=".31738281" y="14" textLength="72.365234">Model layer</tspan></text><text transform="translate(54.5 160.125)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x=".09667969" y="14" textLength="63.80664">Java layer</tspan></text><text transform="translate(54.5 256.125)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x=".041503906" y="14" textLength="73.91699">Native layer</tspan></text><text transform="translate(22.5 214.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x=".37890625" y="11" textLength="121.24219">&quot;Java Native Interface&quot;</tspan></text><text transform="translate(22.5 109.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x=".043945312" y="11" textLength="119.91211">&quot;Model Java Interface&quot;</tspan></text></g></g></svg>
diff --git a/docs/graphics/jpf-project.svg b/docs/graphics/jpf-project.svg
new file mode 100644 (file)
index 0000000..790b51b
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="46 25 545 750" width="545pt" height="750pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2009-09-09 23:36:00 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1200" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Lucida Grande" font-size="10" panose-1="2 11 6 0 4 5 2 2 2 4" units-per-em="1000" underline-position="-97.65625" underline-thickness="48.828125" slope="0" x-height="530.27344" cap-height="722.65625" ascent="966.7969" descent="-210.9375" font-weight="500"><font-face-src><font-face-name name="LucidaGrande"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1200" x-height="539.55078" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="bold"><font-face-src><font-face-name name="Helvetica-BoldOblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="13" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-923.0769" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="red"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1090.9091" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="588.0188" height="768.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id111_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id106_Graphic" filter="url(#Shadow)"/></g><g id="id111_Graphic"><path d="M 68.5938 640.352 L 229.3748 640.352 C 232.68851 640.352 235.3748 643.0383 235.3748 646.352 L 235.3748 751.813 C 235.3748 755.1267 232.68851 757.813 229.3748 757.813 L 68.5938 757.813 C 65.28009 757.813 62.5938 755.1267 62.5938 751.813 L 62.5938 646.352 C 62.5938 643.0383 65.28009 640.352 68.5938 640.352 Z" fill="#ebffed"/><path d="M 68.5938 640.352 L 229.3748 640.352 C 232.68851 640.352 235.3748 643.0383 235.3748 646.352 L 235.3748 751.813 C 235.3748 755.1267 232.68851 757.813 229.3748 757.813 L 68.5938 757.813 C 65.28009 757.813 62.5938 755.1267 62.5938 751.813 L 62.5938 646.352 C 62.5938 643.0383 65.28009 640.352 68.5938 640.352 Z" stroke="#9cffb1" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id106_Graphic"><path d="M 69.335548 61.38315 L 186.93809 61.38416 C 190.2518 61.384188 192.93807 64.070502 192.93804 67.38421 C 192.93804 67.38427 192.93804 67.384327 192.93804 67.384385 L 192.93781 73.569708 C 192.93769 76.88329 190.25149 79.56943 186.93791 79.569483 L 97.390935 79.57095 C 94.077265 79.571007 91.391034 82.25728 91.391034 85.57095 L 91.391034 388.09394 C 91.391034 391.39507 94.057715 394.07612 97.35879 394.09386 L 226.37644 394.78716 C 229.67752 394.8049 232.3442 397.48595 232.3442 400.78708 L 232.3442 493.42925 C 232.3442 496.73035 229.67755 499.4114 226.3765 499.42916 L 97.358877 500.1237 C 94.057834 500.14146 91.39119 502.82248 91.391176 506.12357 L 91.39106 529.77343 C 91.391047 533.08714 94.077325 535.77345 97.391034 535.77346 C 97.391053 535.77346 97.39107 535.77346 97.39109 535.77346 L 199.82096 535.77296 C 203.13467 535.77295 205.82097 538.45923 205.82099 541.77294 C 205.82099 541.773 205.82099 541.77308 205.82099 541.77315 L 205.82084 546.65464 C 205.82074 549.95652 203.1528 552.6378 199.85096 552.65438 L 96.69789 553.1722 C 93.38422 553.18885 90.71145 555.8886 90.728084 559.20226 C 90.728193 559.22398 90.72842 559.2457 90.728765 559.26742 L 91.297165 595.05585 C 91.349097 598.3257 94.01001 600.95175 97.28028 600.96055 L 155.35214 601.11666 C 158.53473 601.1252 161.15693 603.61723 161.3274 606.79526 L 161.52812 610.5372 C 161.70561 613.84616 159.16706 616.67248 155.858105 616.84997 C 155.75109 616.8557 155.64393 616.85858 155.53676 616.85858 L 67.852627 616.85907 C 64.53892 616.8591 61.852612 614.1728 61.852594 610.8591 C 61.852594 610.85363 61.8526 610.84816 61.852616 610.8427 L 63.33552 67.36678 C 63.344543 64.059455 66.02821 61.383123 69.335548 61.38315 Z" fill="#fffbe6"/><path d="M 69.335548 61.38315 L 186.93809 61.38416 C 190.2518 61.384188 192.93807 64.070502 192.93804 67.38421 C 192.93804 67.38427 192.93804 67.384327 192.93804 67.384385 L 192.93781 73.569708 C 192.93769 76.88329 190.25149 79.56943 186.93791 79.569483 L 97.390935 79.57095 C 94.077265 79.571007 91.391034 82.25728 91.391034 85.57095 L 91.391034 388.09394 C 91.391034 391.39507 94.057715 394.07612 97.35879 394.09386 L 226.37644 394.78716 C 229.67752 394.8049 232.3442 397.48595 232.3442 400.78708 L 232.3442 493.42925 C 232.3442 496.73035 229.67755 499.4114 226.3765 499.42916 L 97.358877 500.1237 C 94.057834 500.14146 91.39119 502.82248 91.391176 506.12357 L 91.39106 529.77343 C 91.391047 533.08714 94.077325 535.77345 97.391034 535.77346 C 97.391053 535.77346 97.39107 535.77346 97.39109 535.77346 L 199.82096 535.77296 C 203.13467 535.77295 205.82097 538.45923 205.82099 541.77294 C 205.82099 541.773 205.82099 541.77308 205.82099 541.77315 L 205.82084 546.65464 C 205.82074 549.95652 203.1528 552.6378 199.85096 552.65438 L 96.69789 553.1722 C 93.38422 553.18885 90.71145 555.8886 90.728084 559.20226 C 90.728193 559.22398 90.72842 559.2457 90.728765 559.26742 L 91.297165 595.05585 C 91.349097 598.3257 94.01001 600.95175 97.28028 600.96055 L 155.35214 601.11666 C 158.53473 601.1252 161.15693 603.61723 161.3274 606.79526 L 161.52812 610.5372 C 161.70561 613.84616 159.16706 616.67248 155.858105 616.84997 C 155.75109 616.8557 155.64393 616.85858 155.53676 616.85858 L 67.852627 616.85907 C 64.53892 616.8591 61.852612 614.1728 61.852594 610.8591 C 61.852594 610.85363 61.8526 610.84816 61.852616 610.8427 L 63.33552 67.36678 C 63.344543 64.059455 66.02821 61.383123 69.335548 61.38315 Z" stroke="#fffbe6" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(86.8516 34.6328)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="24.438477">jpf-X</tspan></text><text transform="translate(122 91)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="16.516113">src</tspan></text><text transform="translate(122 253)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="26.27002">build</tspan></text><text transform="translate(122 226)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="43.403809">build.xml</tspan></text><text transform="translate(122 64)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="63.58838">jpf.properties</tspan></text><text transform="translate(140 397.094)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="bold" fill="blue" x="0" y="10" textLength="23.847656">X.jar</tspan></text><text transform="translate(140 415.094)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="bold" fill="blue" x="0" y="10" textLength="67.27295">X-classes.jar</tspan></text><text transform="translate(140 433.094)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="83.160645">X-annotations.jar</tspan></text><text transform="translate(149 109)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="23.842285">main</tspan></text><text transform="translate(149 127)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="27.516113">peers</tspan></text><text transform="translate(149 145)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="36.6792">classes</tspan></text><text transform="translate(149 163)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="56.879883">annotations</tspan></text><text transform="translate(149 181)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="23.22998">tests</tspan></text><text transform="translate(149 199)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="47.077637">examples</tspan></text><text transform="translate(122 460.094)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="12.831543">lib</tspan></text><text transform="translate(122 505.281)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="26.27539">tools</tspan></text><text transform="translate(122 583.438)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="bold" x="0" y="10" textLength="16.494629">bin</tspan></text><text transform="translate(140 538.438)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="39.735352">RunJPF</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="blue" x="38.516113" y="10" textLength="15.280762">.jar</tspan></text><text transform="translate(140 556.438)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="51.970703">RunAnt.jar</tspan></text><text transform="translate(140 601.438)" fill="blue"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="11.617676">jpf</tspan></text><text transform="translate(140 619.438)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="15.291504">ant</tspan></text><text transform="translate(122 646.438)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="45.251465">nbproject</tspan></text><text transform="translate(140 664.438)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="53.1792">project.xml</tspan></text><text transform="translate(140 682.438)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="23.842285">ide-fi</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="23.842285" y="10" textLength="66.016113">le-targets.xml</tspan></text><text transform="translate(122 704.983)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="49.526855">.classpath</tspan></text><line x1="99.348286" y1="47.6328" x2="99" y2="730.842" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="130.445744" y1="104" x2="129.591" y2="206.401" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144" y1="115.48059" x2="130.350046" y2="115.465" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.091" y1="133.637" x2="129.591" y2="133.674" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.091" y1="151.818" x2="129.591" y2="151.855" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.091" y1="170" x2="129.591" y2="170.037" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.091" y1="188.182" x2="129.591" y2="188.219" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.091" y1="206.364" x2="129.591" y2="206.401" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(149.091 271.09)" fill="#626262"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#626262" x="0" y="10" textLength="23.842285">main</tspan></text><text transform="translate(149.091 289.09)" fill="#626262"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#626262" x="0" y="10" textLength="27.516113">peers</tspan></text><text transform="translate(149.091 307.09)" fill="#626262"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#626262" x="0" y="10" textLength="36.6792">classes</tspan></text><text transform="translate(149.091 325.09)" fill="#626262"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#626262" x="0" y="10" textLength="56.879883">annotations</tspan></text><text transform="translate(149.091 343.09)" fill="#626262"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#626262" x="0" y="10" textLength="23.22998">tests</tspan></text><text transform="translate(149.091 361.09)" fill="#626262"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#626262" x="0" y="10" textLength="47.077637">examples</tspan></text><line x1="129.596" y1="266.09" x2="129.682" y2="368.491" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.091" y1="277.5711" x2="129.60563" y2="277.555" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.182" y1="295.727" x2="129.682" y2="295.764" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.182" y1="313.908" x2="129.682" y2="313.945" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.182" y1="332.09" x2="129.682" y2="332.127" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.182" y1="350.272" x2="129.682" y2="350.309" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="144.182" y1="368.454" x2="129.682" y2="368.491" stroke="#626262" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="117.091" y1="259.597" x2="99.5542" y2="259.652" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="117.182" y1="466.795" x2="99.6451" y2="466.85" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="117.182" y1="512.177" x2="99.6451" y2="512.232" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="117.182" y1="590.608" x2="99.6451" y2="590.663" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="117.182" y1="653.926" x2="99.6451" y2="653.981" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(122.091 723.075)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="34.240723">eclipse</tspan></text><line x1="117.273" y1="730.564" x2="99.736" y2="730.619" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(140.091 741.075)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="66.649902">run-jpf.launch</tspan></text><text transform="translate(250.984 58.6875)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="105.5957">JPF project properties fi</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="105.5957" y="10" textLength="7.783203">le</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="22" textLength="58.911133">(runtime def: </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="58.911133" y="22" textLength="74.492188">native_classpath</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="133.40332" y="22" textLength="5.5566406">, </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="138.95996" y="22" textLength="42.246094">classpath</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="181.20605" y="22" textLength="5.5566406">, </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="186.7627" y="22" textLength="49.47754">sourcepath</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="236.24023" y="22" textLength="3.3300781">)</tspan></text><text transform="translate(278.93 107.57)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="246.20117">host-VM executed classes (listeners, infrastructure etc.)</tspan></text><text transform="translate(279.023 125.664)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="229.52637">host-VM executed library classes (MJI native peers)</tspan></text><text transform="translate(279.117 144.258)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="135.60547">JPF executed library classes   </tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" fill="#20a356" x="135.60547" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="145.60547" y="10" textLength="49.47754">sourcepath</tspan></text><text transform="translate(279.211 161.852)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="145.08301">JPF processed Java annotations</tspan></text><text transform="translate(279.305 179.945)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="70.585938">regression tests</tspan></text><text transform="translate(279.398 198.539)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="35.57129">demos  </tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" fill="#20a356" x="35.57129" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="45.57129" y="10" textLength="49.47754">sourcepath</tspan></text><text transform="translate(251.641 225.133)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="71.694336">Ant build script (</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="red" x="71.694336" y="10" textLength="34.458008">compile</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="106.152344" y="10" textLength="5.5566406">, </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="red" x="111.708984" y="10" textLength="21.12793">build</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="132.836914" y="10" textLength="5.5566406">, </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="red" x="138.393555" y="10" textLength="16.118164">test</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="154.51172" y="10" textLength="5.5566406">, </tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="red" x="160.06836" y="10" textLength="23.90625">clean</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="183.97461" y="10" textLength="3.3300781">)</tspan></text><text transform="translate(263.414 305.969)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="140.60059">temporary build artifacts (classfi</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="140.60059" y="10" textLength="16.113281">les)</tspan></text><text transform="translate(278.734 397.5)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="210.08789">main host-VM executed project jar (main,peers </tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" fill="#20a356" x="210.08789" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="220.08789" y="10" textLength="74.492188">native_classpath</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="294.58008" y="10" textLength="3.3300781">)</tspan></text><text transform="translate(278.828 415.594)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="201.75781">JPF executed library jar (classes,annotations </tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" fill="#20a356" x="201.75781" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="211.75781" y="10" textLength="42.246094">classpath</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="254.0039" y="10" textLength="3.3300781">)</tspan></text><text transform="translate(278.922 433.188)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="201.20117">separate anotations jar (for JPF external SUT</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="201.02539" y="10" textLength="27.231445"> exec)</tspan></text><text transform="translate(252.016 460.781)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="97.26074">required runtime jars  </tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" fill="#20a356" x="97.26074" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" fill="#20a356" x="107.26074" y="10" textLength="74.492188">native_classpath</tspan></text><text transform="translate(252.109 502.531)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="45.029297">build tools</tspan></text><text transform="translate(140.094 520.531)" fill="#404040"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="0" y="10" textLength="30.572266">ant.jar</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="29.970703" y="10" textLength="41.572266">, junit.jar</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="70.941406" y="10" textLength="15.280762">, ...</tspan></text><text transform="translate(140.188 477.898)" fill="#404040"><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="0" y="10" textLength="35.45996">bcel.jar</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="34.858398" y="10" textLength="27.510742">, antlr</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="61.767578" y="10" textLength="15.280762">.jar</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" fill="#404040" x="76.446777" y="10" textLength="12.2246094">, ..</tspan></text><text transform="translate(279.203 478.375)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="105.59082">(example) 3rd party jars</tspan></text><text transform="translate(250.531 253.578)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="58.916016">build artifacts</tspan></text><text transform="translate(264.836 379.477)" fill="blue"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="bold" fill="blue" x="0" y="10" textLength="119.46777">permanent build artifacts</tspan></text><text transform="translate(278.539 521.195)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="105.59082">(example) 3rd party jars</tspan></text><text transform="translate(278.539 537.391)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="122.82715">JPF startup jar (executable)</tspan></text><text transform="translate(278.633 555.484)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="113.38379">JPF build jar (executable)</tspan></text><text transform="translate(252.203 583.625)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="28.891602">scripts</tspan></text><text transform="translate(279.391 600.984)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="83.90625">JPF startup script (</tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" x="83.90625" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="93.90625" y="10" textLength="36.123047">RunJPF</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="128.9209" y="10" textLength="17.22168">.jar)</tspan></text><text transform="translate(279.485 619.077)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="74.46289">JPF build script (</tspan><tspan font-family="Lucida Grande" font-size="10" font-weight="500" x="74.46289" y="10" textLength="10">→</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="84.46289" y="10" textLength="50.576172">RunAnt.jar)</tspan></text><text transform="translate(252.391 704.602)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="88.930664">Eclipse project confi</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="88.930664" y="10" textLength="36.137695">guration</tspan></text><line x1="117.185" y1="97.5308" x2="99.6479" y2="97.5858" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(250.625 91.5547)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="67.807617">project sources</tspan></text><text transform="translate(227.414 34.7109)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="91.14746">project root directory</tspan></text><text transform="translate(69.6719 415.508) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" x="0" y="13" textLength="101.88623">binary distribution</tspan></text><text transform="translate(252.484 663.562)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="100.61035">NetBeans project confi</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="100.61035" y="10" textLength="36.137695">guration</tspan></text><text transform="translate(252.578 681.656)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="51.694336">NetBeans fi</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="51.694336" y="10" textLength="115.04883">le actions (JPF execution)</tspan></text><text transform="translate(252.672 740.961)" fill="black"><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="0" y="10" textLength="88.38379">Eclipse launch confi</tspan><tspan font-family="Helvetica" font-size="10" font-style="italic" font-weight="500" x="88.38379" y="10" textLength="83.36426">gs (JPF execution)</tspan></text><text transform="translate(71.2344 731.805) rotate(-90)" fill="black"><tspan font-family="Helvetica" font-size="13" font-style="italic" font-weight="500" x="0" y="13" textLength="68.643555">IDE support</tspan></text><path d="M 204.516 159.898 L 215.25 159.898 C 221.87742 159.898 227.25 165.27058 227.25 171.898 L 227.25 308.86879 C 227.25 315.4962 221.87742 320.86879 215.25 320.86879 C 215.13236 320.86879 215.01472 320.86706 214.89713 320.8636 L 211.37972 320.76012" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 231.134 319.703 L 241.868 319.703 C 248.49542 319.703 253.868 325.07558 253.868 331.703 L 253.868 401.31326 C 253.868 407.94068 248.49542 413.31326 241.868 413.31326 C 241.75051 413.31326 241.63303 413.31154 241.5156 413.3081 L 237.99773 413.20473" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(212.578 256.102) rotate(-90)" fill="red"><tspan font-family="Helvetica" font-size="11" font-style="italic" font-weight="500" fill="red" x="0" y="10" textLength="37.903809">compile</tspan></text><text transform="translate(239.586 371.32) rotate(-90)" fill="red"><tspan font-family="Helvetica" font-size="11" font-style="italic" font-weight="500" fill="red" x="0" y="10" textLength="23.240723">build</tspan></text><path d="M 198.548 409.218 L 209.282 409.218 C 215.90942 409.218 221.282 403.84542 221.282 397.218 L 221.282 363.27672 C 221.282 356.78689 216.12235 351.473 209.63534 351.28192 L 205.41171 351.1575" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(207.5 387.266) rotate(-90)" fill="red"><tspan font-family="Helvetica" font-size="11" font-style="italic" font-weight="500" fill="red" x="0" y="10" textLength="17.72998">test</tspan></text></g></g></svg>
diff --git a/docs/graphics/listener-overview.svg b/docs/graphics/listener-overview.svg
new file mode 100644 (file)
index 0000000..8a58bd9
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="63 56 639 340" width="639pt" height="340pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-02 07:42:37 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="gray" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><filter id="Shadow_2" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in" result="color"/><feMerge><feMergeNode in="color"/><feMergeNode in="SourceGraphic"/></feMerge></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Courier" font-size="11" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Courier" font-size="11" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><font-face font-family="Apple Symbols" font-size="12" panose-1="2 0 0 0 0 0 0 0 0 0" units-per-em="1000" underline-position="-73.242188" underline-thickness="48.828125" slope="0" x-height="392.57812" cap-height="546.38672" ascent="666.5039" descent="-250" font-weight="500"><font-face-src><font-face-name name="AppleSymbols"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id25_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id26_Graphic" filter="url(#Shadow)"/></g><g filter="url(#Shadow_2)"><path d="M 107.658 161.374 L 226.991 161.374 C 229.75242 161.374 231.991 163.61258 231.991 166.374 L 231.991 337.001 C 231.991 339.76242 229.75242 342.001 226.991 342.001 L 107.658 342.001 C 104.896576 342.001 102.658 339.76242 102.658 337.001 L 102.658 166.374 C 102.658 163.61258 104.896576 161.374 107.658 161.374 Z" fill="#ffffcd"/><path d="M 107.658 161.374 L 226.991 161.374 C 229.75242 161.374 231.991 163.61258 231.991 166.374 L 231.991 337.001 C 231.991 339.76242 229.75242 342.001 226.991 342.001 L 107.658 342.001 C 104.896576 342.001 102.658 339.76242 102.658 337.001 L 102.658 166.374 C 102.658 163.61258 104.896576 161.374 107.658 161.374 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g filter="url(#Shadow_2)"><rect x="122.867" y="292.563" width="90" height="36" fill="white"/><rect x="122.867" y="292.563" width="90" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(127.867 303.563)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="19.987305" y="11" textLength="40.02539">Search</tspan></text></g><g filter="url(#Shadow_2)"><rect x="122.867" y="175.926" width="90" height="36" fill="white"/><rect x="122.867" y="175.926" width="90" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(127.867 186.926)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="31" y="11" textLength="18">VM</tspan></text></g><text transform="translate(119.191 239.52)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x=".49609375" y="11" textLength="22.007812">JPF</tspan></text><line x1="75.175" y1="136.649" x2="404.976" y2="136.649" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="8,4,1,4"/><rect x="106.7" y="74.525" width="121.25" height="36" fill="#ffe2dc"/><rect x="106.7" y="74.525" width="121.25" height="36" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(111.7 85.525)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="7.270508" y="11" textLength="96.708984">System under test</tspan></text><path d="M 274.98012 238.271 L 373.49575 238.271 C 381.07388 238.271 381.07388 238.271 381.07388 240.08095 L 381.07388 239.17598 C 384.86294 239.17598 384.86294 239.17598 384.86294 240.98592 L 384.86294 240.08095 C 388.652 240.08095 388.652 240.08095 388.652 241.8909 L 388.652 265.42025 C 388.652 267.2302 388.652 267.2302 381.07388 267.2302 L 282.55825 267.2302 C 274.98012 267.2302 274.98012 267.2302 274.98012 266.32522 C 271.19106 266.32522 271.19106 266.32522 271.19106 265.42025 C 267.402 265.42025 267.402 265.42025 267.402 263.6103 L 267.402 240.08095 C 267.402 238.271 267.402 238.271 274.98012 238.271 Z" fill="#bfffbe"/><path d="M 274.98012 238.271 L 373.49575 238.271 C 381.07388 238.271 381.07388 238.271 381.07388 240.08095 L 381.07388 263.6103 C 381.07388 265.42025 381.07388 265.42025 373.49575 265.42025 L 274.98012 265.42025 C 267.402 265.42025 267.402 265.42025 267.402 263.6103 L 267.402 240.08095 C 267.402 238.271 267.402 238.271 274.98012 238.271 M 381.07388 239.17598 C 384.86294 239.17598 384.86294 239.17598 384.86294 240.98592 L 384.86294 265.42025 C 384.86294 266.32522 384.86294 266.32522 377.28481 266.32522 L 278.76919 266.32522 C 271.19106 266.32522 271.19106 266.32522 271.19106 265.42025 M 384.86294 240.08095 C 388.652 240.08095 388.652 240.08095 388.652 241.8909 L 388.652 265.42025 C 388.652 267.2302 388.652 267.2302 381.07388 267.2302 L 282.55825 267.2302 C 274.98012 267.2302 274.98012 267.2302 274.98012 266.32522" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(274.827 244.23024)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="22.154688" y="11" textLength="49.359375">listeners</tspan></text><path d="M 213.367 193.9258 L 328.404 193.881 L 328.11532 227.87138" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 213.367 310.563 L 328.993 310.563 L 328.25879 277.62762" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="266.902" y1="252.75231" x2="222.76794" y2="252.90316" marker-end="url(#Arrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="167.867" y1="292.063" x2="167.867" y2="221.826" marker-end="url(#Arrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="167.867" y1="175.926" x2="167.50956" y2="120.92478" marker-end="url(#Arrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(283.027 113.374)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x=".31054688" y="11" textLength="89.378906">executed by JPF</tspan></text><text transform="translate(268.418 144.524)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x=".46972656" y="11" textLength="118.06055">executed by host JVM</tspan></text><text transform="translate(260.108 312.942)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="97.38867">search event notifi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="97.38867" y="11" textLength="38.021484">cations</tspan></text><text transform="translate(252.61 176.262)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="112.740234">execution event notifi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="112.740234" y="11" textLength="38.021484">cations</tspan></text><text transform="translate(402.525 247.554)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x=".48046875" y="11" textLength="25.347656">confi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="25.828125" y="11" textLength="30.691406">gured</tspan></text><text transform="translate(417.247 65.978)" fill="blue"><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="118.819336">- classLoaded (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="23" textLength="145.22363">- threadScheduled (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="36" textLength="138.62256">- threadNotified (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="49" textLength="33.005371">  ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="62" textLength="13.2021484">- </tspan><tspan font-family="Courier" font-size="11" font-weight="bold" fill="blue" x="13.2021484" y="62" textLength="118.819336">executeInstruction</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="132.021484" y="62" textLength="33.005371"> (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="75" textLength="13.2021484">- </tspan><tspan font-family="Courier" font-size="11" font-weight="bold" fill="blue" x="13.2021484" y="75" textLength="125.42041">instructionExecuted</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="138.62256" y="75" textLength="33.005371"> (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="88" textLength="33.005371">  ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="101" textLength="132.021484">- objectCreated (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="114" textLength="33.005371">  ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="127" textLength="138.62256">- exceptionThrown(vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="140" textLength="33.005371">  ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="153" textLength="198.03223">- choiceGeneratorAdvanced (vm)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="166" textLength="33.005371">  ...</tspan></text><text transform="translate(353.977 331.014)" fill="blue"><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="10" textLength="158.42578">- stateAdvanced (search)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="23" textLength="178.229">- stateBacktracked (search)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="36" textLength="178.229">- propertyViolated (search)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="49" textLength="165.02686">- searchFinished (search)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="blue" x="0" y="62" textLength="33.005371">  ...</tspan></text><text transform="translate(469.131 248.388)" fill="red"><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="10" textLength="184.83008">- +listener=&lt;listener-class&gt;</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="23" textLength="105.61719">- @JPFConfig(..)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="36" textLength="217.83545">- listener.autoload=&lt;annotations&gt;</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="49" textLength="138.62256">- jpf.addListener(..)</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="62" textLength="33.005371">  ...</tspan></text><g id="id25_Graphic"><rect x="274.264" y="283.835" width="108.986" height="20.5102" fill="white"/><rect x="274.264" y="283.835" width="108.986" height="20.5102" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(279.264 286.5901)" fill="black"><tspan font-family="Apple Symbols" font-size="12" font-weight="500" x=".5291328" y="11" textLength="8.800781">≪</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="9.329914" y="11" textLength="80.71289">SearchListener</tspan><tspan font-family="Apple Symbols" font-size="12" font-weight="500" x="90.042805" y="11" textLength="8.4140625">≫</tspan></text></g><g id="id26_Graphic"><rect x="274.432" y="200.503" width="108.986" height="20.5102" fill="white"/><rect x="274.432" y="200.503" width="108.986" height="20.5102" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(279.432 203.2581)" fill="black"><tspan font-family="Apple Symbols" font-size="12" font-weight="500" x="10.539875" y="11" textLength="8.800781">≪</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="19.340656" y="11" textLength="60.691406">VMListener</tspan><tspan font-family="Apple Symbols" font-size="12" font-weight="500" x="80.032062" y="11" textLength="8.4140625">≫</tspan></text></g></g></g></svg>
diff --git a/docs/graphics/listeners.svg b/docs/graphics/listeners.svg
new file mode 100644 (file)
index 0000000..681d1ad
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="61 72 661 400" width="661pt" height="400pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2009-04-08 19:52:28 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="black"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker_2" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="gray"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id10_Graphic" filter="url(#Shadow)"/></g><g id="id10_Graphic"><rect x="166.578" y="85.4216" width="130.422" height="29.3676" fill="white"/><rect x="166.578" y="85.4216" width="130.422" height="29.3676" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(171.578 87.1054)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="35.47223" y="10" textLength="49.47754">«interface»</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="25.866273" y="23" textLength="68.689453">JPFListener</tspan></text></g><rect x="72" y="197" width="171" height="98" fill="white"/><rect x="72" y="197" width="171" height="98" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(77 197)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="121.37695">executeInstruction(vm)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="119.384766">instructionExecuted(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="87.375">threadStarted(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="53" textLength="89.373047">objectCreated(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="67" textLength="121.38867">choiceGeneratorSet(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="81" textLength="156.75">choiceGeneratorAdvanced(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="95" textLength="16.669922">. . .</tspan></text><rect x="72" y="171" width="171" height="26" fill="white"/><rect x="72" y="171" width="171" height="26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(77 171)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="55.76123" y="10" textLength="49.47754">«interface»</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="48.15918" y="23" textLength="64.68164">VMListener</tspan></text><rect x="261" y="197" width="135" height="84" fill="white"/><rect x="261" y="197" width="135" height="84" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(266 197)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="118.7168">searchStarted(search)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="94.04883">stateAdvanced(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="106.70508">stateBacktracked(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="53" textLength="52.02539">propertyV</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="51.814453" y="53" textLength="50.021484">iolated(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="67" textLength="96.035156">searchFinished(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="81" textLength="16.669922">. . .</tspan></text><rect x="261" y="171" width="135" height="26" fill="white"/><rect x="261" y="171" width="135" height="26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(266 171)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="37.76123" y="10" textLength="49.47754">«interface»</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="19.146484" y="23" textLength="86.70703">SearchListener</tspan></text><rect x="594" y="197" width="117" height="28" fill="white"/><rect x="594" y="197" width="117" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(599 197)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="94.6875">check(search,vm)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="100.03125">getErrorMessage()</tspan></text><rect x="594" y="171" width="117" height="26" fill="white"/><rect x="594" y="171" width="117" height="26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(599 171)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="28.76123" y="10" textLength="49.47754">«interface»</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="28.826172" y="23" textLength="49.347656">Property</tspan></text><rect x="594" y="284.737" width="117" height="28" fill="white"/><rect x="594" y="284.737" width="117" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(599 284.737)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="106.03711">check(search,vm) {}</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="16.669922">. . .</tspan></text><rect x="594" y="270.737" width="117" height="14" fill="white"/><rect x="594" y="270.737" width="117" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(599 270.737)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="6.4814453" y="11" textLength="94.03711">GenericProperty</tspan></text><rect x="180" y="373.263" width="171" height="42" fill="white"/><rect x="180" y="373.263" width="171" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(185 373.263)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="140.0625">instructionExecuted(vm) {}</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="130.06641">searchStarted(search) {}</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="16.669922">. . .</tspan></text><rect x="180" y="359.263" width="171" height="14" fill="white"/><rect x="180" y="359.263" width="171" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(185 359.263)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="34.489258" y="11" textLength="92.021484">ListenerAdapter</tspan></text><rect x="425.211" y="196.631" width="132.789" height="42" fill="white"/><rect x="425.211" y="196.631" width="132.789" height="42" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(430.211 196.631)" fill="#404040"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="#404040" x="0" y="11" textLength="120.058594">publishStart(publisher)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="#404040" x="0" y="25" textLength="98.04492">publishFinished(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="#404040" x="0" y="39" textLength="16.669922">. . .</tspan></text><rect x="425.211" y="170.631" width="132.789" height="26" fill="white"/><rect x="425.211" y="170.631" width="132.789" height="26" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(430.211 170.631)" fill="#404040"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="#404040" x="36.65573" y="10" textLength="49.47754">«interface»</tspan><tspan font-family="Helvetica" font-size="12" font-weight="bold" fill="#404040" x="5.3818047" y="23" textLength="112.02539">PublisherExtension</tspan></text><rect x="477" y="419" width="153" height="42" fill="white"/><rect x="477" y="419" width="153" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(482 419)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="140.0625">instructionExecuted(vm) {}</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="130.06641">searchStarted(search) {}</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="16.669922">. . .</tspan></text><rect x="477" y="405" width="153" height="14" fill="white"/><rect x="477" y="405" width="153" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(482 405)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x=".8154297" y="11" textLength="141.36914">PropertyListenerAdapter</tspan></text><line x1="652.5" y1="270.737" x2="652.5" y2="238.5" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="198" y1="360" x2="198" y2="310.5" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="306" y1="362.211" x2="306" y2="294.711" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="189" y1="169.526" x2="189" y2="129.026" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="279" y1="169.526" x2="279" y2="129.026" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 342 360 L 342 333 L 445.578 333 L 445.578 252.722" marker-end="url(#UMLInheritance_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="540" y1="405" x2="540" y2="252.722" marker-end="url(#UMLInheritance_Marker_2)" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 513 405 L 513 306 L 333 306 L 332.68563 294.70577" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="612" y1="405" x2="612" y2="328.5" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 495 405 L 495 324 L 225 324 L 224.78847 310.49834" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/docs/graphics/mji-call.svg b/docs/graphics/mji-call.svg
new file mode 100644 (file)
index 0000000..d5db418
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="13 12 553 462" width="553pt" height="462pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2011-05-24 04:08:50 +0000</dc:date></metadata><defs><font-face font-family="Monaco" font-size="12" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><font-face font-family="Monaco" font-size="9" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-857.14286" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="588.0188" height="768.0188"/><g><title>Layer 1</title><text transform="translate(332 21.125)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="57.609375">package </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="57.609375" y="12" textLength="36.00586">x.y.z</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="93.615234" y="12" textLength="7.201172">;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="43.20703">class </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="43.20703" y="28" textLength="7.201172">C</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="50.408203" y="28" textLength="14.402344"> {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="44" textLength="36.00586">  ...</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="60" textLength="14.402344">  </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="14.402344" y="60" textLength="158.42578">native int foo (int p)</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="172.82812" y="60" textLength="7.201172">;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="76" textLength="7.201172">}</tspan></text><text transform="translate(84 352.125)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="43.20703">class </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="43.20703" y="12" textLength="79.21289">JPF_x_y_z_C</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="122.41992" y="12" textLength="14.402344"> {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="36.00586">  ...</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="44" textLength="14.402344">  </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="14.402344" y="44" textLength="432.0703">public static int foo__I__I (MJIEnv env, int thisRef, int p)</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="446.47266" y="44" textLength="14.402344"> {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="60" textLength="324.05273">    int d = env.getIntField(thisRef, &quot;data&quot;);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="76" textLength="43.20703">    ..</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="92" textLength="21.603516">  }</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="108" textLength="7.201172">}</tspan></text><text transform="translate(157 51.125)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="21.603516">...</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="122.41992">int a = c.foo(3);</tspan></text><text transform="translate(100 82.125)" fill="black"><tspan font-family="Monaco" font-size="9" font-weight="500" x="0" y="9" textLength="16.202637">...</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" x="0" y="21" textLength="37.806152">aload_1</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" x="0" y="33" textLength="37.806152">icont_3</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" x="0" y="45" textLength="86.41406">invokevirtual ..</tspan></text><text transform="translate(39 215.125)" fill="gray"><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="12" textLength="230.4375">executeMethod (ThreadInfo ti..){</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="28" textLength="216.03516">  MJIEnv env = ti.getMJIEnv();</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="44" textLength="237.63867">  Object[] args = getArguments();</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="60" textLength="28.804688">  ..</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="76" textLength="201.63281">  mth.invoke(peerCls, args);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="92" textLength="28.804688">  ..</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="108" textLength="7.201172">}</tspan></text><text transform="translate(328 198.125)" fill="gray"><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="12" textLength="108.01758">ClassInfo (..){</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="28" textLength="223.23633">  peerCls = loadNativePeer(..);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="44" textLength="28.804688">  ..</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="0" y="60" textLength="7.201172">}</tspan></text><rect x="314.25" y="168.5" width="103.75" height="14" fill="white"/><rect x="314.25" y="168.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(319.25 168.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="90.046875">executeMethod()</tspan></text><rect x="314.25" y="154.5" width="103.75" height="14" fill="white"/><rect x="314.25" y="154.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(319.25 154.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="41.34961">peerCls</tspan></text><rect x="314.25" y="140.5" width="103.75" height="14" fill="white"/><rect x="314.25" y="140.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(319.25 140.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="19.869141" y="11" textLength="54.01172">ClassInfo</tspan></text><rect x="186.25" y="187.5" width="103.75" height="14" fill="white"/><rect x="186.25" y="187.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(191.25 187.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="90.046875">executeMethod()</tspan></text><rect x="186.25" y="173.5" width="103.75" height="14" fill="white"/><rect x="186.25" y="173.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(191.25 173.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="46.02539">methods</tspan></text><rect x="186.25" y="159.5" width="103.75" height="14" fill="white"/><rect x="186.25" y="159.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(191.25 159.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="15.855469" y="11" textLength="62.039062">NativePeer</tspan></text><path d="M 323 53 C 308.0015 50.3336 291.9986 45.9999 278 45 C 264.0014 44.0001 250.6655 44.0003 239 47 C 230.64732 49.147832 223.66006 53.688744 216.57229 58.05222" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 175 89 C 170.0005 93.3329 164.6662 96.83385 160 102 C 157.38073 104.899905 154.97109 108.325474 152.59469 111.83394" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 139 136 C 127.0012 148.9987 119.3317 161.83465 103 175 C 86.6683 188.16535 53.49875 203.50115 41 215 C 28.50125 226.49885 25.50025 234.001 28 244 C 29.9417 251.7668 40.130086 259.93767 48.955984 268.04108" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 88 300 C 94.3327 309.3324 111.49955 319.6675 107 328 C 102.50045 336.3325 67.9993 342.3341 61 350 C 54.0007 357.6659 60.16715 366.83405 65 374 C 68.37733 379.00777 75.174067 383.2026 81.805417 387.43634" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="265.25" y="295.5" width="103.75" height="42" fill="white"/><rect x="265.25" y="295.5" width="103.75" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(270.25 295.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="65.35547">getXField(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="64.68164">setXField(..)</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="10.001953">...</tspan></text><rect x="265.25" y="281.5" width="103.75" height="14" fill="white"/><rect x="265.25" y="281.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(270.25 281.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="54.041016">threadInfo</tspan></text><rect x="265.25" y="267.5" width="103.75" height="14" fill="white"/><rect x="265.25" y="267.5" width="103.75" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(270.25 267.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="25.86914" y="11" textLength="42.01172">MJIEnv</tspan></text><rect x="393.25" y="266.5" width="90" height="14" fill="white"/><rect x="393.25" y="266.5" width="90" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(398.25 266.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="19.347656">env</tspan></text><rect x="393.25" y="252.5" width="90" height="14" fill="white"/><rect x="393.25" y="252.5" width="90" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(398.25 252.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="9.0009766" y="11" textLength="61.998047">ThreadInfo</tspan></text><line x1="394" y1="275" x2="378.9" y2="275" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="314" y1="163" x2="298.9" y2="163" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 490 376 C 500.3323 365.0011 512.6675 354.9988 521 343 C 529.3325 331.0012 538.3335 317.332 540 304 C 541.6665 290.668 535.6662 273.9989 531 263 C 527.83756 255.54567 523.1433 250.53967 518.4748 245.49341" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 441 89 C 458.3316 96.9992 481.3345 102.6677 493 113 C 504.6655 123.3323 510.0001 135.16825 511 151 C 511.83488 164.21889 505.69802 181.85666 501.32146 198.37727" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(482 115.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="10.555176" y="14" textLength="24.889648">JPF</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="7.051758" y="31" textLength="31.896484">class</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".4243164" y="48" textLength="45.151367">loading</tspan></text><text transform="translate(28 157.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="19.555176" y="14" textLength="24.889648">JPF</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="8.6518555" y="31" textLength="46.69629">method</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".4794922" y="48" textLength="63.041016">invocation</tspan></text><path d="M 422 412 C 431.3324 409.6669 443.50065 409.16625 450 405 C 456.49935 400.83375 462.3332 393.49935 461 387 C 459.6668 380.50065 455.6653 373.9992 442 366 C 430.2377 359.11475 407.60562 350.7459 388.13989 342.8098" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(400 317.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="9.555176" y="14" textLength="24.889648">JPF</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="3.3208008" y="31" textLength="37.358398">object</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".21386719" y="48" textLength="43.572266">access</tspan></text><text transform="translate(82 22.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".4897461" y="14" textLength="112.02051">JPF (model) class</tspan></text><text transform="translate(307 445.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".21386719" y="14" textLength="106.572266">JVM (Java) class</tspan></text><line x1="24" y1="133" x2="541" y2="133" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="10,3,2,3"/><text transform="translate(109 301.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".41748047" y="14" textLength="52.910156">Java refl</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="53.327637" y="14" textLength="62.254883">ection call</tspan></text><text transform="translate(488 310.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".09667969" y="14" textLength="19.448242">refl</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="19.544922" y="14" textLength="37.358398">ection</tspan></text></g></g></svg>
diff --git a/docs/graphics/mji-functions.svg b/docs/graphics/mji-functions.svg
new file mode 100644 (file)
index 0000000..bac9b5c
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="20 17 583 414" width="583pt" height="414pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2011-05-24 04:01:26 +0000</dc:date></metadata><defs><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="SharpArrow_Marker" viewBox="-6 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M -5 0 L 3 3 L 0 0 L 0 0 L 3 -3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="SharpArrow_Marker_2" viewBox="-4 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 5 0 L -3 -3 L 0 0 L 0 0 L -3 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Monaco" font-size="12" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-857.14286" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><rect x="57" y="164" width="451" height="55" fill="red" fill-opacity=".11"/><rect x="57" y="164" width="451" height="55" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="288" y1="152.9" x2="288" y2="235" marker-start="url(#SharpArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="180" y1="155" x2="180" y2="228.1" marker-end="url(#SharpArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="37" y1="192" x2="540" y2="192" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="10,3,2,3"/><text transform="translate(34 259.494)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="43.20703">class </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="43.20703" y="12" textLength="122.41992">JPF_x_y_z_MyClass</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="165.62695" y="12" textLength="14.402344"> {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="144.02344">  public static int </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="44" textLength="43.20703">      </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="43.20703" y="44" textLength="331.2539">foo__ILjava_lang_String_2__Ljava_lang_String_2</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="374.46094" y="44" textLength="180.0293"> (MJIEnv env, int objRef,</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="60" textLength="518.48438">                                                      int i, int sRef) {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="76" textLength="295.24805">    String s = env.getStringObject(sRef);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="92" textLength="43.20703">    ..</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="108" textLength="230.4375">    int ref = env.newString(..);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="124" textLength="108.01758">    return ref;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="140" textLength="21.603516">  }</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="156" textLength="7.201172">}</tspan></text><text transform="translate(83 31.125)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="12" textLength="57.609375">package </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="57.609375" y="12" textLength="36.00586">x.y.z</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="93.615234" y="12" textLength="7.201172">;</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="28" textLength="43.20703">class </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="43.20703" y="28" textLength="50.408203">MyClass</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="93.615234" y="28" textLength="14.402344"> {</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="44" textLength="28.804688">  ..</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="60" textLength="115.21875">  native String </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="115.21875" y="60" textLength="21.603516">foo</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="136.822266" y="60" textLength="14.402344"> (</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="151.22461" y="60" textLength="21.603516">int</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="172.82812" y="60" textLength="28.804688"> i, </tspan><tspan font-family="Monaco" font-size="12" font-weight="500" fill="red" x="201.63281" y="60" textLength="43.20703">String</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="244.83984" y="60" textLength="28.804688"> s);</tspan><tspan font-family="Monaco" font-size="12" font-weight="500" x="0" y="76" textLength="7.201172">}</tspan></text><path d="M 252 174 L 321 174 C 323.76142 174 326 176.23858 326 179 L 326 203 C 326 205.76142 323.76142 208 321 208 L 252 208 C 249.23858 208 247 205.76142 247 203 L 247 179 C 247 176.23858 249.23858 174 252 174 Z" fill="white"/><path d="M 252 174 L 321 174 C 323.76142 174 326 176.23858 326 179 L 326 203 C 326 205.76142 323.76142 208 321 208 L 252 208 C 249.23858 208 247 205.76142 247 203 L 247 179 C 247 176.23858 249.23858 174 252 174 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(252 183)" fill="black"><tspan font-family="Monaco" font-size="12" font-weight="500" x="12.896484" y="12" textLength="43.20703">MJIEnv</tspan></text><text transform="translate(351 169.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".43115234" y="14" textLength="73.137695">JPF objects</tspan></text><text transform="translate(349 195.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".08984375" y="14" textLength="77.820312">Java objects</tspan></text><path d="M 143 174 L 222 174 C 224.76142 174 227 176.23858 227 179 L 227 203 C 227 205.76142 224.76142 208 222 208 L 143 208 C 140.23858 208 138 205.76142 138 203 L 138 179 C 138 176.23858 140.23858 174 143 174 Z" fill="white"/><path d="M 143 174 L 222 174 C 224.76142 174 227 176.23858 227 179 L 227 203 C 227 205.76142 224.76142 208 222 208 L 143 208 C 140.23858 208 138 205.76142 138 203 L 138 179 C 138 176.23858 140.23858 174 143 174 Z" stroke="gray" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(143 183)" fill="gray"><tspan font-family="Monaco" font-size="12" font-weight="500" fill="gray" x="3.4941406" y="12" textLength="72.01172">NativePeer</tspan></text><text transform="translate(363 46.2916)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".20019531" y="14" textLength="85.59961">JPF executed</tspan></text><text transform="translate(388 380.062)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".46923828" y="14" textLength="112.061523">host VM executed</tspan></text><text transform="translate(110 116.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="86.05078">- method lookup</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="25" textLength="123.38672">- parameter conversion</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="39" textLength="61.365234">- invocation</tspan></text><text transform="translate(299 225.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="13.330078">- fi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="13.330078" y="11" textLength="56.695312">eld access</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="25" textLength="100.716797">- object conversion</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="39" textLength="119.35547">- JPF intrinsics access</tspan></text><text transform="translate(257 26.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".0166015625" y="14" textLength="4.9697266">&quot;</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="4.986328" y="14" textLength="38.13086">Model</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="43.117188" y="14" textLength="43.86621">&quot; Class</tspan></text><text transform="translate(248 404.125)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x=".45458984" y="14" textLength="4.9697266">&quot;</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="5.4243164" y="14" textLength="69.254883">NativePeer</tspan><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="blue" x="74.6792" y="14" textLength="43.86621">&quot; Class</tspan></text><text transform="translate(336 146.125)" fill="red"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" fill="red" x=".0546875" y="14" textLength="174.89062">MJI - &quot;Model Java Interface&quot;</tspan></text></g></g></svg>
diff --git a/docs/graphics/mji-mangling.svg b/docs/graphics/mji-mangling.svg
new file mode 100644 (file)
index 0000000..7e59270
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="62 86 481 369" width="481pt" height="369pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-02 21:54:02 +0000</dc:date></metadata><defs><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="blue"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="red"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="fuchsia"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_4" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#ff8000"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-857.14286" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="576" height="734"/><g><title>Layer 1</title><text transform="translate(76 177.125)" fill="black"><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="11" textLength="57.609375">package </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="57.609375" y="11" textLength="21.603516">x.y</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="79.21289" y="11" textLength="7.201172">;</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="39" textLength="43.20703">class </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="red" x="43.20703" y="39" textLength="50.408203">MyClass</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="93.615234" y="39" textLength="14.402344"> {</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="53" textLength="93.615234">  native int </tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="67" textLength="36.00586">     </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="purple" x="36.00586" y="67" textLength="21.603516">foo</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="57.609375" y="67" textLength="14.402344"> (</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="#ff8000" x="72.01172" y="67" textLength="108.01758">int i, String s</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="180.0293" y="67" textLength="14.402344">);</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="81" textLength="7.201172">}</tspan></text><text transform="translate(309 191.125)" fill="black"><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="11" textLength="72.01172">class JPF_</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="72.01172" y="11" textLength="21.603516">x_y</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="93.615234" y="11" textLength="7.201172">_</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="red" x="100.816406" y="11" textLength="50.408203">MyClass</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="151.22461" y="11" textLength="14.402344"> {</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="39" textLength="144.02344">  public static int </tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="53" textLength="28.804688">    </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="purple" x="28.804688" y="53" textLength="21.603516">foo</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="50.408203" y="53" textLength="165.62695">__ILjava_lang_String_2 </tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="67" textLength="208.83398">     (MJIEnv env, int objref,</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="81" textLength="43.20703">      </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="#ff8000" x="43.20703" y="81" textLength="108.01758">int i, int sRef</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="151.22461" y="81" textLength="7.201172">)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="95" textLength="57.609375">    {..}</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="109" textLength="7.201172">}</tspan></text><path d="M 148 176 C 168.6646 166.6676 188.16885 153.6661 210 148 C 231.83115 142.3339 256.83555 139.83355 279 142 C 301.16445 144.16645 325.0018 153.0008 343 161 C 357.56026 167.47123 367.7608 176.12565 378.89088 184.31325" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 161 202 C 170.6657 191.0011 177.3346 179.49895 190 169 C 202.6654 158.50105 220.0017 145.83265 237 139 C 253.9983 132.16735 274.50175 128.3333 292 128 C 309.49825 127.6667 325.6683 132.0005 342 137 C 358.3317 141.9995 375.83475 149.83415 390 158 C 401.11917 164.40987 409.98157 172.25904 419.24353 179.85215" marker-end="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 126 250 C 149.6643 256.666 172.6691 267.0003 197 270 C 221.3309 272.9997 249.83555 272.16625 272 268 C 290.619 264.50019 305.24373 256.05959 320.90548 248.90456" marker-end="url(#FilledArrow_Marker_3)" stroke="fuchsia" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 196 254 C 211.3318 260.3327 226.0016 268.83375 242 273 C 257.9984 277.16625 275.0017 279.49995 292 279 C 305.83104 278.5932 320.10685 274.87584 334.28319 271.88872" marker-end="url(#FilledArrow_Marker_4)" stroke="#ff8000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><line x1="288" y1="97" x2="288" y2="331" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="16,9,1,9"/><text transform="translate(144 103.125)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="0" y="14" textLength="77.027344">Model Class</tspan></text><text transform="translate(359 103.125)" fill="black"><tspan font-family="Helvetica" font-size="14" font-style="italic" font-weight="500" x="0" y="14" textLength="112.041016">Native Peer Class</tspan></text><text transform="translate(332 310.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="11" textLength="96.708984">model parameters</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="25" textLength="94.61133">(refs become &apos;int&apos;)</tspan></text><text transform="translate(384 346.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="11" textLength="83.35547">MJI parameters</tspan></text><path d="M 452 279 L 452 318 L 437 318" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 491 269 L 491 354 L 476 354" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 532 248 L 532 390 L 517 390" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(372 382.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="11" textLength="133.39453">JNI conformant mangling</tspan></text><text transform="translate(145 319.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x=".29101562" y="11" textLength="42.708984">boolean</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="20.318359" y="25" textLength="22.68164">byte</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="19.65625" y="39" textLength="23.34375">char</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="16.322266" y="53" textLength="26.677734">short</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="30.326172" y="67" textLength="12.673828">int</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="20.3125" y="81" textLength="22.6875">long</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="20.318359" y="95" textLength="6">fl</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="26.31836" y="95" textLength="16.681641">oat</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="6.9648438" y="109" textLength="36.035156">double</tspan></text><text transform="translate(201 320.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="7.330078">Z</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="8.0039062">B</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="8.6660156">C</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="53" textLength="8.0039062">S</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="67" textLength="3.3339844">I</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="81" textLength="6">J</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="95" textLength="7.330078">F</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="109" textLength="8.6660156">D</tspan></text><text transform="translate(257 336.125)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="21.603516">&apos;_&apos;</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="21.603516">&apos;;&apos;</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="39" textLength="21.603516">&apos;[&apos;</tspan></text><text transform="translate(291 337.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="13.347656">_1</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="13.347656">_2</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="13.347656">_3</tspan></text><text transform="translate(224 383.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="36.697266">&lt;type&gt;</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="36.697266" y="11" textLength="3.3339844"> </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="40.03125" y="11" textLength="14.402344">[]</tspan></text><text transform="translate(289 383.125)" fill="black"><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="11" textLength="7.201172">[</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="7.201172" y="11" textLength="36.697266">&lt;type&gt;</tspan></text><text transform="translate(250 400.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="15.333984">x.y</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="14.449219" y="11" textLength="10.6640625">.Z</tspan></text><text transform="translate(291 400.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="52.69922">Lx_y_Z_2</tspan></text><text transform="translate(224 417.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="0" y="11" textLength="36.697266">&lt;func&gt;</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="36.697266" y="11" textLength="17.994141"> (..)</tspan></text><text transform="translate(291 417.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="11" textLength="36.697266">&lt;func&gt;</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="36.697266" y="11" textLength="14.402344">__</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="51.09961" y="11" textLength="63.38086">&lt;signature&gt;</tspan></text></g></g></svg>
diff --git a/docs/graphics/new-testing.svg b/docs/graphics/new-testing.svg
new file mode 100644 (file)
index 0000000..4254ad1
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="10 15 718 319" width="718pt" height="319pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-05 00:34:03 +0000</dc:date></metadata><defs><font-face font-family="Courier" font-size="10" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><font-face font-family="Courier" font-size="10" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="black"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="756" height="553"/><g><title>Layer 1</title><text transform="translate(339.4 252.055)" fill="blue"><tspan font-family="Courier" font-size="10" font-weight="bold" fill="blue" x="0" y="10" textLength="30.004883">@Test</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="30.004883" y="10" textLength="78.012695"> public void </tspan><tspan font-family="Courier" font-size="10" font-weight="bold" fill="blue" x="108.01758" y="10" textLength="30.004883">testX</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="138.02246" y="10" textLength="24.003906">() {</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="22" textLength="216.03516">  if (verifyNoPropertyViolation()) {</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="34" textLength="24.003906">    </tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="red" x="24.003906" y="34" textLength="156.02539">String s = &quot;one&quot; + &quot; two&quot;;</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="red" x="0" y="46" textLength="186.03027">    assert &quot;one two&quot;.equals(s);</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="58" textLength="18.00293">  }</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="70" textLength="6.0009766">}</tspan></text><path d="M 361.58823 277.92 L 528.48 277.92 L 528.48 299.92 L 361.58823 299.92 Z" stroke="#fd7673" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 196.644 234.841 L 314.109 234.841 C 317.4227 234.841 320.109 237.52729 320.109 240.841 L 320.109 307.503 C 320.109 310.8167 317.4227 313.503 314.109 313.503 L 196.644 313.503 C 193.33029 313.503 190.644 310.8167 190.644 307.503 L 190.644 240.841 C 190.644 237.52729 193.33029 234.841 196.644 234.841 Z" fill="#e9ffe4"/><path d="M 196.644 234.841 L 314.109 234.841 C 317.4227 234.841 320.109 237.52729 320.109 240.841 L 320.109 307.503 C 320.109 310.8167 317.4227 313.503 314.109 313.503 L 196.644 313.503 C 193.33029 313.503 190.644 310.8167 190.644 307.503 L 190.644 240.841 C 190.644 237.52729 193.33029 234.841 196.644 234.841 Z" stroke="#aeffa8" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 85.6174 26.126 L 364.9384 26.126 C 368.2521 26.126 370.9384 28.812292 370.9384 32.126 L 370.9384 199.694 C 370.9384 203.00771 368.2521 205.694 364.9384 205.694 L 85.6174 205.694 C 82.30369 205.694 79.6174 203.00771 79.6174 199.694 L 79.6174 32.126 C 79.6174 28.812292 82.30369 26.126 85.6174 26.126 Z" fill="#fff8e0"/><path d="M 85.6174 26.126 L 364.9384 26.126 C 368.2521 26.126 370.9384 28.812292 370.9384 32.126 L 370.9384 199.694 C 370.9384 203.00771 368.2521 205.694 364.9384 205.694 L 85.6174 205.694 C 82.30369 205.694 79.6174 203.00771 79.6174 199.694 L 79.6174 32.126 C 79.6174 28.812292 82.30369 26.126 85.6174 26.126 Z" stroke="#ffcf9c" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(382.995 68.2183)" fill="blue"><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="10" textLength="48.007812">boolean </tspan><tspan font-family="Courier" font-size="10" font-weight="bold" fill="blue" x="48.007812" y="10" textLength="150.02441">verifyNoPropertyViolation</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="198.03223" y="10" textLength="132.021484"> (String... jpfArgs) {</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="22" textLength="30.004883">  ...</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="34" textLength="282.0459">  args = append(jpfArgs, caller.getClassName(),</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="46" textLength="294.04785">                         caller.getMethodName());</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="58" textLength="36.00586">    ..</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="70" textLength="216.03516">    JPF jpf = createAndRunJPF(args);</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="82" textLength="42.006836">    ...</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="94" textLength="210.03418">    errors = jpf.getSearchErrors();</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="106" textLength="156.02539">    if (!errors.isEmpty())</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="118" textLength="210.03418">      throw new AssertionError(..);</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="130" textLength="42.006836">    ...</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="142" textLength="276.04492">  return false; // -&gt; don&apos;t execute test block</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="154" textLength="6.0009766">}</tspan></text><text transform="translate(24.5953 63.4089)" fill="blue"><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="10" textLength="48.007812">boolean </tspan><tspan font-family="Courier" font-size="10" font-weight="bold" fill="blue" x="48.007812" y="10" textLength="150.02441">verifyNoPropertyViolation</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="198.03223" y="10" textLength="30.004883">(..){</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="22" textLength="84.01367">  return true;</tspan><tspan font-family="Courier" font-size="10" font-weight="500" fill="blue" x="0" y="34" textLength="6.0009766">}</tspan></text><rect x="251.28" y="45.6337" width="90" height="11" fill="white"/><rect x="251.28" y="45.6337" width="90" height="11" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(256.28 45.6337)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="23.497559">start()</tspan></text><rect x="251.28" y="34.6337" width="90" height="11" fill="white"/><rect x="251.28" y="34.6337" width="90" height="11" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(256.28 34.6337)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="bold" x="20.993652" y="9" textLength="38.012695">JPFShell</tspan></text><rect x="231.548" y="95.3416" width="129.465" height="88" fill="white"/><rect x="231.548" y="95.3416" width="129.465" height="88" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(236.548 95.3416)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="18.505371">runT</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="17.507812" y="9" textLength="71.507812">estsOfThisClass()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="20" textLength="79.532227">createAndRunJPF()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="31" textLength="7.501465">...</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="42" textLength="73.023926">verifyNoPropertyV</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="72.865723" y="42" textLength="34.514648">iolation()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="53" textLength="61.519043">verifyPropertyV</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="61.36084" y="53" textLength="34.514648">iolation()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="64" textLength="110.55762">verifyUnhandledException()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="75" textLength="85.012207">verifyAssertionError()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="86" textLength="7.501465">...</tspan></text><rect x="231.548" y="84.3416" width="129.465" height="11" fill="white"/><rect x="231.548" y="84.3416" width="129.465" height="11" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(236.548 84.3416)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="bold" x="42.558672" y="9" textLength="5.4975586">T</tspan><tspan font-family="Helvetica" font-size="9" font-weight="bold" x="47.392656" y="9" textLength="29.513672">estJPF</tspan></text><rect x="208.904" y="253.802" width="90" height="22" fill="white"/><rect x="208.904" y="253.802" width="90" height="22" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(213.904 253.802)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="26.503418">testX()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="20" textLength="7.501465">...</tspan></text><rect x="208.904" y="242.802" width="90" height="11" fill="white"/><rect x="208.904" y="242.802" width="90" height="11" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(213.904 242.802)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="bold" x="1.3193359" y="9" textLength="65.01709">MyJPFProjectT</tspan><tspan font-family="Helvetica" font-size="9" font-weight="bold" x="65.67285" y="9" textLength="13.0078125">est</tspan></text><line x1="296.28021" y1="84.3416" x2="296.28013" y2="70.1337" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="253.904" y1="242.802" x2="253.904" y2="196.842" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(96.2759 34.6337)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x=".32763672" y="10" textLength="33.344727">jpf-core</tspan></text><text transform="translate(202.017 293.506)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x=".20458984" y="10" textLength="80.59082">tested JPF project</tspan></text><rect x="87.5524" y="117.184" width="129.465" height="44" fill="white"/><rect x="87.5524" y="117.184" width="129.465" height="44" stroke="#4f4f4f" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(92.5524 117.184)" fill="black"><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="9" textLength="73.023926">verifyNoPropertyV</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="72.865723" y="9" textLength="34.514648">iolation()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="20" textLength="61.519043">verifyPropertyV</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="61.36084" y="20" textLength="34.514648">iolation()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="31" textLength="110.55762">verifyUnhandledException()</tspan><tspan font-family="Helvetica" font-size="9" font-weight="500" x="0" y="42" textLength="85.012207">verifyAssertionError()</tspan></text><rect x="87.5524" y="106.184" width="129.465" height="11" fill="white"/><rect x="87.5524" y="106.184" width="129.465" height="11" stroke="#4f4f4f" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(92.5524 106.184)" fill="#4f4f4f"><tspan font-family="Helvetica" font-size="9" font-weight="bold" fill="#4f4f4f" x="26.799883" y="9" textLength="37.015137">JPF_.._T</tspan><tspan font-family="Helvetica" font-size="9" font-weight="bold" fill="#4f4f4f" x="63.151445" y="9" textLength="29.513672">estJPF</tspan></text><line x1="217.0174" y1="133.75498" x2="231.548" y2="133.77092" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(127.285 89.2183)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x=".26123047" y="10" textLength="49.47754">native peer</tspan></text><text transform="translate(538.274 280.529)" fill="red"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="red" x=".20214844" y="10" textLength="45.576172">code verifi</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="red" x="45.77832" y="10" textLength="45.01953">ed by JPF</tspan></text><text transform="translate(39.189 166.149)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="11" textLength="121.40039">executed by JPF when</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="25" textLength="62.70703">running test</tspan></text><text transform="translate(355.357 34.6337)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="11" textLength="118.734375">executed outside JPF </tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x="0" y="25" textLength="111.36914">(starting JPF on test)</tspan></text></g></g></svg>
diff --git a/docs/graphics/por-mark.svg b/docs/graphics/por-mark.svg
new file mode 100644 (file)
index 0000000..f47b060
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="109 71 356 231" width="356pt" height="231pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-12-02 07:35:36 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 8 8" markerWidth="8" markerHeight="8" color="blue"><g><path d="M 5.5 0 L 0 -2.0625 L 0 2.0625 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -4 8 8" markerWidth="8" markerHeight="8" color="black"><g><path d="M 5.5 0 L 0 -2.0625 L 0 2.0625 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" viewBox="-1 -4 8 8" markerWidth="8" markerHeight="8" color="red"><g><path d="M 5.5 0 L 0 -2.0625 L 0 2.0625 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="576" height="734"/><g><title>Layer 1</title><g><xl:use xl:href="#id30_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id18_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id20_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id21_Graphic" filter="url(#Shadow)"/></g><path d="M 143.59697 197.31011 C 114.34375 186.125 126.0092 91.96476 172.67462 108.03125 C 177.00414 76.712532 231.26975 81.795915 230.91499 108.03125 C 264.94118 74.475928 308.42462 141.38457 279.25828 174.93989 C 314.25644 191.20838 278.81664 278.8608 250.09375 264.21875 C 247.79505 288.62357 196.44716 297.1639 191.94026 264.21875 C 162.86442 299.40259 102.23666 245.30548 143.59697 197.31011 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id30_Graphic"><circle cx="192" cy="105" r="9.0000144" fill="white"/><circle cx="192" cy="105" r="9.0000144" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><circle cx="191" cy="157" r="9.0000144" fill="white"/><circle cx="191" cy="157" r="9.0000144" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(188.8 150)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="8.0039062">X</tspan></text><circle cx="238" cy="163" r="9.0000144" fill="white"/><circle cx="238" cy="163" r="9.0000144" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(235.8 156)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="8.0039062">X</tspan></text><circle cx="193" cy="215" r="9.0000144" fill="white"/><circle cx="193" cy="215" r="9.0000144" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(190.8 208)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="6.673828">1</tspan></text><circle cx="215" cy="243" r="9.0000144" fill="white"/><circle cx="215" cy="243" r="9.0000144" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(212.8 236)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="8.0039062">X</tspan></text><circle cx="178" cy="258" r="9.0000144" fill="white"/><circle cx="178" cy="258" r="9.0000144" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(175.8 251)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="8.0039062">X</tspan></text><line x1="206.19382" y1="246.57008" x2="193.66406" y2="251.64973" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="230" cy="199" r="9.0000144" fill="white"/><circle cx="230" cy="199" r="9.0000144" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(227.8 192)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="6.673828">1</tspan></text><circle cx="251" cy="227" r="9.0000144" fill="white"/><circle cx="251" cy="227" r="9.0000144" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(248.8 220)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="6.673828">2</tspan></text><line x1="221.27816" y1="202.77161" x2="208.51399" y2="208.29126" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="198.86986" y1="222.47071" x2="204.55829" y2="229.71052" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="242.31658" y1="230.85931" x2="230.44564" y2="236.1353" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="224" cy="130" r="9.0000144" fill="white"/><circle cx="224" cy="130" r="9.0000144" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(221.8 123)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="8.0039062">X</tspan></text><line x1="199.48694" y1="110.849185" x2="210.68166" y2="119.595074" marker-end="url(#FilledArrow_Marker_2)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="216.64689" y1="136.01617" x2="204.08037" y2="146.29784" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="227.71114" y1="138.747725" x2="231.39875" y2="147.43998" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id18_Graphic"><rect x="342.5" y="153.125" width="65" height="13" fill="white"/><rect x="342.5" y="153.125" width="65" height="13" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(347.5 153.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".29541016" y="10" textLength="34.22998">static fi</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="34.52539" y="10" textLength="20.179199">elds</tspan></text></g><path d="M 330.0725 188.69105 C 307.04069 182.125 316.2252 126.84966 352.9661 136.28125 C 356.37484 117.89607 399.09956 120.880195 398.82025 136.28125 C 425.60995 116.58311 459.8456 155.86081 436.88218 175.55895 C 464.43714 185.10912 436.53446 236.56415 413.92019 227.96875 C 412.11036 242.29523 371.68283 247.3087 368.13443 227.96875 C 345.24227 248.62289 297.50846 216.866 330.0725 188.69105 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id20_Graphic"><rect x="343.5" y="179.125" width="23" height="13" fill="white"/><rect x="343.5" y="179.125" width="23" height="13" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.5 179.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".08154297" y="10" textLength="12.836914">T1</tspan></text></g><g id="id21_Graphic"><rect x="343.5" y="203.125" width="23" height="13" fill="white"/><rect x="343.5" y="203.125" width="23" height="13" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(348.5 203.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x=".08154297" y="10" textLength="12.836914">T2</tspan></text></g><line x1="342.00935" y1="153.1525" x2="240.58475" y2="133.2538" marker-end="url(#FilledArrow_Marker_3)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="343.00284" y1="186.9087" x2="246.80439" y2="197.20193" marker-end="url(#FilledArrow_Marker_3)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="343.00684" y1="211.62867" x2="267.66967" y2="224.21505" marker-end="url(#FilledArrow_Marker_3)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(387.5 190.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x=".49023438" y="11" textLength="40.019531">root set</tspan></text><text transform="translate(158.5 181.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" x=".15234375" y="11" textLength="26.695312">heap</tspan></text><text transform="translate(288.5 117.125)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x=".1484375" y="11" textLength="42.703125">phase 1</tspan></text><text transform="translate(153.5 129.125)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x=".1484375" y="11" textLength="42.703125">phase 2</tspan></text><text transform="translate(282 257.125)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="164.484375">1 &amp; 2 : referencing thread number</tspan><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="23" textLength="53.195312">X : shared </tspan></text></g></g></svg>
diff --git a/docs/graphics/por-scheduling-relevance.svg b/docs/graphics/por-scheduling-relevance.svg
new file mode 100644 (file)
index 0000000..45c2886
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="33 31 534 383" width="534pt" height="383pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2011-05-11 18:17:44 +0000</dc:date></metadata><defs><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="black"><g><path d="M 4.4999995 0 L 0 -1.6874998 L 0 1.6874998 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><font-face font-family="Monaco" font-size="9" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="588.0188" height="768.0188"/><g><title>Layer 1</title><text transform="translate(199 40.8188)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".1171875" y="11" textLength="158.765625">executed bytecode instruction</tspan></text><text transform="translate(99.4328 104.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".31933594" y="11" textLength="6">fi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="6.319336" y="11" textLength="41.361328">eld insn</tspan></text><text transform="translate(253 104.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".4892578" y="11" textLength="50.021484">sync insn</tspan></text><text transform="translate(394 104.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".48242188" y="11" textLength="60.035156">invoke insn</tspan></text><text transform="translate(367 165.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="2.163086" y="11" textLength="28.007812">sync </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="4.498047" y="25" textLength="20.003906">mth</tspan></text><text transform="translate(439 165.125)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="1.9804688" y="11" textLength="53.373047">threading </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="17.99707" y="25" textLength="18.005859">call</tspan></text><line x1="261.35365" y1="54.8188" x2="140.57915" y2="104.125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="278.5" y1="54.8188" x2="278.5" y2="104.125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="294.64376" y1="54.8188" x2="408.35624" y2="104.125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="123.432805" y1="118.125" x2="123.432995" y2="380.456" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="278.51266" y1="118.125" x2="278.98842" y2="381.177" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="420.0736" y1="118.125" x2="390.3534" y2="165.125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="428.77212" y1="118.125" x2="457.45633" y2="165.125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="381.5" y1="193.125" x2="381.5" y2="381.826" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="466" y1="193.125" x2="466" y2="382.51" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="174" y="70.125" width="204" height="14" fill="#ffd0cd" fill-opacity=".78"/><rect x="174" y="70.125" width="204" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(179 70.125)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="19.618164" y="11" textLength="154.76367">scheduling relevant insn type</tspan></text><rect x="46" y="232.125" width="432.976" height="14" fill="#ffd0cd" fill-opacity=".78"/><rect x="46" y="232.125" width="432.976" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(51 232.125)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="151.113" y="11" textLength="120.75">other runnable threads</tspan></text><rect x="245" y="259.909" width="158" height="14" fill="#ffd0cd" fill-opacity=".78"/><rect x="245" y="259.909" width="158" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(250 259.909)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="34.323242" y="11" textLength="79.353516">recursive locks</tspan></text><rect x="46" y="287.692" width="358" height="14" fill="#ffd0cd" fill-opacity=".78"/><rect x="46" y="287.692" width="358" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(51 287.692)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="134.97656" y="11" textLength="78.046875">shared objects</tspan></text><rect x="46" y="327.142" width="136.5" height="14" fill="#ffd0cd" fill-opacity=".78"/><rect x="46" y="327.142" width="136.5" height="14" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(51 327.142)" fill="red"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="5.555664" y="11" textLength="115.38867">lock protected access</tspan></text><text transform="translate(108.433 390.26)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x=".0126953125" y="11" textLength="234.78516">scheduling relevant instruction (registeres a </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="234.58691" y="11" textLength="133.40039">ThreadChoiceGenerator)</tspan></text><text transform="translate(63.4328 77.125)" fill="purple"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x=".48339844" y="11" textLength="56.033203">data races</tspan></text><text transform="translate(318.5 105.125)" fill="purple"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x="4.482422" y="11" textLength="54.035156">deadlocks</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x=".4951172" y="25" textLength="62.009766">(lock races)</tspan></text><rect x="153.077" y="305.692" width="150" height="14" fill="white" fill-opacity=".74"/><text transform="translate(158.077 305.692)" fill="purple"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x=".29980469" y="11" textLength="139.40039">tracking of access threads</tspan></text><rect x="43.75" y="343.26" width="141" height="14" fill="white" fill-opacity=".74"/><text transform="translate(48.75 343.26)" fill="purple"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x=".47558594" y="11" textLength="130.04883">lock distance &amp; statistics</tspan></text><rect x="409" y="192.125" width="141" height="36" fill="white" fill-opacity=".84"/><text transform="translate(414 192.125)" fill="blue"><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="9" textLength="129.62109">Thread. start(), yield()</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="21" textLength="124.220215">        sleep(), join()</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="33" textLength="118.819336">Object.wait(),notify()</tspan></text><text transform="translate(494.261 123.125)" fill="purple"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x=".98046875" y="11" textLength="25.347656">confi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x="26.328125" y="11" textLength="30.691406">gured</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x=".32421875" y="25" textLength="57.351562">class/mthd</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="purple" x="4.3203125" y="39" textLength="49.359375">attributes</tspan></text><text transform="translate(72.4142 127.125)" fill="blue"><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="9" textLength="43.20703">GETFIELD</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="21" textLength="43.20703">PUTFIELD</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="33" textLength="48.60791">GETSTATIC</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="45" textLength="48.60791">PUTSTATIC</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="57" textLength="32.405273">xALOAD</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="69" textLength="37.806152">xASTORE</tspan></text><rect x="248" y="127.125" width="75" height="24" fill="white" fill-opacity=".74"/><text transform="translate(253 127.125)" fill="blue"><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="9" textLength="64.810547">MONITORENTER</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="21" textLength="59.409668">MONITOREXIT</tspan></text><rect x="392" y="127.125" width="81" height="24" fill="white" fill-opacity=".83"/><text transform="translate(397 127.125)" fill="blue"><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="9" textLength="70.211426">INVOKEVIRTUAL</tspan><tspan font-family="Monaco" font-size="9" font-weight="500" fill="blue" x="0" y="21" textLength="64.810547">INVOKESTATIC</tspan></text><line x1="44.5056" y1="371.793" x2="508.586" y2="371.793" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,4,1,4"/></g></g></svg>
diff --git a/docs/graphics/properties.svg b/docs/graphics/properties.svg
new file mode 100644 (file)
index 0000000..ad56b87
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="31 4 710 529" width="710pt" height="529pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2011-05-11 18:07:23 +0000</dc:date></metadata><defs><font-face font-family="Courier" font-size="11" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="15" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 9 8" markerWidth="9" markerHeight="8" color="blue"><g><path d="M 6.3999996 0 L 0 -2.3999999 L 0 2.3999999 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -4 9 8" markerWidth="9" markerHeight="8" color="purple"><g><path d="M 6.4000006 0 L 0 -2.4000002 L 0 2.4000002 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -4 9 8" markerWidth="9" markerHeight="8" color="blue"><g><path d="M 6.4000006 0 L 0 -2.4000002 L 0 2.4000002 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="19" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker_2" viewBox="-1 -4 9 8" markerWidth="9" markerHeight="8" color="purple"><g><path d="M 6.3999996 0 L 0 -2.3999999 L 0 2.3999999 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><path d="M 58.801 34.7184 L 485.801 34.7184 C 491.32385 34.7184 495.801 39.195553 495.801 44.7184 L 495.801 51.4805 C 495.801 57.003347 491.32385 61.4805 485.801 61.4805 L 58.801 61.4805 C 53.278153 61.4805 48.801 57.003347 48.801 51.4805 L 48.801 44.7184 C 48.801 39.195553 53.278153 34.7184 58.801 34.7184 Z" fill="#faffb6"/><path d="M 58.801 34.7184 L 485.801 34.7184 C 491.32385 34.7184 495.801 39.195553 495.801 44.7184 L 495.801 51.4805 C 495.801 57.003347 491.32385 61.4805 485.801 61.4805 L 58.801 61.4805 C 53.278153 61.4805 48.801 57.003347 48.801 51.4805 L 48.801 44.7184 C 48.801 39.195553 53.278153 34.7184 58.801 34.7184 Z" stroke="#ffd7aa" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 217.927 76.1073 L 477.121 76.1073 C 482.64385 76.1073 487.121 80.584453 487.121 86.1073 L 487.121 196.8643 C 487.121 202.38715 482.64385 206.8643 477.121 206.8643 L 217.927 206.8643 C 212.40415 206.8643 207.927 202.38715 207.927 196.8643 L 207.927 86.1073 C 207.927 80.584453 212.40415 76.1073 217.927 76.1073 Z" fill="#faffb6"/><path d="M 217.927 76.1073 L 477.121 76.1073 C 482.64385 76.1073 487.121 80.584453 487.121 86.1073 L 487.121 196.8643 C 487.121 202.38715 482.64385 206.8643 477.121 206.8643 L 217.927 206.8643 C 212.40415 206.8643 207.927 202.38715 207.927 196.8643 L 207.927 86.1073 C 207.927 80.584453 212.40415 76.1073 217.927 76.1073 Z" stroke="#ffd7aa" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 277.238 247.408 L 500.267 247.408 C 505.78985 247.408 510.267 251.88515 510.267 257.408 L 510.267 358.199 C 510.267 363.72185 505.78985 368.199 500.267 368.199 L 277.238 368.199 C 271.71515 368.199 267.238 363.72185 267.238 358.199 L 267.238 257.408 C 267.238 251.88515 271.71515 247.408 277.238 247.408 Z" fill="#faffb6"/><path d="M 277.238 247.408 L 500.267 247.408 C 505.78985 247.408 510.267 251.88515 510.267 257.408 L 510.267 358.199 C 510.267 363.72185 505.78985 368.199 500.267 368.199 L 277.238 368.199 C 271.71515 368.199 267.238 363.72185 267.238 358.199 L 267.238 257.408 C 267.238 251.88515 271.71515 247.408 277.238 247.408 Z" stroke="#ffd7aa" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 52.3687 247.326 L 232.6457 247.326 C 238.16855 247.326 242.6457 251.80315 242.6457 257.326 L 242.6457 463.762 C 242.6457 469.28485 238.16855 473.762 232.6457 473.762 L 52.3687 473.762 C 46.845853 473.762 42.3687 469.28485 42.3687 463.762 L 42.3687 257.326 C 42.3687 251.80315 46.845853 247.326 52.3687 247.326 Z" fill="#faffb6"/><path d="M 52.3687 247.326 L 232.6457 247.326 C 238.16855 247.326 242.6457 251.80315 242.6457 257.326 L 242.6457 463.762 C 242.6457 469.28485 238.16855 473.762 232.6457 473.762 L 52.3687 473.762 C 46.845853 473.762 42.3687 469.28485 42.3687 463.762 L 42.3687 257.326 C 42.3687 251.80315 46.845853 247.326 52.3687 247.326 Z" stroke="#ffd7aa" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 268.558 400.709 L 508.946 400.709 C 514.46885 400.709 518.946 405.18615 518.946 410.709 L 518.946 511.5 C 518.946 517.02285 514.46885 521.5 508.946 521.5 L 268.558 521.5 C 263.03515 521.5 258.558 517.02285 258.558 511.5 L 258.558 410.709 C 258.558 405.18615 263.03515 400.709 268.558 400.709 Z" fill="#faffb6"/><path d="M 268.558 400.709 L 508.946 400.709 C 514.46885 400.709 518.946 405.18615 518.946 410.709 L 518.946 511.5 C 518.946 517.02285 514.46885 521.5 508.946 521.5 L 268.558 521.5 C 263.03515 521.5 258.558 517.02285 258.558 511.5 L 258.558 410.709 C 258.558 405.18615 263.03515 400.709 268.558 400.709 Z" stroke="#ffd7aa" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(266.835 408.697)" fill="black"><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="10" textLength="237.63867">jpf.home = ${user.home}/projects/jpf</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="36" textLength="52.808594">jpf-core</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="52.808594" y="36" textLength="151.82471"> = ${jpf.home}/jpf-core</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="49" textLength="46.20752">jpf-awt</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="46.20752" y="49" textLength="118.819336"> = ${jpf.home}/awt</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="62" textLength="59.409668">jpf-shell</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="59.409668" y="62" textLength="158.42578"> = ${jpf.home}/jpf-shell</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="75" textLength="59.409668">jpf-aprop</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="59.409668" y="75" textLength="39.606445"> = ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="88" textLength="19.803223">...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="101" textLength="66.010742">extensions</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="66.010742" y="101" textLength="178.229"> = ${jpf-core},${jpf-shell}</tspan></text><text transform="translate(50 262)" fill="black"><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="10" textLength="165.02686">jpf-core = ${config_path}</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="36" textLength="59.409668">jpf-core.</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="59.409668" y="36" textLength="105.61719">native_classpath</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="165.02686" y="36" textLength="13.2021484">=\</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="49" textLength="191.43115">  ${jpf-core}/build/jpf.jar;\</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="62" textLength="33.005371">  ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="75" textLength="178.229">  ${jpf-core}/lib/bcel.jar;</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="101" textLength="59.409668">jpf-core.</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="59.409668" y="101" textLength="59.409668">classpath</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="118.819336" y="101" textLength="13.2021484">=\</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="114" textLength="151.82471">  build/jpf-classes.jar</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="140" textLength="59.409668">jpf-core.</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="59.409668" y="140" textLength="92.41504">test_classpath</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="151.82471" y="140" textLength="13.2021484">=\</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="153" textLength="85.813965">  build/tests</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="179" textLength="59.409668">jpf-core.</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="59.409668" y="179" textLength="59.409668">sourcepat</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="118.819336" y="179" textLength="19.803223">h=\</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="192" textLength="85.813965">  src/classes</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="205" textLength="19.803223">...</tspan></text><text transform="translate(271.417 260.887)" fill="black"><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="10" textLength="198.03223">jpf-awt-shell = ${config_path}</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="36" textLength="39.606445">@using</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="39.606445" y="36" textLength="66.010742"> = jpf-awt</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="75" textLength="92.41504">jpf-awt-shell.</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="92.41504" y="75" textLength="105.61719">native_classpath</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="198.03223" y="75" textLength="26.404297">=...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="88" textLength="92.41504">jpf-awt-shell.</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="92.41504" y="88" textLength="59.409668">classpath</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="151.82471" y="88" textLength="26.404297">=...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="101" textLength="19.803223">...</tspan></text><text transform="translate(215.481 84.5732)" fill="red"><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="10" textLength="39.606445">target</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="39.606445" y="10" textLength="99.016113"> = RobotManager</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="23" textLength="72.611816">target_args</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="72.611816" y="23" textLength="39.606445"> = ...</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="49" textLength="118.819336">@using = jpf-aprop</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="62" textLength="46.20752">@import</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="46.20752" y="62" textLength="118.819336"> = ./my.properties</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="88" textLength="33.005371">shell</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="33.005371" y="88" textLength="204.6333"> = .shell.basicshell.BasicShell</tspan><tspan font-family="Courier" font-size="11" font-weight="500" fill="red" x="0" y="101" textLength="52.808594">listener</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="52.808594" y="101" textLength="211.23438"> = .aprop.listener.SharedChecker</tspan><tspan font-family="Courier" font-size="11" font-weight="500" x="0" y="114" textLength="19.803223">...</tspan></text><text transform="translate(535.837 419.199)" fill="black"><tspan font-family="Helvetica" font-size="15" font-weight="500" x="0" y="15" textLength="110.88867">1. site properties</tspan></text><text transform="translate(535.837 269.806)" fill="black"><tspan font-family="Helvetica" font-size="15" font-weight="500" x="0" y="15" textLength="132.56836">2. project properties</tspan></text><text transform="translate(535.837 122.743)" fill="black"><tspan font-family="Helvetica" font-size="15" font-weight="500" x="0" y="15" textLength="159.26514">3. application properties</tspan></text><text transform="translate(535.837 37)" fill="black"><tspan font-family="Helvetica" font-size="15" font-weight="500" x="0" y="15" textLength="110.05371">4. command line</tspan></text><text transform="translate(553.837 446.199)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="158.42578">~/.jpf/site.properties</tspan></text><text transform="translate(553.837 296.806)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="172.82812">&lt;project&gt;/jpf.properties</tspan></text><text transform="translate(553.837 149.743)" fill="blue"><tspan font-family="Courier" font-size="12" font-weight="bold" fill="blue" x="0" y="11" textLength="136.822266">&lt;project&gt;/.../*.jpf</tspan></text><text transform="translate(57.8009 38.4467)" fill="black"><tspan font-family="Courier" font-size="12" font-weight="500" x="0" y="11" textLength="180.0293">&gt; bin/jpf [-log][-show] {</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="red" x="180.0293" y="11" textLength="86.41406">+log.info=..</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="266.44336" y="11" textLength="14.402344">} </tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="red" x="280.8457" y="11" textLength="144.02344">.../RobotManager.jpf</tspan><tspan font-family="Courier" font-size="12" font-weight="500" x="424.86914" y="11" textLength="14.402344">  </tspan></text><path d="M 254.897 507.803 L 197.74177 507.75322 C 194.43011 507.75034 191.747 505.0649 191.747 501.75322 L 191.747 469.593" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 117 252 L 117 240.0136 C 117 236.69989 119.68629 234.0136 123 234.0136 C 123.00453 234.0136 123.00906 234.0136 123.013585 234.01362 L 263.27802 234.3312" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(75.1602 478.429)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="97.38281">all jpf.properties in</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="44.689453">order of </tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="blue" x="44.689453" y="25" textLength="57.36914">extensions</tspan></text><text transform="translate(284.191 226.678)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="172.07227">jpf.properties in current directory</tspan></text><path d="M 473.835 234.806 L 494.8676 234.806 C 498.16894 234.806 500.85008 232.13898 500.86752 228.83768 L 501.55515 98.61408 C 501.57265 95.30042 498.90058 92.59998 495.58692 92.582484 C 495.57636 92.58243 495.5658 92.5824 495.55523 92.5824 L 435.684 92.5824" marker-end="url(#FilledArrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(579.345 469.372)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="94.04297">- project locations</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="110.05664">- pre-loaded projects</tspan></text><text transform="translate(579.345 319.979)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="106.71094">- project class paths</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="121.41211">- project dependencies</tspan></text><text transform="translate(579.345 172.915)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="103.359375">- system-under-test</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="89.36133">- listeners, shells</tspan></text><text transform="translate(579.345 58.6805)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="63.38672">- debugging</tspan></text><text transform="translate(252.533 18.202)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="182.08594">command line property arguments</tspan></text><path d="M 423.131 477.215 C 422.42507 484.2239 423.5989 485.0065 427.771 486.571 C 431.9431 488.1355 462.451 486.832 462.451 486.832 C 462.451 486.832 471.22213 485.7952 473.73633 493.13772" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 384.172 289.104 C 385.547 286.104 388.047 282.854 393.547 282.729 C 399.047 282.604 404.922 287.729 404.672 293.729 C 404.422 299.729 399.672 304.729 393.047 304.354 C 391.54602 304.26904 390.24395 303.84401 389.1277 303.23738" marker-end="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><rect x="188.908" y="216.267" width="16" height="23" fill="white"/><text transform="translate(188.908 216.267)" fill="blue"><tspan font-family="Helvetica" font-size="19" font-weight="500" fill="blue" x="0" y="19" textLength="15.836426">...</tspan></text><path d="M 264.193 454.367 C 255.2799 454.037 253.41636 449.68932 251.553 440.062 C 249.68966 430.43468 250.62069 331.05585 255.279 323.913 C 259.9374 316.77015 261.80115 316.14904 268.944 313.354 C 276.08685 310.55896 329.5034 310.55858 340.373 310.248 C 347.94775 310.03157 353.4106 310.26777 355.18565 306.1217" marker-end="url(#Arrow_Marker_2)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(440.597 77.495)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="57.375">application</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="25" textLength="53.361328">properties</tspan></text><path d="M 387.466 131.784 C 388.841 128.784 391.341 125.534 396.841 125.409 C 402.341 125.284 408.216 130.409 407.966 136.409 C 407.716 142.409 402.966 147.409 396.341 147.034 C 394.84002 146.94904 393.53795 146.52401 392.4217 145.917375" marker-end="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 564.52274 354.335 L 551.865 366.99273 L 560.2191 366.99273 L 560.2191 408.5825 L 568.8264 408.5825 L 568.8264 366.99273 L 577.1805 366.99273 Z" fill="#e8eef7"/><path d="M 564.52274 354.335 L 551.865 366.99273 L 560.2191 366.99273 L 560.2191 408.5825 L 568.8264 408.5825 L 568.8264 366.99273 L 577.1805 366.99273 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width=".24"/><path d="M 564.20274 200.87 L 551.545 213.52773 L 559.8991 213.52773 L 559.8991 255.1175 L 568.5064 255.1175 L 568.5064 213.52773 L 576.8605 213.52773 Z" fill="#e8eef7"/><path d="M 564.20274 200.87 L 551.545 213.52773 L 559.8991 213.52773 L 559.8991 255.1175 L 568.5064 255.1175 L 568.5064 213.52773 L 576.8605 213.52773 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width=".24"/><path d="M 564.20274 60.5442 L 551.545 73.20193 L 559.8991 73.20193 L 559.8991 114.7917 L 568.5064 114.7917 L 568.5064 73.20193 L 576.8605 73.20193 Z" fill="#e8eef7"/><path d="M 564.20274 60.5442 L 551.545 73.20193 L 559.8991 73.20193 L 559.8991 114.7917 L 568.5064 114.7917 L 568.5064 73.20193 L 576.8605 73.20193 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width=".24"/><path d="M 487.875 49.625 C 487.875 49.625 504.125 48.75 508.125 55.125 C 512.125 61.49999 509.12492 68.125 508.097 69.4369 C 507.80348 69.81151 507.02888 70.620914 506.07187 71.58626" marker-end="url(#Arrow_Marker_2)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(373.153 385.456)" fill="blue"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="blue" x="0" y="11" textLength="75.36914">site properties</tspan></text></g></g></svg>
diff --git a/docs/graphics/report.svg b/docs/graphics/report.svg
new file mode 100644 (file)
index 0000000..cad3324
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="10 18 784 573" width="784pt" height="573pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2010-09-10 23:02:45 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><font-face font-family="Monaco" font-size="11" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><font-face font-family="Courier" font-size="12" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Ball_Marker" viewBox="-7 -4 8 8" markerWidth="8" markerHeight="8" color="blue"><g><circle cx="-2.9999986" cy="0" r="2.9999973" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="UMLInheritance_Marker" viewBox="-1 -8 14 16" markerWidth="14" markerHeight="16" color="black"><g><path d="M 12 0 L 0 -7 L 0 7 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="-1e3" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-style="italic" font-weight="500"><font-face-src><font-face-name name="Helvetica-Oblique"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="1536.0376" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id99_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id21_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id100_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id105_Graphic" filter="url(#Shadow)"/></g><g id="id99_Graphic"><rect x="601" y="156" width="151" height="70" fill="white"/><rect x="601" y="156" width="151" height="70" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id21_Graphic"><rect x="468" y="140" width="90" height="83" fill="white"/><rect x="468" y="140" width="90" height="83" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><rect x="119" y="134" width="146" height="42" fill="white"/><rect x="119" y="134" width="146" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(124 134)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="29.326172">JPF()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="130.740234">addPublisherExtension()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="73.365234">setPublisherT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="72.035156" y="39" textLength="36.00586">opics()</tspan></text><rect x="119" y="120" width="146" height="14" fill="white"/><rect x="119" y="120" width="146" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(124 120)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="42.017578">reporter</tspan></text><rect x="119" y="106" width="146" height="14" fill="white"/><rect x="119" y="106" width="146" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(124 106)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="56.996094" y="11" textLength="22.007812">JPF</tspan></text><text transform="translate(34.81 28.631245)" fill="blue"><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="11" textLength="13.2021484">..</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="26" textLength="422.46875">reporter = config.getInstance(&quot;report.class&quot;, Reporter.class,..)</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="422.46875" y="26" textLength="7.201172">;</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="41" textLength="14.402344">..</tspan></text><path d="M 108.51673 140.52065 C 96.31494 139.82353 82.887197 139.963245 74 137 C 63.50105 133.49935 54.3331 130.9979 52 120 C 49.6669 109.0021 57.3336 87.3357 60 71.006" marker-start="url(#Ball_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="305" y="150" width="118" height="42" fill="white"/><rect x="305" y="150" width="118" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(310 150)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="82.69922">searchStarted()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="52.02539">propertyV</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="51.814453" y="25" textLength="43.353516">iolated()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="89.36719">searchFinished()</tspan></text><rect x="305" y="136" width="118" height="14" fill="white"/><rect x="305" y="136" width="118" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(310 136)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="54.697266">publishers</tspan></text><rect x="305" y="122" width="118" height="14" fill="white"/><rect x="305" y="122" width="118" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(310 122)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="28.995117" y="11" textLength="50.009766">Reporter</tspan></text><rect x="463.5" y="190" width="90" height="28" fill="white"/><rect x="463.5" y="190" width="90" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(468.5 190)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="71.36133">publishStart()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="44.015625">getOut()</tspan></text><rect x="463.5" y="148" width="90" height="42" fill="white"/><rect x="463.5" y="148" width="90" height="42" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(468.5 148)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="57.36914">extensions</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="31.347656">topics</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="16.681641">out</tspan></text><rect x="463.5" y="134" width="90" height="14" fill="white"/><rect x="463.5" y="134" width="90" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(468.5 134)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="12.660156" y="11" textLength="54.679688">Publisher</tspan></text><rect x="596" y="165" width="151" height="56" fill="white"/><rect x="596" y="165" width="151" height="56" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(601 165)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="71.36133">publishStart()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="45.357422">publishT</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="44.91797" y="25" textLength="53.34961">ransition()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="39" textLength="91.38281">publishPropertyV</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="91.171875" y="39" textLength="46.01953">iolation()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="53" textLength="91.376953">publishFinished()</tspan></text><rect x="596" y="151" width="151" height="14" fill="white"/><rect x="596" y="151" width="151" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(601 151)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x=".4716797" y="11" textLength="140.05664">&lt;&lt;PublisherExtension&gt;&gt;</tspan></text><g id="id100_Graphic"><rect x="583" y="343" width="39" height="30" fill="white"/><rect x="583" y="343" width="39" height="30" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(588 351)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="9.4990234" y="11" textLength="10.001953">...</tspan></text></g><line x1="676" y1="328" x2="676" y2="240.506" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 606 343 L 606 328 L 704 328 L 704 343" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id105_Graphic"><rect x="409" y="284" width="39" height="30" fill="white"/><rect x="409" y="284" width="39" height="30" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(414 292)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="9.4990234" y="11" textLength="10.001953">...</tspan></text></g><line x1="502.00002" y1="269" x2="502.00002" y2="240.506" marker-end="url(#UMLInheritance_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 432 284 L 432 269 L 530 269 L 530 284" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="535" y1="157" x2="586.1" y2="157" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="402" y1="141" x2="453.1" y2="141" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="245" y1="128" x2="296.1" y2="128" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(102.08 217.37988)" fill="blue"><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="11" textLength="13.2021484">..</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="26" textLength="204.6333">for (Publisher p : publishers){</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="41" textLength="118.819336">  p.openChannel();</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="56" textLength="26.404297">  ..</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="71" textLength="125.42041">  p.publishStart();</tspan><tspan font-family="Courier" font-size="12" font-weight="500" fill="blue" x="0" y="86" textLength="14.402344">..</tspan></text><path d="M 298.63573 160.68016 C 291.20484 165.53147 283.20964 170.12326 278 176 C 271.50065 183.3316 266.49985 192.49985 265 201 C 263.50015 209.50015 267.6668 218.3382 269 227.006" marker-start="url(#Ball_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(200.64 328.44478)" fill="blue"><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="11" textLength="191.43115"> public void publishStart() {</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="26" textLength="250.84082">    for (String topic : startTopics) {</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="41" textLength="204.6333">      if (&quot;jpf&quot;.equals(topic)){</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="56" textLength="138.62256">        publishJPF();</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="71" textLength="33.005371">  ...</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="86" textLength="204.6333">    for (PublisherExtension e :</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="101" textLength="237.63867">                       extensions) {</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="116" textLength="191.43115">        e.publishStart(this);</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="131" textLength="46.20752">      }</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="146" textLength="33.005371">  ...</tspan></text><path d="M 448.95183 200.3809 C 432.62623 206.25465 414.28666 209.15743 402 221 C 388.16805 234.332 378.68406 260.67906 372 278 C 365.31594 295.32094 365.26076 309.29224 361.89164 324.936" marker-start="url(#Ball_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(395.8 477.35088)" fill="blue"><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="11" textLength="211.23438">out.println(&quot;JPF version&quot; + ..);</tspan></text><rect x="475" y="297.936" width="118" height="28" fill="white"/><rect x="475" y="297.936" width="118" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(480 297.936)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="67.353516">publishJPF()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan></text><rect x="475" y="283.936" width="118" height="14" fill="white"/><rect x="475" y="283.936" width="118" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(480 283.936)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="2.991211" y="11" textLength="102.01758">ConsolePublisher</tspan></text><path d="M 533.46314 321.31366 C 530.55445 334.16368 528.93123 346.2254 522.891 361 C 515.87354 378.16495 499.575 400.67907 492.891 418 C 486.207 435.32093 486.152 449.29223 482.783 464.936" marker-start="url(#Ball_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="647" y="357" width="118" height="28" fill="white"/><rect x="647" y="357" width="118" height="28" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(652 357)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="91.376953">publishFinished()</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="25" textLength="10.001953">...</tspan></text><rect x="647" y="343" width="118" height="14" fill="white"/><rect x="647" y="343" width="118" height="14" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(652 343)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="2.3115234" y="11" textLength="103.376953">DeadlockAnalyzer</tspan></text><text transform="translate(555.78 414.35063)" fill="blue"><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="11" textLength="118.819336">PrintWriter out = </tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="26" textLength="191.43115">          publisher,getOut();</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="blue" x="0" y="41" textLength="158.42578">printTraceAnalysis(out);</tspan></text><path d="M 714.47304 378.3917 C 713.93286 385.00501 713.7042 391.82623 711 397 C 707.3972 403.89298 699.3982 407.86588 693.59814 413.298" marker-start="url(#Ball_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(306 80)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="76.716797">data collection</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="122.07422">publisher management</tspan></text><text transform="translate(468 70)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="80.04492">data formatting</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="98.72461">topic management</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="39" textLength="78.73242">output channel</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="53" textLength="80.04492">   management</tspan></text><text transform="translate(620.5 109.506)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="86.03906">property/listener</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="34.013672">specifi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="34.013672" y="25" textLength="77.378906">c output topics</tspan></text><text transform="translate(50.42 512.3625)" fill="#390"><tspan font-family="Monaco" font-size="11" font-weight="500" fill="#390" x="0" y="11" textLength="191.43115">report.class=.report.Reporter</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="#390" x="0" y="26" textLength="178.229">report.publisher=console,..</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="#390" x="0" y="41" textLength="297.04834">report.console.class=.report.ConsolePublisher</tspan><tspan font-family="Monaco" font-size="11" font-weight="500" fill="#390" x="0" y="56" textLength="178.229">report.console.start=jpf,..</tspan></text><text transform="translate(91 477)" fill="red"><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="11" textLength="50.015625">JPF confi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="50.015625" y="11" textLength="43.365234">guration</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="0" y="25" textLength="144.06445">(e.g. jpf.properties or *.jpf fi</tspan><tspan font-family="Helvetica" font-size="12" font-style="italic" font-weight="500" fill="red" x="144.06445" y="25" textLength="19.335938">les)</tspan></text><path d="M 135.75 467.749 L 135.75 425.749 L 126 425.749 L 145.5 411.749 L 165 425.749 L 155.25 425.749 L 155.25 467.749 Z" fill="white"/><path d="M 135.75 467.749 L 135.75 425.749 L 126 425.749 L 145.5 411.749 L 165 425.749 L 155.25 425.749 L 155.25 467.749 Z" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/docs/graphics/states-mc.svg b/docs/graphics/states-mc.svg
new file mode 100644 (file)
index 0000000..8d9f5fd
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="111 18 212 194" width="212pt" height="194pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2009-09-06 18:37:27 +0000</dc:date></metadata><defs><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="blue"><g><path d="M 4.7999992 0 L 0 -1.7999997 L 0 1.7999997 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -2 5 4" markerWidth="5" markerHeight="4" color="red"><g><path d="M 2.4000001 0 L 0 -.90000004 L 0 .90000004 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-4 -2 5 4" markerWidth="5" markerHeight="4" color="red"><g><path d="M -2.4000001 0 L 0 .90000004 L 0 -.90000004 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" viewBox="-1 -2 3 4" markerWidth="3" markerHeight="4" color="red"><g><path d="M .96 0 L 0 -.36 L 0 .36 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Arial Unicode MS" font-size="14" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-100.097656" underline-thickness="49.804688" slope="0" x-height="529.78516" cap-height="728.02734" ascent="1068.84766" descent="-270.9961" font-weight="500"><font-face-src><font-face-name name="ArialUnicodeMS"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Apple Symbols" font-size="13" panose-1="2 0 0 0 0 0 0 0 0 0" units-per-em="1000" underline-position="-73.242188" underline-thickness="48.828125" slope="0" x-height="392.57812" cap-height="546.38672" ascent="666.5039" descent="-250" font-weight="500"><font-face-src><font-face-name name="AppleSymbols"/></font-face-src></font-face><font-face font-family="Zapf Dingbats" font-size="14" panose-1="5 2 1 2 1 7 4 2 6 9" units-per-em="1000" underline-position="-100.097656" underline-thickness="60.058594" slope="0" x-height="542.48047" cap-height="723.14453" ascent="813.96484" descent="-176.75781" font-weight="500"><font-face-src><font-face-name name="ZapfDingbatsITC"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><path d="M 199.037 162.428 C 200.57818 159.34531 201.0281 157.22493 203.661 153.179 C 206.2939 149.13307 210.95072 142.5169 214.836 138.15 C 218.72128 133.7831 225.04836 130.86028 226.975 126.975 C 228.90164 123.08972 229.60801 119.138736 226.397 114.836 C 224.05647 111.69971 218.50761 108.289804 213.25864 104.90571" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><circle cx="199.97595" cy="92.61395" r="7.000961" fill="#fffe71"/><circle cx="199.97595" cy="92.61395" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle cx="181.81895" cy="119.45695" r="7.000961" fill="#fffe71"/><circle cx="181.81895" cy="119.45695" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="172.39495" cy="145.98695" r="7.000961" fill="#fffe71"/><circle cx="172.39495" cy="145.98695" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="191.28895" cy="172.51695" r="7.000961" fill="#a5ff78"/><circle cx="191.28895" cy="172.51695" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="214.71395" cy="119.26395" r="7.000961" fill="#fffe71"/><circle cx="214.71395" cy="119.26395" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="247.76695" cy="119.93295" r="7.000961" fill="#fffe71"/><circle cx="247.76695" cy="119.93295" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle cx="225.36195" cy="147.66995" r="7.000961" fill="#fffe71"/><circle cx="225.36195" cy="147.66995" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="193.08327" y1="102.80395" x2="188.43147" y2="109.68109" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="177.86826" y1="130.578685" x2="176.34559" y2="134.865196" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="205.92984" y1="103.380056" x2="209.00205" y2="108.93538" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="218.85671" y1="130.315664" x2="221.21924" y2="136.61822" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="179.24131" y1="155.600255" x2="184.4426" y2="162.90364" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="215.647" y1="154.37152" x2="205.27354" y2="161.52735" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="261.29795" cy="146.77595" r="7.000961" fill="#fffe71"/><circle cx="261.29795" cy="146.77595" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="206.92362" y1="96.58548" x2="236.28745" y2="113.37086" marker-end="url(#FilledArrow_Marker_3)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="251.36924" y1="127.07921" x2="255.34603" y2="134.9684" marker-end="url(#FilledArrow_Marker_3)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle cx="261.20595" cy="174.51295" r="7.000961" fill="red"/><circle cx="261.20595" cy="174.51295" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="261.27142" y1="154.77686" x2="261.24816" y2="161.79207" marker-end="url(#FilledArrow_Marker_3)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="204.73078" y1="125.559554" x2="186.87417" y2="136.82032" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="239.8446" y1="129.34356" x2="235.5243" y2="134.47547" marker-end="url(#FilledArrow_Marker)" marker-start="url(#FilledArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(255.97 164.705)" fill="yellow"><tspan font-family="Arial Unicode MS" font-size="14" font-weight="500" fill="yellow" x="0" y="15" textLength="10.5">☠</tspan></text><text transform="translate(149 27)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="79.486816">model checking:</tspan></text><text transform="translate(176 46.4739)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="10" textLength="132.84668">all program state are explored</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="22" textLength="131.75781"> until none left or defect found</tspan></text><path d="M 183.622 166.859 C 178.29187 167.05165 173.02446 169.4278 167.63 167.437 C 162.23554 165.4462 154.65566 161.23853 151.252 154.913 C 147.84834 148.58747 145.43984 137.4432 147.206 129.48 C 148.97216 121.5168 155.10684 112.587704 161.85 107.129 C 167.00219 102.95821 174.3303 101.111333 181.33995 98.92518" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 183.237 142.775 C 188.43881 142.83899 194.41278 145.3111 198.844 142.967 C 201.71564 141.44791 203.9405 137.9056 206.14715 134.306975" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><path d="M 235.645 139.692 C 237.44315 138.9854 239.37017 139.27383 241.04 137.572 C 241.57356 137.02821 242.08097 136.281115 242.57475 135.42817" marker-end="url(#Arrow_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><text transform="translate(125.853 90.4145)" fill="blue"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="blue" x="0" y="10" textLength="42.79297">backtrack</tspan></text><text transform="translate(177.64 135.638)" fill="purple"><tspan font-family="Apple Symbols" font-size="13" font-weight="500" fill="purple" x="0" y="9" textLength="7.445801">≡</tspan></text><text transform="translate(195.944 160.694)" fill="purple"><tspan font-family="Apple Symbols" font-size="13" font-weight="500" fill="purple" x="0" y="9" textLength="7.445801">≡</tspan></text><text transform="translate(228.507 134.495)" fill="purple"><tspan font-family="Apple Symbols" font-size="13" font-weight="500" fill="purple" x="0" y="9" textLength="7.445801">≡</tspan></text><text transform="translate(202.738 164.231)" fill="purple"><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="purple" x="0" y="10" textLength="27.231445">match</tspan></text><text transform="translate(254.721 187.554)" fill="red"><tspan font-family="Zapf Dingbats" font-size="14" font-weight="500" fill="red" x=".26269531" y="11" textLength="9.4746094">✘</tspan></text></g></g></svg>
diff --git a/docs/graphics/states-testing.svg b/docs/graphics/states-testing.svg
new file mode 100644 (file)
index 0000000..12e5396
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="143 28 197 186" width="197pt" height="186pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-11-19 20:33:35 +0000</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="red"><g><path d="M 4.8000002 0 L 0 -1.8000001 L 0 1.8000001 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Arial Unicode MS" font-size="14" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-100.097656" underline-thickness="49.804688" slope="0" x-height="529.78516" cap-height="728.02734" ascent="1068.84766" descent="-270.9961" font-weight="500"><font-face-src><font-face-name name="ArialUnicodeMS"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="10" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Zapf Dingbats" font-size="14" panose-1="5 2 1 2 1 7 4 2 6 9" units-per-em="1000" underline-position="-100.097656" underline-thickness="60.058594" slope="0" x-height="542.48047" cap-height="723.14453" ascent="813.96484" descent="-176.75781" font-weight="500"><font-face-src><font-face-name name="ZapfDingbatsITC"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="11" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="14" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="blue"><g><path d="M 4.7999992 0 L 0 -1.7999997 L 0 1.7999997 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><g><xl:use xl:href="#id24_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id25_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id28_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id36_Graphic" filter="url(#Shadow)"/></g><circle cx="200.11895" cy="97.06455" r="7.000961" fill="#faff8b"/><circle cx="200.11895" cy="97.06455" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><g id="id24_Graphic"><circle cx="181.96195" cy="123.90795" r="7.000961" fill="white"/><circle cx="181.96195" cy="123.90795" r="7.000961" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id25_Graphic"><circle cx="172.53795" cy="150.43695" r="7.000961" fill="white"/><circle cx="172.53795" cy="150.43695" r="7.000961" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><circle cx="191.43195" cy="176.96795" r="7.000961" fill="#a5ff78"/><circle cx="191.43195" cy="176.96795" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle cx="214.85695" cy="123.71495" r="7.000961" fill="#faff8b"/><circle cx="214.85695" cy="123.71495" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><g id="id28_Graphic"><circle cx="247.90995" cy="124.38295" r="7.000961" fill="white"/><circle cx="247.90995" cy="124.38295" r="7.000961" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><circle cx="225.50495" cy="152.11995" r="7.000961" fill="#faff8b"/><circle cx="225.50495" cy="152.11995" r="7.000961" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="195.63552" y1="103.692876" x2="186.16524" y2="117.69378" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="179.45053" y1="130.97771" x2="175.04936" y2="143.36719" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="203.99181" y1="104.067766" x2="207.74168" y2="110.84856" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="217.66598" y1="131.20841" x2="220.34415" y2="138.3528" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="176.88977" y1="156.54779" x2="186.79009" y2="170.44984" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="219.0396" y1="156.83486" x2="203.31072" y2="168.30526" marker-end="url(#FilledArrow_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id36_Graphic"><circle cx="261.44095" cy="151.22695" r="7.000961" fill="white"/><circle cx="261.44095" cy="151.22695" r="7.000961" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="207.06666" y1="101.036017" x2="241.39632" y2="120.65962" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="251.28707" y1="131.08278" x2="258.06383" y2="144.52712" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="261.34895" cy="178.96395" r="7.000961" fill="#ffafb4"/><circle cx="261.34895" cy="178.96395" r="7.000961" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="261.41607" y1="158.72786" x2="261.37383" y2="171.46304" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="208.09054" y1="127.98755" x2="178.88159" y2="146.43131" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="243.19621" y1="130.21848" x2="230.53287" y2="145.895465" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(256.333 169.281)" fill="black"><tspan font-family="Arial Unicode MS" font-size="14" font-weight="500" x="0" y="15" textLength="10.5">☠</tspan></text><text transform="translate(228.228 55.8818)" fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="10" textLength="84.506836">based on input set </tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="blue" x="84.506836" y="10" textLength="12.241211">{d}</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="22" textLength="40.585938">only one </tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" fill="red" x="40.585938" y="22" textLength="19.462891">path</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" x="0" y="34" textLength="81.713867">executed at a time</tspan></text><text transform="translate(176 190)" fill="#00c300"><tspan font-family="Zapf Dingbats" font-size="14" font-weight="500" fill="#00c300" x=".076660156" y="11" textLength="11.84668">✔</tspan></text><text transform="translate(203.93402 37.205296)" fill="black"><tspan font-family="Helvetica" font-size="11" font-weight="500" x="0" y="10" textLength="35.465332">testing:</tspan></text><text transform="translate(157.263 64)" fill="blue"><tspan font-family="Helvetica" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="17.137695">{d}</tspan></text><path d="M 180.263 69.663568 C 186.02242 68.496695 194.58713 64.273384 197.543 66.1626 C 199.34019 67.31126 199.0646 70.719975 198.60663 74.327384" marker-end="url(#FilledArrow_Marker_2)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>
diff --git a/docs/graphics/sw-model-checking-2.svg b/docs/graphics/sw-model-checking-2.svg
new file mode 100644 (file)
index 0000000..a0575f7
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="34 236 374 190" width="374pt" height="190pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2015-01-05 22:19:29 +0000</dc:date></metadata><defs><font-face font-family="Courier" font-size="14" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><font-face font-family="Courier" font-size="14" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 0 M 0 -3 L 8 0 L 0 3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker_2" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="red"><g><path d="M 4.8 0 L 0 0 M 0 -1.8 L 4.8 0 L 0 1.8" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Zapf Dingbats" font-size="14" panose-1="5 2 1 2 1 7 4 2 6 9" units-per-em="1000" underline-position="-100.097656" underline-thickness="60.058594" slope="0" x-height="542.48047" cap-height="723.14453" ascent="813.96484" descent="-176.75781" font-weight="500"><font-face-src><font-face-name name="ZapfDingbatsITC"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Arrow_Marker" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="purple"><g><path d="M 4.7999992 0 L 0 -1.7999997 L 0 1.7999997 Z" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="9" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><text transform="translate(97.5 288)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x="0" y="14" textLength="25.204102">a=0</tspan></text><text transform="translate(51.5 335)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">b=0</tspan></text><text transform="translate(117 335)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">b=1</tspan></text><text transform="translate(182 335)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x="0" y="14" textLength="25.204102">b=2</tspan></text><line x1="102.18085" y1="305" x2="79.743833" y2="327.92478" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="114.026596" y1="305" x2="122.67953" y2="325.8558" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="125.781915" y1="305" x2="168.4446" y2="328.72954" marker-end="url(#StickArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(51.5 380)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">c=0</tspan></text><text transform="translate(117 380)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">c=0</tspan></text><text transform="translate(174.5 380)" fill="red"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="red" x="0" y="14" textLength="42.006836">c=0/0</tspan></text><line x1="64.5" y1="352" x2="64.5" y2="370.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="130" y1="352" x2="130" y2="370.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="195.18889" y1="352" x2="195.52452" y2="367.10318" marker-end="url(#StickArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(200 245)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x="0" y="14" textLength="42.006836">start</tspan></text><line x1="199.55814" y1="262" x2="140.52895" y2="284.86716" marker-end="url(#StickArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(304.5 288)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">a=1</tspan></text><text transform="translate(258.5 335)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">b=0</tspan></text><text transform="translate(312.5 335)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">b=1</tspan></text><text transform="translate(366.5 335)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">b=2</tspan></text><line x1="309.18085" y1="305" x2="286.74383" y2="327.92478" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="318.9468" y1="305" x2="322.39198" y2="325.24037" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="328.71277" y1="305" x2="360.39788" y2="329.01936" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(254.5 380.5)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="33.605469">c=-1</tspan></text><text transform="translate(304 380.5)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="42.006836">c=1/0</tspan></text><text transform="translate(367.5 380)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x="0" y="14" textLength="25.204102">c=1</tspan></text><line x1="271.5" y1="352" x2="271.5" y2="370.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="325.5" y1="352" x2="325.5" y2="370.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="379.68912" y1="352" x2="380.0919" y2="370.10245" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="240.47674" y1="262" x2="290.46495" y2="284.39055" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(190 402)" fill="red"><tspan font-family="Zapf Dingbats" font-size="14" font-weight="500" fill="red" x="0" y="11" textLength="9.4746094">✘</tspan></text><path d="M 195 255.53846 C 184.3344 256.35889 171.9991 255.75663 163 258 C 154.0009 260.24337 148.17807 264.0005 141 269 C 135.49167 272.83653 130.1641 278.24436 124.8097 283.41438" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="165.29035" y="251.01964" width="16" height="11" fill="white"/><text transform="translate(170.29035 251.01964)" fill="purple"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="purple" x="0" y="9" textLength="5.005371">1</tspan></text><path d="M 93.036364 305 C 80.025544 311.3327 61.83861 316.91738 54 324 C 46.16139 331.08262 44.88934 338.1676 46 347.5 C 46.909354 355.1409 52.88361 364.79484 57.70203 373.98866" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="59.46112" y="310.53899" width="16" height="11" fill="white"/><text transform="translate(64.46112 310.53899)" fill="purple"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="purple" x="0" y="9" textLength="5.005371">2</tspan></text><path d="M 67.75532 380 C 72.66972 367.16795 76.257992 353.99875 82.5 341.5 C 87.77279 330.94197 94.94186 320.857 101.60377 310.64679" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="66.688773" y="354.95894" width="16" height="11" fill="white"/><text transform="translate(71.688773 354.95894)" fill="purple"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="purple" x="0" y="9" textLength="5.005371">3</tspan></text><path d="M 110.03297 305 C 109.35538 317.3321 107.672194 331.58438 108 342 C 108.327806 352.41562 109.547864 361.1673 112 367.5 C 113.41764 371.1611 115.5836 373.37442 117.84884 375.39535" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="100.541785" y="320.0904" width="16" height="11" fill="white"/><text transform="translate(105.541785 320.0904)" fill="purple"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="purple" x="0" y="9" textLength="5.005371">4</tspan></text><path d="M 133.36264 380 C 138.24127 367.6679 150.6677 355.49875 148 343 C 145.68608 332.1588 132.01485 321.06398 121.76401 310.04676" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="136.39532" y="354.41076" width="16" height="11" fill="white"/><text transform="translate(141.39532 354.41076)" fill="purple"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="purple" x="0" y="9" textLength="5.005371">5</tspan></text><text transform="translate(59 402)" fill="#00c300"><tspan font-family="Zapf Dingbats" font-size="14" font-weight="500" fill="#00c300" x="0" y="11" textLength="11.84668">✔</tspan></text><text transform="translate(124 402)" fill="#00c300"><tspan font-family="Zapf Dingbats" font-size="14" font-weight="500" fill="#00c300" x="0" y="11" textLength="11.84668">✔</tspan></text><path d="M 128.5 303.40226 C 144.66505 309.60088 162.91808 315.15106 177 322 C 191.08192 328.84894 209.28636 334.8343 213 344.5 C 216.09567 352.55727 207.67603 363.62784 202.14012 373.94288" marker-end="url(#Arrow_Marker)" stroke="purple" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="2,2"/><rect x="152.59596" y="309.56811" width="16" height="11" fill="white"/><text transform="translate(157.59596 309.56811)" fill="purple"><tspan font-family="Helvetica" font-size="9" font-weight="500" fill="purple" x="0" y="9" textLength="5.005371">6</tspan></text></g></g></svg>
diff --git a/docs/graphics/sw-model-checking.svg b/docs/graphics/sw-model-checking.svg
new file mode 100644 (file)
index 0000000..1fd0a54
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="32 9 642 191" width="642pt" height="191pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.1 <dc:date>2014-11-19 20:40:12 +0000</dc:date></metadata><defs><font-face font-family="Courier" font-size="13" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><font-face font-family="Hiragino Kaku Gothic Pro" font-size="14" panose-1="2 11 3 0 0 0 0 0 0 0" units-per-em="1000" underline-position="-60" underline-thickness="63" slope="0" x-height="545" cap-height="766" ascent="880.0018" descent="-120.00024" font-weight="400"><font-face-src><font-face-name name="HiraKakuPro-W3"/></font-face-src></font-face><font-face font-family="Courier" font-size="14" units-per-em="1000" underline-position="-178.22266" underline-thickness="57.617188" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="500"><font-face-src><font-face-name name="Courier"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black"><g><path d="M 8 0 L 0 0 M 0 -3 L 8 0 L 0 3" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Courier" font-size="14" units-per-em="1000" underline-position="-144.04297" underline-thickness="91.796875" slope="0" x-height="462.40234" cap-height="594.72656" ascent="753.90625" descent="-246.09375" font-weight="bold"><font-face-src><font-face-name name="Courier-Bold"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="StickArrow_Marker_2" viewBox="-1 -3 7 6" markerWidth="7" markerHeight="6" color="red"><g><path d="M 4.8 0 L 0 0 M 0 -1.8 L 4.8 0 L 0 1.8" fill="none" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Zapf Dingbats" font-size="14" panose-1="5 2 1 2 1 7 4 2 6 9" units-per-em="1000" underline-position="-100.097656" underline-thickness="60.058594" slope="0" x-height="542.48047" cap-height="723.14453" ascent="813.96484" descent="-176.75781" font-weight="500"><font-face-src><font-face-name name="ZapfDingbatsITC"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect fill="white" width="768.0188" height="588.0188"/><g><title>Layer 1</title><text transform="translate(432.5 20)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x="4.2822266" y="13" textLength="226.23682">Random random = new Random() </tspan></text><text transform="translate(432.5 65.5)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x=".48413086" y="13" textLength="195.03174">int a = random.nextInt(2)</tspan></text><text transform="translate(432.5 110)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x=".48413086" y="13" textLength="195.03174">int b = random.nextInt(3)</tspan></text><text transform="translate(432.5 155)" fill="blue"><tspan font-family="Courier" font-size="13" font-weight="500" fill="blue" x=".28857422" y="13" textLength="140.42285">int c = a/(b+a -2)</tspan></text><text transform="translate(411 24)" fill="black"><tspan font-family="Hiragino Kaku Gothic Pro" font-size="14" font-weight="400" x="0" y="12" textLength="14">①</tspan></text><text transform="translate(411 68)" fill="black"><tspan font-family="Hiragino Kaku Gothic Pro" font-size="14" font-weight="400" x="0" y="12" textLength="14">②</tspan></text><text transform="translate(411 112)" fill="black"><tspan font-family="Hiragino Kaku Gothic Pro" font-size="14" font-weight="400" x="0" y="12" textLength="14">③</tspan></text><text transform="translate(411 156)" fill="black"><tspan font-family="Hiragino Kaku Gothic Pro" font-size="14" font-weight="400" x="0" y="12" textLength="14">④</tspan></text><text transform="translate(92 61)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">a=0</tspan></text><text transform="translate(46 108)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">b=0</tspan></text><text transform="translate(100 108)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">b=1</tspan></text><text transform="translate(154 108)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">b=2</tspan></text><line x1="96.68085" y1="78" x2="74.243835" y2="100.92478" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="106.446806" y1="78" x2="109.89197" y2="98.24037" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="116.21276" y1="78" x2="147.89787" y2="102.01936" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(46 153)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">c=0</tspan></text><text transform="translate(100 153)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">c=0</tspan></text><text transform="translate(146.5 153)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".49658203" y="14" textLength="42.006836">c=0/0</tspan></text><line x1="59" y1="125" x2="59" y2="143.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="113" y1="125" x2="113" y2="143.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="167.18889" y1="125" x2="167.59116" y2="143.10244" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(194.5 18)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x=".49658203" y="14" textLength="42.006836">start</tspan></text><line x1="194.05814" y1="35" x2="132.23152" y2="58.95085" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(299 61)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x=".39794922" y="14" textLength="25.204102">a=1</tspan></text><text transform="translate(253 108)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x=".39794922" y="14" textLength="25.204102">b=0</tspan></text><text transform="translate(307 108)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">b=1</tspan></text><text transform="translate(361 108)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">b=2</tspan></text><line x1="303.68085" y1="78" x2="283.34222" y2="98.780774" marker-end="url(#StickArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="313.4468" y1="78" x2="316.89197" y2="98.24037" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="323.21276" y1="78" x2="354.89787" y2="102.01936" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(249 153)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="bold" fill="blue" x=".19726562" y="14" textLength="33.605469">c=-1</tspan></text><text transform="translate(298.5 153)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".49658203" y="14" textLength="42.006836">c=1/0</tspan></text><text transform="translate(362 153)" fill="blue"><tspan font-family="Courier" font-size="14" font-weight="500" fill="blue" x=".39794922" y="14" textLength="25.204102">c=1</tspan></text><line x1="266" y1="125" x2="266" y2="140.1" marker-end="url(#StickArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><line x1="320" y1="125" x2="320" y2="143.1" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="374.18889" y1="125" x2="374.59116" y2="143.10244" marker-end="url(#StickArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="234.97674" y1="35" x2="282.22705" y2="56.1642" marker-end="url(#StickArrow_Marker_2)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><text transform="translate(260 176)" fill="#00c300"><tspan font-family="Zapf Dingbats" font-size="14" font-weight="500" fill="#00c300" x=".076660156" y="11" textLength="11.84668">✔</tspan></text></g></g></svg>
diff --git a/docs/index.md b/docs/index.md
new file mode 100644 (file)
index 0000000..a40d030
--- /dev/null
@@ -0,0 +1,66 @@
+## Welcome to the Java™Pathfinder System ##
+
+This is the main page for Java™ Pathfinder (JPF). JPF is an extensible software model checking framework for Java™ bytecode programs. The system was developed at the [NASA Ames Research Center](http://arc.nasa.gov), open sourced in 2005, and is freely available on this server under the [Apache-2.0 license](http://www.apache.org/licenses/LICENSE-2.0).
+
+
+This page is our primary source of documentation, and is divided into the following sections.
+
+   ---
+
+  * [Introduction](intro/index) -- a brief introduction into model checking and JPF
+    * [What is JPF?](intro/what_is_jpf)
+    * [Testing vs. Model Checking](intro/testing_vs_model_checking)
+         - [Random value example](intro/random_example)
+         - [Data race example](intro/race_example)
+    * [JPF key features](intro/classification)
+    
+    ---
+
+  * [How to obtain and install JPF](install/index) -- everything to get it running on your machine
+    - [System requirements](install/requirements)
+    - Downloading [binary snapshots](install/snapshot) and [sources](install/repositories)
+    - [Creating a site properties file](install/site-properties)
+    - [Building, testing, and running](install/build)
+    - Installing the JPF plugins
+         - [Eclipse](install/eclipse-plugin) 
+         - [NetBeans](install/netbeans-plugin)
+    
+    ---
+         
+  * [How to use JPF](user/index) -- the user manual for JPF    
+    - [Different applications of JPF](user/application_types)
+    - [JPF's runtime components](user/components)
+    - [Starting JPF](user/run)
+    - [Configuring JPF](user/config)
+    - [Understanding JPF output](user/output)
+    - [Using JPF's Verify API in the system under test](user/api)
+    
+    ---
+        
+  * [Developer guide](devel/index) -- what's under the hood
+    * [Top-level design](devel/design)
+    * Key mechanisms, such as 
+        - [ChoiceGenerators](devel/choicegenerator)
+        - [Partial order reduction](devel/partial_order_reduction)
+        - [Slot and field attributes](devel/attributes)
+    * Extension mechanisms, such as
+        - [Listeners](devel/listener)
+        - [Search Strategies](devel/design)
+        - [Model Java Interface (MJI)](devel/mji)
+        - [Bytecode Factories](devel/bytecode_factory)
+    * Common utility infrastructures, such as
+        - [Logging system](devel/logging)
+        - [Reporting system](devel/report)
+    * [Running JPF from within your application](devel/embedded)
+    * [Writing JPF tests](devel/jpf_tests)
+    * [Coding conventions](devel/coding_conventions)
+    * [Hosting an Eclipse plugin update site](devel/eclipse_plugin_update) 
+        
+    ---
+        
+  * [JPF core project](jpf-core/index) -- description and link to jpf-core
+    
+    ---
+      
+  * [Related research and publications](papers/index)    
+
diff --git a/docs/install/build.md b/docs/install/build.md
new file mode 100644 (file)
index 0000000..9e8d3d6
--- /dev/null
@@ -0,0 +1,112 @@
+# Building, Testing, and Running #
+
+If you downloaded binary snapshots, you don't have anything to build (except of creating/updating you [site.properties](./site-properties) file). 
+
+## Building JPF ##
+
+If you have cloned the project repositories you are interested in (which at least includes [jpf-core](../jpf-core/index)), you can build and test each of them by means of their included [Ant](http://ant.apache.org) `build.xml` scripts. Note that you have to install Ant and JUnit separately, e.g. following directions [here](../install/requirements).
+
+
+### Using the command line ###
+
+~~~~~~~~ {.bash}
+> cd jpf-core
+> ant test
+
+... lots of output, at the end you should see something like:
+BUILD SUCCESSFUL
+Total time: 2 minutes 31 seconds
+~~~~~~~~
+
+### Within NetBeans ###
+
+ 1. run **File/Open Project..** from the application menu, entering the JPF project you just downloaded (e.g. "jpf-core")
+ 1. select the project that appears in our project pane (e.g. "jpf-core")
+ 1. run **Build** from the project context menu
+
+### Within Eclipse ###
+
+* Ensure that the `JAVA_HOME` environment variable points to the jdk1.6xxx directory. If it is empty or points to a JRE then errors such as **javac not found** maybe seen. If you do not want the system Java settings to point to jdk1.6xxx, you can also set project specific settings in eclipse.
+
+* If you eclipse settings are set to **Build Automatically** then the project after being cloned will be built.
+
+* To build a particular project in the Project menu select **Build Project**. All the dependencies for the project will be built automatically. 
+
+#### Project Specific JDK settings within Eclipse ####
+1. In Eclipse go to **Project** -> **Properties** 
+
+2. Select **Builders**
+
+3. Pick **Ant_Builder** -> click **Edit**
+
+4. Click on the **JRE** tab
+
+5. Select **Separate JRE** -> **Installed JREs**
+
+6. On Windows and Unix-based systems pick JDK1.6xxx. If it is not listed under the installed JREs, click on **Add**, browse your file system to where JDK1.6xxx resides and select. On OSx systems pick the JVM 1.6.0. 
+
+
+## Running JPF ##
+
+### Using the command line ###
+
+
+~~~~~~~~ {.bash}
+> cd jpf-core
+> java -jar build/RunJPF.jar src/examples/Racer.jpf
+JavaPathfinder v5.0 - (C) 1999-2007 RIACS/NASA Ames Research Center
+.....
+====================================================== statistics
+elapsed time:       0:00:00
+states:             new=9, visited=1, backtracked=4, end=2
+search:             maxDepth=5, constraints=0
+choice generators:  thread=8, data=0
+heap:               gc=8, new=291, free=32
+instructions:       3112
+max memory:         79MB
+loaded code:        classes=73, methods=1010
+
+====================================================== search finished: 1/12/10 2:30 PM
+~~~~~~~~
+
+### Using eclipse plugin ###
+
+ 1. Right click on a .jpf file. Examples can be found in the src\examples directory in jpf-core
+ 1. If the eclipse plugin is correctly installed, a Verify option will appear. 
+ 1. Select the Verify option and the verification process of the system specified in the .jpf file begins
+
+Note that the Application.jpf file essentially replaces previous uses of eclipse launch configurations. The required element of a .jpf file is the `target=MAIN_CLASS` where `MAIN_CLASS` is the class containing main method of the system under test. Any other configurations that need to be specified can be added here. for example `listener=gov.nasa.jpf.tools.SearchMonitor`.   
+
+Specify `classpath=PATH_TO_BIN_DIRECTORY` to add the class files for the program under test to JPF's class path.  Windows users will need to use the double-backslash notation in specifying paths in the .jpf file.  An example .jpf file for the Windows platform is included below for convenience:
+
+~~~~~~~~ {.bash}
+target=mutex.DekkerTestMain
+report.console.property_violation=error,trace,snapshot
+listener=gov.nasa.jpf.listener.EndlessLoopDetector
+classpath=C:\\Users\\fred\\Documents\\ch02-mutex\\bin
+sourcepath=C:\\Users\\fred\\Documents\\ch02-mutex\\src,C:\\Users\\Fred\\Documents\\ch02-mutex\\src-test
+~~~~~~~~
+
+The .jpf file not only indicates the `target` and `classpath`, but it also turns on error reporting with trace generation (`report.console.property_violation`) and configures the source path (`sourcepath`).  Note that multiple source directories are specified using the comma separator.
+
+### Using eclipse Run Configuration ###
+
+ 1. Select a .jpf file by clicking on it in the Package Explorer
+ 1. Click **Run** -> **Run Configurations** -> **run-JPF-core**. It is important the correct .jpf file is selected when the configuration is run. 
+
+#### Windows users ####
+After a fresh install of jpf-core you may see the following when trying to use the Eclipse Run-jpf-core configuration:
+
+~~~~~~~~
+java.lang.NoClassDefFoundError: gov/nasa/jpf/Main
+Caused by: java.lang.ClassNotFoundException: gov.nasa.jpf.Main
+    at java.net.URLClassLoader$1.run(Unknown Source)
+    at java.security.AccessController.doPrivileged(Native Method)
+    at java.net.URLClassLoader.findClass(Unknown Source)
+    at java.lang.ClassLoader.loadClass(Unknown Source)
+    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
+    at java.lang.ClassLoader.loadClass(Unknown Source)
+Exception in thread "main" 
+~~~~~~~~
+
+In this particular case, the error was generated after the initial build after the clone had completed.  To resolve the issue, **refresh the Eclipse workspace** (F5 or right click Refresh).  After the refresh, the Run-jpf-core configuration should work as described above.
diff --git a/docs/install/eclipse-jpf.md b/docs/install/eclipse-jpf.md
new file mode 100644 (file)
index 0000000..bae977d
--- /dev/null
@@ -0,0 +1,24 @@
+# eclipse-jpf #
+
+This is a plugin to launch JPF on selected application property files (*.jpf) from within Eclipse. This plugin is the Eclipse analog to netbeans-jpf. This plugin is minimal by design and serves mostly to start an external JPF process from within Eclipse.
+
+To this end, the plugin adds a "Verify.." popup menu item for *.jpf files that are selected in the package explorer window. 
+
+Depending on the selected application property file, output will appear either in the eclipse console view or a jpf-shell.
+
+The site.properties location can be entered in the "JPF Preferences" pane within the normal Eclipse Preferences window. The default location is `$HOME/.jpf/site.properties`.
+
+This project is *not* a normal JPF project, i.e. it does not follow the usual JPF directory structure and artifacts. This is an Eclipse plugin project that builds into a jar file (attached) that installs into Eclipse as a plugin. Of course that means you need an Eclipse installation that includes the Plugin Development Environment (PDE) in order to build this project.
+
+### Repository ###
+The eclipse-jpf source repository is located on http://babelfish.arc.nasa.gov/hg/jpf/eclipse-jpf
+
+### Installation ###
+If you have the eclipse PDE installed, the preferred way is to get the eclipse-jpf sources from the repository, build via the eclipse plugin Export Wizard into the <eclipse-home>/dropins folder and restart eclipse.
+
+If you don't have the eclipse PDE, you can either install this plugin via "Eclipse/Help/Install New Software..." by entering the the eclipse-jpf update site URL: 
+
+      http://babelfish.arc.nasa.gov/trac/jpf/raw-attachment/wiki/projects/eclipse-jpf/update
+
+or download the attached eclipse-jpf_<version>.jar file and move it into your <eclipse-home>/dropins folder. In both cases, you need to restart eclipse in order to load the plugin. Note however that this might not be the latest eclipse-jpf version and it might or might not work with your eclipse.
\ No newline at end of file
diff --git a/docs/install/eclipse-plugin.md b/docs/install/eclipse-plugin.md
new file mode 100644 (file)
index 0000000..2bcbb3a
--- /dev/null
@@ -0,0 +1,15 @@
+# Installing the Eclipse JPF plugin #
+
+Note that this is assuming the latest Eclipse and Java versions, which is Eclipse 4.3.x and Java 7 at the time of this writing. Older versions might or might not work.
+There are three different ways to install the plugin, which are listed in the order of preference if you want to ensure that you are using the latest plugin version:
+
+### Build from sources ###
+If you have the Eclipse Plugin Development Environment installed (PDE -comes with standard Eclipse distribution), the preferred way is to download the [eclipse-jpf](./eclipse-jpf) sources from the repository, build the plugin into your <eclipse>/dropins/plugins directory, and restart Eclipse. This ensures you are using the latest version of the plugin, and the build process will tell you if your Eclipse is compatible.
+
+### Install from attached plugin jar ###
+Alternatively, you can download one of the attached eclipse-jpf_<version>.jar files, place it into your <eclipse>/dropins/plugins directory, and restart Eclipse.
+
+### Install from update site ###
+The most convenient, but least up-to-date way to install eclipse-jpf is to use the Eclipse/Help/Install New Software... dialog, by entering the the eclipse-jpf update site URL:
+
+     http://babelfish.arc.nasa.gov/trac/jpf/raw-attachment/wiki/projects/eclipse-jpf/update
diff --git a/docs/install/eclipse-plugin/update.md b/docs/install/eclipse-plugin/update.md
new file mode 100644 (file)
index 0000000..18ccf75
--- /dev/null
@@ -0,0 +1 @@
+This is the target location for the eclipse-jpf update site.
\ No newline at end of file
diff --git a/docs/install/eclipse-plugin/update/features.md b/docs/install/eclipse-plugin/update/features.md
new file mode 100644 (file)
index 0000000..f22f5b8
--- /dev/null
@@ -0,0 +1 @@
+Nothing to see here, just a place holder to upload the eclipse-jpf feature.
\ No newline at end of file
diff --git a/docs/install/eclipse-plugin/update/plugins.md b/docs/install/eclipse-plugin/update/plugins.md
new file mode 100644 (file)
index 0000000..180eefa
--- /dev/null
@@ -0,0 +1 @@
+Nothing to see here, just a place holder to upload the eclipse-jpf plugin.
\ No newline at end of file
diff --git a/docs/install/index.md b/docs/install/index.md
new file mode 100644 (file)
index 0000000..b7f40b8
--- /dev/null
@@ -0,0 +1,19 @@
+# How to Obtain and Install JPF #
+
+The JPF core and most of its extensions are pure Java applications, so they are not many platform requirements other than sufficient memory and a reasonably fast machine. Use of IDEs is optional, but most JPF modules include out-of-the-box configuration files for both Eclipse and Netbeans.
+
+You can obtain JPF sources from the [Mercurial](http://mercurial.selenic.com/wiki/) repositories, but it is not recommended to clone this directory itself (you most likely would get old sub-repository revisions). You need at least the core of JPF, [jpf-core](../jpf-core/index) which can be built with [Ant](http://ant.apache.org) from the command line, or directly opened as a [NetBeans](http://www.netbeans.org) or [Eclipse](http://www.eclipse.org) project.
+
+The JPF core project already come with its configuration file, but you have to create a per-site [site.properties](site-properties) file.
+
+If you use the JPF shells (graphical JPF front-ends), you might also want to install the corresponding NetBeans or Eclipse adapter plugins, although shells are standalone Java (swing) applications that can also be used without an IDE.
+
+Here are the details:
+
+  - [System requirements](requirements)
+  - [Downloading binary snapshots](snapshot)
+  - [Downloading sources from the Mercurial repositories](repositories)
+  - [Creating a site properties file](site-properties)
+  - [Building, testing, and running](build)
+  - [Installing the Eclipse plugin](eclipse-plugin)
+  - [Installing the NetBeans plugin](netbeans-plugin)
\ No newline at end of file
diff --git a/docs/install/netbeans-jpf.md b/docs/install/netbeans-jpf.md
new file mode 100644 (file)
index 0000000..539e0df
--- /dev/null
@@ -0,0 +1,10 @@
+# netbeans-jpf #
+
+This is a plugin to launch JPF on selected application properties (*.jpf) files from within NetBeans. No worries, this is a minimal plugin that mainly starts an external process (JPF), so it doesn't muck with your NetBeans views.
+
+The main functions are
+
+ - start the JPF shell in an external process
+ - wait for editor positioning requests from the JPF shell, and show the corresponding source lines
+
+Why is this named differently than all the other projects? Because it is a different kind of project: this is *not* a normal JPF project, i.e. it is not a freeform NetBeans project with the usual JPF directory structure and artifacts. It is a NetBeans module, and it's main artifact is a *.nbm file in the build directory.
\ No newline at end of file
diff --git a/docs/install/netbeans-plugin.md b/docs/install/netbeans-plugin.md
new file mode 100644 (file)
index 0000000..c5360a4
--- /dev/null
@@ -0,0 +1,11 @@
+# Installing the NetBeans JPF plugin #
+ 1. Download and install [jpf-core](../jpf-core/index), e.g. from the [Mercurial repository](../install/repositories)
+ 2. -------------- take a break ---------------
+ 3. Download the `gov-nasa-jpf-netbeans-runjpf.nbm` file from [here](http://babelfish.arc.nasa.gov/trac/jpf/attachment/wiki/install/netbeans-plugin/gov-nasa-jpf-netbeans-runjpf.nbm).
+ 4. From within Netbeans go to **Tools**->**Plugins** (Alt+T followed by Alt+g)
+ 5. Select the **Downloaded** tab
+ 6. Click on **Add Plugins...** (Alt+A)
+ 7. Select the `gov-nasa-jpf-netbeans-runjpf.nbm` file that was downloaded in step 3
+ 8. Select **install**
+ 9. Agree to the License agreement
+ 10. Restart Netbeans
\ No newline at end of file
diff --git a/docs/install/repo_shell.md b/docs/install/repo_shell.md
new file mode 100644 (file)
index 0000000..e5609b1
--- /dev/null
@@ -0,0 +1,74 @@
+# Checkout and Build from Shell Prompt (Unix) #\r
+\r
+While there is a CVS repository on the JPF Sourceforge site, it is not in use anymore. The current version is kept in the Subversion repository.\r
+\r
+<note> We will shift to a distributed version control system (Mercurial or Git) soon</note>\r
+\r
+\r
+# SVN #\r
+\r
+This is not a general introduction of [nor do we cover details of [[https://sourceforge.net/svn/?group_id=136825|Subversion on Sourceforge]((SVN),)(http://subversion.tigris.org|Subversion]]). To obtain the current JPF version, execute the following command from a shell prompt:\r
+\r
+~~~~~~~~ {.bash}\r
+>svn checkout https://javapathfinder.svn.sourceforge.net/svnroot/javapathfinder/trunk\r
+~~~~~~~~\r
+\r
+To update later-on, enter from within one of the javapathfinder directories\r
+\r
+\r
+~~~~~~~~ {.bash}\r
+>svn update\r
+~~~~~~~~\r
+\r
+To commit (in case you are a project member and have a sourceforge account), use\r
+\r
+\r
+~~~~~~~~ {.bash}\r
+>svn commit -m "commit message" \r
+~~~~~~~~\r
+\r
+In order to build and test JPF from the commandline, you need Ant and JUnit. If you do not want to use the scripts and versions that are provided with JPF, make sure you have set up your *CLASSPATH* to contain both tools. As of Ant 1.6.5 and JUnit 4.1, this involves the following environment settings:\r
+\r
+\r
+~~~~~~~~ {.bash}\r
+>export PATH=$PATH:<your-ant-dir>/bin\r
+>export CLASSPATH=<your-ant-dir>/lib/ant.jar:<your-junit-dir>/junit-4.1.jar\r
+~~~~~~~~\r
+\r
+~~~~~~~~\r
+<note tip> for your convenience, we have added all required external libraries \r
+and scripts to the *build-tools* directory, so you do not have to install \r
+any of the external components.</note>\r
+~~~~~~~~\r
+Now you can proceed as described in section Building JPF from a Command Line. For the impatient reader, this is mainly one command\r
+\r
+\r
+~~~~~~~~ {.bash}\r
+>cd javapathfinder-trunk\r
+>build-tools/bin/ant run-tests\r
+\r
+Buildfile: build.xml\r
+\r
+init:\r
+    [mkdir] Created dir: /users/pcmehlitz/projects/javapathfinder-trunk/build\r
+ ...\r
+compile-jpf:\r
+    [javac] Compiling 543 source files to /users/pcmehlitz/projects/javapathfinder-trunk/build/jpf\r
+ ...\r
+run-tests:\r
+     [echo] --- running Junit tests from build/test..\r
+    [junit] Running TestJavaLangObjectJPF\r
+    [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.876 sec\r
+ ...\r
+BUILD SUCCESSFUL\r
+Total time: 2 minutes 25 seconds\r
+~~~~~~~~\r
+\r
+or (especially for non-Unix folk)\r
+\r
+\r
+~~~~~~~~ {.bash}\r
+>java RunAnt run-tests\r
+~~~~~~~~\r
+\r
+which should compile the whole system and runs the regression test suite with the provided Ant and JUnit versions.
\ No newline at end of file
diff --git a/docs/install/repositories.md b/docs/install/repositories.md
new file mode 100644 (file)
index 0000000..7d43566
--- /dev/null
@@ -0,0 +1,68 @@
+# JPF Source Repository Access #
+
+JPF sources are kept as [Mercurial](http://www.selenic.com/mercurial) repositories within the http://babelfish.arc.nasa.gov/hg/jpf directory. You need to clone the subrepositories (e.g. http://babelfish.arc.nasa.gov/hg/jpf/jpf-core) that you are interested in, **not** the root directory ../hg/jpf itself (which most likely will give you old subrepo revisions).
+
+We provide anonymous, public read access. If you want to push your changes back to the repository, and you are not a NASA Ames employee, you need to [obtain a JPF contributor account](wiki:about/account).
+
+Mercurial is a [Distributed Version Control System](http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/) (DVCS), like Git. If you are not familiar with this, it means "all repositories are created equal", and you have to read up a bit. The foremost authority is ["Mercurial: The Definite Guide"](http://hgbook.red-bean.com/).
+
+For the inpatient, we also provide a short [Mercurial primer](../devel/mercurial).
+
+## Command Line Access ##
+
+To check out the jpf-core use the mercurial command `clone`:
+
+~~~~~~~~ {.bash}
+> cd ~/projects
+
+> hg clone http://babelfish.arc.nasa.gov/hg/jpf/jpf-core
+destination directory: jpf-core
+requesting all changes
+...
+added 71 changesets with 2045 changes to 1694 files
+updating working directory
+683 files updated, 0 files merged, 0 files removed, 0 files unresolved
+~~~~~~~~
+
+The same process can be repeating by substituting `jpf-core` with the [project](../projects/index) you are interested in. You can install the projects wherever you want, but you have to remember where you installed them for the subsequent [site.properties](../install/site-properties) configuration.
+
+To update your local repository, change to its directory and do `pull` (don't forget the `-u` option, or your working directories will not get updated) 
+
+~~~~~~~~ {.bash}
+> cd ~/projects/jpf-core
+> hg pull -u
+~~~~~~~~
+
+If you want - and are allowed - to push back your changes, you use **`https://`**`babelfish.arc.nasa.gov/hg/jpf/<project>` as the URL, which will require entering your user-name and password. Before pushing the changes you have to commit the changes from your working directory to your local repository. 
+
+~~~~~~~~ {.bash}
+> cd ~/projects/jpf-core
+> hg commit -m "this commits to the local repository"
+~~~~~~~~
+
+The changes now can be pushed to the central repository using the following command
+
+~~~~~~~~ {.bash}
+> hg push https://babelfish.arc.nasa.gov/hg/jpf/jpf-core
+~~~~~~~~
+
+## Mercurial Support within NetBeans ##
+
+There is no need to install any plugins, NetBeans is distributed with Mercurial support.
+
+
+## Mercurial Plugin for Eclipse ##
+
+To work within Eclipse
+
+* Download and install the [MercurialEclipse](http://javaforge.com/project/HGE) plugin, which at the time of this writing is available from the update site: http://cbes.javaforge.com/update (the usual Eclipse spiel: **Help** -> **Install New Software...** -> **add site**, enter the update URL above) 
+
+* In the eclipse menu: **File** -> **Import** -> **Mercurial** -> **Clone repository using Mercurial** -> **Next**
+
+* In the repository location, URL, specify http://babelfish.arc.nasa.gov/hg/jpf/jpf-core
+
+* Check the box for 'Search for .project files in clone and use them to create projects'
+
+* Click on **Finish** 
+
+The steps listed above will clone the repository in your workspace. Right clicking on the project will show a 'Team' option that allows to perform all the version control operations. 
diff --git a/docs/install/requirements.md b/docs/install/requirements.md
new file mode 100644 (file)
index 0000000..ccec451
--- /dev/null
@@ -0,0 +1,79 @@
+# System Requirements #
+
+## Java ##
+Most of the JPF components, including the [jpf-core](../jpf-core/index), are pure Java applications. The minimal version is Java SE 8 (if you have to use JDK 1.7 or JDK 1.6 you have to check out the 'java-7' and 'java-1.6' branches of our repository, respectively), we generally advise to use the latest stable Java version that is available for your platform. You can find out about your java by running the following statement from the command line.
+
+~~~~~~~~ {.bash}
+> java -version
+java version "1.8.0_20"
+...
+~~~~~~~~
+
+JPF is a resource hungry application. We recommend at least 2Gb of memory, and generally use a `-Xmx1024m` setting when launching Java. The disk footprint for most JPF projects is fairly small, the jpf-core takes about 40M when fully expanded with sources, compiled classes and jar files. The binary distribution (jar files) takes less than 1.5M.
+
+Some JPF projects do require 3rd party native executables (like DLLs) that are platform specific. Please refer to the specific project pages for details.
+
+### Java specifics for Windows ###
+Make sure you have the JDK installed, otherwise there is no javac compiler available.
+
+In order to build JPF from a Windows Command Prompt (executing `ant.bat` from inside the respective JPF project directory), you have to set the `JAVA_HOME` environment variable. 
+
+### Java specifics for OS X ###
+On Mac OS X 10.10, Java 1.7 is default, but `/Applications/Utilities/Java Preferences.app` can change the setting. In some cases, it may be necessary to manually change the symlink that determines which version is default:
+
+~~~~~~~~ {.bash}
+sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/Current
+sudo ln -s 1.8 /System/Library/Frameworks/JavaVM.framework/Versions/Current
+~~~~~~~~
+
+## Mercurial (Version Control System) ##
+If you want to download the JPF source repositories, you need to install the [Mercurial](http://mercurial.selenic.com/wiki/) distributed version control system on your machine, which requires [Python](http://www.python.org). If you are using a Windows machine, you can install [TortoiseHg](http://tortoisehg.bitbucket.org/), which provides a Windows Explorer extension and includes Python.
+
+On some Mac OS X systems, it may be necessary to set the `LC_ALL` and `LANG` environment variables for Mercurial to work correctly.
+
+in `~/.bashrc`:
+
+~~~~~~~~ {.bash}
+export LC_ALL=en_US.UTF-8
+export LANG=en_US.UTF-8 
+~~~~~~~~
+
+in `~/.cshrc`:
+
+~~~~~~~~ {.bash}
+setenv LC_ALL en_US.UTF-8
+setenv LANG en_US.UTF-8 
+~~~~~~~~
+
+
+If you already have Eclipse installed, and want to download the source repositories from within the IDE, you need the [MercurialEclipse](http://javaforge.com/project/HGE) plugin, which you can install from this update-site: http://cbes.javaforge.com/update
+
+Note that NetBeans comes with Mercurial support by default.
+
+
+## Apache Ant ##
+
+Although you can also build from Eclipse, we use [Apache Ant](http://ant.apache.org) as our primary build system. **Ant is no longer included in the jpf-core distribution** so you have to install it separately. Currently (as of Ant 1.9.3), this involves
+
+ * getting Ant binaries e.g. from http://www.apache.org/dist/ant/binaries/
+ * setting the `ANT_HOME` environment variable to the directory where you unpacked the binaries
+ * adding `ANT_HOME/bin` to your `PATH` environment variable
+
+
+## JUnit ##
+
+Our Ant script (build.xml) includes a `test` target which uses [JUnit](http://junit.org) to run regression tests. **JUnit is no longer included in the jpf-core distribution**. For JUnit-4.11 installation involves the following steps
+
+ * get junit-<version>.jar and hamcrest-core-<version>.jar, e.g. from the links on https://github.com/junit-team/junit/wiki/Download-and-Install
+ * add both jars to your `CLASSPATH` environment variable 
+
+
+## JPF IDE plugins ##
+
+JPF components come with project configurations for both [NetBeans](http://www.netbeans.org) and [Eclipse](http://www.eclipse.org), so you might want to use your favorite IDE. Since the JPF build process is [Ant](http://ant.apache.org)-based, NetBeans is generally a better fit because it is Ant-based and can make direct use of your JPF site configuration.
+
+If you want to install the [Eclipse plugin](./eclipse-jpf), you need an Eclipse version >= 3.5 (Galileo) **running under JavaSE-1.8**. Please see the [Installing the Eclipse JPF plugin](./eclipse-plugin) page for details.
+
+If you want to go with Eclipse and have to rebuild the JPF [Eclipse plugin](./eclipse-jpf), make sure you install the Eclipse Plugin Development Environment (PDE) from the respective Eclipse server.
+
+If you want to use the [NetBeans plugin](./netbeans-jpf), the minimal NetBeans version is 6.5.
\ No newline at end of file
diff --git a/docs/install/site-properties.md b/docs/install/site-properties.md
new file mode 100644 (file)
index 0000000..691fa4d
--- /dev/null
@@ -0,0 +1,32 @@
+# Creating  a site.properties file #
+
+The site.properties file tells JPF at startup time where to look for installed projects, so that it can add classpaths accordingly without you having to type off your fingers. It is a normal [Java properties](http://en.wikipedia.org/wiki/.properties) file, which supports a few additional things like key expansion.
+
+While you can tell JPF at startup time where to look for `site.properties`, we recommend using the default location, which is **`<user.home>/.jpf/site.properties`**. If you don't know what value the standard Java system property `user.home` has on your machine, please run the attached Java program. On Unix systems, this is your home directory.
+
+Assuming that you installed your JPF projects under `<user.home>/projects/jpf`, a typical `site.properties` looks like this:
+
+~~~~~~~~ {.bash}
+# JPF site configuration
+
+jpf-core = ${user.home}/projects/jpf/jpf-core
+
+# numeric extension
+jpf-numeric = ${user.home}/projects/jpf/jpf-numeric
+
+# annotation-based program properties extension
+jpf-aprop = ${user.home}/projects/jpf/jpf-aprop
+
+extensions=${jpf-core},${jpf-aprop}
+
+#... and all your other installed projects
+~~~~~~~~ 
+
+If you are a Windows user, and you want to enter absolute pathnames, don't use unquoted backslashes '\' since the `java.util.Properties` parser would interpret these as special chars (like `"\n"`). You can use ordinary slashes '/' instead. To avoid drive letters, use system properties like `${user.home}`.
+
+
+A sample site.properties file is attached to this page. Note that the "`${..}`" terms are automatically expanded by JPF, i.e. you do not have to enter explicit paths.
+
+Each installed project is defined by a "`<project-name> = <project-directory>`" key/value pair. The project name is usually the same as the repository name.
+
+Note that we don't require anymore that all projects are in the extensions list, **but** jpf-core (or wherever your JPF core classes are) now needs to be in there. In fact, you probably want to have only `jpf-core` in `extensions`, and use the `@using <project-name>` for the other ones from either your project properties (jpf.properties, for project dependencies) or - usually - from your application properties (*.jpf) files. See [JPF configuration](../user/config) for details.
\ No newline at end of file
diff --git a/docs/install/snapshot.md b/docs/install/snapshot.md
new file mode 100644 (file)
index 0000000..d7839c1
--- /dev/null
@@ -0,0 +1,14 @@
+# Downloading Binary Snapshots #
+
+
+Available binary snapshots are attached as *.zip archives to the [jpf-core](../jpf-core/index) page. Just click the on the download link and tell your browser where to store them on disk, which you need to remember for your subsequent [site.properties](../install/site-properties) configuration. We recommend putting all JPF modules under a single parent directory that holds the site.properties file:
+
+~~~~~~~~ {.bash}
+jpf/
+     site.properties
+     jpf-core/
+     jpf-symbc/
+     …
+~~~~~~~~
+
+Many JPF modules are still fast moving, so we recommend using the source repositories to stay up-to-date. Our policy is to only push changes to this server which pass all regression tests
\ No newline at end of file
diff --git a/docs/intro/classification.md b/docs/intro/classification.md
new file mode 100644 (file)
index 0000000..667e755
--- /dev/null
@@ -0,0 +1,25 @@
+# JPF Key Features #
+
+By now, it should be clear that JPF is not just a model checker: it is a JVM that can be used for model checking. However, if you are familiar with formal methods, you might want to know what kind of model checking methods and features are supported.
+
+Some of the basic model checking traits are:
+
+* **Explicit State** model checking is JPF's standard mode of operation. It means JPF keeps track of concrete values of local variables, stackframes, heap objects and thread states. Other than the intentionally different scheduling behavior, JPF should produce the same results like a normal JVM. Of course it is slower (it is a JVM running on top of a JVM, doing a lot of additional work).
+
+* **Symbolic Execution** means that JPF can perform program execution with symbolic values obtained from how a certain variable was used along the current path of execution (e.g. `x>0 && x<43`). Moreover, JPF can even mix concrete and symbolic execution, or switch between them. Please see the Symbolic Pathfinder project documentation for details.
+
+* **State Matching** is a key mechanism to avoid unnecessary work. The execution state of a program mainly consists of heap and thread-stack snapshots. While JPF executes, it checks every new state if it already has seen an equal one, in which case there is no use to continue along the current execution path, and JPF can backtrack to the nearest non-explored non-deterministic choice. What variables contribute to state matching, and how state matching is performed can be controlled by the user.
+
+* **Backtracking** means that JPF can restore previous execution states, to see if there are unexplored choices left. For instance, if JPF reaches a program end state, it can walk backwards to find different possible scheduling sequences that have not been executed yet. While this theoretically can be achieved by re-executing the program from the beginning, backtracking is a much more efficient mechanism if state storage is optimized.
+
+* **Partial Order Reduction** is what JPF employs to minimize context switches between threads that do not result in interesting new program states. This is done on-the-fly, i.e. without prior analysis or annotation of the program, by examining which instructions can have inter-thread effects. While this is fast, it cannot handle the “diamond case”, since it cannot look ahead of the current execution. 
+
+JPF's flexibility is achieved by an architecture that provides a large number of extension points, of which the most important ones are:
+
+ * search strategies - to control in which order the state space is searched
+ * listeners - to monitor and interact with JPF execution (e.g. to check for new properties)
+ * native peers - to model libraries and execute code at the host VM level
+ * bytecode factories - to provide different execution models (like symbolic execution)
+ * publishers - to generate specific reports
+
+In general, flexibility through configuration is JPF's answer to the scalability problem of software model checking.
\ No newline at end of file
diff --git a/docs/intro/index.md b/docs/intro/index.md
new file mode 100644 (file)
index 0000000..8fcec1f
--- /dev/null
@@ -0,0 +1,17 @@
+# Introduction #
+JPF started as a software model checker, but nowadays, JPF is a runtime system with many different execution modes and extensions which go beyond model checking. All the various modes of JPF, while serving different purposes, used to verify Java programs by
+
+ * detecting and explaining defects
+ * collecting "deep" runtime information like coverage metrics
+ * deducing interesting test vectors and creating corresponding test drivers
+ * and many more...   
+
+Although JPF is mostly associated with software model checking, it can be applied in variety of ways.  People often confuse this with testing, and indeed JPF's notion of model checking can be close to systematic testing. Below we use a simple example that illustrates the differences.
+
+Here is the outline of this section:
+
+  * [What is JPF?](what_is_jpf)
+  * [Testing vs. Model Checking](testing_vs_model_checking)
+    * [Random value example](random_example)
+    * [Data race example](race_example)
+  * [JPF key features](classification)
diff --git a/docs/intro/race_example.md b/docs/intro/race_example.md
new file mode 100644 (file)
index 0000000..bb7074b
--- /dev/null
@@ -0,0 +1,105 @@
+# Example: Data Race #
+
+That's nice, but of course we also could have provoked the error in our random value example by using explicit loops instead of the `Random.nextInt()` calls, i.e. by explicitly enumerating all possible `a` and `b` values in our program. This would be typically done in a program that is a dedicated test driver, in a process which is called *systematic testing*. However, the program we want to verify might not be a test driver, and we might not even have the sources so that we could modify it accordingly.
+
+But the real show stopper for systematic testing lies within the instructions representing choices: at the application level, we might neither be aware of that there are choices, what the choice values are, nor be able to explicitly pick them.
+
+To demonstrate this point, let us look at a little concurrency example using two threads of execution. Quite obviously, the program produces different results depending on if line (2) or (4) gets executed first. But assuming we can't control what happens in (1) and (2), this time we cannot explicitly enumerate the choices - they are made by the system scheduler, i.e. outside of our application.
+
+~~~~~~~~ {.java}
+public class Racer implements Runnable {
+     int d = 42;
+     public void run () {
+          doSomething(1000);                   // (1)
+          d = 0;                               // (2)
+     }
+     public static void main (String[] args){
+          Racer racer = new Racer();
+          Thread t = new Thread(racer);
+          t.start();
+          doSomething(1000);                   // (3)
+          int c = 420 / racer.d;               // (4)
+          System.out.println(c);
+     }
+     static void doSomething (int n) {
+          // not very interesting..
+          try { Thread.sleep(n); } catch (InterruptedException ix) {}
+     }
+}
+~~~~~~~~
+
+Chances are, we don't encounter this defect at all during normal testing:
+
+~~~~~~~~ {.bash}
+> java Racer
+10
+> 
+~~~~~~~~
+
+Not so with JPF. Being a real virtual machine, there is nothing we can't control. And being a different kind of a Java virtual machine, JPF recognizes that 'racer' is an object that is shared between two threads, and hence executes all possible statement sequences / scheduling combinations in which this object can be accessed. This time, we give the complete output, which also shows the trace (the execution history) that lead to the defect found by JPF:
+
+~~~~~~~~ {.bash}
+> bin/jpf Racer
+JavaPathfinder v4.1 - (C) 1999-2007 RIACS/NASA Ames Research Center
+====================================================== system under test
+application: /Users/pcmehlitz/tmp/Racer.java
+
+====================================================== search started: 5/24/07 12:32 AM
+10
+10
+
+====================================================== error #1
+gov.nasa.jpf.jvm.NoUncaughtExceptionsProperty
+java.lang.ArithmeticException: division by zero
+        at Racer.main(Racer.java:20)
+
+====================================================== trace #1
+------------------------------------------------------ transition #0 thread: 0
+gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet {>main}
+      [insn w/o sources](282)
+  Racer.java:15                  : Racer racer = new Racer();
+  Racer.java:1                   : public class Racer implements Runnable {
+      [insn w/o sources](1)
+  Racer.java:3                   : int d = 42;
+  Racer.java:15                  : Racer racer = new Racer();
+  Racer.java:16                  : Thread t = new Thread(racer);
+      [insn w/o sources](51)
+  Racer.java:16                  : Thread t = new Thread(racer);
+  Racer.java:17                  : t.start();
+------------------------------------------------------ transition #1 thread: 0
+gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet {>main,Thread-0}
+  Racer.java:17                  : t.start();
+  Racer.java:19                  : doSomething(1000);                   // (3)
+  Racer.java:6                   : try { Thread.sleep(n); } catch (InterruptedException ix) {}
+      [insn w/o sources](2)
+  Racer.java:6                   : try { Thread.sleep(n); } catch (InterruptedException ix) {}
+  Racer.java:7                   : }
+  Racer.java:20                  : int c = 420 / racer.d;               // (4)
+------------------------------------------------------ transition #2 thread: 1
+gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet {main,>Thread-0}
+  Racer.java:10                  : doSomething(1000);                   // (1)
+  Racer.java:6                   : try { Thread.sleep(n); } catch (InterruptedException ix) {}
+      [insn w/o sources](2)
+  Racer.java:6                   : try { Thread.sleep(n); } catch (InterruptedException ix) {}
+  Racer.java:7                   : }
+  Racer.java:11                  : d = 0;                               // (2)
+------------------------------------------------------ transition #3 thread: 1
+gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet {main,>Thread-0}
+  Racer.java:11                  : d = 0;                               // (2)
+  Racer.java:12                  : }
+------------------------------------------------------ transition #4 thread: 0
+gov.nasa.jpf.jvm.choice.ThreadChoiceFromSet {>main}
+  Racer.java:20                  : int c = 420 / racer.d;               // (4)
+
+====================================================== search finished: 5/24/07 12:32 AM
+>
+~~~~~~~~
+
+Looking at the output created by our test program, we see the result `"10"` printed twice, but that doesn't confuse us anymore. From our first example, we know this simply means that JPF first tried two scheduling sequences that normally terminated the program without provoking the defect, before finally picking the one that causes the error.
+
+It still might be a bit confusing that the printed trace contains some source lines twice. Ignoring the details of its choice generation mechanism, this is caused by JPF executing bytecode instructions, not source lines, and a single source line can easily get translated into a number of bytecode instructions. This would go away if we configure JPF so that it reports the executed bytecode, but at the cost of much larger trace that is harder to read. What is more interesting is that JPF tells us about the thread choices it made in each transition (the lines starting with `gov.nasa.jpf.jvm.ThreadChoice..`).
diff --git a/docs/intro/random_example.md b/docs/intro/random_example.md
new file mode 100644 (file)
index 0000000..3499e9f
--- /dev/null
@@ -0,0 +1,95 @@
+# Example: `java.util.Random` #
+
+We start with a simple example that uses java.util.Random. Consider the following program that obtains two random values in (2) and (3), and then performs some computation (4) with them.
+
+~~~~~~~~ {.java}
+import java.util.Random;
+
+public class Rand {
+     public static void main (String[] args) {
+          Random random = new Random(42);      // (1)
+          
+          int a = random.nextInt(2);           // (2)
+          System.out.println("a=" + a);
+          
+          //... lots of code here
+          
+          int b = random.nextInt(3);           // (3)
+          System.out.println("  b=" + b);
+         
+          int c = a/(b+a -2);                  // (4)
+          System.out.println("    c=" + c);         
+     }
+}
+~~~~~~~~
+
+
+## Testing ##
+
+Executing this program with a normal Java VM yields something like the following output. If we don't provide an explicit seed when creating the Random object in (1), the result is going to differ between runs, but every run will choose just a single `a` and `b` value (i.e. print just a single `"a=.."` and `"b=.."` line.
+
+~~~~~~~~ {.java}
+> java Rand
+a=1
+  b=0
+    c=-1
+> 
+~~~~~~~~
+
+Let's look at a graphical representation of all the ways our program could be executed, and how it actually was executed in our test run. The nodes of the graph represent *program states*, and the edges *transitions* the execution could take from a certain state.
+
+![Figure 1: Random example](../graphics/sw-model-checking.svg){align=center width=700}
+
+## Model Checking ##
+
+Enter JPF - not much different results if we start JPF as a plain 'java' replacement. The only difference is that it (a) takes longer to complete, and (b) tells us something about a "search", which hints on that something more than in our test run is going on
+
+~~~~~~~~ {.bash}
+> bin/jpf Rand
+JavaPathfinder v4.1 - (C) 1999-2007 RIACS/NASA Ames Research Center
+====================================================== system under test
+application: /Users/pcmehlitz/tmp/Rand.java
+
+====================================================== search started: 5/23/07 11:48 PM
+a=1
+  b=0
+    c=-1
+
+====================================================== results
+no errors detected
+
+====================================================== search finished: 5/23/07 11:48 PM
+>
+~~~~~~~~
+
+What is this "search" supposed to mean? Looking at source line (4) we realize that there is a potential problem: for certain `a` and `b` values, this expression can cause a division by zero `ArithmeticException`. Depending on the random seed used in (1), it's quite possible we would never encounter this case if we run (i.e. test) the program with a normal JVM.
+
+Re-enter JPF - but this time we tell it to not only consider single values for `a` and `b`, but look at all possible choices:
+
+~~~~~~~~ {.bash}
+> bin/jpf +cg.enumerate_random=true Rand
+JavaPathfinder v4.1 - (C) 1999-2007 RIACS/NASA Ames Research Center
+====================================================== system under test
+application: /Users/pcmehlitz/tmp/Rand.java
+
+====================================================== search started: 5/23/07 11:49 PM
+a=0
+  b=0
+    c=0
+  b=1
+    c=0
+  b=2
+
+====================================================== error #1
+gov.nasa.jpf.jvm.NoUncaughtExceptionsProperty
+java.lang.ArithmeticException: division by zero
+        at Rand.main(Rand.java:15)
+....
+>
+~~~~~~~~
+
+What has happened? By specifying "+vm.enumerate_random=true" we told JPF to consider all possible values for expressions (2) and (3). JPF starts with `"a=0"`, then picks `"b=0"`, which yields a valid `"c=0"` value. But instead of terminating like a normal VM, JPF recognized that there are more choices left, so it backtracks to (3) and picks `"b=1"`. Again, no problem here with computing `"c=0"`. Back to (3), JPF now tries `"b=2"`, which of course spells disaster for our little program when executing (4), as can be seen by the following error report.
+
+Here is a graphical representation of this search process. It should be noted that JPF per default only runs up to the point where it finds an error or there are no more choices left to explore. But if we would somehow fix the `"a=0,b=2"` case, JPF would still find the `"a=1,b=1"` case in the next run, since it systematically tries all choices. No matter what error it finds, JPF also keeps the complete trace (execution path) how it got to this error (denoted by the red arrows), which means we don't have to debug the program to find out.
+
+![Figure 2: Random example](../graphics/sw-model-checking-2.svg){align=center width=450}
diff --git a/docs/intro/testing_vs_model_checking.md b/docs/intro/testing_vs_model_checking.md
new file mode 100644 (file)
index 0000000..56b41d5
--- /dev/null
@@ -0,0 +1,28 @@
+# Testing vs. Model Checking #
+
+So what JPF does is test our program for defects? No, it usually does more, at least when used as a model checker. How does testing differ from model checking?
+
+Software testing is an empirical set of techniques where you execute your program with a number of inputs in order to find out if it behaves correctly. This comes with two parts that involve the right choices: test input and test oracle.
+
+![Figure 1: Testing](../graphics/states-testing.svg){align=center}
+
+Testing techniques differ on how we choose the input (random, "interesting" problem domain values like corner cases etc.), and on how much knowledge about the SUT and its execution environment we assume (black/grey/white box), which especially affects how we can define and check correct behavior. This involves a lot of educated guesses, or as Edsger Dijkstra has put it: "program testing can at best show the presence of errors but never their absence". We usually compensate this by performing "enough" tests - which would be the next guess. Testing complex systems can easily turn into finding a needle in a haystack. If you are a good tester, you make the right guesses and hit the defect that is inevitably there. If not, don't worry - your users will find it later.
+
+![Figure 2: Model checking](../graphics/states-mc.svg){align=center}
+
+[Model Checking](http://en.wikipedia.org/wiki/Model_checking) as a [Formal Method](http://en.wikipedia.org/wiki/Formal_methods) does not depend on guesses. At least as the theory goes, if there is a violation of a given specification, model checking will find it. Model checking is supposed to be a rigorous method that exhaustively explores all possible SUT behaviors. 
+
+To illustrate this, look at the [Random value example](random_example), which shows how testing differs from model checking if we have a program that uses a sequence of random values: the test always processes just one set of values at a time, and we have little control over which ones. Model checking doesn't stop until it has checked all data combinations or has found an error.
+
+With the random example, we can at least see the choices in our program. Consider a concurrent program, such as [Data race example](race_example) - do you know where the operating system switches between threads? All we know is that different scheduling sequences can lead to different program behavior (e.g. if there are data races), but there is little we can do in our tests to force scheduling variation. There are program/test spec combinations which are "untestable". Being a virtual machine, our software model checker doesn't suffer the same fate - it has complete control over all threads of our program, and can execute all scheduling combinations.
+
+![Figure 3: Threads interleaving](../graphics/interleavings.svg){align=center width=550}
+
+That is the theory. In reality "all possible" can be a pretty large number - too large for existing computing resources or our patience. Just assume the number of different scheduling sequences of a program consisting of N threads P,,1,, .. P,,N,, that each have n,,i,, atomic instruction sequences.
+
+For 2 threads with 2 atomic sections each this gives us 6 different scheduling combinations. For 8 sections the result is 12870, 16 sections yield 601080390 - that is why it is called *state explosion*. Software model checking has a scalability problem, even more so than model checking of hardware, since programs usually have a lot more states.
+
+There are several things we can do. First, we can optimize the model checker, which is simply an engineering feat. Next, we can find program states which are equivalent with respect to the properties we are checking, which can be done with various degrees of abstractions and value representations. Last, we can try to get to the defect first, before we run out of time or memory. But this is where the boundary between testing and model checking becomes blurred, as it involves things like heuristics about interesting input values or system behaviors, and these heuristics tend to drop reachable program states.
+
+JPF does all of the above to curb the state space explosion, and most things are configured instead of hardwired, so you don't depend on built-in heuristics. But no matter how much we shrink the state space, JPF can still observe a lot more about the program execution than normal tests (i.e. we can be more precise with our oracles), and it still knows about the execution history in case we find a defect, which is always just the first part - we also need to understand it so that it can be fixed eventually. 
+
diff --git a/docs/intro/what_is_jpf.md b/docs/intro/what_is_jpf.md
new file mode 100644 (file)
index 0000000..e8a5ce2
--- /dev/null
@@ -0,0 +1,44 @@
+# What is JPF? #
+
+That depends on how you configure it. 
+First and foremost, there is no single, monolithic JPF - it is a runtime configured combination of different components. The project *jpf-core* is the essential component that constitutes the core structure of JPF. 
+Here we explain what *jpf-core* is.
+<!--- JPF is designed in a way which can be easily extended.
+We therefore restrict ourselves here to what the *jpf core* is, but keep in mind it is only primus inter pares among JPF components. --->
+
+## The Core : a VM that supports Model Checking ##
+
+![Figure 1: High level view of JPF](../graphics/jpf-basic.svg){align=center width=400}
+
+The JPF core is a Virtual Machine (VM) for Java™ bytecode. That means that JPF is a program which executes the system under test (SUT). The VM of JPF is able to handle bytecode instructions that are created by a standard Java compiler. While execution semantics of Java bytecodes are clearly defined in [Sun's Java virtual machine specifications](http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html/), we have little hardwired semantics in JPF - the VM instruction set is represented by a set of classes that can be replaced. 
+JPF is a special VM. JPF itself is written in Java, so it is not as fast as your normal Java. That implies  that JPF is VM which is running on top of another VM. 
+
+As JPF executes the SUT, it checks for certain properties which are given to JPF as input. Some of the properties that can be checked by JPF are unhandled exceptions, deadlocks, and user-defined assertions which are used to test properties of the code's behavior.
+JPF gets back to you with a report that says if the properties hold and/or which verification artifacts have been created by JPF for further analysis (like test cases). 
+
+JPF (theoretically) explores *all* potential executions in a systematic way. In contrast, an ordinary JVM executes the code in only one possible way.
+Basically, JPF can identify points, which represent *execution choices*, in your program from which the execution could proceed differently. Then it systematically explores all of them.
+Typical execution choices are different scheduling sequences or random values, but JPF allows you to introduce your own type of choices such as user input or state machine events.
+
+The number of paths can grow out of hand, and it usually will. This is known as the most challenging problem in software model checking referred to as *state space explosion problem*. 
+JPF uses different ways to mitigate this problem. The first line of defense employed by JPF is *state matching*: each time JPF reaches a choice point, it checks if it has already seen a similar program state, in which case it can safely abandon this path, *backtrack* to a previous choice point that has still unexplored choices, and proceed from there. That's right, JPF can restore program states, which is like telling a debugger "go back 100 instructions".
+
+So what are these features used for? Normally to find defects in the SUT, but what kind of defects? By now you know the answer: it depends on how you configure JPF. By default, the core checks for properties that can be identified by the VM without you having to specify them: deadlocks and unhandled exceptions (which also covers Java `assert` expressions). We call these *non-functional* properties, and no application should violate them. But JPF doesn't stop there - you can define your own properties, which is mostly done with so called *listeners*, little "plugins" that let you closely monitor all actions taken by JPF, like executing single instructions, creating objects, reaching a new program state and many more. An example of a property implemented in the form of a listener is a race detector, which identifies unsynchronized access to shared variables in concurrent programs (the JPF core comes with two of them).
+
+One additional feature that comes in handy in case JPF finds a defect is the complete execution history that leads to the defect, including every executed bytecode instruction. We call this a program *trace*, and it is invaluable to find out what really caused the defect. Think of a deadlock - usually there is not much you can directly deduce from a snapshot of call stacks.
+
+All this explains why JPF is called "a debugger toolbox on steroids": first it automatically executes your program in all possible ways to find defects you don't even know about yet, then it explains you what caused these defects.
+
+## Caveat : not a lightweight tool ##
+
+Of course that is the ideal world. In reality, this can require quite a lot of configuration and even some programming. JPF is not a "black box" tool like a compiler, and the learning curve can be steep. What makes this worse is that JPF cannot execute *native code* which is implemented in a language other than Java but invoked from Java applications. 
+Not because it doesn't know how to do that, but because it often doesn't make sense: native code like system calls to write to a file cannot easily be reverted - JPF would loose its capability to match or backtrack program states. But of course there is a remedy, and it is configurable: *native peers* and *model classes*. Native peers are classes that hold methods that are executed in lieu of real native methods. This code is executed by the real Java VM, not JPF, hence it can also speed up things. Model classes are simple replacements of standard classes, like `java.lang.Thread` that provide alternatives for native methods which are fully observable and backtrackable.
+
+If you are familiar with Java implementations, you know about the humongous proportions of the included libraries, and hence it is obvious that we cannot handle all of them, at least not yet. There is no theoretical limit, and implementing missing library methods is usually pretty easy, but you should be prepared to encounter `UnsatisfiedLinkErrors` and such if you let JPF loose on large production systems. Notorious white spots are `java.io` and `java.net`, but there are people working on it. Who knows, maybe you are interested to join the effort - JPF is open sourced and there is nothing you can't see. We now have more than two dozen major collaborators in industry, government and academia around the world.
+
+So what makes it worthwhile to invest in JPF? After all, it is a heavyweight tool, not a quick and simple bug finder. First, if you are looking for a research platform to try out your new software verification ideas, chances are you can get along with JPF in a fraction of time compared to native production VMs, which are typically optimized towards speed and care little about extensibility or observability.
+
+The second answer is that - as of this writing - there are bugs *only* JPF can find (before the fact, that is), and there are more and more Java applications that cannot afford to learn about these bugs after the fact. JPF is a tool for mission critical applications, where failure is not an option. No surprise it was started by NASA.
+
+
+
diff --git a/docs/jpf-core/AssertionProperty.md b/docs/jpf-core/AssertionProperty.md
new file mode 100644 (file)
index 0000000..21c49e8
--- /dev/null
@@ -0,0 +1,88 @@
+# AssertionProperty #
+
+This listener adds some special capabilities for `java.lang.AssertionError` processing:
+
+ * report `AssertionErrors` that are otherwise carelessly caught in `... catch (Throwable t) {..}` clauses
+ * ignore AssertionErrors if `ap.go_on` is set
+
+`AssertionErrors` differ a bit from other exceptions - they should never be handled, and they usually represent functional properties (as opposed to non-functionals like `NullPointerExceptions` and `ArithmeticExceptions`). Consequently, it can be regarded as an error if an `AssertionError` is swallowed by a 'catch-all', and it is at least an option to ignore an unhandled `AssertionError`, e.g. to see what non-functional defects - if any - it might cause downstream.
+
+### Example 1: catch-all ###
+
+~~~~~~~~ {.java}
+public class CatchAll {
+  public static void main(String[] args){
+    try {
+      int d = 42;
+      //.. some stuff
+      assert d > 50 : "d below threshold";
+      int x = d - 50;
+      //.. some more stuff
+    } catch (Throwable t) { // bad
+      // ..I'm careless
+    }
+  }
+}
+~~~~~~~~
+
+Checked with:
+
+~~~~~~~~ {.bash}
+>jpf +listener=.listener.AssertionProperty CatchAll
+~~~~~~~~
+
+Produces:
+
+~~~~~~~~
+JavaPathfinder v5.0 - (C) 1999-2007 RIACS/NASA Ames Research Center
+====================================================== system under test
+application: CatchAll.java
+
+====================================================== search started: 10/13/09 1:33 PM
+
+====================================================== error #1
+gov.nasa.jpf.listener.AssertionProperty
+d below threshold
+...
+~~~~~~~~
+
+
+### Example 2: go-on ###
+
+~~~~~~~~ {.java}
+public class GoOn {
+  public static void main (String[] args){
+    int d = 42;
+    // lots of computations...
+    assert d > 50 : "d below threshold";
+    int x = Math.max(0, d - 50);
+    // lots of more computations...
+    int y = 42000 / x;
+  }
+}
+~~~~~~~~
+
+Checked with 
+
+~~~~~~~~ {.bash}
+>jpf +listener=.listener.AssertionProperty +ap.go_on GoOn
+~~~~~~~~
+
+Produces:
+
+~~~~~~~~ {.bash}
+JavaPathfinder v5.0 - (C) 1999-2007 RIACS/NASA Ames Research Center
+
+====================================================== system under test
+application: GoOn.java
+
+====================================================== search started: 10/13/09 1:59 PM
+WARNING - AssertionError: d below threshold
+       at GoOn.main(GoOn.java:5)
+
+====================================================== error #1
+gov.nasa.jpf.jvm.NoUncaughtExceptionsProperty
+java.lang.ArithmeticException: division by zero
+       at GoOn.main(GoOn.java:8)
+...
+~~~~~~~~
diff --git a/docs/jpf-core/ErrorTraceGenerator.md b/docs/jpf-core/ErrorTraceGenerator.md
new file mode 100644 (file)
index 0000000..0edf13c
--- /dev/null
@@ -0,0 +1,32 @@
+## Error Trace Generator ##\r
+\r
+This is a listener to output a lightweight error trace. It prints the instructions at POR boundaries or points where there are multiple choices. An example is shown below.  \r
+\r
+~~~~~~~~\r
+\r
+====================### Lightweight Error Trace ###=======================\r
+\r
+\r
+Length of Error Trace: 35\r
+--------------------------------------------------- Thread1\r
+ Event.wait_for_event(oldclassic.java:79)\r
+      wait();\r
+--------------------------------------------------- Thread2\r
+ SecondTask.run(oldclassic.java:129)\r
+      if (count == event2.count) { // <race> ditto\r
+--------------------------------------------------- Thread2\r
+ SecondTask.run(oldclassic.java:127)\r
+      event1.signal_event();       // updates event1.count\r
+--------------------------------------------------- Thread2\r
+ SecondTask.run(oldclassic.java:133)\r
+      count = event2.count;        // <race> ditto\r
+--------------------------------------------------- Thread1\r
+ FirstTask.run(oldclassic.java:103)\r
+        event1.wait_for_event();\r
+--------------------------------------------------- Thread1\r
+\r
+~~~~~~~~\r
+\r
+Configuration: **+listener=gov.nasa.jpf.listener.ErrorTraceGenerator**\r
+\r
+Note the Error trace generator does not have the same memory bottlenecks as **report.console.property_violation=trace** that stores every bytecode instruction executed along the path from the start of the program to the error state. The error trace generator dynamically recreates the counterexample by tracing back to the start from the error state. The head of the error trace (list shown in the example) represents the last instruction in the error trace while the tail represents the first instruction.  
\ No newline at end of file
diff --git a/docs/jpf-core/ExceptionInjector.md b/docs/jpf-core/ExceptionInjector.md
new file mode 100644 (file)
index 0000000..4ab7766
--- /dev/null
@@ -0,0 +1,105 @@
+# ExceptionInjector #
+
+The ExceptionInjector is a listener that can throw user configured exceptions at arbitrary program locations. The main purpose is to ease the testing of exception handler code that would otherwise hard to reach, e.g. because it is not clear if/how an exception could be thrown in 3rd party code.
+
+## Properties ##
+
+~~~~~~~~ {.bash}
+**ei.exception** = <exception-spec>;... \
+
+  <exception-spec> := <type>'@'<location> \
+
+  <type> := <exception-classname>[[string-literal]('(') ')'] \
+
+  <location> := <classname>':'line | <classname>'.'<method-spec>[ [[BR](':'line])]
+~~~~~~~~
+
+Relative line numbers count from the first executable statement in the method body. They are mostly used to have tests that are more robust against changes in the target source file.
+
+If a method is given without a line offset, the exception is thrown before executing INVOKE instructions that call the specified method.
+
+If a line is specified (either absolute or method-body relative), the exception is thrown before executing the associated bytecode at this line.
+
+If more than one exception specification is given, these need to be separated by semicolons ';' (commas cannot be used because they can appear within argument type lists of the target method).
+
+Method argument types have to be specified the same way as they are reported by 'javap', i.e. with fully qualified type names in dot notation (e.g. "`foo(java.lang.String,int[])`"). Return types can be omitted.  
+
+`ei.throw_first` [`boolean`] - if true, throw exception on first bytecode instruction associated with the given (absolute or relative) source line. If false, throw on last associated bytecode instruction
+
+## Examples ##
+
+### (1) throw exception on absolute line 42 in xyz.MyClass: ###
+
+The application property file
+
+~~~~~~~~ {.bash}
+target = yxz.MyClass
+ei.exception = ArithmeticException@xyz.MyClass:42
+~~~~~~~~
+on file
+~~~~~~~~ {.java}
+1:  package x.y.z;
+    ..
+    public class MyClass {
+      ..
+      try {
+        ..
+42:     int z = x / y;
+        ..
+      } catch (ArithmeticException ax){
+        // the handler code to test
+      }
+     ..
+~~~~~~~~
+
+will throw an ArithmeticException on line 42 regardless of the 'x' and 'y' values. 
+
+### (2) throw a `Zapp("gotcha")` exception on (relative) line 2 in method body `xyz.MyClass.foo()` ###
+
+The application property file
+
+~~~~~~~~ {.bash}
+target = yxz.MyClass
+ei.exception = Zapp("gotcha")@xyz.MyClass.foo(int[]):2
+~~~~~~~~
+on file
+~~~~~~~~ {.java}
+    package x.y.z;
+    ..
+    public class MyClass {
+      ..
+      void foo (int[] whatever) {
+        // some comment (doesn't count for line offsets)
++0:     int n = ..       // first statement line in foo()
++1:     // some more comment (does count for line offsets)
++2:     doSomething(n);  // can throw a Zapp exception 
+     ..
+~~~~~~~~
+will throw a Zapp("gotcha") exception on relative line 2 of method body xyz.MyClass.foo(). Note that the line offset counts from the first executable statement line within foo().
+
+
+### (3) throw an `IOException` when calling `File.createTempFile()` ###
+The application property file
+
+~~~~~~~~ {.bash}
+target = yxz.MyClass
+ei.exception = java.io.IOException@java.io.File.createTempFile(java.lang.String,java.lang.String)
+~~~~~~~~
+
+will throw an exception on the first call of File.createTempFile(), regardless of where this occurs and what the parameters to the call are
+
+~~~~~~~~ {.java}
+1:  package x.y.z;
+    ..
+    public class MyClass {
+      ..
+      try {
+        ..
+        File tmp = File.createTempFile(prefix,suffix);
+        ..
+      } catch (IOException iox) {
+        // the handler code to test
+      }
+     ..
+~~~~~~~~    
diff --git a/docs/jpf-core/IdleFilter.md b/docs/jpf-core/IdleFilter.md
new file mode 100644 (file)
index 0000000..03c6e98
--- /dev/null
@@ -0,0 +1,99 @@
+# IdleFilter #
+
+The `gov.nasa.jpf.listener.IdleFilter` is a listener that can be used to close state spaces with loops. Consider a simple "busy waiting" loop
+
+~~~~~~~~ {.java}
+for (long l=0; l<10000000; l++);
+~~~~~~~~
+
+While not a good thing to do in general, it is benign if executed in a normal VM. For JPF, it causes trouble because it adds a lot of useless steps to the stored path, and slows down execution considerably.
+
+In addition, people who expect JPF to match states can get surprised by programs like
+
+~~~~~~~~ {.java}
+while (true){
+  // no transition break in here
+}
+~~~~~~~~
+not being state matched, and hence not terminating (it wouldn't terminate in a normal VM either). 
+
+`IdleFilter` is a little tool to deal with such (bad) loops. It counts the number of back-jumps it encounters within the same thread and stackframe, and if this number exceeds a configured threshold it takes one of the following actions:
+
+ * warn - just prints out a warning that we have a suspicious loop
+ * break - breaks the transition at the back-jump `goto` instruction, to allow state matching
+ * prune - sets the transition ignored, i.e. prunes the search tree
+ * jump - skips the back-jump. This is the most dangerous action since you better make sure the loop does not contain side-effects your program depends on.
+
+
+### Properties ###
+Consequently, there are two options:
+
+ * `idle.max_backjumps = \<number\>` : max number of back-jumps that triggers the configured action (default 500)
+ * `idle.action = warn|break|prune|jump` : action to take when number of back-jumps exceeds threshold
+
+### Examples ###
+
+**(1)** The test program
+
+~~~~~~~~ {.java}
+...
+public void testBreak () {
+  int y = 4;
+  int x = 0;
+
+  while (x != y) { // JPF should state match on the backjump
+    x = x + 1;
+    if (x > 3) {
+      x = 0;
+    }
+  }
+}
+~~~~~~~~
+
+would never terminate under JPF or a host VM. Running it with
+
+~~~~~~~~ {.bash}
+> bin/jpf +listener=.listener.IdleFilter +idle.action=break ...
+~~~~~~~~
+
+does terminate due to state matching and produces the following report
+
+~~~~~~~~ {.bash}
+...
+====================================================== search started: 4/8/10 4:14 PM
+[WARNING] IdleFilter breaks transition on suspicious loop in thread: main
+        at gov.nasa.jpf.test.mc.basic.IdleLoopTest.testBreak(gov/nasa/jpf/test/mc/basic/IdleLoopTest.java:42)
+...
+====================================================== results
+no errors detected
+~~~~~~~~
+
+-----
+**(2)** The following program would execute a long time under JPF
+
+~~~~~~~~ {.java}
+...
+public void testJump () {
+  for (int i=0; i<1000000; i++){
+    //...
+  }
+
+  System.out.println("Ok, jumped past loop");
+}
+~~~~~~~~
+
+If we run it with
+
+~~~~~~~~ {.bash}
+> bin/jpf +listener=.listener.IdleFilter +idle.action=jump ...
+~~~~~~~~
+
+JPF comes back quickly with the result
+
+~~~~~~~~ {.bash}
+====================================================== search started: 4/8/10 4:20 PM
+[WARNING] IdleFilter jumped past loop in: main
+        at gov.nasa.jpf.test.mc.basic.IdleLoopTest.testJump(gov/nasa/jpf/test/mc/basic/IdleLoopTest.java:74)
+Ok, jumped past loop
+...
+~~~~~~~~
diff --git a/docs/jpf-core/index.md b/docs/jpf-core/index.md
new file mode 100644 (file)
index 0000000..28fda0e
--- /dev/null
@@ -0,0 +1,43 @@
+# jpf-core #
+This is the basis for all JPF projects, i.e. you always need to install it. jpf-core contains the basic VM and model checking infrastructure, and can be used to check for concurrency defects like deadlocks, and unhandled exceptions like `NullPointerExceptions` and `AssertionErrors`.
+
+
+## Repository ##
+The Mercurial repository is on http://babelfish.arc.nasa.gov/hg/jpf/jpf-core
+
+## Properties ##
+jpf-core supports two rather generic properties, which are configured by default:
+
+ * `gov.nasa.jpf.jvm.NoUncaughtExceptionsProperty`
+ * `gov.nasa.jpf.jvm.NotDeadlockedProperty`
+
+There is no need to parameterize any of them. `NoUncaughtExceptionsProperty` covers all `Throwable` objects that are not handled within the application, i.e. would terminate the process.
+
+Some of the listeners (like `PreciseRaceDetector`) are `ListenerAdapter` instances, i.e. work as more specific Property implementations.
+
+## Listeners ##
+jpf-core includes a variety of [listeners](../devel/listener) that fall into three major categories:
+
+ * program properties
+ * execution monitoring
+ * execution control
+
+Some of the main listeners are
+
+ * [AssertionProperty](./AssertionProperty)
+ * [IdleFilter](./IdleFilter)
+ * [ExceptionInjector](./ExceptionInjector)
+
+## Properties ##
+jpf-core uses many JPF properties, you can find most of them in the `defaults.properties` file. The following ones are of interest for users
+
+ * `listener` - a comma separated list of class names representing listeners that should be automatically instantiated and registered during JPF startup
+ * `listener.autoload` - a comma separated list of annotation types. If JPF encounters such an annotation in one of the analyzed classes at runtime, it automatically loads and registered the associated listener
+ * `listener.<annotation-type>` - class name of the listener associated with `<annotation-type>`
+ * `vm.insn_factory.class` - class name of a [`BytecodeInstructionFactory`](../devel/bytecode_factory), e.g. to switch to the symbolic execution mode or to use specific bytecode implementations for checking numeric properties 
+ * `vm.halt_on_throw (true|false)` - tells JPF if it should try to find a handler if it encounters an exception in the analyzed program (useful to avoid masking exceptions within handlers)
+ * [`cg.randomize_choices`](../user/config/random) `(random|path|def)` - tells JPF if it should randomize the order of choices for each [`ChoiceGenerator`](../devel/choicegenerator), to avoid degenerated searches (e.g. always indexing with the main thread in scheduling choices).
+ * `report.console.property_violation` - comma separated list of topics that should be printed by JPF if it detects an error. Possible values include 
+    - `error` error description
+    - `snapshot` thread stacks 
+    - `trace` instruction/statement trace (can be long and memory-expensive)
\ No newline at end of file
diff --git a/docs/papers/chicago-author-date.csl b/docs/papers/chicago-author-date.csl
new file mode 100644 (file)
index 0000000..595235f
--- /dev/null
@@ -0,0 +1,549 @@
+<?xml version="1.0" encoding="utf-8"?>
+<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never" page-range-format="chicago">
+  <info>
+    <title>Chicago Manual of Style 16th edition (author-date)</title>
+    <id>http://www.zotero.org/styles/chicago-author-date</id>
+    <link href="http://www.zotero.org/styles/chicago-author-date" rel="self"/>
+    <link href="http://www.chicagomanualofstyle.org/tools_citationguide.html" rel="documentation"/>
+    <author>
+      <name>Julian Onions</name>
+      <email>julian.onions@gmail.com</email>
+    </author>
+    <contributor>
+      <name>Sebastian Karcher</name>
+    </contributor>
+    <contributor>
+      <name>Richard Karnesky</name>
+      <email>karnesky+zotero@gmail.com</email>
+      <uri>http://arc.nucapt.northwestern.edu/Richard_Karnesky</uri>
+    </contributor>
+    <contributor>
+      <name>Andrew Dunning</name>
+      <email>andrew.dunning@utoronto.ca</email>
+    </contributor>
+    <category citation-format="author-date"/>
+    <category field="generic-base"/>
+    <summary>The author-date variant of the Chicago style</summary>
+    <updated>2014-05-23T03:53:32+00:00</updated>
+    <rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights>
+  </info>
+  <locale xml:lang="en">
+    <terms>
+      <term name="editor" form="verb-short">ed.</term>
+      <term name="container-author" form="verb">by</term>
+      <term name="translator" form="verb-short">trans.</term>
+      <term name="editortranslator" form="verb">
+        <single>edited and translated by</single>
+        <multiple>edited and translated by</multiple>
+      </term>
+      <term name="translator" form="short">trans.</term>
+    </terms>
+  </locale>
+  <macro name="secondary-contributors">
+    <choose>
+      <if type="chapter paper-conference" match="none">
+        <names variable="editor translator" delimiter=". ">
+          <label form="verb" text-case="capitalize-first" suffix=" "/>
+          <name and="text" delimiter=", "/>
+        </names>
+      </if>
+    </choose>
+  </macro>
+  <macro name="container-contributors">
+    <choose>
+      <if type="chapter paper-conference" match="any">
+        <group prefix=", " delimiter=", ">
+          <names variable="container-author" delimiter=", ">
+            <label form="verb" suffix=" "/>
+            <name and="text" delimiter=", "/>
+          </names>
+          <names variable="editor translator" delimiter=", ">
+            <label form="verb" suffix=" "/>
+            <name and="text" delimiter=", "/>
+          </names>
+        </group>
+      </if>
+    </choose>
+  </macro>
+  <macro name="editor">
+    <names variable="editor">
+      <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>
+      <label form="short" prefix=", "/>
+    </names>
+  </macro>
+  <macro name="translator">
+    <names variable="translator">
+      <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>
+      <label form="short" prefix=", "/>
+    </names>
+  </macro>
+  <macro name="recipient">
+    <choose>
+      <if type="personal_communication">
+        <choose>
+          <if variable="genre">
+            <text variable="genre" text-case="capitalize-first"/>
+          </if>
+          <else>
+            <text term="letter" text-case="capitalize-first"/>
+          </else>
+        </choose>
+      </if>
+    </choose>
+    <names variable="recipient" delimiter=", ">
+      <label form="verb" prefix=" " text-case="lowercase" suffix=" "/>
+      <name and="text" delimiter=", "/>
+    </names>
+  </macro>
+  <macro name="substitute-title">
+    <choose>
+      <if type="article-journal article-magazine article-newspaper review review-book" match="any">
+        <text macro="container-title"/>
+      </if>
+    </choose>
+  </macro>
+  <macro name="contributors">
+    <group delimiter=". ">
+      <names variable="author">
+        <name and="text" name-as-sort-order="first" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>
+        <label form="short" prefix=", "/>
+        <substitute>
+          <names variable="editor"/>
+          <names variable="translator"/>
+          <text macro="substitute-title"/>
+          <text macro="title"/>
+        </substitute>
+      </names>
+      <text macro="recipient"/>
+    </group>
+  </macro>
+  <macro name="contributors-short">
+    <names variable="author">
+      <name form="short" and="text" delimiter=", " initialize-with=". "/>
+      <substitute>
+        <names variable="editor"/>
+        <names variable="translator"/>
+        <text macro="substitute-title"/>
+        <text macro="title"/>
+      </substitute>
+    </names>
+  </macro>
+  <macro name="interviewer">
+    <names variable="interviewer" delimiter=", ">
+      <label form="verb" prefix=" " text-case="capitalize-first" suffix=" "/>
+      <name and="text" delimiter=", "/>
+    </names>
+  </macro>
+  <macro name="archive">
+    <group delimiter=". ">
+      <text variable="archive_location" text-case="capitalize-first"/>
+      <text variable="archive"/>
+      <text variable="archive-place"/>
+    </group>
+  </macro>
+  <macro name="access">
+    <group delimiter=". ">
+      <choose>
+        <if type="graphic report" match="any">
+          <text macro="archive"/>
+        </if>
+        <else-if type="article-journal bill book chapter legal_case legislation motion_picture paper-conference" match="none">
+          <text macro="archive"/>
+        </else-if>
+      </choose>
+      <choose>
+        <if variable="issued" match="none">
+          <group delimiter=" ">
+            <text term="accessed" text-case="capitalize-first"/>
+            <date variable="accessed" delimiter=" ">
+              <date-part name="month"/>
+              <date-part name="day"/>
+            </date>
+          </group>
+        </if>
+      </choose>
+      <choose>
+        <if type="legal_case" match="none">
+          <choose>
+            <if variable="DOI">
+              <text variable="DOI" prefix="doi:"/>
+            </if>
+            <else>
+              <text variable="URL"/>
+            </else>
+          </choose>
+        </if>
+      </choose>
+    </group>
+  </macro>
+  <macro name="title">
+    <choose>
+      <if variable="title" match="none">
+        <choose>
+          <if type="personal_communication" match="none">
+            <text variable="genre" text-case="capitalize-first"/>
+          </if>
+        </choose>
+      </if>
+      <else-if type="bill book graphic legislation motion_picture report song" match="any">
+        <text variable="title" text-case="title" font-style="italic"/>
+        <group prefix=" (" suffix=")" delimiter=" ">
+          <text term="version"/>
+          <text variable="version"/>
+        </group>
+      </else-if>
+      <else-if variable="reviewed-author">
+        <group delimiter=", ">
+          <text variable="title" font-style="italic" prefix="Review of "/>
+          <names variable="reviewed-author">
+            <label form="verb-short" text-case="lowercase" suffix=" "/>
+            <name and="text" delimiter=", "/>
+          </names>
+        </group>
+      </else-if>
+      <else-if type="legal_case interview" match="any">
+        <text variable="title"/>
+      </else-if>
+      <else>
+        <text variable="title" text-case="title" quotes="true"/>
+      </else>
+    </choose>
+  </macro>
+  <macro name="edition">
+    <choose>
+      <if type="bill book graphic legal_case legislation motion_picture report song" match="any">
+        <choose>
+          <if is-numeric="edition">
+            <group delimiter=" " prefix=". ">
+              <number variable="edition" form="ordinal"/>
+              <text term="edition" form="short" strip-periods="true"/>
+            </group>
+          </if>
+          <else>
+            <text variable="edition" prefix=". "/>
+          </else>
+        </choose>
+      </if>
+      <else-if type="chapter  paper-conference" match="any">
+        <choose>
+          <if is-numeric="edition">
+            <group delimiter=" " prefix=", ">
+              <number variable="edition" form="ordinal"/>
+              <text term="edition" form="short"/>
+            </group>
+          </if>
+          <else>
+            <text variable="edition" prefix=", "/>
+          </else>
+        </choose>
+      </else-if>
+    </choose>
+  </macro>
+  <macro name="locators">
+    <choose>
+      <if type="article-journal">
+        <choose>
+          <if variable="volume">
+            <text variable="volume" prefix=" "/>
+            <group prefix=" (" suffix=")">
+              <choose>
+                <if variable="issue">
+                  <text variable="issue"/>
+                </if>
+                <else>
+                  <date variable="issued">
+                    <date-part name="month"/>
+                  </date>
+                </else>
+              </choose>
+            </group>
+          </if>
+          <else-if variable="issue">
+            <group delimiter=" " prefix=", ">
+              <text term="issue" form="short"/>
+              <text variable="issue"/>
+              <date variable="issued" prefix="(" suffix=")">
+                <date-part name="month"/>
+              </date>
+            </group>
+          </else-if>
+          <else>
+            <date variable="issued" prefix=", ">
+              <date-part name="month"/>
+            </date>
+          </else>
+        </choose>
+      </if>
+      <else-if type="legal_case">
+        <text variable="volume" prefix=", "/>
+        <text variable="container-title" prefix=" "/>
+        <text variable="page" prefix=" "/>
+      </else-if>
+      <else-if type="bill book graphic legal_case legislation motion_picture report song" match="any">
+        <group prefix=". " delimiter=". ">
+          <group>
+            <text term="volume" form="short" text-case="capitalize-first" suffix=" "/>
+            <number variable="volume" form="numeric"/>
+          </group>
+          <group>
+            <number variable="number-of-volumes" form="numeric"/>
+            <text term="volume" form="short" prefix=" " plural="true"/>
+          </group>
+        </group>
+      </else-if>
+      <else-if type="chapter paper-conference" match="any">
+        <choose>
+          <if variable="page" match="none">
+            <group prefix=". ">
+              <text term="volume" form="short" text-case="capitalize-first" suffix=" "/>
+              <number variable="volume" form="numeric"/>
+            </group>
+          </if>
+        </choose>
+      </else-if>
+    </choose>
+  </macro>
+  <macro name="locators-chapter">
+    <choose>
+      <if type="chapter paper-conference" match="any">
+        <choose>
+          <if variable="page">
+            <group prefix=", ">
+              <text variable="volume" suffix=":"/>
+              <text variable="page"/>
+            </group>
+          </if>
+        </choose>
+      </if>
+    </choose>
+  </macro>
+  <macro name="locators-article">
+    <choose>
+      <if type="article-newspaper">
+        <group prefix=", " delimiter=", ">
+          <group>
+            <text variable="edition" suffix=" "/>
+            <text term="edition" prefix=" "/>
+          </group>
+          <group>
+            <text term="section" form="short" suffix=" "/>
+            <text variable="section"/>
+          </group>
+        </group>
+      </if>
+      <else-if type="article-journal">
+        <choose>
+          <if variable="volume issue" match="any">
+            <text variable="page" prefix=": "/>
+          </if>
+          <else>
+            <text variable="page" prefix=", "/>
+          </else>
+        </choose>
+      </else-if>
+    </choose>
+  </macro>
+  <macro name="point-locators">
+    <choose>
+      <if variable="locator">
+        <choose>
+          <if locator="page" match="none">
+            <choose>
+              <if type="bill book graphic legal_case legislation motion_picture report song" match="any">
+                <choose>
+                  <if variable="volume">
+                    <group>
+                      <text term="volume" form="short" suffix=" "/>
+                      <number variable="volume" form="numeric"/>
+                      <label variable="locator" form="short" prefix=", " suffix=" "/>
+                    </group>
+                  </if>
+                  <else>
+                    <label variable="locator" form="short" suffix=" "/>
+                  </else>
+                </choose>
+              </if>
+              <else>
+                <label variable="locator" form="short" suffix=" "/>
+              </else>
+            </choose>
+          </if>
+          <else-if type="bill book graphic legal_case legislation motion_picture report song" match="any">
+            <number variable="volume" form="numeric" suffix=":"/>
+          </else-if>
+        </choose>
+        <text variable="locator"/>
+      </if>
+    </choose>
+  </macro>
+  <macro name="container-prefix">
+    <text term="in" text-case="capitalize-first"/>
+  </macro>
+  <macro name="container-title">
+    <choose>
+      <if type="chapter paper-conference" match="any">
+        <text macro="container-prefix" suffix=" "/>
+      </if>
+    </choose>
+    <choose>
+      <if type="legal_case" match="none">
+        <text variable="container-title" text-case="title" font-style="italic"/>
+      </if>
+    </choose>
+  </macro>
+  <macro name="publisher">
+    <group delimiter=": ">
+      <text variable="publisher-place"/>
+      <text variable="publisher"/>
+    </group>
+  </macro>
+  <macro name="date">
+    <choose>
+      <if variable="issued">
+        <date variable="issued">
+          <date-part name="year"/>
+        </date>
+      </if>
+      <else-if variable="accessed">
+        <date variable="accessed">
+          <date-part name="year"/>
+        </date>
+      </else-if>
+    </choose>
+  </macro>
+  <macro name="day-month">
+    <date variable="issued">
+      <date-part name="month"/>
+      <date-part name="day" prefix=" "/>
+    </date>
+  </macro>
+  <macro name="collection-title">
+    <choose>
+      <if match="none" type="article-journal">
+        <choose>
+          <if match="none" is-numeric="collection-number">
+            <group delimiter=", ">
+              <text variable="collection-title" text-case="title"/>
+              <text variable="collection-number"/>
+            </group>
+          </if>
+          <else>
+            <group delimiter=" ">
+              <text variable="collection-title" text-case="title"/>
+              <text variable="collection-number"/>
+            </group>
+          </else>
+        </choose>
+      </if>
+    </choose>
+  </macro>
+  <macro name="collection-title-journal">
+    <choose>
+      <if type="article-journal">
+        <group delimiter=" ">
+          <text variable="collection-title"/>
+          <text variable="collection-number"/>
+        </group>
+      </if>
+    </choose>
+  </macro>
+  <macro name="event">
+    <group>
+      <text term="presented at" suffix=" "/>
+      <text variable="event"/>
+    </group>
+  </macro>
+  <macro name="description">
+    <choose>
+      <if type="interview">
+        <group delimiter=". ">
+          <text macro="interviewer"/>
+          <text variable="medium" text-case="capitalize-first"/>
+        </group>
+      </if>
+      <else>
+        <text variable="medium" text-case="capitalize-first" prefix=". "/>
+      </else>
+    </choose>
+    <choose>
+      <if variable="title" match="none"/>
+      <else-if type="thesis personal_communication speech" match="any"/>
+      <else>
+        <group delimiter=" " prefix=". ">
+          <text variable="genre" text-case="capitalize-first"/>
+          <choose>
+            <if type="report">
+              <text variable="number"/>
+            </if>
+          </choose>
+        </group>
+      </else>
+    </choose>
+  </macro>
+  <macro name="issue">
+    <choose>
+      <if type="legal_case">
+        <text variable="authority" prefix=". "/>
+      </if>
+      <else-if type="speech">
+        <group prefix=". " delimiter=", ">
+          <group delimiter=" ">
+            <text variable="genre" text-case="capitalize-first"/>
+            <text macro="event"/>
+          </group>
+          <text variable="event-place"/>
+          <text macro="day-month"/>
+        </group>
+      </else-if>
+      <else-if type="article-newspaper article-magazine personal_communication" match="any">
+        <text macro="day-month" prefix=", "/>
+      </else-if>
+      <else>
+        <group prefix=". " delimiter=", ">
+          <choose>
+            <if type="thesis">
+              <text variable="genre" text-case="capitalize-first"/>
+            </if>
+          </choose>
+          <text macro="publisher"/>
+        </group>
+      </else>
+    </choose>
+  </macro>
+  <citation et-al-min="4" et-al-use-first="1" disambiguate-add-year-suffix="true" disambiguate-add-names="true" disambiguate-add-givenname="true" givenname-disambiguation-rule="primary-name">
+    <layout prefix="(" suffix=")" delimiter="; ">
+      <group delimiter=", ">
+        <group delimiter=" ">
+          <text macro="contributors-short"/>
+          <text macro="date"/>
+        </group>
+        <text macro="point-locators"/>
+      </group>
+    </layout>
+  </citation>
+  <bibliography hanging-indent="true" et-al-min="11" et-al-use-first="7" subsequent-author-substitute="&#8212;&#8212;&#8212;" entry-spacing="0">
+    <sort>
+      <key macro="contributors"/>
+      <key variable="issued"/>
+    </sort>
+    <layout suffix=".">
+      <group delimiter=". ">
+        <text macro="contributors"/>
+        <text macro="date"/>
+        <text macro="title"/>
+      </group>
+      <text macro="description"/>
+      <text macro="secondary-contributors" prefix=". "/>
+      <text macro="container-title" prefix=". "/>
+      <text macro="container-contributors"/>
+      <text macro="edition"/>
+      <text macro="locators-chapter"/>
+      <text macro="collection-title-journal" prefix=", " suffix=", "/>
+      <text macro="locators"/>
+      <text macro="collection-title" prefix=". "/>
+      <text macro="issue"/>
+      <text macro="locators-article"/>
+      <text macro="access" prefix=". "/>
+    </layout>
+  </bibliography>
+</style>
diff --git a/docs/papers/index.md b/docs/papers/index.md
new file mode 100644 (file)
index 0000000..87fb93a
--- /dev/null
@@ -0,0 +1,133 @@
+# Related Publications #
+
+JPF has been both a research target and a system in use for a number of years. A broad collection of papers and reports is available, including the following (incomplete) list
+
+> **Notes:** some of the older papers now have mostly historical relevance. JPF has undergone a lot of changes since 2000. If you need more recent information, especially about the design and usage of current 
+JPF versions, please consult the documentation.
+
+
+---
+bibliography: ./references.bib
+csl: ./chicago-author-date.csl
+...
+
+## Core Papers ##
+
+@visser:2003
+
+@lerda:2001
+
+## JPF Infrastructure and Features ##
+
+@shafiei:breugel:2014
+
+@nshafiei:2012
+
+@kulikov:2010
+
+## Testing and Symbolic Execution ##
+
+@indradeep:2013
+
+@person:2008
+
+@pasareanu:2008
+
+@visser:2004
+
+@pasareanu:2004
+
+@artho:2003
+
+@khurshid:2003
+
+## Heuristic Search ##
+
+@groce:2004
+
+@groce:2002
+
+@groce:visser:2002
+
+## Verification of Networked Software ##
+
+@shafiei:2014
+
+@artho:2011
+
+@artho:2009
+
+@artho:2008
+
+## Explaining Counter Examples ##
+
+@grove:2003
+
+##  Applying Java PathFinder ##
+
+@shafiei:2013
+
+@stergiopoulos:2012
+
+@mehlitz:2008
+
+@penix:2005
+
+@giannakopoulou:2004
+
+@brat:2004
+
+@bordini:2003
+
+
+## Misc ##
+
+@havelund:2007
+
+@mansouri:2007
+
+@havelund:2002
+
+@pasareanu:dwyer:2003
+
+@brat:2001
+
+@visser:park:2000
+
+@havelund:2000
+
+@havelund:1999
+
+@havelund:skakkebaek:1999
+
+@havelund:Pressburger:1998
+
+## Papers from Darko Marinov's group ##
+
+@gligoric:2010
+
+@gligoric:jagannath:2010
+
+@lauterburg:2010
+
+@sobeih:2010
+
+@lauterburg:2009
+
+@gligoric:2009
+
+@damorim:2008
+
+@lauterburg:2008
+
+@gvero:2008
+
+@damorim:2007
+
+@zhou:2007
+
+@damorim:2006
+
+@damorim:pacheco:2006
+
+## References ##
\ No newline at end of file
diff --git a/docs/papers/references.bib b/docs/papers/references.bib
new file mode 100644 (file)
index 0000000..698195f
--- /dev/null
@@ -0,0 +1,636 @@
+@article{visser:2003,
+ author = {Visser, Willem and Havelund, Klaus and Brat, Guillaume and Park, Seungjoon and Lerda, Flavio},
+ title = "{M}odel {C}hecking {P}rograms",
+ journal = {Automated Software Engineering},
+ volume = {10},
+ number = {2},
+ month = {April},
+ year = {2003}, 
+ pages = {203--232},
+ publisher = {Kluwer Academic Publishers}, 
+ url = "http://dl.acm.org/citation.cfm?id=641186"
+ }
+
+@inproceedings{lerda:2001,
+ author = {Lerda, Flavio and Visser, Willem},
+ title = {Addressing Dynamic Issues of Program Model Checking},
+ booktitle = {Proceedings of the 8th International SPIN Workshop on Model Checking of Software},
+ year = {2001},
+ pages = {80--102},
+ publisher = {Springer},
+ url = "http://dl.acm.org/citation.cfm?id=380921.380931",
+} 
+
+@inproceedings{khurshid:2003,
+    author = {Sarfraz Khurshid and Corina S. P\v{a}s\v{a}reanu and Willem Visser},
+    title = {Generalized Symbolic Execution for Model Checking and Testing},
+    booktitle = {Proceedings of the Ninth International Conference on Tools and Algorithms for the Construction and Analysis of Systems},
+    year = {2003},
+    pages = {553--568},
+    publisher = {Springer},
+    url = "http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.8.8862"
+}
+
+@article{visser:2004,
+ author = {Visser, Willem and P\v{a}s\v{a}reanu, Corina S. and Khurshid, Sarfraz},
+ title = {Test Input Generation with Java PathFinder},
+ journal = {Proceedings of International Symposium on Software Testing and Analysis},
+ volume = {29},
+ number = {4},
+ month = jul,
+ year = {2004},
+ pages = {97--107},
+ publisher = {ACM},
+ url = "http://dl.acm.org/citation.cfm?id=1007526",
+} 
+
+@article{pasareanu:2004,
+year={2004},
+volume={2989},
+series={Lecture Notes in Computer Science},
+title={Verification of Java Programs Using Symbolic Execution and Invariant Generation},
+url={http://link.springer.com/chapter/10.1007%2F978-3-540-24732-6_13#},
+publisher={Springer},
+author={Păsăreanu, Corina S. and Visser, Willem},
+pages={164-181},
+}
+
+@inproceedings{person:2008,
+ author = {Person, Suzette and Dwyer, Matthew B. and Elbaum, Sebastian and P\v{a}s\v{a}reanu, Corina S.},
+ title = {Differential Symbolic Execution},
+ booktitle = {Proceedings of the 16th {ACM} {SIGSOFT} International Symposium on Foundations of Software Engineering},
+ year = {2008},
+ pages = {226--237},
+ url = {http://doi.acm.org/10.1145/1453101.1453131},
+ publisher = {ACM},
+ }
+@inproceedings{pasareanu:2008,
+  author    = {Corina S. P\v{a}s\v{a}reanu and
+               Peter C. Mehlitz and
+               David H. Bushnell and
+               Karen Gundy{-}Burlet and
+               Michael R. Lowry and
+               Suzette Person and
+               Mark Pape},
+  title     = {Combining unit-level symbolic execution and system-level concrete
+               execution for testing {NASA} software},
+  booktitle = {Proceedings of the {ACM} {SIGSOFT} International Symposium on Software
+               Testing and Analysis},
+  pages     = {15--26},
+  year      = {2008},
+  url       = {http://doi.acm.org/10.1145/1390630.1390635},
+}
+
+@inproceedings{pasareanu:2007,
+  author    = {Corina S. P\v{a}s\v{a}reanu and
+               Willem Visser},
+  title     = {Symbolic Execution and Model Checking for Testing},
+  booktitle = {Hardware and Software: Verification and Testing, Third International
+               Haifa Verification Conference},
+  pages     = {17--18},
+  year      = {2007},
+  url       = {http://dx.doi.org/10.1007/978-3-540-77966-7_5},
+}
+
+@inproceedings{artho:2003,
+  author    = {Cyrille Artho and
+               Doron Drusinsky and
+               Allen Goldberg and
+               Klaus Havelund and
+               Michael R. Lowry and
+               Corina S. P\v{a}s\v{a}reanu and
+               Grigore Rosu and
+               Willem Visser},
+  title     = {Experiments with Test Case Generation and Runtime Analysis},
+  booktitle = {Abstract State Machines, Advances in Theory and Practice},
+  pages     = {87--107},
+  year      = {2003},
+  url       = {http://dx.doi.org/10.1007/3-540-36498-6_5},
+}
+
+@article{groce:2004,
+  author    = {Alex Groce and
+               Willem Visser},
+  title     = {Heuristics for model checking Java programs},
+  journal   = {International Journal on Software Tools for Technology Transfer},
+  volume    = {6},
+  number    = {4},
+  pages     = {260--276},
+  year      = {2004},
+  url       = {http://dx.doi.org/10.1007/s10009-003-0130-9},
+}
+
+@inproceedings{groce:2002,
+  author    = {Alex Groce and
+               Willem Visser},
+  title     = {Model checking Java programs using structural heuristics},
+  booktitle = {Proceedings of International Symposium on Software Testing and Analysis},
+  pages     = {12--21},
+  year      = {2002},
+  url       = {http://doi.acm.org/10.1145/566172.566175},
+}
+
+@inproceedings{groce:visser:2002,
+  author    = {Alex Groce and
+               Willem Visser},
+  title     = {Heuristic Model Checking for Java Programs},
+  booktitle = {Proceedings of the 9th International SPIN Workshop on Model Checking of Software},
+  pages     = {242--245},
+  year      = {2002},
+  url       = {http://dx.doi.org/10.1007/3-540-46017-9_21},
+}
+
+@inproceedings{artho:2011,
+ author = {Leungwattanakit, Watcharin and Artho, Cyrille and Hagiya, Masami and Tanabe, Yoshinori and Yamamoto, Mitsuharu},
+ title = {Model checking distributed systems by combining caching and process checkpointing},
+ booktitle = {Proceedings of the 26th IEEE/ACM International Conference on International Conference on Automated Software Engineering},
+ year = {2011},
+ pages = {103--112},
+ publisher = {IEEE},
+month={November},
+ address = {Lawrence, KS, USA},
+ url  = {​http://staff.aist.go.jp/c.artho/papers/checkpointing.pdf},
+} 
+
+@inproceedings{artho:2009,
+ author = {Artho, Cyrille and Leungwattanakit, Watcharin and Hagiya, Masami and Tanabe, Yoshinori and Yamamoto, Mitsuharu},
+ title = {Cache-Based model Checking of Networked Applications: From Linear to Branching Time},
+ booktitle = {Proceedings of the 27th International Conference on Automated Software Engineering},
+ year = {2009},
+month = {November},
+ pages = {447--458},
+ publisher = {IEEE},
+ address = {Auckland, New Zealand},
+ url = {​http://staff.aist.go.jp/c.artho/papers/ase-2009.pdf},
+}
+
+@inproceedings{artho:2008,
+author={Artho, Cyrille and Leungwattanakit, Watcharin and Hagiya, Masami and Tanabe, Yoshinori},
+title={Efficient Model Checking of Networked Applications},
+year={2008},
+volume={11},
+series={Lecture Notes in Business Information Processing},
+booktitle = {Proceedings of the 46th International Conference on Objects, Components, Models and Patterns},
+publisher={Springer},
+pages={22--40},
+address={Zurich, Switzerland},
+month={June/July},
+url = {http://staff.aist.go.jp/c.artho/papers/tools-2008.pdf}
+}
+
+@inproceedings{grove:2003,
+  author    = {Alex Groce and
+               Willem Visser},
+  title     = {What Went Wrong: Explaining Counterexamples},
+  booktitle = {Proceedings of the 10th International SPIN Workshop on Model Checking of Software},
+  pages     = {121--135},
+  year      = {2003},
+  url       = {http://dx.doi.org/10.1007/3-540-44829-2_8},
+  publisher = {Springer},
+  address = {Portland},
+}
+
+@article{penix:2005,
+  author    = {John Penix and
+               Willem Visser and
+               Seungjoon Park and
+               Corina S. P\v{a}s\v{a}reanu and
+               Eric Engstrom and
+               Aaron Larson and
+               Nicholas Weininger},
+  title     = {Verifying Time Partitioning in the {DEOS} Scheduling Kernel},
+  journal   = {Formal Methods in System Design},
+  volume    = {26},
+  number    = {2},
+  pages     = {103--135},
+  year      = {2005},
+  url       = {http://dx.doi.org/10.1007/s10703-005-1490-4},
+}
+
+@article{brat:2004,
+  author    = {Guillaume P. Brat and
+               Doron Drusinsky and
+               Dimitra Giannakopoulou and
+               Allen Goldberg and
+               Klaus Havelund and
+               Michael R. Lowry and
+               Corina S. Pasareanu and
+               Arnaud Venet and
+               Willem Visser and
+               Richard Washington},
+  title     = {Experimental Evaluation of Verification and Validation Tools on Martian
+               Rover Software},
+  journal   = {Formal Methods in System Design},
+  volume    = {25},
+  number    = {2-3},
+  pages     = {167--198},
+  year      = {2004},
+  url       = {http://dx.doi.org/10.1023/B:FORM.0000040027.28662.a4},
+}
+
+@inproceedings{bordini:2003,
+  author    = {Rafael H. Bordini and
+               Michael Fisher and
+               Carmen Pardavila and
+               Willem Visser and
+               Michael Wooldridge},
+  title     = {Model Checking Multi-Agent Programs with {CASP}},
+  booktitle = {Proceedings of Computer Aided Verification},
+  pages     = {110--113},
+  year      = {2003},
+  url       = {http://dx.doi.org/10.1007/978-3-540-45069-6_10},
+}
+
+@inproceedings{giannakopoulou:2004,
+  author    = {Dimitra Giannakopoulou and
+               Corina S. Pasareanu and
+               Jamieson M. Cobleigh},
+  title     = {Assume-Guarantee Verification of Source Code with Design-Level Assumptions},
+  booktitle = {26th International Conference on Software Engineering {(ICSE} 2004),
+               23-28 May 2004, Edinburgh, United Kingdom},
+  pages     = {211--220},
+  year      = {2004},
+  url       = {http://doi.ieeecomputersociety.org/10.1109/ICSE.2004.1317443},
+}
+
+@inproceedings{mehlitz:2008,
+  author    = {Peter Mehlitz},
+  title     = {Trust Your Model - Verifying Aerospace System Models with Java Pathfinder},
+  booktitle = {Aerospace Conference, 2008 IEEE},
+  pages     = {1--11},
+  year      = {2008},
+  url       = {http://ti.arc.nasa.gov/m/pub-archive/1402/1402%20(Mehlitz).pdf},
+}
+
+@inproceedings{stergiopoulos:2012,
+ author = {Stergiopoulos, George and Tsoumas, Bill and Gritzalis, Dimitris},
+ title = {Hunting Application-level Logical Errors},
+ booktitle = {Proceedings of the 4th International Conference on Engineering Secure Software and Systems},
+ year = {2012},
+ address = {Eindhoven, The Netherlands},
+ pages = {135--142},
+ url = {http://dx.doi.org/10.1007/978-3-642-28166-2_13},
+ publisher = {Springer},
+}
+
+@article{mansouri:2007,
+ author = {Masoud Mansouri-Samani and John Penix and Lawrence Markosian},
+ title = {Assume-Guarantee Verification of Source Code with Design-Level Assumptions},
+ journal = {Software Assurance Research Program (SARP), NASA IV&V publication},
+ year = {2007},
+ pages = {203--232},
+ publisher = {Kluwer Academic Publishers}, 
+ url = {http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20080015887.pdf},    
+ }
+ @article{havelund:2002,
+  author    = {Klaus Havelund and Willem Visser},
+  title     = {Program Model Checking as a New Trend},
+  journal = {International Journal on Software Tools for Technology Transfer (STTT)},
+  volume = {4},
+  number = {1},
+  month = {October},
+  year = {2002},
+  url = {http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20030003734.pdf},
+}
+
+@article{pasareanu:dwyer:2003,
+  author  = "C. P\v{a}s\v{a}reanu and M. Dwyer and W. Visser.",
+  title   = "{Finding Feasible Abstract Counter-Examples}",
+  journal = "International Journal on Software Tools for Technology Transfer (STTT)",
+  year    = "2003",
+  volume  = "5",
+  number  = "1",
+  month   = "November",
+  url = "http://ti.arc.nasa.gov/m/profile/pcorina/papers/tacas_sttt01.ps"
+}
+
+@inproceedings{brat:2001,
+ author = {Guillaume Brat and Willem Visser},
+ title = {Combining Static Analysis and Model Checking for Software Analysis},
+ booktitle = {Proceedings of the 15th IEEE International Conference on Automated Software Engineering},
+ year = {2001},
+ address = {San Diego, USA},
+ month = {November},
+ url = {http://dl.acm.org/citation.cfm?id=872568},
+}
+
+@inproceedings{visser:park:2000,
+    author = {Willem Visser and Seungjoon Park and John Penix},
+    title = {Using Predicate Abstraction to Reduce Object-Oriented Programs for Model Checking},
+    booktitle = {Proceedings of the 3rd ACM SIGSOFT Workshop on Formal Methods in Software Practice},
+    year = {2000},
+    pages = {3--12},
+    month = {August},
+    url = "http://ti.arc.nasa.gov/m/tech/rse/publications/papers/SIGSOFT00/fmsp00.pdf",
+}
+
+@article{havelund:2000,
+  author    = {Klaus Havelund and
+               Thomas Pressburger},
+  title     = {Model Checking {Java} Programs using {Java} PathFinder},
+  journal   = {International Journal on Software Tools for Technology Transfer (STTT)},
+  volume    = {2},
+  number    = {4},
+  pages     = {366--381},
+  year      = {2000},
+  url       = {http://www.havelund.com/Publications/jpf-sttt.ps.Z},
+}
+
+@inproceedings{havelund:1999,
+  author    = {Klaus Havelund},
+  title     = {Java PathFinder, {A} Translator from Java to Promela},
+  booktitle = {Theoretical and Practical Aspects of {SPIN} Model Checking},
+  month     = {July},
+  year      = {1999}, 
+  url       = {http://www.havelund.com/Publications/jpf1-spin-99.pdf},
+}
+
+@inproceedings{havelund:skakkebaek:1999,
+  author    = {Klaus Havelund and
+               Jens U. Skakkeb{\ae}k},
+  title     = {Applying Model Checking in Java Verification},
+  booktitle = {Theoretical and Practical Aspects of {SPIN} Model Checking, 5th and
+               6th International {SPIN} Workshops},
+  pages     = {216--231},
+  year      = {1999},
+  url       = {http://www.havelund.com/Publications/jpf-fm99.ps.Z},
+}
+
+@article{havelund:2007,
+  author    = {Klaus Havelund},
+  title     = {Java PathFinder User Guide},
+  booktitle = {Unpublished Report},
+  year = {1999},
+  url = {​http://www.havelund.com/Publications/jpf-manual.ps.Z},
+}
+
+@article{havelund:Pressburger:1998,
+  author    = {Klaus Havelund and Thomas Pressburger},
+  title     = {Java PathFinder, A Translator from Java to Promela},
+  booktitle = {Unpublished Report},
+  year = {1998},
+  url = {​​http://www.havelund.com/Publications/jpf1-report-99.pdf},
+}
+
+@inproceedings{gligoric:2010,
+  author    = {Milos Gligoric and
+               Tihomir Gvero and
+               Vilas Jagannath and
+               Sarfraz Khurshid and
+               Viktor Kuncak and
+               Darko Marinov},
+  title     = {Test generation through programming in {UDITA}},
+  booktitle = {Proceedings of the 32nd {ACM/IEEE} International Conference on Software
+               Engineering},
+  address   = {Cape Town, South Africa},
+  month     = {May},
+  pages     = {225--234},
+  year      = {2010},
+  url       = {http://mir.cs.illinois.edu/~marinov/publications/GligoricETAL10UDITA.pdf},
+}
+
+@inproceedings{gligoric:jagannath:2010,
+  author    = {Milos Gligoric and
+               Vilas Jagannath and
+               Darko Marinov},
+  title     = {MuTMuT: Efficient Exploration for Mutation Testing of Multithreaded
+               Code},
+  booktitle = {Third International Conference on Software Testing, Verification and
+               Validation},
+  pages     = {55--64},
+  month     = {April},
+  address   = {Paris, France},
+  year      = {2010},
+  url       = {http://mir.cs.illinois.edu/~marinov/publications/GligoricETAL10MuTMuT.pdf},
+}
+
+@inproceedings{lauterburg:2010,
+  author    = {Steven Lauterburg and
+               Rajesh K. Karmani and
+               Darko Marinov and
+               Gul Agha},
+  title     = {Evaluating Ordering Heuristics for Dynamic Partial-Order Reduction
+               Techniques},
+  booktitle = {Fundamental Approaches to Software Engineering},
+  address   = {Paphos, Cyprus},
+  month     = {March},
+  pages     = {308--322},
+  year      = {2010},
+  url       = {http://mir.cs.illinois.edu/~marinov/publications/LauterburgETAL10DPORHeuristics.pdf},
+}
+
+@inproceedings{lauterburg:2009,
+  author    = {Steven Lauterburg and
+               Mirco Dotta and
+               Darko Marinov and
+               Gul A. Agha},
+  title     = {A Framework for State-Space Exploration of Java-Based Actor Programs},
+  booktitle = {24th {IEEE/ACM} International Conference on Automated Software Engineering},
+  month     = {November},
+  address   = {Auckland, New Zealand},
+  pages     = {468--479},
+  year      = {2009},
+  url       = {http://mir.cs.illinois.edu/~marinov/publications/LauterburgETAL09Basset.pdf},
+}
+
+@article{sobeih:2010,
+  author    = {Ahmed Sobeih and
+               Marcelo d'Amorim and
+               Mahesh Viswanathan and
+               Darko Marinov and
+               Jennifer C. Hou},
+  title     = {Assertion Checking in J-Sim Simulation Models of Network Protocols},
+  journal   = {Simulation: Transactions of The Society for Modeling and Simulation International},
+  volume    = {86},
+  number    = {11},
+  pages     = {651--673},
+  year      = {2010},
+  url       = {http://dx.doi.org/10.1177/0037549709349326},
+}
+
+@inproceedings{gligoric:2009,
+  author    = {Milos Gligoric and
+               Tihomir Gvero and
+               Steven Lauterburg and
+               Darko Marinov and
+               Sarfraz Khurshid},
+  title     = {Optimizing Generation of Object Graphs in Java PathFinder},
+  booktitle = {Second International Conference on Software Testing Verification and Validation},
+  month     = {April},
+  address   = {Denver, Colorado, {USA}},
+  pages     = {51--60},
+  year      = {2009},
+  url       = {http://mir.cs.illinois.edu/~marinov/publications/GligoricETAL09OptimizingGeneration.pdf},
+}
+
+@article{damorim:2008,
+  author    = {Marcelo d'Amorim and
+               Steven Lauterburg and
+               Darko Marinov},
+  title     = {Delta Execution for Efficient State-Space Exploration of Object-Oriented Programs},
+  journal   = {{IEEE} Transactions on Software Engineering},
+  volume    = {34},
+  number    = {5},
+  pages     = {597--613},
+  year      = {2008},
+  month     = {September/October},
+  url       = {http://mir.cs.illinois.edu/~marinov/publications/dAmorimETAL08DeltaExecution.pdf},
+}
+
+@inproceedings{lauterburg:2008,
+  author    = {Steven Lauterburg and
+               Ahmed Sobeih and
+               Darko Marinov and
+               Mahesh Viswanathan},
+  title     = {Incremental state-space exploration for programs with dynamically
+               allocated data},
+  booktitle = {International Conference on Software Engineering},
+  address   = {Leipzig, Germany},
+  month     = {May},
+  pages     = {291--300},
+  year      = {2008},
+  url       = {​http://mir.cs.illinois.edu/~marinov/publications/LauterburgETAL08IncrementalChecking.pdf},
+}
+
+@inproceedings{gvero:2008,
+  author    = {Tihomir Gvero and
+               Milos Gligoric and
+               Steven Lauterburg and
+               Marcelo d'Amorim and
+               Darko Marinov and
+               Sarfraz Khurshid},
+  title     = {State extensions for java pathfinder},
+  booktitle = {International Conference on Software Engineering, Demo Papers},
+  address   = {Leipzig, Germany},
+  month     = {May},
+  pages     = {863--866},
+  year      = {2008},
+  url       = {http://mir.cs.illinois.edu/~marinov/publications/GligoricETAL09OptimizingGeneration.pdf},
+}
+
+@inproceedings{damorim:2007,
+  author    = {Marcelo d'Amorim and
+               Steven Lauterburg and
+               Darko Marinov},
+  title     = {Delta execution for efficient state-space exploration of object-oriented
+               programs},
+  booktitle = {Proceedings of the {ACM/SIGSOFT} International Symposium on Software
+               Testing and Analysis},
+  address   = {London, UK},
+  month     = {July},
+  pages     = {50--60},
+  year      = {2007},
+  url       = {http://mir.cs.illinois.edu/~marinov/publications/dAmorimETAL07DeltaExecution.pdf},
+}
+
+@inproceedings{zhou:2007,
+ author = {Zhou, Yuanyuan and Marinov, Darko and Sanders, William and Zilles, Craig and d'Amorim, Marcelo and Lauterburg, Steven and Lefever, Ryan M. and Tucek, Joe},
+ title = {Delta Execution for Software Reliability},
+ booktitle = {Proceedings of the 3rd Workshop on on Hot Topics in System Dependability},
+ series = {HotDep'07},
+ year = {2007},
+ address = {Edinburgh, UK},
+ url = {http://mir.cs.illinois.edu/~marinov/publications/ZhouETAL07DeltaExecution.pdf},
+ publisher = {USENIX Association},
+} 
+
+@inproceedings{damorim:2006,
+  author    = {Marcelo d'Amorim and
+               Ahmed Sobeih and
+               Darko Marinov},
+  title     = {Optimized Execution of Deterministic Blocks in Java PathFinder},
+  booktitle = {Proceedings of Formal Methods and Software Engineering, 8th International Conference
+               on Formal Engineering Methods},
+  address   = {Macao, China}, 
+  month     =  {November},
+  pages     = {549--567},
+  year      = {2006},
+  url       = {http://mir.cs.illinois.edu/~marinov/publications/dAmorimETAL06OptimizedDeterministicBlocks.pdf},
+}
+
+@inproceedings{damorim:pacheco:2006,
+  author    = {Marcelo d'Amorim and
+               Carlos Pacheco and
+               Tao Xie and
+               Darko Marinov and
+               Michael D. Ernst},
+  title     = {An Empirical Comparison of Automated Generation and Classification
+               Techniques for Object-Oriented Unit Testing},
+  booktitle = {Proceedings of 21st {IEEE/ACM} International Conference on Automated Software Engineering},
+  address   = {Tokyo, Japan},
+  month     = {September},
+  pages     = {59--68},
+  year      = {2006},
+  url       = {​http://mir.cs.illinois.edu/~marinov/publications/dAmorimETAL06Symclat.pdf},
+}
+
+@unpublished{kulikov:2010,
+  author = {Sergey Kulikov and Nastaran Shafiei and Franck van Breugel and Willem Visser},
+  title = {{Detecting Data Races with Java PathFinder}},
+  year = "2010",
+  url = {http://www.cse.yorku.ca/~franck/research/drafts/race.pdf}
+}
+
+@inproceedings{indradeep:2013,
+  author = {Ghosh, Indradeep and Shafiei, Nastaran and Li, Guodong and Chiang, Wei-Fan},
+  title = {{JST: an automatic test generation tool for industrial Java applications with strings}},
+  booktitle = {Proceedings of the 35th International Conference on Software Engineering},
+  year = {2013},
+  month = {May},
+  address = {San Francisco, CA, USA},
+  pages = {992--1001},
+  publisher = {IEEE},
+  url = {http://dl.acm.org/citation.cfm?id=2486925}
+} 
+
+@article{nshafiei:2012,
+  author = {Shafiei, Nastaran and Mehlitz, Peter C.},
+  journal = {ACM SIGSOFT Software Engineering Notes},
+  number = 6,
+  pages = {1-5},
+  title = {{Modeling class loaders in Java PathFinder version 7}},
+  volume = 37,
+  year = 2012,
+  month = {November},
+  url = {http://dl.acm.org/citation.cfm?id=2382800}
+}
+
+@article{shafiei:2014,
+  author = {Shafiei, Nastaran and Mehlitz, Peter C.},
+  journal = {ACM SIGSOFT Software Engineering Notes},
+  number = 1,
+  pages = {1-5},
+  title = {{Extending JPF to verify distributed systems}},
+  volume = 39,
+  year = 2014,
+  month = {January},
+  url = {http://dl.acm.org/citation.cfm?id=2560577},
+}
+
+@inproceedings{shafiei:2013,
+  author    = {Nastaran Shafiei and
+               Franck van Breugel},
+  title     = {Towards model checking of computer games with Java PathFinder},
+  booktitle = {Proceedings of the 3rd International Workshop on Games and Software
+               Engineering},
+  address   = {San Francisco, CA, USA},
+  month     = {May},
+  pages     = {15--21},
+  year      = {2013},
+  url       = {http://dl.acm.org/citation.cfm?id=2662596},
+}
+
+
+@inproceedings{shafiei:breugel:2014,
+  author    = {Nastaran Shafiei and
+               Franck van Breugel},
+  title     = {Automatic handling of native methods in Java PathFinder},
+  booktitle = {Proceedings of the International SPIN Workshop on Model Checking of Software},
+  address   = {San Jose, CA, USA},
+  month     = {July},
+  pages     = {97--100},
+  year      = {2014},
+  url       = {http://dl.acm.org/citation.cfm?id=2632363},
+}
\ No newline at end of file
diff --git a/docs/user/api.md b/docs/user/api.md
new file mode 100644 (file)
index 0000000..fdfd9a6
--- /dev/null
@@ -0,0 +1,125 @@
+# The Verify API #
+Although the primary purpose of JPF is to verify applications that are not JPF dependent, it can also be used to check programs that are explicitly written to execute under JPF. There are two ways to do this
+
+ * use of jpf annotations such as `@gov.nasa.jpf.annotation.JPFConfig` and `@gov.nasa.jpf.annotation.FilterField`
+ * use of the various `gov.nasa.jpf.vm.Verify` APIs
+
+The first method provides only directives to JPF (by means of Java annotations), and does not modify or add any specific code to your system under test. The second one is imperative and should only be used by JPF specific test drivers.
+
+## JPF Annotations ##
+The JPF core currently supports two annotation types: `@JPFConfig` and `@FilterField`
+
+~~~~~~~~ {.java}
+import gov.nasa.jpf.annotation.JPFConfig
+...
+@JPFConfig({"listener+=,gov.nasa.jpf.aprop.listener.SharedChecker", ..})
+public class MyClass {
+  ..
+}
+~~~~~~~~
+
+The `@JPFConfig` annotation allows to set JPF properties (<key>=<value> pairs) for classes and methods of your application, which is especially useful to add specific listeners. You have to be aware of the property effects though, since not all behavior can be changed at runtime, and you usually cannot reverse features with this method
+
+The `@FilterField` annotation is used to mark certain fields in your application as not relevant for state matching. This is useful if you have to add debugging information like counters that would otherwise increase the state space (i.e. would prevent state matching).
+
+~~~~~~~~ {.java}
+import gov.nasa.jpf.annotation.FilterField;
+...
+public class MyClass {
+  ..
+  @FilterField int counter;
+  ..
+}
+~~~~~~~~
+
+This does not change execution of your program in any way, and also does not affect backtracking within JPF (i.e. values are properly restored). It only tells JPF to ignore marked fields when hashing/matching program states.
+
+There is a [jpf-aprop](wiki:projects/jpf-aprop) JPF module that is dedicated to Java annotation based program properties such as `@Nonnull`, `@NonShared`, `@Immutable`, `@Requires` and many others.
+
+## The Verify API ##
+
+Sometimes it is useful to create JPF specific test drivers, like you create JUnit test cases. In this code, you can make explicit use of JPF APIs, since it is not supposed to run outside JPF. There are several categories of APIs which are encapsulated in the `gov.nasa.jpf.vm.Verify` class.
+
+### Data ChoiceGenerators ###
+Data ChoiceGenerators (CGs) are suitable for writing test drivers that are JPF aware. The idea is to obtain non-deterministic input values from JPF in a way that it can systematically analyze all relevant choices. In its most simple form, this can be used like
+
+~~~~~~~~ {.java}
+// test driver code
+import gov.nasa.jpf.vm.Verify;
+..
+boolean cond = Verify.getBoolean();
+// following code is executed for both cond=true AND cond=false
+..
+~~~~~~~~
+
+The `Verify` class contains methods for creating a number of different choice generators for builtin Java types, like
+
+~~~~~~~~ {.java}
+..
+int i = Verify.getInt(min,max); // evaluates for all values between 'min' and 'max' (inclusive)
+..
+double d = Verify.getDoubleFromSet(-42.0, 0.0, 42.0 ..); // evaluates all given values
+..
+~~~~~~~~ 
+
+
+CGs don't stop at value sets that can be completely enumerated based on their type (like boolean, and - at least theoretically - integers). JPF also supports configured heuristics based choice generators, where the values sets are application dependent and can be specified in property files.
+
+![Figure: Data ChoiceGenerators](../graphics/choicegen-example.svg){align=center width=750}
+
+Choice generator implementation is described in a [separate section](wiki:devel/choicegenerator) of this documentation.
+
+### Search Pruning ###
+
+Explicitly restricting the search is useful for highly application specific properties, where it is obvious that certain values are not of interest with respect to the property.
+
+~~~~~~~~ {.java}
+// ..compute some data..
+Verify.ignoreIf(data > someValue); // prune search if true
+// ..do some stuff with data..
+~~~~~~~~
+If the provided expression evaluates to true, JPF does not continue to execute the current path, and backtracks to the previous non-deterministic choice point.
+
+### State Annotation ###
+Based on certain value combinations, an application might give JPF hints about the relevance of a program state that can be subsequently used by Search and/or Heuristic implementations.
+
+~~~~~~~~ {.java}
+// ..compute some data
+Verify.interesting( data < someValue );
+// ..do some stuff with data
+~~~~~~~~
+
+This does not stop execution by JPF, but stores an 'interesting' attribute for the current state. Its more general version is used to attach arbitrary strings to states:
+
+~~~~~~~~ {.java}
+// ..compute some data
+if (data < someValue) {
+  Verify.setAnnotation("critical data value");
+  // ..do some stuff with dat
+~~~~~~~~
+
+Again, this category is about to become less important since Search- and VMListeners are superior mechanisms to store not just strings but arbitrary objects as state annotations.
+
+### Verification Output ###
+
+This is the most simple category, which is used to differentiate between normal program output (that is executed and analyzed by JPF), and output that is strictly verification relevant, i.e. should not appear when executing a program outside JPF. Not very surprising, it contains a number of print(..) methods.
+
+### Atomicity Control ###
+
+this category can be used to control the number of thread interleavings JPF has to analyze. While this is problematic in terms of missing potential defects, it is was often the only way to constrain the state space so that JPF could verify a given application.
+
+~~~~~~~~ {.java}
+Verify.beginAtomic();
+...
+// all code in here is executed by JPF in one transition
+...
+Verify.endAtomic();
+~~~~~~~~
+
+Direct atomicity control was mainly used before the automatic, on-the-fly partial order reduction (POR) was implemented, and only remains relevant for applications that are (still) problematic with respect to POR. JPF's on-the-fly POR implementation is described in a [separate section](../devel/partial_order_reduction) of this documentation.
+
+### Other Usages ###
+
+Some `Verify` methods support collecting information during JPF execution, which is persistent and can be later-on queried by JPF embedding code (programs that execute JPF). This uses an MJI trick where the [native peer](../devel/mji) class (`JPF_gov_nasa_jpf_vm_Verify`) is used to set some data during JPF execution, which can be later-on retrieved by model class code (through `gov.nasa.jpf.vm.Verify`) that is executed outside of JPF. This is currently used to implement counters, which in turn are used to verify JPF itself.
+
+It should be noted that while most of the Verify APIs have alternative implementations that enable execution outside of JPF, applications using them at least don't build outside the JPF environment. Their use therefore is only recommended for JPF specific test drivers.
\ No newline at end of file
diff --git a/docs/user/application_types.md b/docs/user/application_types.md
new file mode 100644 (file)
index 0000000..352e9c9
--- /dev/null
@@ -0,0 +1,36 @@
+# JPF Application Goals and Types #
+
+By now, you already know that you run JPF on compiled Java programs, just like a normal VM. But what are the goals to apply JPF, and - based on these goals - what are the different JPF application types?
+
+## Why to Use JPF? ##
+Before we classify the different types of JPF applications, it is worth to spend a few thoughts on why we actually want to apply it. A word of caution: if you have a strictly sequential program with only a few well defined input values, you are probably better off writing a few tests - using JPF won't tell you much. There are two major reasons to run JPF:
+
+### Explore Execution Alternatives ###
+After all, JPF started as a software model checker, so its original domain is to explore execution choices, of which we have four different types:
+
+  - scheduling sequences - concurrent applications are still the major domain for JPF application because (a) defects like deadlocks and data races are subtle and usually spurious, and (b) the scheduler can usually not be controlled from a testing environment, i.e. this is hard to impossible to test. JPF on the other hand not only "owns" the scheduler (it is a virtual machine) and explores all interesting scheduling combinations, it even lets you define your own scheduling policies
+  - input data variation - JPF allows you to explore input value sets that can be defined by heuristics (e.g. a value below, at, and above a certain threshold). This is especially useful when writing test drivers
+  - environment events - program types like Swing or web applications usually react to external events like user input. Such events can be simulated by JPF as choice sets
+  - control flow choices - JPF can not only check how your program reacts to a concrete input, it can also turn around and systematically explore the program control structure (branch instructions) to compute input data values that would execute a certain part of your code.
+
+### Execution Inspection ###
+
+Even if your program does not have a lot of execution alternatives, you can make use of JPF's inspection capabilities. Being an extensible virtual machine, it is relatively easy to implement coverage analyzers, or non-invasive tests for conditions that would otherwise go unnoticed because they are hard or tedious to implement (like overflow in numerical instructions).
+
+## JPF Application Types ##
+There are three basic JPF application types, each of them having different strengths and weaknesses: JPF- aware, unaware, and "enabled" programs.
+
+![Figure: JPF application types](../graphics/app-types.svg){align=center width=800}
+
+### JPF Unaware Programs ###
+This is the usual case - you run JPF on an application that is not aware of verification in general, or JPF in particular. It just runs on any VM that is Java compatible. The typical reason to check such an application with JPF is to look for violations of so called non-functional properties that are hard to test for, such as deadlocks or race conditions. JPF is especially good at finding and explaining concurrency related defects, but you have to know the costs: JPF is much slower than a production VM (for a reason - it does a lot more than a normal byte code interpreter), and it might not support all the Java libraries that are used by the system under test.
+
+### JPF Dependent Programs ###
+On the other side of the spectrum we have applications that are models - their only purpose in life is to be verified by JPF (e.g. to check a certain algorithm), so Java just happens to be the implementation language because that is what JPF understands. Typically, these applications are based on a domain specific framework (such as the [statechart extension](../projects/jpf-statechart) that has been written so that JPF can verify the model. As a consequence, the model applications themselves are usually small, scale well, and do not require additional property specification. The downside is that it is quite expensive to develop the underlying domain frameworks.
+
+### JPF Enabled Programs ###
+The third category probably has the best return on investment - programs that can run on any VM, but contain Java annotations that represent properties which cannot easily be expressed with standard Java language. 
+
+For example, assume you have a class which instances are not thread safe, and hence are not supposed to be used as shared objects. You can just run JPF and see if it finds a defect (like a data race) which is caused by illegally using such an object in a multi-threaded context. But even if JPF out-of-the-box can handle the size of the state space and finds the defect, you probably still have to spend a significant effort to analyze a long trace to find the original cause (which might not even be visible in the program). It is not only more easy on the tool (means faster), but also better for understanding if you simply mark the non-threadsafe class with a `@NonShared` annotation. Now JPF only has to execute up to the point where the offending object reference escapes the creating thread, and can report an error that immediately shows you where and how to fix it. 
+
+There is an abundance of potential property-related annotations (such as `@NonNull` for a static analyzer and JPF), including support for more sophisticated, embedded languages to express pre- and post-conditions.
diff --git a/docs/user/components.md b/docs/user/components.md
new file mode 100644 (file)
index 0000000..55a01d2
--- /dev/null
@@ -0,0 +1,57 @@
+# JPF components #
+Java is more than a programming language. It is a set of layers that starts with a platform specific VM implementation (which is referred to as the *host VM*) that sits on top of native libraries written for and using your operating system. To this stack, we add JPF - a Java application that runs on top of the "host VM", but is itself a VM which then executes your System Under Test (SUT).
+
+![Figure 1: Different layers involved when using JPF](../graphics/jpf-layers.svg){align=center width=700}
+
+With all this recursion, it is easy to get confused about what Java code gets processed at which level. To make things worse,  most of the standard library class files (java.* classes) and some of the annotations get processed by both VMs, but of course in different instantiations. Purpose of this page is to shed some light on what code is associated with the different layers and parts of the system.
+
+In order to untangle, we have to step back and look at what components are involved when applying JPF to the SUT. We categorize the components with respect to two aspects:
+
+ 1. processing VM (host VM, JPF)
+ 1. associated distribution entity (host Java installation, JPF core, JPF extensions, SUT)
+
+Remember the [What is JPF](../intro/what_is_jpf) diagram from the introduction? This is a more detailed version of it. 
+
+![Figure 2: JPF infrastructure](../graphics/jpf-intro-new.svg){align=center width=800}
+
+Let us walk this diagram left-to-right. We start with the compiled Java application we want to verify. This is of course not part of the JPF distribution, but will be executed by JPF, so the corresponding class files do not have to be visible to the host VM (that runs JPF). However, the application code might use classes and interfaces that reside in the JPF distribution. Together, the application and such modeling libraries and/or annotations form the System under Test (SUT)
+
+Next comes the JPF core itself. By now we know this is mainly a VM that is written in Java itself, so you run it on whatever Java system is installed on your machine. This means all classes that constitute JPF need to be visible to the host JVM, e.g. by setting the global `CLASSPATH` environment variable (which is not the recommended way to do this). 
+
+Now comes the important part: **JPF is not a monolithic system**. It uses various configured components to do things such as
+
+ * property implementation
+ * library modeling
+ * report generation
+
+and much more. Even if you don't specify anything when you run it, JPF will use a default configuration that pulls in a lot of components such as [listeners](../devel/listener), which do not have to be part of the [JPF core](../jpf-core/index), but can reside in their own JPF extension modules.
+
+If you do specify your own [configuration](../user/config), you can tell JPF to use components that live outside of the [JPF core](../jpf-core/index) distribution, either in one of the installed JPF extension modules, or in your own project. Either way, all these [listeners](../devel/listener), [native peers](../devel/mji), [publishers](../devel/report) and other components are at runtime part of the whole  JPF system, so they need to be visible to the host VM.
+
+The last part is the most tricky one - your application is most probably using standard Java libraries (e.g. `System.out.println()`), as do the classes that constitute JPF. Some of the standard library classes have to be replaced by JPF specific versions when JPF executes the SUT (e.g. classes such as `java.lang.Class`that have native methods), and JPF has a special [MJI](../devel/mji) mechanism to do that. However, most standard library classes have pure Java implementations, and we take these straight from the host-JVM installation. This means, standard libraries end up in JPF's classpath *and* the host JVM CLASSPATH: and their code is executed by JPF *and* the host VM, but the corresponding instances are different (for instance, a `java.lang.String` object has very different representations in the host VM and JPF).
+
+
+JPF keeps associated class paths separate. There are three different path settings in the JPF configuration:
+
+ 1. `native_classpath` - this includes everything that has to be visible to the host VM, which includes mostly the classes of JPF itself, listeners, native peers and bytecode instruction sets. The `native_classpath` is dynamically constructed from your site.properties and jpf.properties [configuration files](../user/config) during JPF startup, and processed by the JPF classloader
+ 2. `classpath` - this includes the classes that are executed by JPF, which include your SUT, and all libraries that are used by it (*-classes.jar of installed JPF components). Note that some of the library classes (like `java.lang.Thread`) are replaced by JPF specific versions. Again, this is constructed by JPF during startup from all your configured jpf.properties files, but processed by JPFs internal classfile lookup mechanism.
+ 3. `sourcepath`  - depending on the reports that have to be generated by JPF, it might have to find SUT and library sources for the executed classfiles (bytecodes). This is how you tell JPF where these sources reside.
+
+You can set these path lists explicitly from your application property file or the command line, but it is better to let JPF collect them when processing the jpf.properties files of your installed JPF components, which all include  lines like
+
+~~~~~~~~ {/bash}
+<jpf-module>.native_classpath = ..
+<jpf-module>.classpath = ..
+<jpf-module>.sourcepath = ..
+~~~~~~~~
+
+A word of caution: if - during JPF startup - you encounter a message like
+
+~~~~~~~~ {.bash}
+...
+[SEVERE} error during VM runtime initialization: wrong model classes (check 'classpath')
+~~~~~~~~
+
+it means the `classpath` setting is wrong and JPF loads some of the standard library classes that have to be replaced with its own versions  - they need to be *modeled* (like `java.lang.Thread`, `java.lang.Class` and others - all part of jpf-classes.jar within the jpf-core module).
+
+This can also happen later-on with less essential library classes that are not part of jpf-core, but should be loaded from one of the installed extensions. In this case, this usually shows up as an `UnsatisfiedLinkError`
diff --git a/docs/user/config.md b/docs/user/config.md
new file mode 100644 (file)
index 0000000..a57d07b
--- /dev/null
@@ -0,0 +1,153 @@
+# Configuring JPF #
+
+JPF configuration can be intimidating. It is worth to think about why we need such a heavy mechanism before we dive into its details. Little in JPF is hardwired. Since JPF is such an open system that can be parameterized and extended in a variety of ways, there is a strong need for a general, uniform configuration mechanism. The challenge for this mechanism is that many of the parts which are subject to parameterization are configured themselves (i.e. options for optional JPF components like listeners). This effectively prohibits the use of a configuration object that contains concrete fields to hold configuration data, since this class would be a central "design bottleneck" for a potentially open number of JPF components like Searches, Instruction sets and Listeners.
+
+The goal is to have a configuration object that
+
+  * is based on string values
+  * can be extended at will
+  * is passed down in a hierarchical initialization process so that every component extracts only its own parameters
+
+We achieve this by means of a central dictionary object (`gov.nasa.jpf.Config`) which is initialized through a hierarchical set of Java property files that target three different initialization layers:
+
+  1. site: optionally installed JPF components
+  2. project: settings for each installed JPF module and (optionally) systems under test
+  3. application: the class and program properties JPF should check (this is part of your system under test)
+
+Initialization happens in a prioritized order, which means you can override anything from later configuration stages, all the way up to command line parameters. Actually, this can be even overridden by using the `Verify` API from system under test code, but this is a developer topic. Here is the blueprint, which we will examine in order of execution:
+
+![Figure: Configuring JPF](../graphics/properties.svg){align=center width=800}
+
+
+## Property Types ##
+
+Property specifications are processed in a hierarchical order: site properties, project properties, application properties and command line properties. Later stages can override previous stages. Each property is a `<key>=<value>` pair, but we do support some special notations (see below) for key/value expansion, value extension, and pseudo properties that act as directives.
+
+### Site Properties ###
+The site.properties file is machine specific and not part of any JPF project, which means you have to create a [ site.properties](wiki:install/site-properties) file as part of the install process. A sample site.properties might look like:
+
+~~~~~~~~
+jpf-core = ${user.home}/projects/jpf/jpf-core
+jpf-shell = ${user.home}/projects/jpf/jpf-shell
+jpf-awt = ${user.home}/projects/jpf/jpf-awt
+...
+extensions=${jpf-core},${jpf-shell}
+~~~~~~~~
+
+Each module is listed as a `<name>=<directory>` pair, and optionally added to the comma separated list of `extensions`. The order in which modules are added to `extensions` does matter, since it will determine the order in which each of these components is initialized, which basically maps to an ordered list of classpath entries (both for the host VM and JPF itself - paths are kept separate).
+
+Note that we do **not** require all modules being added to `extensions`, **but** jpf-core needs to be in there. Dependencies on modules not listed in `extensions` can be specified later-on with the `@using` directive. It is a good idea to keep the `extensions` list small to avoid conflicts, and to improve class load times (shorter classpaths). 
+
+Note also that the `extensions` entries are of the form `${<key>}`, which tells JPF to replace these expressions with the value that is associated to <key>. 
+
+Site properties have to be stored in the directory from where you start JPF, one of its parent directories, or a global `${user.home}/.jpf/site.properties`. We recommend a to keep it in a common root directory that contains all your JPF projects and modules.
+
+
+### Project Properties ###
+Each JPF module contains a jpf.properties file in its root directory, no matter if this is the jpf-core or an extension. System under test projects can contain a jpf.properties file to factor out common settings (such as class paths) for all JPF applications within this project.
+
+A project property file defines the JPF specific paths that need to be set for the module or system under test to work properly
+
+ 1. `<module-name>.`**`native_classpath`**: the host VM classpath (i.e. the classes that constitute JPF itself)
+ 1. `<module-name>.`**`classpath`**: the classpath JPF uses to execute the system under test
+ 1. `<module-name>.`**`test_classpath`**: host VM and JPF classpath for regression tests
+ 1. `<module-name>.`**`sourcepath`**: the path entries JPF uses to locate sources in case it needs to create program traces
+
+Additionally, `jpf.properties` should contain default values for all module or project specific settings (e.g. report options).
+
+An example project properties file might look like:
+
+~~~~~~~~ {.bash}
+jpf-aprop = ${config_path}
+
+#--- path specifications
+jpf-aprop.native_classpath = build/jpf-aprop.jar;lib/antlr-runtime-3.1.3.jar
+jpf-aprop.classpath = build/examples
+jpf-aprop.test_classpath = build/tests
+jpf-aprop.sourcepath = src/examples
+
+#--- other project specific settings
+listener.autoload=${listener.autoload},javax.annotation.Nonnull,...
+listener.javax.annotation.Nonnull=gov.nasa.jpf.aprop.listener.NonnullChecker
+...
+~~~~~~~~
+
+
+
+The first entry (`<module-name>=${config_path}`) in a jpf.properties should always define the module name. JPF automatically expands `${config_path}` with the pathname of the directory in which this jpf.properties file resides.
+
+jpf.properties are executed in order of definition within site.properties, with one caveat: if you start JPF from within a directory  that contains a jpf.properties file, this one will always take precedence, i.e. will be loaded last (overriding previous settings except of the command line). This way, we ensure that JPF developers can enforce priority of the component they are working on.
+
+Both site.properties and jpf.properties can define or override any key/value pairs they want, but keep in mind that you might end up with different system behavior depending on where you start JPF - avoid configuration force fights by keeping jpf.properties settings disjunct wherever you can.
+
+Please note that site and project properties have to be consistent, i.e. the module names (e.g. jpf-awt) in site.properties and jpf.properties need to be the same. This is also true for the build.xml Ant project names.
+
+It is perfectly fine to have a jpf.properties in a SUT that only uses JPF for verification. You need at least to set up the `classpath` so that JPF knows where to find the SUT classes.
+
+
+### Application Properties ###
+In order to run JPF, you need to tell it what main class it should start to execute. This is the minimal purpose of the *.jpf application properties files, which are part of your systems under test (SUT). Besides the `target` setting that defines the main class of your SUT, you can also define a list of `target_args` and any number of JPF properties that define how you want your application to be checked (listeners, search policy, bytecode factories etc.). A typical example looks like
+
+~~~~~~~~ {.bash}
+#--- dependencies on other JPF modules
+@using = jpf-awt
+@using = jpf-shell
+
+#--- what JPF should run
+target = RobotManager
+
+#--- other stuff that defines how to run JPF
+listener+=,.listener.OverlappingMethodAnalyzer
+
+shell=.shell.basicshell.BasicShell
+awt.script=${config_path}/RobotManager-thread.es
+cg.enumerate_random=true
+...
+~~~~~~~~
+
+The `@using = <module-name>` directive tells JPF to load the `jpf.properties` of the specified projects (defined in `site.properties`). This is the way to ensure proper path initialization of projects that are not listed in `extensions`. 
+
+### Command Line Properties ###
+Last not least, you can override or extend any of the previous settings by providing "**+**<key>=<value>" pairs as command line options. This is convenient for experiments if you have to determine the right settings values empirically
+
+
+## Special Property Syntax ##
+JPF supports a number of special notations that are valid Java properties syntax, but are only processed by JPF (and - to a certain extend - by Ant):
+
+ * **`key=...${x}..`** - replaces `"${x}"` with whatever is currently stored under the key "`x`". This also works recursively, as in "`classpath = mypath;${classpath}`". Note that while Apache Ant does also support value expansion, but not recursively. In addition, JPF also supports expansion in the key part (i.e. left of the "`=`")
+
+ * **`key+=val`** - appends val to whatever is currently stored under "`key`". Note that there can be no blank between key and "`+=`", which would not be parsed by Java. This expansion only works in JPF 
+
+ * **`+key=val`** - in a properties file adds "`val`" in front of what is currently stored under "`key`". Note that if you want to use this from the command line, you have to use two "`++`", since command line options start with "+"
+
+ * **`${config_path}`** - is automatically set to the directory pathname of the currently parsed property file. This can be useful to specify relative pathnames (e.g. input scripts for the jpf-awt extension)
+
+ * **`${config}`** - is set to the file pathname of the currently parsed file
+
+ * **`@requires=<key>`** - can be used to short-circuit loading of a properties file. This is a simple mechanism to control loading of jpf.properties file sections that are incompatible with other modules, and compares to `#ifdef` preprocessor directives. The respective keys are usually set from application properties (*.jpf) files. 
+Note this does not throw an exception if the required key is not defined, it just bails out of loading the properties file that contains the @requires directive
+
+ * **`@include=<property-file>`** - recursively loads the properties file with the specified pathname. You can use the automatically defined `${config_path}` property to specify path names that are relative to where the file containing the `@include` directive is, or use `${<module-name>}` for paths that are relative to the specified module.
+
+ * **`@using=<module-name>`** - is similar to `@include`, but loads the jpf.properties of the specified module name (which has to be defined in site.properties). Note that there is no `${..}` around the module name - otherwise it would be replaced. The `@using` directive is the preferred way to specify dependencies on modules that are not in the `extensions` list (i.e. automatically initialized).
+
+ * **`@include_if = ?<key>?<properties-file>`** - is a conditional `@include` that only loads the properties file if the specified `<key>` is defined
+
+ * **`@include_unless = ?<key>?<properties-file>`** - likewise loads the file only if `<key>` is not defined. Both of these directives are used rarely.   
+
+ * Omitting the "`=..`" part in command line settings defaults to a "`true`" value for the corresponding key
+
+ * Setting an empty value (`key=`) removes the key from the config dictionary
+
+## Debugging ##
+Depending on the number of installed and loaded projects, you can easily end up with hundreds of settings. There are two command line options you can use if you assume there is a configuration error:
+
+ * **`-show`** - prints all Config entries after the initialization is complete
+
+ * **`-log`** - lists the order in which properties files got loaded by JPF
+
+## Details on various options ##
+
+* [Randomization](config/random)
+
+* Error Reporting
diff --git a/docs/user/config/random.md b/docs/user/config/random.md
new file mode 100644 (file)
index 0000000..4fae737
--- /dev/null
@@ -0,0 +1,15 @@
+## Randomization Options in JPF ##
+
+The randomization options in JPF allow the user to experiment in randomizing the order of choices explored. 
+
+`cg.randomize_choices` can have three possible values: random, path, def.
+
+ * `random`: It explores random choices during program execution with **varying results among different trials**. The default seed used to generate different results is the **system time in milliseconds**
+
+ * `path`: It explores random choices during program execution with **reproducible results among different trials**. The default seed used to generate reproducible results is **42**. The value of the seed can be changed by setting the seed config option.
+
+ * `def`: No randomization, choices are explored using the default search order imposed by the model checker. 
+
+`cg.seed (_INT_)`: The user can specify a particular seed for the random number generator in order to obtain reproducible results in the presence of randomization. Note that this is effective only when the `path` option of `randomize_choices` is selected. 
+
+
diff --git a/docs/user/index.md b/docs/user/index.md
new file mode 100644 (file)
index 0000000..6626007
--- /dev/null
@@ -0,0 +1,19 @@
+# How to Use JPF #
+
+This section is where the real fun starts. Here you learn about
+
+  - [Different applications of JPF](application_types)
+  - [JPF's runtime components](components)
+  - [Starting JPF](run)
+  - [Configuring JPF](config)
+  - [Understanding JPF output](output)
+  - [Using JPF's Verify API in the system under test](api)
+
+All this assumes you are more interested in running JPF than in developing with/for it, so we will leave most of the JPF internals for the [developer section](../devel/index) of this wiki. 
+
+We do have to bother you with some basic concepts though. Keep in mind that JPF is usually not a black-box tool (such as a compiler). Most probably you have to configure it according to your needs because
+
+  * you have specific verification goals (properties)
+  * your application has a huge state space that is challenging for a model checker
+
+On the other hand, JPF is also not a "works-or-fails" tool. Depending on how much time you want to invest, you can adapt it to almost all application types and verification goals. And since JPF is open sourced, chances are somebody has already done that
diff --git a/docs/user/output.md b/docs/user/output.md
new file mode 100644 (file)
index 0000000..349242d
--- /dev/null
@@ -0,0 +1,98 @@
+# Understanding JPF Output #
+
+There are three different ways a JPF run can produce output, each of them with a different purpose, but all controlled by the [general JPF configuration mechanism](config):
+
+  1. System under test output - what is the SUT doing?\
+
+  2. JPF logging - what is JPF doing?\
+
+  3. JPF reporting system - what is the result of the JPF run?\
+
+
+
+## System Under Test Output ##
+
+This is the most simple form of output, which usually just consists of `System.out.println(..)` calls embedded in the application code. There is only one caveat - since this is executed by JPF as part of the application, the same print statement might be executed several times:
+
+~~~~~~~~ {.java}
+public class MyApplication ..{
+    ...
+    boolean cond = Verify.getBoolean();
+    System.out.println("and the cond is: " + cond);
+    ...
+}
+~~~~~~~~
+
+will produce
+
+~~~~~~~~
+...
+and the cond is: true
+...
+and the cond is: false
+...
+~~~~~~~~
+
+The second execution of the print statement is of course preceded by a backtrack operation of JPF (the `Verify.getBoolean()` statement has two choices `{true,false}`), but the backtracking might not be visible, e.g. when running without the `ExecTracker` or `ChoiceTracker` listeners.
+
+Since it can be sometimes confusing to see the same output twice without knowing if there is an iteration in the application, or JPF did backtrack between executions, there are two configuration options to control the output behavior:
+
+`vm.tree_output = {true|false}` - means output is shown on the console each time a print statement is executed. This corresponds to the above example, and is the default behavior.
+
+`vm.path_output = {true|false}` - will not immediately print the output on the console, but store in the path for subsequent processing once JPF terminates (if the *output* topic is specified - see below). This should produce the same output as running the test application on a normal JVM.
+
+## Logging ##
+
+This is a more interesting form of JPF output, primarily intended to show what JPF does internally. For this purpose, it has to support various levels of details, ranging from severe errors to fine grained logging of JPF operations.
+
+JPF's logging mechanism does not reinvent the wheel, it piggybacks on the standard java.util.logging infrastructure. While this means it would be possible to use customized LogHandlers and Formatters (e.g. to log in XML format), there are specialized JPF incarnations of these classes, mainly to enable logging configuration via the standard JPF configuration mechanism rather than system properties.
+
+Using the JPF Logging involves two aspects: (1) controlling log output destination, and (2) setting log levels. Both are done with JPF property files.
+
+To set the default log level, use the `log.level` property (the supported levels being *severe,warning,info,fine,finer,finest*)
+
+If you want to log to a different console that possibly even runs on a remote machine, use the gov.nasa.jpf.tools.LogConsole on the machine that should display the log messages:
+
+~~~~~~~~ {.bash}
+$ java gov.nasa.jpf.tools.LogConsole <port>
+~~~~~~~~
+
+Then start JPF on the test machine, specifying where the log output should go:
+
+~~~~~~~~ {.bash}
+$ jpf +log.output=<host>:<port> ... MyTestApp
+~~~~~~~~
+
+The default host is "localhost", default port is 20000. If these are suitable settings, you can start the `LogConsole` without parameters, and just specify `+log.output=socket` when running JPF.
+
+
+If you develop your own JPF classes, please also check the [JPF logging API](../devel/logging) page.
+
+## Reports ##
+
+The JPF reporting system is used to show the outcome of a JPF run, to report property violations, print traces, show statistics and much more. This is in a way the most important part of the JPF user interface, and might involve various different output formats (text, XML, API calls) and targets (console, IDE). Depending on application and project, users might also need control over what items are displayed in which order. It is also obvious this needs to be an extensible mechanism, to adapt to new tools and properties. The JPF report system provides all this, again controlled by JPF's general configuration mechanism.
+
+The basic concept is that reporting depends on a predefined set of output phases, each of them with a configured, ordered list of topics. The output phases supported by the current system are:
+
+  * start - processed when JPF starts
+  * transition - processed after each transition
+  * property_violation - processed when JPF finds a property violation
+  * finished - processed when JPF terminates
+
+There is no standard transition topic yet (but it could be implemented in `PublisherExtensions`). The standard `property_violation` topics include:
+
+  * error - shows the type and details of the property violation found
+  * trace - shows the program trace leading to this property violation
+  * snapshot - lists each threads status at the time of the violation
+  * output - shows the program output for the trace (see above)
+  * statistics - shows property statistics information
+
+Last not least, the finished list of topics that usually summarizes the JPF run:
+
+  * result - reports if property violations were found, and shows a short list of them
+  * statistics - shows overall statistics information
+
+The system consists of three major components: (1) the Reporter, (2) any number of format specific Publisher objects, and (3) any number of tool-, property- and Publisher-specific PublisherExtension objects. Here is the blueprint:
+
+
+Again, there is separate [report system API](../devel/report) documentation if you are interested in JPF development.
diff --git a/docs/user/run.md b/docs/user/run.md
new file mode 100644 (file)
index 0000000..ce3b515
--- /dev/null
@@ -0,0 +1,258 @@
+# Running JPF #
+There are five general ways to run JPF, depending on your execution environment (command prompt or IDE) and desired level of configuration support. This page has to cover quite some ground, so bear with us
+
+ 1. [from a command prompt (operating system shell)](#command-line)
+ 2. [from an IDE (NetBeans, Eclipse) without using JPF plugins](#running-jpf-from-within-ide-without-plugins)
+ 3. [from an IDE with JPF plugins installed](#running-jpf-from-within-ide-with-plugins)
+ 4. [from within a JUnit test class](#launching-jpf-from-junit-tests)
+ 5. [single tests from command line](#explicitly-running-tests-from-the-command-line)
+ 6. [explicitly from an arbitrary Java program](#explicitly-launching-jpf-from-a-java-program)
+
+## Command Line ##
+
+There are several ways to run JPF from the command line, using varying degrees of its runtime infrastructure. The most simple way is to use the provided `bin/jpf` script of the jpf-core distribution. Go to the directory where your system under test (SUT) classes reside, and do a
+
+~~~~~~~~ {.bash}
+> <jpf-core-dir>/bin/jpf +classpath=. <application-main-class>
+~~~~~~~~  
+
+or preferably
+
+~~~~~~~~ {.bash}
+> <jpf-core-dir>/bin/jpf <application-property-file>.jpf
+~~~~~~~~  
+
+(see target specification below). If you want to avoid platform specific scripts, you only have to slightly expand this to
+
+~~~~~~~~ {.bash}
+> java -jar <jpf-core-dir>/build/RunJPF.jar +classpath=. <application-main-class>
+~~~~~~~~
+
+This makes use of the small RunJPF.jar startup jar that is part of the jpf-core distribution, which only includes the classes that are required to start the JPF bootstrapping process (esp. the JPF classloader). These classes automatically process the various [JPF configuration files](config). If your SUT is not trivial, it is also recommended to add a "-Xmx1024m" host VM option, to avoid running out of memory.
+
+Last (and probably most rarely), you can directly start JPF and give it an explicit classpath. This amounts to something like
+
+~~~~~~~~ {.bash}
+> java -classpath <jpf-core-dir>/build/jpf.jar gov.nasa.jpf.JPF +classpath=. <application-main-class>
+~~~~~~~~
+
+Of course, this gets quickly more complicated if you use JPF extensions, which require to add to both the host VM and the JPF classpath, which is completely automated if you use the RunJPF.jar method. Explicitly setting paths is only for rare occasions if you develop JPF components yourself.
+
+There are three different argument groups that are processed by JPF:
+
+#### (1) JPF command line options ####
+
+These options should come first (after RunJPF.jar), and all start with a hyphen ("-").  The set of currently supported options is:
+
+ * -help : show usage information and exit
+ * -log  : print the configuration steps
+ * -show : print the configuration dictionary after configuration is complete
+
+The last two options are mostly used to debug if the JPF configuration does not work as expected. Usually you start with `-show`, and if you don't see the values you expect, continue with `-log` to find out how the values got set.
+
+
+#### (2) JPF properties ####
+
+This is the second group of options, which all start with a plus ("+") marker, and consist of "`+<key>=<value>`" pairs like
+
+~~~~~~~~ {.bash}
+.. +cg.enumerate_random=true
+~~~~~~~~
+
+All properties from the various JPF properties [configuration files](config) can be overridden from the command-line, which means there is no limit regarding number and values of options. If you want to extend an existing value, you can use any of the following notations
+
+ * `+<key>+=<value>` - which appends <value>
+ * `++<key>=<value>` - which prepends <value>
+ * `+<key>=..${<key>}..` - which gives explicit control over extension positions
+
+Normal JPF properties `${<key>}` expansion is supported.
+
+If the `=<value>` part is omitted, a default value of `true` is assumed. If you want to set a value to null (i.e. remove a key), just skip the `<value>` part, as in `+<key>=`
+
+#### (3) target specification ####
+
+There are two ways to specify what application JPF should analyze
+ * explicit classname and arguments
+
+~~~~~~~~ {.bash}
+> jpf ...  x.y.MyApplication arg1 arg2 ..
+~~~~~~~~
+
+ * application property file (*.jpf)
+
+~~~~~~~~ {.bash}
+> jpf ... MyApplication.jpf
+~~~~~~~~
+
+We recommend using the second way, since it enables you to store all required settings in a text file that can be kept together with the SUT sources, and also allows you to start JPF from within !NetBeans or Eclipse just by selecting the *.jpf file (this is mainly what the IDE plugins are for). Please note that application property files require a "`target`" entry, as in
+
+~~~~~~~~ {.bash}
+# JPF application property file to verify x.y.MyApplication
+target = x.y.MyApplication
+target.args = arg1,arg2
+# Note that target_args in JPF 6 changed to target.args in JPF 7.
+...
+~~~~~~~~
+
+## Running JPF from within IDE without plugins ##
+
+You can start JPF from within !NetBeans or Eclipse without having the IDE specific JPF plugins installed. In this case, JPF uses the standard IDE consoles to report verification results. For details, please refer to the following pages:
+
+ * [Running JPF from within NetBeans without plugin](run_nb)
+ * [Running JPF from Eclipse without plugin](run_eclipse)
+
+Note that this is **not** the recommended way to run JPF from within an IDE, unless you want to debug JPF or your classes.
+
+## Running JPF from within IDE with plugins ##
+
+You can simplify launching JPF from within !NetBeans or Eclipse by using the respective plugins that are available from this server. In this case, you just have to create/select an application property (*.jpf) file within your test project, and use the IDE context menu to start a graphical JPF user interface. These so called "JPF shells" are separate applications (that can be configured through normal JPF properties), i.e. appear in a separate window, but can still communicate with the IDE, e.g. to position editor windows. You can find more details on
+
+ * [Running JPF from within NetBeans with netbeans-jpf plugin](run_nb_plugin)
+ * [Running JPF from Eclipse with eclipse-jpf plugin](run_eclipse_plugin)
+
+This is becoming the primary method of running JPF. The benefits are twofold: (1) this is executed outside of the IDE process, i.e. it doesn't crash the IDE if JPF runs out of memory, and (2) it makes use of all your standard JPF configuration (site.properties and jpf.properties), in the same way like running JPF from a command-line. 
+
+## Launching JPF from JUnit tests ##
+
+JPF comes with [JUnit](http://www.junit.org) based testing infrastructure that is used for its own regression test suite. This mechanism can also be used to create your own test drivers that are executed by JUnit, e.g. through an [Ant](http://ant.apache.org) build script. The source structure of your tests is quite simple
+
+~~~~~~~~ {.java}
+import gov.nasa.jpf.util.test.JPFTestSuite;
+import org.junit.Test;
+
+public class MyTest extends TestJPF {
+
+  @Test
+  public void testSomeFunction() {
+    if (verifyNoPropertyViolation(jpfOptions)) {  // specifies the test goal, "jpfOptions" are optional 
+       someFuntction(); ..                        // this section is verified by JPF
+    } 
+  }
+
+  //.. more @Test methods
+~~~~~~~~
+
+From a JUnit perspective, this is a completely normal test class. You can therefore execute such a test with the standard `<junit>` [Ant](http://ant.apache.org) task, like
+
+~~~~~~~~ {.xml}
+    <property file="${user.home}/.jpf/site.properties"/>
+    <property file="${jpf-core}/jpf.properties"/>
+    ...
+    <junit printsummary="on" showoutput="off" haltonfailure="yes"
+           fork="yes" forkmode="perTest" maxmemory="1024m">
+      ...
+      <classpath>
+        ...
+        <pathelement location="${jpf-core}/build/jpf.jar"/>
+      </classpath>
+
+      <batchtest todir="build/tests">
+        <fileset dir="build/tests">
+          ...
+          <include name="**/*Test.class"/>
+        </fileset>
+      </batchtest>
+    </junit>
+    ...
+~~~~~~~~
+
+Only jpf.jar needs to be in the host VM classpath when compiling and running the test, since `gov.nasa.jpf.util.test.TestJPF` will use the normal JPF configuration (site.properties and configured jpf.properties) to set up the required `native_classpath`, `classpath`, 'test_classpath` and `sourcepath` settings at runtime. Please refer to the [JPF configuration](config) page for details. 
+
+If you don't have control over the build.xml because of the IDE specific project type (e.g. if your SUT is configured as a NetBeans "Class Library Project"), you have to add jpf.jar as an external jar to your IDE project configuration.
+
+In addition to adding jpf.jar to your build.xml or your IDE project configuration, you might want to add a jpf.properties file to the root directory of your project, to set up things like where JPF finds classes and sources it should analyze (i.e. settings that should be common for all your tests). A generic example could be 
+
+~~~~~~~~ {.bash}
+  # example of JPF project properties file to set project specific paths
+
+  # no native classpath required if this is not a JPF project itself
+  myproject.native_classpath=...
+
+  # where does JPF find the classfiles to execute
+  myproject.classpath=build/classes
+
+  # where do test classes reside
+  myproject.test_classpath=build/test/classes
+
+  # other project common JPF settings like autoloaders etc.
+  listener.autoload+=,javax.annotation.Nonnull
+  listener.javax.annotation.Nonnull=.aprop.listener.NonnullChecker
+  ...
+~~~~~~~~
+
+You can find project examples here
+
+ * [standard NetBeans project](../projects/standardnbproject) ("Java Class Library" or "Java Application")
+ * Freeform NetBeans project (with user supplied build.xml)
+ * standard Eclipse project (with user supplied build.xml)
+
+Please refer to the [Verify API](api) and the [JPF tests](../devel/jpf_tests) pages for details about JPF APIs (like `verifyNoPropertyViolation(..)` or `Verify.getInt(min,max)`) you can use within your test classes.
+
+Since JPF projects use the same infrastructure for their regression tests, you can find a wealth of examples under the `src/tests` directories of your installed JPF projects. 
+
+## Explicitly Running Tests from the command line ##
+
+You can also run your `TestJPF` derived test drivers by using the `bin/test` script (which in turn just a short for "`java -jar tools/RunTest.jar`", i.e. is platform independent):
+
+~~~~~~~~ {.bash}
+bin/test <test-class> [<test-method>]
+~~~~~~~~ 
+
+Note that each `verify..(jpfArgs)` uses its own `Config` instance in this case. If you want to specify temporary JPF options from the command-line when running `RunTest`, prefix them with `test` like in the following example
+
+~~~~~~~~ {.bash}
+bin/test +test.listener=.listener.ExecTracker gov.nasa.jpf.test.mc.basic.AttrsTest
+~~~~~~~~
+
+## Explicitly Launching JPF from a Java Program ##
+Since JPF is a pure Java application, you can also run it from your own application. The corresponding pattern looks like this:
+
+~~~~~~~~ {.java}
+public class MyJPFLauncher {
+  ...
+  public static void main(String[] args){
+    ..
+    try {
+
+      // this initializes the JPF configuration from default.properties, site.properties
+      // configured extensions (jpf.properties), current directory (jpf.properies) and
+      // command line args ("+<key>=<value>" options and *.jpf)
+      Config conf = JPF.createConfig(args);
+
+      // ... modify config according to your needs
+      conf.setProperty("my.property", "whatever");
+
+      // ... explicitly create listeners (could be reused over multiple JPF runs)
+      MyListener myListener = ... 
+
+      JPF jpf = new JPF(conf);
+
+      // ... set your listeners
+      jpf.addListener(myListener);
+
+      jpf.run();
+      if (jpf.foundErrors()){
+        // ... process property violations discovered by JPF
+      }
+    } catch (JPFConfigException cx){
+      // ... handle configuration exception
+      // ...  can happen before running JPF and indicates inconsistent configuration data
+    } catch (JPFException jx){
+      // ... handle exception while executing JPF, can be further differentiated into
+      // ...  JPFListenerException - occurred from within configured listener
+      // ...  JPFNativePeerException - occurred from within MJI method/native peer
+      // ...  all others indicate JPF internal errors
+    }
+  ...
+~~~~~~~~ 
+
+Please refer to the [Embedding JPF](../devel/embedded) developers documentation for details. If you start JPF through your own launcher application, you have to take care of setting up the required `CLASSPATH` entries so that it finds your (and JPFs) classes, or you can use the generic `gov.nasa.jpf.Main` to load and start your launcher class, which makes use of all the path settings you have in your [site.properties](../install/site-properties) and the directories holding project properties (jpf.properties) referenced therein (details on [how to configure JPF](../user/config). This brings us back to the command line at the top of this page, only that you specify which class should be loaded through `Main`:
+
+~~~~~~~~ {.bash}
+> java -jar .../RunJPF.jar -a MyJPFLauncher ...
+~~~~~~~~ 
+
+(note that `gov.nasa.jpf.Main` is the `Main-Class` entry of the executable RunJPF.jar, which also holds the `JPFClassLoader`). 
+
+Just for the sake of completeness, there is another way to start JPF explicitly through a `gov.nasa.jpf.JPFShell` implementation, which is using the normal `JPF.main()` to load your shell, which in turn instantiates and runs a `JPF` object. This is specified in your application property (*.jpf) file with the `shell=<your-shell-class>` option. Use this if your way to start JPF is optional, i.e. JPF could also be run normally with your *.jpf.
\ No newline at end of file
diff --git a/docs/user/run_eclipse.md b/docs/user/run_eclipse.md
new file mode 100644 (file)
index 0000000..72a8e3a
--- /dev/null
@@ -0,0 +1,20 @@
+## Running JPF within eclipse ##
+
+To run JPF in eclipse after building 
+
+* JPF click "Run"-->"Run" or click "Play"-->"Run As Dialog".
+
+* Select Java Application and click "New".
+
+* Click on the "Main" tab. Ensure the project selected is jpf-core and the in the Main Class pick `gov.nasa.jpf.JPF`.
+
+* Click on the "Arguments" tab. Specify the `<application-main-class>` in the Program Arguments. Any additional configuration properties can be specified. For example, 
+
+~~~~~~~~ {.bash}
++cg.randomize_choices=true
+oldclassic
+~~~~~~~~
+
+* Click on "Run" to verify the application in JPF. The output of the program and the results will be displayed on the eclipse console window. 
+
+Alternatively you pick the run-jpf-core launch configuration and add the `<application-main-class>` of the system under test. The eclipse IDE detects the various launch configurations. When you click on the Run button they appear on the left column, pick "run-jpf-core". It is, however, recommended you run the application with the eclipse plugin for better performance and ease of usability.  
\ No newline at end of file
diff --git a/docs/user/run_eclipse_plugin.md b/docs/user/run_eclipse_plugin.md
new file mode 100644 (file)
index 0000000..a2f40e8
--- /dev/null
@@ -0,0 +1,12 @@
+# Running JPF from within Eclipse using eclipse-jpf #
+
+eclipse-jpf can be easily configured to run JPF from within Eclipse
+
+ 1. Install eclipse-jpf (see [Installing Eclipse JPF plugin](../install/eclipse-plugin))
+ 2. Make sure that the correct site.properties file is being used for JPF (The default is usually correct)
+   To see which site.properties file is being used:
+   3. From the Eclipse top menu go to **Window**->**Preferences**
+   4. Select **JPF Preferences**
+   5. Make sure that "Path to site.properties" is defined properly.
+ 6. From either the **Package Explorer** view (On the left of the main Eclipse screen by default) right-click on the *.jpf with the JPF configuration wanted and select **Verify...**
+ 7. Make sure that the **Console view** (Usually at the bottom of the main Eclipse screen) is opened to view the results from JPF
\ No newline at end of file
diff --git a/docs/user/run_nb.md b/docs/user/run_nb.md
new file mode 100644 (file)
index 0000000..b6e60d9
--- /dev/null
@@ -0,0 +1,92 @@
+# Running JPF from within NetBeans without JPF plugin #
+
+Please Note that the following description assumes NetBeans "freeform projects". In general, it is much better to use the JPF plugins, which not only make the configuration steps described below obsolete, but also work with other NetBeans project types.
+
+Since the NetBeans build process is Ant based, and Ant can read a subset of JPF configuration files, integration is fairly straight forward. Every JPF project comes with its own build.xml, and a `.../nbproject` directory that holds a NetBeans specific project.xml and ide-file-target.xml file, which can serve as templates for your own projects.
+
+Once everything is configured correctly, you can run JPF by selecting application property (*.jpf) files in the "project view", and do a "Run"->"Run File" from the NetBeans main menu (without the plugin, there will be no "run" item in the project view context menu, but hotkeys should still work).
+
+To make this work, you have to configure two NetBeans specific files:
+
+### nbproject/project.xml ###
+
+If you want to use JPF specific classes (like annotations), you have to make sure the NetBeans source checker will see them. You can achieve this by re-using the JPF property files to set the required classpaths, like
+
+~~~~~~~~ {.xml}
+...
+        <general-data xmlns="http://www.netbeans.org/ns/freeform-project/2">
+            <name>...</name>
+            <properties>
+                <property-file>${user.home}/.jpf/site.properties</property-file>
+                <property-file>${jpf-core}/jpf.properties</property-file>
+                ...                
+            </properties>
+         ...
+        <java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/2">
+            <compilation-unit>
+                <package-root>...</package-root>
+                <classpath mode="compile">...;${jpf-core.native_classpath}</classpath>
+            </compilation-unit>
+          ...
+~~~~~~~~
+
+This works for two reasons:
+
+ * Ant supports `${key}` expansion from properties (as long as they are not self-recursive)
+ * Ant properties are single-assignment, i.e. subsequent definitions of the same property name will be ignored
+
+The next step is required no matter if you use JPF types or not - you have to define file actions, which will link to the ide-file-targets.xml
+
+~~~~~~~~ {.xml}
+         ...
+            <ide-actions>
+                ...
+                <action name="run.single">
+                    <script>nbproject/ide-file-targets.xml</script>
+                    <target>run-selected-jpf</target>
+                    <context>
+                        <property>jpf.config</property>
+                        <folder>...</folder>
+                        <pattern>\.jpf$</pattern>
+                        <format>absolute-path</format>
+                        <arity>
+                            <one-file-only/>
+                        </arity>
+                    </context>
+                </action>
+           ...
+~~~~~~~~
+
+It seems this has to be defined for each source folder, which can require a number of redundant XML elements
+
+### nbproject/ide-file-targets.xml ###
+
+Within this file, you have to provide the scripts to run the actions defined in the project.xml. This can also make use of the JPF configuration files:
+
+~~~~~~~~ {.xml}
+<project basedir=".." name="....">
+
+    <property file="${user.home}/.jpf/site.properties"/>
+    <property file="${jpf-core}/jpf.properties"/>
+
+    <path id="base.path">
+        ...
+        <pathelement path="${jpf-core.native_classpath}"/>
+    </path>
+   ...
+    <target name="run-selected-jpf">
+        <fail unless="jpf.config">Must set property 'jpf.config'</fail>
+        <ant antfile="build.xml" inheritall="false" target="compile"/>
+
+        <java classname="gov.nasa.jpf.JPF" failonerror="true" fork="true">
+            <arg value="-c"/>
+            <arg value="${jpf.config}"/>
+            <classpath>
+                ...
+                <path refid="base.path"/>
+            </classpath>
+        </java>
+    </target>
+   ...
+~~~~~~~~
+
diff --git a/docs/user/run_nb_plugin.md b/docs/user/run_nb_plugin.md
new file mode 100644 (file)
index 0000000..134634e
--- /dev/null
@@ -0,0 +1,12 @@
+# Running JPF from within NetBeans with netbeans-jpf plugin #
+netbeans-jpf can be easily configured to run JPF at the click of a mouse.
+
+ 1. Install netbeans-jpf (see: [Installing the NetBeans JPF plugin](../install/netbeans-plugin))
+ 2. Make sure the correct `site.properties` file is being used for JPF (The default is usually correct)\
+     To see which `site.properties` file is being used:
+   3. From the NetBeans top menu go to "Tools"->"Options" (Alt+T followed by Alt+O)
+   4. Select "Miscellaneous" from the top of the Options Window
+   5. Select the "Java Pathfinder" tab
+   6. Make sure that "Path to `site.properties`" is defined properly, uncheck "Use default `site.properties` location" to change the path
+ 7. From either the "Projects" or "Files" view (on the left of the main NetBeans screen by default,) select the JPF properties file (i.e., a file with a `.jpf` extension) you would like to run. Right click on this file and select the "Verify..." menu item to run JPF.
+ 8. To view the results, make sure that the "Output" View is open (On the bottom of the main NetBeans screen by default)
\ No newline at end of file