Class Callback


  • public abstract class Callback
    extends java.lang.Object
    Creates bytecode that when executed calls back to the instance's result method.

    Example of how to create and insert a callback:

     ctMethod.insertAfter(new Callback("Thread.currentThread()") {
         public void result(Object[] objects) {
             Thread thread = (Thread) objects[0];
             // do something with thread...
         }
     }.sourceCode());
     

    Contains utility methods for inserts callbacks in CtBehaviour, example:

     insertAfter(ctBehaviour, new Callback("Thread.currentThread(), dummyString") {
         public void result(Object[] objects) {
             Thread thread = (Thread) objects[0];
             // do something with thread...
         }
     });
     
    Author:
    Marten Hedborg, Shigeru Chiba
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.util.Map<java.lang.String,​Callback> callbacks  
    • Constructor Summary

      Constructors 
      Constructor Description
      Callback​(java.lang.String src)
      Constructs a new Callback object.
    • Field Detail

      • callbacks

        public static java.util.Map<java.lang.String,​Callback> callbacks
    • Constructor Detail

      • Callback

        public Callback​(java.lang.String src)
        Constructs a new Callback object.
        Parameters:
        src - The source code representing the inserted callback bytecode. Can be one or many single statements each returning one object. If many single statements are used they must be comma separated.
    • Method Detail

      • result

        public abstract void result​(java.lang.Object[] objects)
        Gets called when bytecode is executed
        Parameters:
        objects - Objects that the bytecode in callback returns
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • sourceCode

        public java.lang.String sourceCode()
      • insertAfter

        public static void insertAfter​(CtBehavior behavior,
                                       Callback callback,
                                       boolean asFinally)
                                throws CannotCompileException
        Utility method to inserts callback at the end of the body. The callback is inserted just before every return instruction. It is not executed when an exception is thrown.
        Parameters:
        behavior - The behaviour to insert callback in
        callback - The callback representing the inserted.
        asFinally - True if the inserted is executed Not only when the control normally returns but also when an exception is thrown. If this parameter is true, the inserted code cannot access local variables.
        Throws:
        CannotCompileException
        See Also:
        CtBehavior.insertAfter(String, boolean)
      • insertAt

        public static int insertAt​(CtBehavior behavior,
                                   Callback callback,
                                   int lineNum)
                            throws CannotCompileException
        Utility method to inserts callback at the specified line in the body.
        Parameters:
        behavior - The behaviour to insert callback in
        callback - The callback representing.
        lineNum - The line number. The callback is inserted at the beginning of the code at the line specified by this line number.
        Returns:
        The line number at which the callback has been inserted.
        Throws:
        CannotCompileException
        See Also:
        CtBehavior.insertAt(int, String)