Bytecode Analysis for script: TestExample

        class TestExample {
    public static void main(String[] args) {
        'Hello World'
    }
}

      
Groovyc Indy Static
Lines Removed 4 4 4
Total Lines - Before 114 83 80
Percentage of Lines Removed 3.5 4.8 5.0

Benchmarks

For parameter: null

Groovyc Indy Static
Benchmark Average - Before 102 99 99
Benchmark Average - After 100 100 100
Benchmark Std Dev - Before 2.26 2.13 1.49
Benchmark Std Dev - After 2.14 1.98 2.3

BEFORE

Groovyc (Legacy)

          Compiled from "TestExample.groovy"
public class TestExample implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public TestExample();
    Code:
       0: aload_0
       1: invokespecial #17                 // Method java/lang/Object."<init>":()V
       4: invokestatic  #21                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       7: astore_1
       8: aload_0
       9: invokevirtual #25                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      12: astore_2
      13: aload_2
      14: aload_0
      15: swap
      16: putfield      #27                 // Field metaClass:Lgroovy/lang/MetaClass;
      19: aload_2
      20: pop
      21: return

  public static void main(java.lang.String...);
    Code:
       0: invokestatic  #21                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_1
       4: ldc           #33                 // String Hello World
       6: pop
       7: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #39                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class TestExample
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #45                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #47                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #39                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #53                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #47                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #56                 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn

  public groovy.lang.MetaClass getMetaClass();
    Code:
       0: aload_0
       1: getfield      #27                 // Field metaClass:Lgroovy/lang/MetaClass;
       4: dup
       5: ifnull        9
       8: areturn
       9: pop
      10: aload_0
      11: dup
      12: invokevirtual #25                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      15: putfield      #27                 // Field metaClass:Lgroovy/lang/MetaClass;
      18: aload_0
      19: getfield      #27                 // Field metaClass:Lgroovy/lang/MetaClass;
      22: areturn

  public void setMetaClass(groovy.lang.MetaClass);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #27                 // Field metaClass:Lgroovy/lang/MetaClass;
       5: return

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #61                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #66,  4           // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
      12: areturn

  public java.lang.Object getProperty(java.lang.String);
    Code:
       0: aload_0
       1: invokevirtual #61                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #71,  3           // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      11: areturn

  public void setProperty(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #61                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #76,  4           // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Invoke Dynamic

          Compiled from "TestExample.groovy"
public class TestExample implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public TestExample();
    Code:
       0: aload_0
       1: invokespecial #17                 // Method java/lang/Object."<init>":()V
       4: aload_0
       5: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
       8: astore_1
       9: aload_1
      10: aload_0
      11: swap
      12: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      15: aload_1
      16: pop
      17: return

  public static void main(java.lang.String...);
    Code:
       0: ldc           #29                 // String Hello World
       2: pop
       3: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #35                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class TestExample
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #41                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #43                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #35                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #49                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #43                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #52                 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn

  public groovy.lang.MetaClass getMetaClass();
    Code:
       0: aload_0
       1: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       4: dup
       5: ifnull        9
       8: areturn
       9: pop
      10: aload_0
      11: dup
      12: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      15: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      18: aload_0
      19: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      22: areturn

  public void setMetaClass(groovy.lang.MetaClass);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       5: return

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #59                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #62,  4           // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
      12: areturn

  public java.lang.Object getProperty(java.lang.String);
    Code:
       0: aload_0
       1: invokevirtual #59                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #67,  3           // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      11: areturn

  public void setProperty(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #59                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #72,  4           // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Static Compilation

          Compiled from "TestExample.groovy"
public class TestExample implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public TestExample();
    Code:
       0: aload_0
       1: invokespecial #17                 // Method java/lang/Object."<init>":()V
       4: aload_0
       5: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
       8: astore_1
       9: aload_1
      10: aload_0
      11: swap
      12: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      15: aload_1
      16: pop
      17: return

  public static void main(java.lang.String...);
    Code:
       0: ldc           #29                 // String Hello World
       2: pop
       3: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #35                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class TestExample
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #41                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #43                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #35                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #49                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #43                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #52                 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn

  public groovy.lang.MetaClass getMetaClass();
    Code:
       0: aload_0
       1: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       4: dup
       5: ifnull        9
       8: areturn
       9: pop
      10: aload_0
      11: dup
      12: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      15: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      18: aload_0
      19: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      22: areturn

  public void setMetaClass(groovy.lang.MetaClass);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       5: return

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #57                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #62,  4           // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
      12: areturn

  public java.lang.Object getProperty(java.lang.String);
    Code:
       0: aload_0
       1: invokevirtual #57                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #67,  3           // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      11: areturn

  public void setProperty(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #57                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #72,  4           // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

AFTER

Groovyc (Legacy)

          Compiled from "TestExample.groovy"
public class TestExample implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public TestExample();
    Code:
       0: aload_0
       1: invokespecial #19                 // Method java/lang/Object."<init>":()V
       4: invokestatic  #23                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       7: astore_1
       8: aload_0
       9: invokevirtual #27                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      12: astore_2
      13: aload_2
      14: aload_0
      15: swap
      16: putfield      #29                 // Field metaClass:Lgroovy/lang/MetaClass;
      19: return

  public static void main(java.lang.String...);
    Code:
       0: invokestatic  #23                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_1
       4: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #39                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class TestExample
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #45                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #47                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #39                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #53                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #47                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #56                 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn

  public groovy.lang.MetaClass getMetaClass();
    Code:
       0: aload_0
       1: getfield      #29                 // Field metaClass:Lgroovy/lang/MetaClass;
       4: dup
       5: ifnull        9
       8: areturn
       9: pop
      10: aload_0
      11: dup
      12: invokevirtual #27                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      15: putfield      #29                 // Field metaClass:Lgroovy/lang/MetaClass;
      18: aload_0
      19: getfield      #29                 // Field metaClass:Lgroovy/lang/MetaClass;
      22: areturn

  public void setMetaClass(groovy.lang.MetaClass);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #29                 // Field metaClass:Lgroovy/lang/MetaClass;
       5: return

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #61                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #66,  4           // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
      12: areturn

  public java.lang.Object getProperty(java.lang.String);
    Code:
       0: aload_0
       1: invokevirtual #61                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #71,  3           // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      11: areturn

  public void setProperty(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #61                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #76,  4           // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Invoke Dynamic

          Compiled from "TestExample.groovy"
public class TestExample implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public TestExample();
    Code:
       0: aload_0
       1: invokespecial #17                 // Method java/lang/Object."<init>":()V
       4: aload_0
       5: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
       8: astore_1
       9: aload_1
      10: aload_0
      11: swap
      12: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      15: return

  public static void main(java.lang.String...);
    Code:
       0: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #33                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class TestExample
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #39                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #41                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #33                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #47                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #41                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #50                 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn

  public groovy.lang.MetaClass getMetaClass();
    Code:
       0: aload_0
       1: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       4: dup
       5: ifnull        9
       8: areturn
       9: pop
      10: aload_0
      11: dup
      12: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      15: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      18: aload_0
      19: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      22: areturn

  public void setMetaClass(groovy.lang.MetaClass);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       5: return

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #57                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #60,  4           // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
      12: areturn

  public java.lang.Object getProperty(java.lang.String);
    Code:
       0: aload_0
       1: invokevirtual #57                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #65,  3           // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      11: areturn

  public void setProperty(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #57                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #70,  4           // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Static Compilation

          Compiled from "TestExample.groovy"
public class TestExample implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public TestExample();
    Code:
       0: aload_0
       1: invokespecial #17                 // Method java/lang/Object."<init>":()V
       4: aload_0
       5: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
       8: astore_1
       9: aload_1
      10: aload_0
      11: swap
      12: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      15: return

  public static void main(java.lang.String...);
    Code:
       0: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #33                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class TestExample
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #39                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #41                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #33                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #47                 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #41                 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #50                 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
      38: areturn

  public groovy.lang.MetaClass getMetaClass();
    Code:
       0: aload_0
       1: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       4: dup
       5: ifnull        9
       8: areturn
       9: pop
      10: aload_0
      11: dup
      12: invokevirtual #21                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      15: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      18: aload_0
      19: getfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
      22: areturn

  public void setMetaClass(groovy.lang.MetaClass);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #23                 // Field metaClass:Lgroovy/lang/MetaClass;
       5: return

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #55                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #60,  4           // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
      12: areturn

  public java.lang.Object getProperty(java.lang.String);
    Code:
       0: aload_0
       1: invokevirtual #55                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #65,  3           // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
      11: areturn

  public void setProperty(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #55                 // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #70,  4           // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}