=Paper= {{Paper |id=None |storemode=property |title=Generic IDE Support for Dispatch-Based Composition. |pdfUrl=https://ceur-ws.org/Vol-564/compositionvariability2010_submission_2.pdf |volume=Vol-564 }} ==Generic IDE Support for Dispatch-Based Composition.== https://ceur-ws.org/Vol-564/compositionvariability2010_submission_2.pdf
       Generic IDE Support for Dispatch-Based Composition

                          Christoph Bockisch                                                     Andreas Sewe
            Software Engineering group – University of                          Software Technology group – Technische
           Twente, P.O. Box 217, 7500 AE Enschede, the                       Universität Darmstadt, Hochschulstr. 10, 64289
                           Netherlands                                                    Darmstadt, Germany
                  c.m.bockisch@ewi.utwente.nl                                  sewe@st.informatik.tu-darmstadt.de


ABSTRACT                                                                    guages share concepts from several broad categories: selection of
Programming-language research produces a significant number of new          call sites based on syntactic properties, access to the runtime state
programming styles to improve the composability of programs. This           in which they are executed, evaluation of functions over the runtime
increases re-usability as well as other quality characteristics. But al-    state to select from alternative meanings, declaration of meaning in
though they offer interesting composition concepts, new program-            terms of actions on the runtime state, and description of relationships
ming languages are rarely used because IDE support, which devel-            between applicable actions. Each language uses some extension of
opers are used to, is missing. Examples of such IDE support are the         each core concept and the concrete concepts used in different lan-
visualization of call hierarchies or interactive debugging. While some      guages often overlap.
languages, e.g., AspectJ, eventually reach a more mature level with            Similarly, the requirements for IDE support of such languages over-
elaborate IDE integration, not all language designers are able to invest    lap. Different kinds of support for the development in the investigated
this much effort towards IDE integration. Furthermore, the IDE inte-        languages are recurring, but have to be implemented from scratch for
gration of AspectJ also has its limitations; when debugging, the devel-     each language. As a result, the IDE support for new languages is typ-
oper is confronted with synthetic code with no exact correspondence         ically limited, as more effort is spent on the design of the language
in the source code. As a result, the developer needs to understand the      and the implementation of compilers than on the language’s IDE inte-
transformations performed by the compiler. Finally, some informa-           gration. In the following, we discuss a few examples of IDE support
tion invariably gets lost during weaving, e.g., the ability to map code     from which all investigated languages can benefit.
evaluating pointcut designators to their definition in the source code.        Among the investigated languages, the aspect-oriented ones sup-
   In this paper, we propose to implement generic IDE tools for pro-        port implicit invocation. It thus is desirable to let the IDE visualize the
gramming languages that provide advanced dispatching mechanisms.            places in the code at which other code may be (implicitly) the target
Such languages, including predicate dispatching and pointcut-advice         of dispatch. To this end, the IDE support for the AspectJ language, the
languages, can be mapped to our execution model, called ALIA. The           AspectJ Development Tools (AJDT), provides different ways of visu-
same execution model can then drive debugging functionality as well         alizing such relations. However, even for languages with only explicit
as static IDE services.                                                     invocation, similar IDE support is present. The Eclipse Java Develop-
                                                                            ment Tools (JDT) allow, e.g., to search for all call sites of a method,
                                                                            or to show the possible targets of a call site. It should be noted that,
1.    INTRODUCTION                                                          while calls must be explicit in Java, they can be virtual and multiple
   In order to improve the modularity of source code, research strives      implementations may be applicable. The potential targets depend on
to define new composition mechanisms, often in terms of new lan-            the inheritance hierarchy, which may be too complex for the devel-
guages. Many such languages provide composition mechanisms by               oper to grasp in its entirety. IDE support is therefore essential. The
allowing to influence the dispatch of, e.g., method calls, like in multi-   same observation holds for predicate-dispatching languages.
ple dispatching [9] or predicate dispatching [14]. But other composi-          All investigated languages can be compiled to pure Java bytecode
tion styles can be mapped to a dispatching-based execution model as         and can run on a standard JVM. Therefore, the default debugger of
well, as we have shown [5] for pointcut-advice languages [15], Com-         the IDE can be used to debug programs written in those languages.
position Filters [12], and a DSL for composing objects following the        What is debugged, however, is the program after the transformation.
Decorator design pattern.                                                   Consequently, the developer is facing large amounts of infrastructural
   Usually, advanced dispatching mechanisms are provided as an ex-          code that has been inserted by the compiler to realize the semantics
tension of an existing programming language, the so-called base lan-        and will often end up stepping through code for which no source code
guage, and the semantics of the advanced program features are re-           exists, which makes it even harder to understand. Another difficulty is
alized by transforming them to the base language’s imperative code.         that the Java debugger assumes that all code of a class was compiled
We have shown [5] that the dispatching mechanisms of all these lan-         from a single source file, but with new composition mechanisms this
                                                                            assumption may no longer hold: one class may be composed of multi-
                                                                            ple source files. Compilers merge all files into one; thus, the mapping
                                                                            from target code to the source code is lost and cannot be used by the
                                                                            debugger anymore.
                                                                               We have provided an architecture for implementing advanced-dis-
                                                                            patching languages in a way that they can share the implementation
                                                                            of overlapping concepts [5]; it is called the Advanced-dispatching
                                                                            Language-Implementation Architecture (ALIA) and consists of a lan-
 .
                                                            5
                                                                   LIAM                              FIAL
                                                            4
                                                                 Refinement
                                                                  of LIAM

                            2                              3                                       FIAL in-
                                  Importer                      LIAM model
                                                                                                  stantiation
                            1                              6
                                  Compiler                      Java bytecode                     Java Virtual
                                                                                                    Machine


                     Figure 1: Overview of the application life cycle in ALIA4J-based language implementations.

guage-independent meta-model of advanced dispatching concepts and                                      Attachment
any number of execution environments that process models conform-
                                                                                                                 1..*
ing to this single meta-model. For languages extending Java we have
                                                                                Action               Specialization            ScheduleInfo
implemented this architecture, called ALIA for Java (ALIA4J), which
furthermore provides a framework factoring out shared components                      *
                                                                                                                        0..2
of such execution environments.                                                 Context
                                                                                              *
                                                                                                       Expression
                                                                                                        Predicate                Pattern
   In this position paper, we will discuss how ALIA’s meta-model,
more specifically its implementation in ALIA4J, and the framework                 *                              0..1

for execution environments can be used to provide a generic infras-                                 AtomicPredicate
tructure for IDE support of advanced-dispatching languages.
                                                                         Figure 2: Entities of the Language-Independent Advanced-
2.   THE ALIA ARCHITECTURE FOR JAVA                                      dispatching Meta-Model (LIAM) as UML class diagram.
   In ALIA4J, the meta-model stipulated by ALIA is embodied in the
Language-Independent Advanced-dispatching Meta-model (LIAM). pair, in terms of predicate dispatching, an attachment corresponds to
LIAM hereby acts as the form of intermediate representation for ad- a predicate method. Action specifies an action to which the dispatch
vanced dispatching in programs. The actual intermediate representa- may lead (e.g., an advice or the predicate-method body). Special-
tion, in turn, is a model conforming this meta-model (the so-called ization defines static and dynamic properties affecting dispatch: pat-
LIAM model). Code of the program not using advanced dispatching terns specify syntactic properties of call sites which are affected by
mechanisms is represented in its conventional Java bytecode form. the declared dispatch; predicate and atomic predicate entities model
The Framework for Implementing Advanced-dispatching Languages (FIAL)     dynamic properties a dispatch depends on (dynamic pointcut desig-
implements common components and work flows required to imple- nators in AO terminology). Context entities model access to values in
ment execution environments based on a JVM for executing LIAM the context of a dispatch, like the calling object or argument values.
models. A brief overview, of the approach can be found in [7]1 .         Finally, the schedule information models constraints between multi-
   Figure 1 shows an overview of the ALIA4J approach. Concretely, ple actions applicable at the same generic-function call. This includes
the flow of compiling and executing applications in this approach is the order of their execution, as well as relations like mutual exclusion.
shown. The compiler 1 starts processing the source code; a dedi-           At runtime, FIAL derives a dispatch model for each dispatch site
cated importer component 2 adapts the compiler’s output to a model in the program from all attachments that have been defined. Thereby,
for the advanced dispatch declarations in the program 3 based on the FIAL solves the constraints specified as schedule information and de-
refined subclasses 4 of the LIAM meta-entities 5 . Furthermore, the rives a single dispatch function per call site from the predicates of
compiler produces an intermediate representation of those parts of the all specializations. This function is represented as a binary decision
program that are expressible in the base language 6 alone.               diagram (BDD) [8], where the inner nodes are the atomic predicates
   The nine meta-entities of LIAM capture the core concepts under- used in the predicate definitions and the leaf nodes are labeled with
lying the various dispatching mechanisms, but at a finer granularity the actions to be executed. For each possible result of dispatch, the
than the concrete concepts found in high-level languages; one con- BDD has one leaf node. Figure 3 shows an example of such a dis-
crete concept often maps to a combination of LIAM’s core concepts. patch model with the atomic predicates x1 and x2 and the actions y1
Figure 2 shows the meta-entities in LIAM, which are implemented and y2 . For a detailed explanation of this model, we refer the reader
as abstract classes. Attachment, specialization, and predicate are an to [18].
exception to this rule, i.e., they are concrete classes, as they provide   The dispatch model is defined in such a way that an execution strat-
logical groupings of entities of the meta-model and cannot be refined.   egy can immediately be derived from it. The default execution strat-
The meta-entities are discussed in detail in [5, Chapter 3.2] .2         egy requires  that each concrete entity implementation provides a Java
   In short, an attachment corresponds to a unit of dispatch descrip- method implementing its semantics. It is possible to override the de-
tion. In terms of aspect-orientation (AO), this is a pointcut-advice fault strategy and implement an optimization strategy on a per atomic
                                                                         predicate basis, in a modular way. These strategies are extensively
1
  Some details presented in [7] are outdated, but it may nevertheless discussed in [5].
act as an introduction to the basic concepts.                              The approach allows to implement new concrete concepts modu-
2
  There, some meta-entities are named differently, but the structure of larly by refining the abstract class of a meta-entity. We have already
the meta-entities is the same. Therefore, the interested reader will be shown how to map the languages AspectJ, JAsCo, Compose*, Cae-
able to map the discussion to the new names.
                                         x1




                                 e
                                tru



                                              fals
                            x2




                                               e
                                  fa
                         true


                                    ls
                                      e
                         y1 , y 2        y1          y2


       Figure 3: A dispatch function’s evaluation strategy.

sarJ, and a simple domain-specific language to our meta-model [5].
By now, we have also developed mappings for the languages Mul-
tiJava [10], JPred [16], and ConSpec [4], which are, however, still
unpublished work.
   Important for the present paper is the fact that all concrete concepts
participating in a dispatch are expressed in a declarative and fine-        Figure 4: Linking of pointcut-advice and advised locations in
grained model. This model can thus be used to derive information            AJDT.
relevant to the different services of an IDE. Furthermore, the model
stays first-class during the execution of a program and can therefore       whose compilation has lead to a bytecode instruction, respectively in
easily support dynamic features of an IDE, e.g., debugging, profiling,      the case of LIAM to a model entity. The builder uses this informa-
or testing.                                                                 tion to establish links between source locations, as is stipulated by the
                                                                            AJDT abstract structure model.
                                                                               In the current version, input is hard-wired to the AspectJ compiler’s
3.    ALIA4J-BASED IDE SUPPORT                                              output. But since our architecture already provides a plug-in mech-
   So far, we have implemented a limited IDE integration for the            anism to provide input in different formats, a straight-forward exten-
ALIA4J mapping of AspectJ language. However, we aim at making               sion is to use this mechanism. Then, the same support can be provided
this support more general and support other languages, too. More-           for any language that can be mapped to our approach.
over, we aim at filling the gaps in our IDE support.                           While the above AJDT extension shows the feasibility of building
                                                                            static tool support based on our ALIA approach, we do not aim to
3.1    Cross References for AspectJ                                         extend the AJDT in our future research work. Instead, we will re-
   For the AspectJ language, we have implemented a nearly complete          implement similar support, including an AJDT-like structure model
integration with our architecture. All necessary LIAM entities are          and related views, by directly extending the Java Development Tools
implemented and we have developed an automatic importer compo-              (JDT). This is necessary because the AJDT and the structure model
nent which allows to execute AspectJ programs on an FIAL-based              are hard-linked to the AspectJ compiler, a dependency that we would
execution environment while developing it in the standard AJDT. The         rather avoid. Furthermore, we have already outlined that there are
benefit of this integration is that some FIAL-based execution envi-         commonalities between the cross references view and, e.g., the call
ronments perform sophisticated dynamic optimizations which make             hierarchy of methods explicitly called. Since both concepts, explicit
AspectJ programs execute faster than the product of the standard com-       and implicit calls, are unified in our architecture, we like to provide
piler [6].                                                                  IDE support for both in the same way. The developer will benefit
   Because we bypass the weaving phase of the AspectJ compiler in           from such unified tools, because he will see all contributors to a call
this approach, pointcuts are not evaluated at compile time anymore.         at the same time.
Thus, the compiler also cannot determine the crosscutting structure
of the aspects which would normally be used by the IDE to show,
e.g., in the “Cross References” view, or which would be used to facil-
itate navigation between advised join point shadows and their advice,       3.2    Debugging Support
as depicted in Figure 4. To restore the accustomed functionality, we           The debugging support we envision will be based on the availabil-
have developed an extension to the AJDT that provides the crosscut-         ity of our declarative dispatch model at runtime. For example, this
ting structure when compiling AspectJ applications for execution on a       makes it possible to visualize the dispatch model for a call at a break-
FIAL-based execution environment, i.e., without compile-time weav-          point. The dispatch model is complete in the sense that it specifies on
ing. This comprises an instantiation of the FIAL framework which is,        which runtime values the dispatch depends and which predicates are
however, not integrated in a Java Virtual Machine like a full-fledged       evaluated on these values. While the model, naturally, only specifies
FIAL-based execution environment. Instead of providing FIAL with            the role of values that are used (e.g., “the first argument value”), in a
dynamic information about generic-function calls, it provides static        debugger, also the value can be shown. This is already done by mod-
approximations of call sites. Our framework then evaluates all pat-         ern debuggers, e.g., in the “Variables” view of the Eclipse debugger.
terns in the LIAM models of the AspectJ project and builds the dis-         In contrast to general-purpose debuggers, our debugger for advanced
patch model for each call site. Afterwards, for dispatch models which       dispatch will only show values relevant for the dispatch, and associate
are not trivial, i.e., where no advice is attached, the links are estab-    them to their role names.
lished in AJDT’s abstract structure model.                                     Another contribution that results from using the ALIA approach
   To support this work, the LIAM meta-entities are extended to also        to enable debugging is that dispatch declarations defined in different
store the location in the source code where they are defined. This is       languages can be combined. Since all dispatch declarations (pointcut-
similar to the debug information present in Java bytecode. This de-         advice, multi-methods, etc.) are mapped to the same meta-model,
bug information facilitates recovery of the file name and line number       i.e., to LIAM, the actions resulting from these declarations can be
                                                                               Nevertheless, we envision to increase the provided information in
                                                                            several ways. First, it is interesting to specify not only that an ad-
                                                                            vice is conditional but also, what the condition is. Next, presenting a
                                                                            sequential list of advice is too limited because some languages sup-
                                                                            port more complex relations between advice at a join-point shadow.
                                                                            AspectJ, e.g., already provides “around” advice which can be nested;
                                                                            thus, a tree would be more suitable to present this information. Other
                                                                            languages allow to define more complex relationships between advice
                                                                            at a shared join-point shadow. Examples are mutual exclusion or con-
                                                                            ditional execution in Compose*, or overriding in JPred and MultiJava.
                                                                               The dispatch model, explained in some detail in the previous sub-
                                                                            section, can also be made available before runtime. A visualization
                                                                            of the cross references can, thus, take all information in the dispatch
                                                                            model into account. This includes the exact specification of the condi-
Figure 5: An idea of the GUI for generic debugging support for              tion under which an action is applicable at a call, dispatch declarations
multiple advanced-dispatching languages.                                    sharing the call site and relationships (order, execution constraints,
                                                                            etc.) among them.
executed alongside. That means that, e.g., calls to multi-methods can          Since the implementation of our architecture, i.e., FIAL and LIAM,
be advised.                                                                 is very modular, it is also easily possible to make part of their im-
   Figure 5 illustrates the envisioned visualization in debugger. At the    plementation interactive. A possible use is making pattern matching
top of the figure, three editors are shown. The editor at the left-hand     interactive in order to debug patterns. The AJDT shows the devel-
side shows Java code calling the method C.m(A) in line 7; at this line,     oper in which places pointcuts match, but in some cases, developers
a breakpoint is set. At the right-hand side, the top editor shows an        of pointcut-advice may wonder why a specific pointcut (respectively
AspectJ pointcut-advice and the bottom editor shows a multi-method          the pattern used in a pointcut) does or does not match. Since the def-
defined in MultiJava. Both dispatch declarations define a dynamic           inition of specializations (the equivalent to pointcuts in AspectJ) and
constraint on the first argument: Only when this is of type B, the          the call sites are available first-class in FIAL, it is possible to perform
advice is to be executed, respectively, the multi-method applies. In        the evaluation, e.g., for a specific call site, and show the developer
this case, the multi-method overrides the Java method definition.           the different steps in the evaluation. This is similar to the debugging
   The bottom part of Figure 5 shows a possible visualization of the        support for dispatch functions, but can be performed before runtime.
(simplified) dispatch model for the call at the breakpoint. The dis-
patch function is simple and only contains one atomic predicate, which      4.    RELATED WORK AND FUTURE WORK
tests the type of a context value, in the example that of the first argu-      Eaddy et al. [13] have identified several requirements for debug-
ment. The bold elements show the path which the evaluation actu-            ging aspect-oriented programs. They support source-level debugging
ally has followed. The bold solid arrow emerging from the predi-            by deferring the weaving to runtime, as in our approach. It is thus
cate indicates that it has been satisfied, therefore, the actions in the    possible to view the definition of pointcut-advice that have lead to the
bold box are to be executed as the dispatch’s result, i.e., the actions     execution of a specific statement. In contrast to our approach, the dis-
Logger.before1 and handleB.m(B). If the predicate was satisfied, the
                                                                            patch function is not represented in a structured declarative way, but
action C.m(A) would be executed.                                            only by the imperative code resulting from the pointcut-advice defi-
   In a graphical debugger as proposed here, the user can select and        nitions. Thus, the dynamic program state that has lead to executing
introspect entities that participate in the dispatch at which the virtual   or not executing an advice is more difficult to determine for the de-
machine is currently suspended. In the figure, the TypePredicate is         veloper. Furthermore, the original definition of an aspect (or dispatch
selected. The selection in the editors showing the AspectJ and Mul-         declaration) is not presented. Therefore, constraints among advice
tiJava code highlights the code which has led to this predicate in the      sharing this join-point shadow are not easily visible, and, thus, cannot
dispatch function. The “Variables” view shows the runtime values on         be easily debugged.
which the current selection depends, i.e., the first argument value. As        Pothier et al. [17] discuss a retrospective debugging approach for
can be seen, this is an instance of B and therefore, the predicate is       aspect-oriented programs. They record a complete execution trace
satisfied.                                                                  that can be inspected after the execution. While this is not the kind
   As outlined above, the entities in the dispatch model can be linked      of debugging that we will support, we will nevertheless take inspira-
to multiple source locations. The result of single atomic predicates in     tion from their work in order to present AO-specific visualization of
the dispatch function can be presented, which explains the result of        debugging information.
the dispatch. Potentially, it will be advantageous not to completely           De Borger at al. [11] define an architecture for implementing de-
evaluate the dispatch function and let the developer view the result        buggers for aspect-oriented languages. This architecture is based on a
afterward, but to allow a step-wise evaluation of the dispatch function.    structurally reflective model of aspect definitions. For each aspect that
We will investigate both approaches.                                        is active during the program’s execution, its structure can be queried
                                                                            by means of this model. It is possible to determine the executions of
3.3    Additional Ideas                                                     advice, which are caused by a pointcut, including executions in the
   The AJDT provides the developer with more detailed information           past and in the future. Their model is meant to be an API used by a
than just “these advice apply to this join-point shadow”. It already        debugger front-end and offers some infrastructure required by debug-
includes additional information by specifying whether the join-point        gers, e.g., to enable aspect-specific breakpoints.
shadow is always affected by an advice or only sometimes because               Our underlying model is more fine-grained and provides more in-
there is a dynamic pointcut designator in the matching pointcut. Also,      formation: constraints among aspects like precedence are not avail-
when showing the applicable advice, the AJDT orders them according          able through the reflective API. Nevertheless, we plan to investigate
to their precedence.                                                        whether their work can be used as an interface for our approach. It
may be possible that our back-end, i.e., a FIAL-based execution envi-      successfully mapped AspectJ’s inter-type member declarations to our
ronment, can be used as an implementation of their API. Should we          approach; in fact, the example used in section Section 3.2 uses the
follow this path, we aim to contribute additional functionality to the     open classes feature of MultiJava, which is equivalent to inter-type
API which can be provided by means of our back-end. Similarly, the         member declarations.
IDE integration of debugging that we envision, may be implementable
with their API as back-end.                                                6.   ACKNOWLEDGMENTS
   The IDE Meta-tooling Platform (IMP) [2] is an Eclipse project aim-
                                                                             We would like to thank all contributors to the ALIA4J project. In
ing at providing meta-implementations of typical IDE tools. Exam-
                                                                           particular, our thanks go to Jannik Jochem, who developed the inte-
ples are a re-usable infrastructure for syntax highlighting, refactoring
                                                                           gration of ALIA4J with the AJDT.
support, semantic or static analyses, execution and debugging. Their
focus is on providing an infrastructure for the IDE integration and
the graphical user interface, but not on providing an infrastructure for   7.   REFERENCES
the runtime part of actual debugger implementations. Nevertheless,          [1] The Dynamic Language Toolkit.
we will consider to integrate our work with this project. Potentially,          http://eclipse.org/dltk/, 2010.
the LIAM meta-model can act as re-usable abstract syntax tree for           [2] The IDE Meta-tooling Platform.
dispatch declarations in the IMP. We hope to be able to re-use compo-           http://eclipse.org/imp/, 2010.
nents for the more static IDE support like the visualization of implicit    [3] The Textual Modeling Framework.
and explicit calls.                                                             http://eclipse.org/xtext/, 2010.
   There are other Eclipse projects into which we may integrate our         [4] I. Aktug and K. Naliuka. ConSpec: A formal language for
envisioned work. The first option is the Dynamic Languages Toolkit              policy specification. In Proceedings of REM. Elsevier Science
(DLTK) [1] which is a collection of frameworks to minimize the ef-              Publishers B. V., 2008.
fort of developing IDEs for dynamic languages. The second option is
                                                                            [5] C. Bockisch. An Efficient and Flexible Implementation of
the Textual Modeling Framework (Xtext) [3] which is a framework
                                                                                Aspect-Oriented Languages. PhD thesis, Technische
for generating full-fledged Eclipse text editors from grammars for
                                                                                Universität Darmstadt, 2009.
domain-specific languages, including an abstract source code model.
                                                                            [6] C. Bockisch, S. Kanthak, M. Haupt, M. Arnold, and M. Mezini.
                                                                                Efficient control flow quantification. In Proceedings of
5.    CONCLUSION                                                                OOPSLA. ACM Press, 2006.
   In the suggested research work, we aim at providing a generic im-        [7] C. Bockisch and M. Mezini. A flexible architecture for
plementation of IDE support, most importantly containing debugging              pointcut-advice language implementations. In Proceedings of
support, for advanced-dispatching programming languages. We will                VMIL, New York, NY, USA, 2007. ACM.
build this support on the FIAL framework and the LIAM meta-model            [8] R. E. Bryant. Graph-based algorithms for Boolean function
(part of the ALIA architecture for Java), which provide a first-class,          manipulation. IEEE Transactions on Computers, C-35, 1986.
declarative model of all dispatches in a program. We have mapped            [9] C. Chambers. Object-oriented multi-methods in cecil. In
the aspect-oriented languages AspectJ, CaesarJ, Compose*, JAsCo,                Proceedings of ECOOP. Springer Verlag, 1992.
the predicate-dispatching languages JPred and MultiJava, and other
                                                                           [10] C. Chambers and W. Chen. Efficient multiple and predicated
languages to this model. All mapped languages will thus be able to
                                                                                dispatching. In Proceedings of OOPSLA. ACM, 1999.
directly benefit from the IDE support we aim to provide.
                                                                           [11] W. De Borger, B. Lagaisse, and W. Joosen. A generic and
   The IDE support will primarily consist of a navigable visualization
                                                                                reflective debugging architecture to support runtime visibility
of explicit as well as implicit calls (the former are used in predicate
                                                                                and traceability of aspects. In Proceedings of AOSD. ACM,
dispatching, the latter in pointcut-advice languages), and of debug-
                                                                                2009.
ging support. Both kinds of IDE integration will be driven by the
declarative, first-class dispatch model available in ALIA. Since ALIA      [12] A. de Roo, M. Hendriks, W. Havinga, P. Dürr, and
facilitates the execution of dispatch declarations written in different         L. Bergmans. Compose*: a language- and
languages, all such dispatch declarations can be executed in one pro-           platform-independent aspect compiler for composition filters.
gram run alongside; similarly, the debugging support we envision will           In Proceedings of WASDeTT, 2008.
be able to debug all such declarations at the same time. It will fa-       [13] M. Eaddy, A. V. Aho, W. Hu, P. McDonald, and J. Burger.
cilitate to jump to the source code defining the dispatch declaration,          Debugging aspect-enabled programs. In Software Composition.
and it will to show all execution steps leading to a specific dispatch-         Springer, 2007.
ing result. We will investigate similar support for reasoning about        [14] M. Ernst, C. Kaplan, and C. Chambers. Predicate dispatching:
the evaluation of patterns used in pointcut-advice, respectively for the        A unified theory of dispatch. In Proceedings of ECOOP.
composition of actions applicable at the same call site.                        Springer Verlag, 1998.
   Providing such IDE support that will work “out of the box” will         [15] H. Masuhara and G. Kiczales. Modeling crosscutting in
increase the acceptance of new programming languages which offer                aspect-oriented mechanisms. In Proceedings of ECOOP.
sophisticated composition mechanisms by means of dispatch decla-                Springer Verlag, 2003.
rations. The envisioned IDE support will make the effects of apply-        [16] T. Millstein, C. Frost, J. Ryder, and A. Warth. Expressive and
ing advanced composition mechanisms to a program more obvious                   modular predicate dispatch for Java. ACM Transactions on
to developers, which will help them to learn such new mechanisms.               Programming Languages and Systems, 31(2), 2009.
ALIA’s ability to execute programs written in different languages with     [17] G. Pothier and E. Tanter. Extending omniscient debugging to
different composition primitives and the resulting IDE support, will            support aspect-oriented programming. In In Proceedings of
give developers the free choice of combining different languages and            SAC. ACM, 2008.
benefit from all their features. We would also like to note that many      [18] A. Sewe, C. Bockisch, and M. Mezini. Redundancy-free
composition mechanisms which do not obviously map to a dispatch-                residual dispatch. In Proceedings of FOAL. ACM, 2008.
ing problem can still be handled by our architecture. For example, we