Advertisement

abc : An Extensible AspectJ Compiler

  • Pavel Avgustinov
  • Aske Simon Christensen
  • Laurie Hendren
  • Sascha Kuzins
  • Jennifer Lhoták
  • Ondřej Lhoták
  • Oege de Moor
  • Damien Sereni
  • Ganesh Sittampalam
  • Julian Tibble
Part of the Lecture Notes in Computer Science book series (LNCS, volume 3880)

Abstract

Research in the design of aspect-oriented programming languages requires a workbench that facilitates easy experimentation with new language features and implementation techniques. In particular, new features for AspectJ have been proposed that require extensions in many dimensions: syntax, type checking and code generation, as well as data flow and control flow analyses. The AspectBench Compiler (abc) is an implementation of such a workbench. The base version of abc implements the full AspectJ language. Its front end is built using the Polyglot framework, as a modular extension of the Java language. The use of Polyglot gives flexibility of syntax and type checking. The back end is built using the Soot framework, to give modular code generation and analyses. In this paper, we outline the design of abc, focusing mostly on how the design supports extensibility. We then provide a general overview of how to use abc to implement an extension. We illustrate the extension mechanisms of abc through a number of small, but nontrivial, examples. We then proceed to contrast the design goals of abc with those of the original AspectJ compiler, and how these different goals have led to different design decisions. Finally, we review a few examples of projects by others that extend abc in interesting ways.

Keywords

