Virtual—Aspect Oriented—Composition


Published at the 10th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2017).

Paper is available.

Research prototype and initial evaluation artefacts are available on GitHub.


The maintenance of modern systems often requires developers to perform complex and error-prone cognitive tasks, which are caused by the obscurity, redundancy, and irrelevancy of code, distracting from essential maintenance tasks.

Typical maintenance scenarios include multiple branches of code in repositories, which involves dealing with branch-interdependent changes, and aspects in aspect-oriented programming, which requires in-depth knowledge of behavior-interdependent changes. Thus, merging branched files as well as validating the behavior of statically composed code requires developers to conduct exhaustive individual introspection.

In this work we present the VirtualEdit for associative, commutative, and invertible model composition that enables simultaneous editing of multiple model versions or variants through dynamically derived virtual models. We implemented the approach in terms of an open-source framework that enables the maintenance of multi-versioned and aspect-oriented software through selective focus on specific parts of code, which are significant for a particular maintenance task.

The VirtualEdit framework is evaluated based on its application to the most popular publicly available Xtext-based languages. Our results indicate that our approach is surprisingly easy to include in other languages and can be used in a prototypical fashion.


Getting Started

You can obtain the latest version of VirtualEdit by directly downloading the VirtualEdit project archive file or clone the VirtualEdit GitHub repository, the the IntellEdit project archive file or clone the IntellEdit GitHub repository and the the XMLIntelledit project archive file or clone the XMLIntelledit GitHub repository.

Watch VirtualEdit in action by proceeding with the following simple steps:

  1. Recommended: Clean Eclipse workspace.
  2. Recommended: Right-click on "" and register the package.
  3. Create an empty src and xtend-gen folder in each *.ide project.
  4. Run an Eclipse runtime application, i.e., a second Eclipse instance started by your initial Eclipse instance, by right-clicking on any imported plugin project in the package explorer and select "Run As > Eclipse Application".
  5. Ignore the project errors for now.
  6. Within the Eclipse runtime application, import the project TestBank of the VirtualEdit-Git.
  7. Sometimes, you may need to copy the content of the .basic-file into the .vjava-file and delete the .basic file if something breaks.
  8. Try out the virtual textual model composition !

Note that aspects are re-executed as soon as file changes have been saved.