Altering Java Semantics via Bytecode Manipulation
read more
Citations
An overview of AspectJ
An easy-to-use toolkit for efficient Java bytecode translators
Advanced Java bytecode instrumentation
Partial behavioral reflection: spatial and temporal selection of reification
Web cache prefetching as an aspect: towards a dynamic-weaving based solution
References
Design Patterns: Elements of Reusable Object-Oriented Software
Aspect-oriented programming
Smalltalk-80: The Language and its Implementation
An overview of AspectJ
An Overview of AspectJ
Related Papers (5)
Frequently Asked Questions (9)
Q2. What is the only thing Jinline can do systematically?
Jinline only takes care of wrapping and unwrapping primitive types and exceptions, which is actually the only thing it can do systematically.
Q3. What is the function that is responsible for inlining a method?
For the inlining part, a MethodParser is responsible for parsing a method body and notifying the appropriate Jinlers whenever needed.
Q4. What is the purpose of the paper?
The purpose of the work the authors present in this paper is to provide a tool enabling such alterations with the appropriate level of abstraction.
Q5. What is the main drawback of a runtime MOP?
Compared to static transformation systems – such as macro systems, inlining systems, and compile-time MOPs –, where the link between the modifier and the modified entity is merged at some point, runtime MOPs maintain this link, known as the causal connection link [14,15], at run time, thus enabling dynamic updates of this link at the expense of a certain overhead.
Q6. What is the main drawback of Javassist?
Since Javassist lacks semantic information in the process of modifying bytecode (remember that Javassist does not reify bytecode instructions as such), the possible transformations are limited.
Q7. What is the purpose of inlined code?
In addition to this, choosing to inline methods provides us with a natural way to pass dynamic information at run time to the inlined piece of code: all relevant information is packed and passed as argument of the inlined method.
Q8. What is the only possible replacement for the factory method?
The only possible replacement is:new Point(1, 2); =⇒ Factory.getPoint(1, 2);The following issues come to light:– First, the name of the instantiated class is not passed as a parameter, which implies that the authors need a method per class (a getPointmethod, a getTriangle method, etc.).
Q9. What is the initialization work for the Jinler?
The initialization work in this case simply consists of telling the Jinliner that it should notify the Jinler upon occurrences of constructor sends (1).