Intermediate Representation Java Code Advice Body Java Source Code Java Compiler 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  1. 1.
    abc. The AspectBench Compiler. Home page with downloads, FAQ, documentation, support mailing lists, and bug database (2006), http://aspectbench.org (Cited 1 February 2006)
  2. 2.
    Aldrich, J.: Open modules: Modular reasoning about advice. In: Black, A.P. (ed.) ECOOP 2005. LNCS, vol. 3586, pp. 144–168. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  3. 3.
    Aotani, T., Masuhara, H.: Compiling conditional pointcuts for user-level semantic pointcuts. In: Proceedings of the SPLAT workshop at AOSD 2005 (2005), http://www.daimi.au.dk/~eernst/splat05/
  4. 4.
    AspectJ bug database. Wrong variable binding in || pointcuts (2004), https://bugs.eclipse.org/bugs/show_bug.cgi?id=61568
  5. 5.
    AspectJ bug database. ITD on inner class: missing accessor method (2005), https://bugs.eclipse.org/bugs/show_bug.cgi?id=73856
  6. 6.
    Avgustinov, P., Christensen, A.S., Hendren, L., Kuzins, S., Lhoták, J., Lhoták, O., de Moor, O., Sereni, D., Sittampalam, G., Tibble, J.: abc: An extensible AspectJ compiler. In: Tarr, P. (ed.) AOSD 2005: 4th International Conference on Aspect-Oriented Software Development, ACM, New York (2005)Google Scholar
  7. 7.
    Avgustinov, P., Christensen, A.S., Hendren, L., Kuzins, S., Lhoták, J., Lhoták, O., de Moor, O., Sereni, D., Sittampalam, G., Tibble, J.: Optimising AspectJ. In: Sarkar, V., Hall, M.W. (eds.) PLDI 2005: ACM SIGPLAN Conference on Programming Language Design and Implementation, pp. 117–128. ACM, New York (2005)CrossRefGoogle Scholar
  8. 8.
    Bonér, J.: AspectWerkz — dynamic AOP for Java (2004), http://codehaus.org/~jboner/papers/aosd2004_aspectwerkz.pdf
  9. 9.
    Brukman, M., Myers, A.C.: PPG: a parser generator for extensible grammars (2003), http://www.cs.cornell.edu/Projects/polyglot/ppg.html
  10. 10.
    Chiba, S., Nakagawa, K.: Josh: an open AspectJ-like language. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 102–111 (2004)Google Scholar
  11. 11.
    Chiba, S., Nishizawa, M.: An Easy-to-Use Toolkit for Efficient Java Bytecode Translators. In: Pfenning, F., Smaragdakis, Y. (eds.) GPCE 2003. LNCS, vol. 2830, pp. 364–376. Springer, Heidelberg (2003)CrossRefGoogle Scholar
  12. 12.
    Colyer, A., Clement, A.: Large-scale AOSD for middleware. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 56–65. ACM, New York (2004)Google Scholar
  13. 13.
    De Volder, K.: Aspect-oriented logic meta programming. In: Cointe, P. (ed.) Reflection 1999. LNCS, vol. 1616, pp. 250–272. Springer, Heidelberg (1999)CrossRefGoogle Scholar
  14. 14.
    Douence, R., Fradet, P., Südholt, M.: Composition, reuse and interaction analysis of stateful aspects. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 141–150. ACM, New York (2004)Google Scholar
  15. 15.
    Douence, R., Fradet, P., Südholt, M.: Trace-based aspects. In: Filman, R., Elrad, T., Clarke, S., Akşit, M. (eds.) Aspect-Oriented Software Development. Addison-Wesley, Reading (2004)Google Scholar
  16. 16.
    Dufour, B., Goard, C., Hendren, L., de Moor, O., Sittampalam, G., Verbrugge, C.: Measuring the dynamic behaviour of AspectJ programs. In: Proceedings of the 19th ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications, pp. 150–169. ACM, New York (2004)CrossRefGoogle Scholar
  17. 17.
    Dutchyn, C., Kiczales, G., Masuhara, H.: Tutorial: AOP language exploration using the Aspect Sand Box. In: Kiczales, G. (ed.) AOSD 2002: 1st International Conference on Aspect-Oriented Software Development, ACP (2002)Google Scholar
  18. 18.
    Eichberg, M., Mezini, M., Ostermann, K.: Pointcuts as functional queries. In: Chin, W.-N. (ed.) APLAS 2004. LNCS, vol. 3302, pp. 366–381. Springer, Heidelberg (2004)CrossRefGoogle Scholar
  19. 19.
    Ekman, T., Hedin, G.: Rewritable reference attributed grammars. In: Odersky, M. (ed.) ECOOP 2004. LNCS, vol. 3086, pp. 147–171. Springer, Heidelberg (2004)CrossRefGoogle Scholar
  20. 20.
    Gagnon, E., Hendren, L.J., Marceau, G.: Efficient Inference of Static Types for Java Bytecode. In: Palsberg, J. (ed.) SAS 2000. LNCS, vol. 1824, pp. 199–220. Springer, Heidelberg (2000)CrossRefGoogle Scholar
  21. 21.
    Grove, D., DeFouw, G., Dean, J., Chambers, C.: Call graph construction in object-oriented languages. In: Bloom, T. (ed.) OOPSLA: ACM Conference on Object-Oriented Programming Systems, Languages and Applications, pp. 108–124. ACM, New York (1997)CrossRefGoogle Scholar
  22. 22.
    Gybels, K., Brichau, J.: Arranging language features for more robust pattern-based crosscuts. In: Akşit, M. (ed.) AOSD 2003: 2nd International Conference on Aspect-Oriented Software Development, pp. 60–69. ACM, New York (2003)Google Scholar
  23. 23.
    Hanenberg, S., Unland, R.: Parametric introductions. In: Akşit, M. (ed.) AOSD 2003: 2nd International Conference on Aspect-Oriented Software Development, pp. 80–89. ACM, New York (2003)Google Scholar
  24. 24.
    Hanson, D., Proebsting, T.: A research C# compiler. Software — Practice and Experience 34(13), 1211–1224 (2004)CrossRefGoogle Scholar
  25. 25.
    Harbulot, B., Gurd, J.R.: Using AspectJ to separate concerns in parallel scientific Java code. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 122–131. ACM, New York (2004)Google Scholar
  26. 26.
    Harbulot, B., Gurd, J.R.: A joinpoint for loops in AspectJ. In: Clifton, C., Lämmel, R., Leavens, G.T. (eds.) FOAL 2005: Foundations of Aspect-Oriented Languages, pp. 11–20 (2005); Technical report 05-05, Department of Computer Science, Iowa State University, http://www.cs.iastate.edu/~leavens/FOAL/index-2005.shtml
  27. 27.
    Hilsdale, E., Hugunin, J.: Advice weaving in AspectJ. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 26–35. ACM, New York (2004)Google Scholar
  28. 28.
    Hugunin, J.: Guide for developers of the AspectJ compiler and weaver (2004), http://dev.eclipse.org/viewcvs/index.cgi/
  29. 29.
    Kiczales, G.: The fun has just begun. Keynote address at AOSD (2003), Available at: aosd.net/archive/2003/kiczales-aosd-2003.ppt
  30. 30.
    Krishnamurthi, S., Fisler, K., Greenberg, M.: Verifying aspect advice modularly. In: Taylor, R.N., Dwyer, M.B. (eds.) ACM SIGSOFT International Symposium on the Foundations of Software Engineering, pp. 137–146 (2004)Google Scholar
  31. 31.
    Masuhara, H., Kawauchi, K.: Dataflow Pointcut in Aspect-Oriented Programming. In: Ohori, A. (ed.) APLAS 2003. LNCS, vol. 2895, pp. 105–121. Springer, Heidelberg (2003)CrossRefGoogle Scholar
  32. 32.
    Masuhara, H., Kiczales, G., Dutchyn, C.: A Compilation and Optimization Model for Aspect-Oriented Programs. In: Hedin, G. (ed.) CC 2003. LNCS, vol. 2622, pp. 46–60. Springer, Heidelberg (2003)CrossRefGoogle Scholar
  33. 33.
    Miecznikowski, J., Hendren, L. J.: Decompiling Java Bytecode: Problems, Traps and Pitfalls. In: Horspool, R.N. (ed.) CC 2002. LNCS, vol. 2304, pp. 111–127. Springer, Heidelberg (2002)CrossRefGoogle Scholar
  34. 34.
    Millstein, T.: Practical predicate dispatch. In: Vlissides, J.M., Schmidt, D.C. (eds.) OOPSLA 2004: Conference on Object-oriented Programming, Systems, Languages and Applications, pp. 345–364. ACM, New York (2004)Google Scholar
  35. 35.
    Millstein, T., Reay, M., Chambers, C.: Relaxed MultiJava: Balancing extensibility and modular typechecking. In: Crocker, R., Steel Jr., G.L. (eds.) OOPSLA 2003: Conference on Object-Oriented Programming, Systems, Languages and Applications, pp. 224–240. ACM, New York (2003)Google Scholar
  36. 36.
    Nishizawa, M., Chiba, S., Tatsubori, M.: Remote pointcut — a language construct for distributed AOP. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 7–15. ACM, New York (2004)Google Scholar
  37. 37.
    Nystrom, N., Clarkson, M.R., Myers, A.C.: Polyglot: An Extensible Compiler Framework for Java. In: Hedin, G. (ed.) CC 2003. LNCS, vol. 2622, pp. 138–152. Springer, Heidelberg (2003)CrossRefGoogle Scholar
  38. 38.
    Ossher, H., Tarr, P.: Hyper/J: multi-dimensional separation of concerns for java. In: 22nd International Conference on Software Engineering, pp. 734–737 (2000)Google Scholar
  39. 39.
    Sakurai, K., Masuhara, H., Ubayashi, N., Matsuura, S., Komiya, S.: Association aspects. In: Lieberherr, K. (ed.) AOSD 2004: 3rd International Conference on Aspect-Oriented Software Development, pp. 16–25. ACM, New York (2004)Google Scholar
  40. 40.
    Sereni, D., de Moor, O.: Static analysis of aspects. In: Akşit, M. (ed.) AOSD 2003: Proceedings of the 2nd International Conference on Aspect-Oriented Software Development, pp. 30–39. ACM Press, New York (2003)Google Scholar
  41. 41.
    Skotiniotis, T., Lorenz, D.H.: Cona: Aspects for Contracts and contracts for aspects. In: OOPSLA 2004: Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications, pp. 196–197. ACM, New York (2004)CrossRefGoogle Scholar
  42. 42.
    Stolz, V., Bodden, E.: Temporal Assertions using AspectJ. In: Fifth Workshop on Runtime Verification (RV 2005). Electronic Notes in Theoretical Computer Science. Elsevier Science Publishers, Amsterdam (2005)Google Scholar
  43. 43.
    Vallée-Rai, R., Gagnon, E.M., Hendren, L. J., Lam, P., Pominville, P., Sundaresan, V.: Optimizing Java Bytecode Using the Soot Framework: Is It Feasible? In: Watt, D.A. (ed.) CC 2000. LNCS, vol. 1781, pp. 18–34. Springer, Heidelberg (2000)CrossRefGoogle Scholar
  44. 44.
    De Volder, K.: The TyRuBa metaprogramming system, http://tyruba.sourceforge.net/
  45. 45.
    Walker, R., Viggers, K.: Implementing protocols via declarative event patterns. In: FSE-12: ACM Sigsoft International Symposium on Foundations of Software Engineering, pp. 159–169 (2004)Google Scholar
  46. 46.
    Zhao, J.: Slicing aspect-oriented software. In: 10th IEEE Workshop on Program Comprehension, pp. 251–260 (2002)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2006

Authors and Affiliations

  • Pavel Avgustinov
    • 1
  • Aske Simon Christensen
    • 2
  • Laurie Hendren
    • 3
  • Sascha Kuzins
    • 1
  • Jennifer Lhoták
    • 3
  • Ondřej Lhoták
    • 3
  • Oege de Moor
    • 1
  • Damien Sereni
    • 1
  • Ganesh Sittampalam
    • 1
  • Julian Tibble
    • 1
  1. 1.Programming Tools GroupOxford UniversityUnited Kingdom
  2. 2.BRICSUniversity of AarhusDenmark
  3. 3.Sable Research GroupMcGill UniversityMontrealCanada

Personalised recommendations