This subproject of RISE-I develops aspect-oriented weavers as invasive composition programs. This is following recent work. [UA20] shows that instead of regarding a weaver as a black box tool (such as Adaptive Programming), or regarding it as an interpreter of an aspect language (such as Aspect/J [EFB01] or Inject/J (www.injectj.fzi.de) it is more useful to regard a weaver as a composition program in a Turing-complete standard language. First, the control flow, expression, and modularization techniques of a composition language can be carried over to the weaver. Second, users and developers of weavers need not learn a special language, but are supported by the complete set of standard tools for the standard language.
The major implementation technique of [UA20] is static meta-programming which allows to compose components and aspects invasively. Weavers are programmed in Java, using a library with basic weaving operations, the COMPOST system[UA21]. Based on some very basic operators, such as bind a parameter of a component, extend a component, connect two components, distribute code over a component, weavers can be built ([UA20], chapter 11). With the soundness criteria defined in chapter 5 and 6 of [UA20], it is possible for the first time to build sound weavers that allow preserving contracts on core components while aspects are weaved in. This opens a new world of extensible software systems in which contracts on aspects ensure soundness and substitutability.
However, so far only the formal basics of this new style of aspect-oriented programming has been developed. Now, it is urgent to develop weaver applications, case studies, and software engineering environments on top of invasive composition. Hence, as a demonstrator, the weaving technology based on invasive composition will be integrated into the RISE-I demonstrator, the development environment for integrational software engineering (DISE).
At the moment, it is impossible to automatically deweave a legacy system into aspects or views, even if systematic decomposition criteria are given. For instance, from a legacy system the navigation aspect used in Adaptive Programming cannot be extracted automatically (Lieberherr, Comm. ACM 94). Such aspect extraction would simplify the reverse engineering, the maintenance, and evolution of legacy systems. Aspect extraction does not even work for systems that result from weavings. This hints to a major problem of current AOP: weavings cannot be inverted automatically since weavers do not work bi-directionally. However, since the weaved system might be too complex to understand and to debug, aspect inversion is indispensable for many applications.
The duty of this subproject is to research on techniques that make weavers invertible. In particular, if each composition operator of a composition program based weaver has an inverse, the inverse of the weaver can be computed automatically. Invertible mappings are well known from declarative transformation specifications (e.g. algebraic graph rewriting), but they have never been applied in AOP.