Bytecode Analysis for script: threadring

        /*
 * The Computer Language Benchmarks Game
 * http://shootout.alioth.debian.org/
 *
 * contributed by Klaus Friedel
 * converted to Groovy by Danno Ferrin
 */

import java.util.concurrent.locks.LockSupport

class MessageThread extends Thread {
    MessageThread nextThread
    volatile Integer message

    MessageThread(MessageThread nextThread, int name) {
        super(name as String)
        this.nextThread = nextThread
    }

    void run() {
        while (true) nextThread.enqueue(dequeue())
    }

    void enqueue(Integer hopsRemaining) {
        if (hopsRemaining == 0) {
            println(getName())
            System.exit(0)
        }
        // as only one message populates the ring, it's impossible
        // that queue is not empty
        message = hopsRemaining - 1
        LockSupport.unpark(this) // work waiting...
    }

    private Integer dequeue() {
        while (message == null) {
            LockSupport.park()
        }
        Integer msg = message
        message = null
        return msg
    }
}
class threadring {
    public static void main(String[] args) {
        int THREAD_COUNT = 503

        int hopCount = args[0] as Integer

        MessageThread first
        MessageThread last
        (THREAD_COUNT..1).each {
            i ->
                first = new MessageThread(first, i)
                if (i == THREAD_COUNT) last = first
        }
// close the ring
        last.nextThread = first

// start all threads
        MessageThread t = first
        THREAD_COUNT.times {
            t.start()
            t = t.nextThread
        }

// inject message
        first.enqueue(hopCount)
        first.join() // wait for System.exit
    }
}

      
Groovyc Indy Static
Lines Removed 32 30 48
Total Lines - Before 1142 803 668
Percentage of Lines Removed 2.8 3.7 7.2

Benchmarks

For parameter: 1

Groovyc Indy Static
Benchmark Average - Before 479 553 376
Benchmark Average - After 481 553 376
Benchmark Std Dev - Before 9.16 15.27 7.42
Benchmark Std Dev - After 10.2 16.27 6.82

BEFORE

Groovyc (Legacy)

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

  public threadring();
    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: sipush        503
       7: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      10: new           #39                 // class groovy/lang/Reference
      13: dup_x1
      14: swap
      15: invokespecial #42                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
      18: astore_2
      19: aload_2
      20: pop
      21: ldc           #43                 // int 0
      23: istore_3
      24: invokestatic  #49                 // Method org/codehaus/groovy/runtime/BytecodeInterface8.isOrigInt:()Z
      27: ifeq          45
      30: getstatic     #51                 // Field __$stMC:Z
      33: ifne          45
      36: invokestatic  #54                 // Method org/codehaus/groovy/runtime/BytecodeInterface8.disabledStandardMetaClass:()Z
      39: ifne          45
      42: goto          81
      45: aload_1
      46: ldc           #43                 // int 0
      48: aaload
      49: aload_0
      50: iconst_0
      51: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      54: invokeinterface #60,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      59: ldc           #33                 // class java/lang/Integer
      61: invokestatic  #66                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.asType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      64: checkcast     #33                 // class java/lang/Integer
      67: astore        4
      69: aload         4
      71: invokevirtual #70                 // Method java/lang/Integer.intValue:()I
      74: istore_3
      75: aload         4
      77: pop
      78: goto          105
      81: aload_0
      82: iconst_0
      83: invokestatic  #74                 // Method org/codehaus/groovy/runtime/BytecodeInterface8.objectArrayGet:([Ljava/lang/Object;I)Ljava/lang/Object;
      86: ldc           #33                 // class java/lang/Integer
      88: invokestatic  #66                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.asType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      91: checkcast     #33                 // class java/lang/Integer
      94: astore        5
      96: aload         5
      98: invokevirtual #70                 // Method java/lang/Integer.intValue:()I
     101: istore_3
     102: aload         5
     104: pop
     105: aconst_null
     106: new           #39                 // class groovy/lang/Reference
     109: dup_x1
     110: swap
     111: invokespecial #42                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
     114: astore        6
     116: aload         6
     118: invokevirtual #78                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     121: checkcast     #80                 // class MessageThread
     124: pop
     125: aconst_null
     126: new           #39                 // class groovy/lang/Reference
     129: dup_x1
     130: swap
     131: invokespecial #42                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
     134: astore        7
     136: aload         7
     138: invokevirtual #78                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     141: checkcast     #80                 // class MessageThread
     144: pop
     145: aload_1
     146: ldc           #81                 // int 1
     148: aaload
     149: aload_2
     150: invokevirtual #78                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     153: checkcast     #33                 // class java/lang/Integer
     156: iconst_1
     157: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     160: ldc           #81                 // int 1
     162: invokestatic  #85                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createRange:(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/util/List;
     165: new           #87                 // class threadring$_main_closure1
     168: dup
     169: ldc           #2                  // class threadring
     171: ldc           #2                  // class threadring
     173: aload_2
     174: aload         7
     176: aload         6
     178: invokespecial #90                 // Method threadring$_main_closure1."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;Lgroovy/lang/Reference;Lgroovy/lang/Reference;)V
     181: invokeinterface #60,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     186: pop
     187: aload         6
     189: invokevirtual #78                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     192: checkcast     #80                 // class MessageThread
     195: astore        8
     197: aload         8
     199: aconst_null
     200: aload         7
     202: invokevirtual #78                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     205: checkcast     #80                 // class MessageThread
     208: ldc           #92                 // String nextThread
     210: checkcast     #94                 // class java/lang/String
     213: invokestatic  #98                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.setProperty:(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;)V
     216: aload         8
     218: pop
     219: aload         6
     221: invokevirtual #78                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     224: checkcast     #80                 // class MessageThread
     227: new           #39                 // class groovy/lang/Reference
     230: dup_x1
     231: swap
     232: invokespecial #42                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
     235: astore        9
     237: aload         9
     239: pop
     240: aload_1
     241: ldc           #99                 // int 2
     243: aaload
     244: aload_2
     245: invokevirtual #78                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     248: checkcast     #33                 // class java/lang/Integer
     251: new           #101                // class threadring$_main_closure2
     254: dup
     255: ldc           #2                  // class threadring
     257: ldc           #2                  // class threadring
     259: aload         9
     261: invokespecial #104                // Method threadring$_main_closure2."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V
     264: invokeinterface #60,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     269: pop
     270: aload_1
     271: ldc           #105                // int 3
     273: aaload
     274: aload         6
     276: invokevirtual #78                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     279: checkcast     #80                 // class MessageThread
     282: iload_3
     283: invokestatic  #37                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     286: invokeinterface #60,  3           // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     291: pop
     292: aload_1
     293: ldc           #106                // int 4
     295: aaload
     296: aload         6
     298: invokevirtual #78                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     301: checkcast     #80                 // class MessageThread
     304: invokeinterface #109,  2          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
     309: pop
     310: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #122                // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class threadring
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #126                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #128                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #122                // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #134                // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #128                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #137                // 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 #142                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #147,  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 #142                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #152,  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 #142                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #156,  4          // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Invoke Dynamic

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

  public threadring();
    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: sipush        503
       3: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       6: new           #35                 // class groovy/lang/Reference
       9: dup_x1
      10: swap
      11: invokespecial #38                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
      14: astore_1
      15: aload_1
      16: pop
      17: aload_0
      18: iconst_0
      19: invokedynamic #52,  0             // InvokeDynamic #0:invoke:([Ljava/lang/String;I)Ljava/lang/Object;
      24: ldc           #29                 // class java/lang/Integer
      26: invokedynamic #57,  0             // InvokeDynamic #1:invoke:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      31: checkcast     #29                 // class java/lang/Integer
      34: invokevirtual #61                 // Method java/lang/Integer.intValue:()I
      37: istore_2
      38: iload_2
      39: pop
      40: aconst_null
      41: new           #35                 // class groovy/lang/Reference
      44: dup_x1
      45: swap
      46: invokespecial #38                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
      49: astore_3
      50: aload_3
      51: invokevirtual #65                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      54: checkcast     #67                 // class MessageThread
      57: pop
      58: aconst_null
      59: new           #35                 // class groovy/lang/Reference
      62: dup_x1
      63: swap
      64: invokespecial #38                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
      67: astore        4
      69: aload         4
      71: invokevirtual #65                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      74: checkcast     #67                 // class MessageThread
      77: pop
      78: aload_1
      79: invokevirtual #65                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      82: checkcast     #29                 // class java/lang/Integer
      85: iconst_1
      86: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      89: ldc           #68                 // int 1
      91: invokestatic  #74                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createRange:(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/util/List;
      94: new           #76                 // class threadring$_main_closure1
      97: dup
      98: ldc           #2                  // class threadring
     100: ldc           #2                  // class threadring
     102: aload_1
     103: aload         4
     105: aload_3
     106: invokespecial #79                 // Method threadring$_main_closure1."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;Lgroovy/lang/Reference;Lgroovy/lang/Reference;)V
     109: invokedynamic #84,  0             // InvokeDynamic #2:invoke:(Lgroovy/lang/Range;Lgroovy/lang/Closure;)Ljava/lang/Object;
     114: pop
     115: aload_3
     116: invokevirtual #65                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     119: checkcast     #67                 // class MessageThread
     122: astore        5
     124: aload         5
     126: aconst_null
     127: aload         4
     129: invokevirtual #65                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     132: checkcast     #67                 // class MessageThread
     135: ldc           #86                 // String nextThread
     137: checkcast     #88                 // class java/lang/String
     140: invokestatic  #92                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.setProperty:(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;)V
     143: aload         5
     145: pop
     146: aload_3
     147: invokevirtual #65                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     150: checkcast     #67                 // class MessageThread
     153: new           #35                 // class groovy/lang/Reference
     156: dup_x1
     157: swap
     158: invokespecial #38                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
     161: astore        6
     163: aload         6
     165: pop
     166: aload_1
     167: invokevirtual #65                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     170: checkcast     #29                 // class java/lang/Integer
     173: new           #94                 // class threadring$_main_closure2
     176: dup
     177: ldc           #2                  // class threadring
     179: ldc           #2                  // class threadring
     181: aload         6
     183: invokespecial #97                 // Method threadring$_main_closure2."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V
     186: invokedynamic #102,  0            // InvokeDynamic #3:invoke:(Ljava/lang/Integer;Lgroovy/lang/Closure;)Ljava/lang/Object;
     191: pop
     192: aload_3
     193: invokevirtual #65                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     196: checkcast     #67                 // class MessageThread
     199: iload_2
     200: invokedynamic #107,  0            // InvokeDynamic #4:invoke:(LMessageThread;I)Ljava/lang/Object;
     205: pop
     206: aload_3
     207: invokevirtual #65                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     210: checkcast     #67                 // class MessageThread
     213: invokedynamic #112,  0            // InvokeDynamic #5:invoke:(LMessageThread;)Ljava/lang/Object;
     218: pop
     219: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #125                // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class threadring
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #129                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #131                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #125                // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #137                // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #131                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #140                // 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 #147                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #150,  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 #147                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #155,  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 #147                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #159,  4          // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

Static Compilation

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

  public threadring();
    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: sipush        503
       3: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       6: new           #35                 // class groovy/lang/Reference
       9: dup_x1
      10: swap
      11: invokespecial #38                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
      14: astore_1
      15: aload_1
      16: pop
      17: aload_0
      18: iconst_0
      19: invokestatic  #44                 // Method org/codehaus/groovy/runtime/BytecodeInterface8.objectArrayGet:([Ljava/lang/Object;I)Ljava/lang/Object;
      22: ldc           #29                 // class java/lang/Integer
      24: invokestatic  #50                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.asType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      27: checkcast     #29                 // class java/lang/Integer
      30: invokevirtual #54                 // Method java/lang/Integer.intValue:()I
      33: istore_2
      34: iload_2
      35: pop
      36: aconst_null
      37: new           #35                 // class groovy/lang/Reference
      40: dup_x1
      41: swap
      42: invokespecial #38                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
      45: astore_3
      46: aload_3
      47: invokevirtual #58                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      50: checkcast     #60                 // class MessageThread
      53: pop
      54: aconst_null
      55: new           #35                 // class groovy/lang/Reference
      58: dup_x1
      59: swap
      60: invokespecial #38                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
      63: astore        4
      65: aload         4
      67: invokevirtual #58                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      70: checkcast     #60                 // class MessageThread
      73: pop
      74: new           #62                 // class groovy/lang/IntRange
      77: dup
      78: iconst_1
      79: aload_1
      80: invokevirtual #58                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
      83: checkcast     #29                 // class java/lang/Integer
      86: invokevirtual #54                 // Method java/lang/Integer.intValue:()I
      89: iconst_1
      90: invokespecial #65                 // Method groovy/lang/IntRange."<init>":(ZII)V
      93: new           #67                 // class threadring$_main_closure1
      96: dup
      97: ldc           #2                  // class threadring
      99: ldc           #2                  // class threadring
     101: aload_1
     102: aload         4
     104: aload_3
     105: invokespecial #70                 // Method threadring$_main_closure1."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;Lgroovy/lang/Reference;Lgroovy/lang/Reference;)V
     108: invokestatic  #76                 // Method org/codehaus/groovy/runtime/DefaultGroovyMethods.each:(Ljava/util/List;Lgroovy/lang/Closure;)Ljava/util/List;
     111: pop
     112: aload_3
     113: invokevirtual #58                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     116: checkcast     #60                 // class MessageThread
     119: dup
     120: astore        5
     122: aload         4
     124: invokevirtual #58                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     127: checkcast     #60                 // class MessageThread
     130: aload         5
     132: invokevirtual #80                 // Method MessageThread.setNextThread:(LMessageThread;)V
     135: aconst_null
     136: pop
     137: pop
     138: aload_3
     139: invokevirtual #58                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     142: checkcast     #60                 // class MessageThread
     145: new           #35                 // class groovy/lang/Reference
     148: dup_x1
     149: swap
     150: invokespecial #38                 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
     153: astore        6
     155: aload         6
     157: pop
     158: aload_1
     159: invokevirtual #58                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     162: checkcast     #29                 // class java/lang/Integer
     165: new           #82                 // class threadring$_main_closure2
     168: dup
     169: ldc           #2                  // class threadring
     171: ldc           #2                  // class threadring
     173: aload         6
     175: invokespecial #85                 // Method threadring$_main_closure2."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V
     178: invokestatic  #89                 // Method org/codehaus/groovy/runtime/DefaultGroovyMethods.times:(Ljava/lang/Number;Lgroovy/lang/Closure;)V
     181: aconst_null
     182: pop
     183: aload_3
     184: invokevirtual #58                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     187: checkcast     #60                 // class MessageThread
     190: iload_2
     191: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     194: invokevirtual #93                 // Method MessageThread.enqueue:(Ljava/lang/Integer;)V
     197: aconst_null
     198: pop
     199: aload_3
     200: invokevirtual #58                 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
     203: checkcast     #60                 // class MessageThread
     206: checkcast     #60                 // class MessageThread
     209: invokevirtual #96                 // Method MessageThread.join:()V
     212: aconst_null
     213: pop
     214: return

  protected groovy.lang.MetaClass $getStaticMetaClass();
    Code:
       0: aload_0
       1: invokevirtual #109                // Method java/lang/Object.getClass:()Ljava/lang/Class;
       4: ldc           #2                  // class threadring
       6: if_acmpeq     14
       9: aload_0
      10: invokestatic  #113                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
      13: areturn
      14: getstatic     #115                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      17: astore_1
      18: aload_1
      19: ifnonnull     34
      22: aload_0
      23: invokevirtual #109                // Method java/lang/Object.getClass:()Ljava/lang/Class;
      26: invokestatic  #121                // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
      29: dup
      30: astore_1
      31: putstatic     #115                // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
      34: aload_1
      35: invokevirtual #124                // 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 #129                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #134,  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 #129                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #139,  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 #129                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #144,  4          // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return
}

        

AFTER

Groovyc (Legacy)

          Compiled from "threadring.groovy"
public class MessageThread extends java.lang.Thread implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public MessageThread(MessageThread, int);
    Code:
       0: invokestatic  #25                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_3
       4: iconst_1
       5: anewarray     #27                 // class java/lang/Object
       8: dup
       9: iconst_0
      10: iload_2
      11: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      14: ldc           #35                 // class java/lang/String
      16: invokestatic  #41                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.asType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      19: checkcast     #35                 // class java/lang/String
      22: ldc           #35                 // class java/lang/String
      24: invokestatic  #45                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createPojoWrapper:(Ljava/lang/Object;Ljava/lang/Class;)Lorg/codehaus/groovy/runtime/wrappers/Wrapper;
      27: aastore
      28: dup
      29: bipush        -1
      31: ldc           #4                  // class java/lang/Thread
      33: invokestatic  #49                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.selectConstructorAndTransformArguments:([Ljava/lang/Object;ILjava/lang/Class;)I
      36: aload_0
      37: swap
      38: lookupswitch  { // 9
           -1526974093: 120
           -1428966913: 141
           -1274082179: 160
           -1273978571: 191
                 39797: 222
             301372330: 231
            1019364531: 264
            1387934505: 307
            1535559793: 340
               default: 391
          }
     120: swap
     121: dup_x1
     122: dup
     123: iconst_0
     124: aaload
     125: ldc           #51                 // class java/lang/Runnable
     127: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     130: checkcast     #51                 // class java/lang/Runnable
     133: swap
     134: pop
     135: invokespecial #57                 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
     138: goto          401
     141: swap
     142: dup_x1
     143: dup
     144: iconst_0
     145: aaload
     146: invokestatic  #63                 // Method org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.castToString:(Ljava/lang/Object;)Ljava/lang/String;
     149: checkcast     #35                 // class java/lang/String
     152: swap
     153: pop
     154: invokespecial #66                 // Method java/lang/Thread."<init>":(Ljava/lang/String;)V
     157: goto          401
     160: swap
     161: dup_x1
     162: dup
     163: iconst_0
     164: aaload
     165: ldc           #51                 // class java/lang/Runnable
     167: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     170: checkcast     #51                 // class java/lang/Runnable
     173: swap
     174: dup
     175: iconst_1
     176: aaload
     177: invokestatic  #63                 // Method org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.castToString:(Ljava/lang/Object;)Ljava/lang/String;
     180: checkcast     #35                 // class java/lang/String
     183: swap
     184: pop
     185: invokespecial #69                 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;Ljava/lang/String;)V
     188: goto          401
     191: swap
     192: dup_x1
     193: dup
     194: iconst_0
     195: aaload
     196: ldc           #71                 // class java/lang/ThreadGroup
     198: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     201: checkcast     #71                 // class java/lang/ThreadGroup
     204: swap
     205: dup
     206: iconst_1
     207: aaload
     208: invokestatic  #63                 // Method org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.castToString:(Ljava/lang/Object;)Ljava/lang/String;
     211: checkcast     #35                 // class java/lang/String
     214: swap
     215: pop
     216: invokespecial #74                 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/String;)V
     219: goto          401
     222: swap
     223: dup_x1
     224: pop
     225: invokespecial #77                 // Method java/lang/Thread."<init>":()V
     228: goto          401
     231: swap
     232: dup_x1
     233: dup
     234: iconst_0
     235: aaload
     236: ldc           #51                 // class java/lang/Runnable
     238: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     241: checkcast     #51                 // class java/lang/Runnable
     244: swap
     245: dup
     246: iconst_1
     247: aaload
     248: ldc           #79                 // class java/security/AccessControlContext
     250: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     253: checkcast     #79                 // class java/security/AccessControlContext
     256: swap
     257: pop
     258: invokespecial #82                 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;Ljava/security/AccessControlContext;)V
     261: goto          401
     264: swap
     265: dup_x1
     266: dup
     267: iconst_0
     268: aaload
     269: ldc           #71                 // class java/lang/ThreadGroup
     271: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     274: checkcast     #71                 // class java/lang/ThreadGroup
     277: swap
     278: dup
     279: iconst_1
     280: aaload
     281: ldc           #51                 // class java/lang/Runnable
     283: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     286: checkcast     #51                 // class java/lang/Runnable
     289: swap
     290: dup
     291: iconst_2
     292: aaload
     293: invokestatic  #63                 // Method org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.castToString:(Ljava/lang/Object;)Ljava/lang/String;
     296: checkcast     #35                 // class java/lang/String
     299: swap
     300: pop
     301: invokespecial #85                 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V
     304: goto          401
     307: swap
     308: dup_x1
     309: dup
     310: iconst_0
     311: aaload
     312: ldc           #71                 // class java/lang/ThreadGroup
     314: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     317: checkcast     #71                 // class java/lang/ThreadGroup
     320: swap
     321: dup
     322: iconst_1
     323: aaload
     324: ldc           #51                 // class java/lang/Runnable
     326: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     329: checkcast     #51                 // class java/lang/Runnable
     332: swap
     333: pop
     334: invokespecial #88                 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;)V
     337: goto          401
     340: swap
     341: dup_x1
     342: dup
     343: iconst_0
     344: aaload
     345: ldc           #71                 // class java/lang/ThreadGroup
     347: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     350: checkcast     #71                 // class java/lang/ThreadGroup
     353: swap
     354: dup
     355: iconst_1
     356: aaload
     357: ldc           #51                 // class java/lang/Runnable
     359: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     362: checkcast     #51                 // class java/lang/Runnable
     365: swap
     366: dup
     367: iconst_2
     368: aaload
     369: invokestatic  #63                 // Method org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.castToString:(Ljava/lang/Object;)Ljava/lang/String;
     372: checkcast     #35                 // class java/lang/String
     375: swap
     376: dup
     377: iconst_3
     378: aaload
     379: invokestatic  #94                 // Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.longUnbox:(Ljava/lang/Object;)J
     382: dup2_x1
     383: pop2
     384: pop
     385: invokespecial #97                 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V
     388: goto          401
     391: new           #99                 // class java/lang/IllegalArgumentException
     394: dup
     395: ldc           #101                // String This class has been compiled with a super class which is binary incompatible with the current super class found on classpath. You should recompile this class with the new version.
     397: invokespecial #102                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
     400: athrow
     401: pop
     402: aload_0
     403: invokevirtual #106                // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
     406: astore        4
     408: aload         4
     410: aload_0
     411: swap
     412: putfield      #108                // Field metaClass:Lgroovy/lang/MetaClass;
     415: aload_1
     416: astore        5
     418: aload         5
     420: ldc           #2                  // class MessageThread
     422: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
     425: checkcast     #2                  // class MessageThread
     428: aload_0
     429: swap
     430: putfield      #110                // Field nextThread:LMessageThread;
     433: return

  public void run();
    Code:
       0: invokestatic  #25                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_1
       4: getstatic     #116                // Field __$stMC:Z
       7: ifne          19
      10: invokestatic  #122                // Method org/codehaus/groovy/runtime/BytecodeInterface8.disabledStandardMetaClass:()Z
      13: ifne          19
      16: goto          49
      19: aload_1
      20: ldc           #123                // int 0
      22: aaload
      23: aload_0
      24: getfield      #110                // Field nextThread:LMessageThread;
      27: aload_1
      28: ldc           #124                // int 1
      30: aaload
      31: aload_0
      32: invokeinterface #130,  2          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;)Ljava/lang/Object;
      37: invokeinterface #134,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      42: pop
      43: goto          19
      46: goto          70
      49: aload_1
      50: ldc           #135                // int 2
      52: aaload
      53: aload_0
      54: getfield      #110                // Field nextThread:LMessageThread;
      57: aload_0
      58: invokespecial #139                // Method dequeue:()Ljava/lang/Integer;
      61: invokeinterface #134,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      66: pop
      67: goto          49
      70: return

  public void enqueue(java.lang.Integer);
    Code:
       0: invokestatic  #25                 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
       3: astore_2
       4: aload_1
       5: iconst_0
       6: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       9: invokestatic  #145                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      12: ifeq          52
      15: aload_2
      16: ldc           #146                // int 3
      18: aaload
      19: aload_0
      20: aload_2
      21: ldc           #147                // int 4
      23: aaload
      24: aload_0
      25: invokeinterface #130,  2          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;)Ljava/lang/Object;
      30: invokeinterface #150,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
      35: pop
      36: aload_2
      37: ldc           #151                // int 5
      39: aaload
      40: ldc           #153                // class java/lang/System
      42: iconst_0
      43: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      46: invokeinterface #134,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      51: pop
      52: aload_2
      53: ldc           #154                // int 6
      55: aaload
      56: aload_1
      57: iconst_1
      58: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      61: invokeinterface #134,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      66: astore_3
      67: aload_3
      68: ldc           #29                 // class java/lang/Integer
      70: invokestatic  #54                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      73: checkcast     #29                 // class java/lang/Integer
      76: aload_0
      77: swap
      78: putfield      #156                // Field message:Ljava/lang/Integer;
      81: aload_2
      82: ldc           #157                // int 7
      84: aaload
      85: ldc           #159                // class java/util/concurrent/locks/LockSupport
      87: aload_0
      88: invokeinterface #134,  3          // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
      93: pop
      94: return

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

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

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

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #189                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #194,  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 #189                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #199,  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 #189                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #204,  4          // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return

  public MessageThread getNextThread();
    Code:
       0: aload_0
       1: getfield      #110                // Field nextThread:LMessageThread;
       4: areturn

  public void setNextThread(MessageThread);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #110                // Field nextThread:LMessageThread;
       5: return

  public java.lang.Integer getMessage();
    Code:
       0: aload_0
       1: getfield      #156                // Field message:Ljava/lang/Integer;
       4: areturn

  public void setMessage(java.lang.Integer);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #156                // Field message:Ljava/lang/Integer;
       5: return

  public void super$2$run();
    Code:
       0: aload_0
       1: invokespecial #213                // Method java/lang/Thread.run:()V
       4: return
}

        

Invoke Dynamic

          Compiled from "threadring.groovy"
public class MessageThread extends java.lang.Thread implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public MessageThread(MessageThread, int);
    Code:
       0: iconst_1
       1: anewarray     #21                 // class java/lang/Object
       4: dup
       5: iconst_0
       6: iload_2
       7: ldc           #23                 // class java/lang/String
       9: invokedynamic #37,  0             // InvokeDynamic #0:invoke:(ILjava/lang/Class;)Ljava/lang/Object;
      14: checkcast     #23                 // class java/lang/String
      17: ldc           #23                 // class java/lang/String
      19: invokestatic  #43                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createPojoWrapper:(Ljava/lang/Object;Ljava/lang/Class;)Lorg/codehaus/groovy/runtime/wrappers/Wrapper;
      22: aastore
      23: dup
      24: bipush        -1
      26: ldc           #4                  // class java/lang/Thread
      28: invokestatic  #47                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.selectConstructorAndTransformArguments:([Ljava/lang/Object;ILjava/lang/Class;)I
      31: aload_0
      32: swap
      33: lookupswitch  { // 9
           -1526974093: 116
           -1428966913: 134
           -1274082179: 152
           -1273978571: 179
                 39797: 206
             301372330: 215
            1019364531: 242
            1387934505: 278
            1535559793: 305
               default: 349
          }
     116: swap
     117: dup_x1
     118: dup
     119: iconst_0
     120: aaload
     121: invokedynamic #55,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Runnable;
     126: swap
     127: pop
     128: invokespecial #58                 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
     131: goto          359
     134: swap
     135: dup_x1
     136: dup
     137: iconst_0
     138: aaload
     139: invokedynamic #61,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/String;
     144: swap
     145: pop
     146: invokespecial #64                 // Method java/lang/Thread."<init>":(Ljava/lang/String;)V
     149: goto          359
     152: swap
     153: dup_x1
     154: dup
     155: iconst_0
     156: aaload
     157: invokedynamic #55,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Runnable;
     162: swap
     163: dup
     164: iconst_1
     165: aaload
     166: invokedynamic #61,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/String;
     171: swap
     172: pop
     173: invokespecial #67                 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;Ljava/lang/String;)V
     176: goto          359
     179: swap
     180: dup_x1
     181: dup
     182: iconst_0
     183: aaload
     184: invokedynamic #70,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/ThreadGroup;
     189: swap
     190: dup
     191: iconst_1
     192: aaload
     193: invokedynamic #61,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/String;
     198: swap
     199: pop
     200: invokespecial #73                 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/String;)V
     203: goto          359
     206: swap
     207: dup_x1
     208: pop
     209: invokespecial #76                 // Method java/lang/Thread."<init>":()V
     212: goto          359
     215: swap
     216: dup_x1
     217: dup
     218: iconst_0
     219: aaload
     220: invokedynamic #55,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Runnable;
     225: swap
     226: dup
     227: iconst_1
     228: aaload
     229: invokedynamic #79,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/security/AccessControlContext;
     234: swap
     235: pop
     236: invokespecial #82                 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;Ljava/security/AccessControlContext;)V
     239: goto          359
     242: swap
     243: dup_x1
     244: dup
     245: iconst_0
     246: aaload
     247: invokedynamic #70,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/ThreadGroup;
     252: swap
     253: dup
     254: iconst_1
     255: aaload
     256: invokedynamic #55,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Runnable;
     261: swap
     262: dup
     263: iconst_2
     264: aaload
     265: invokedynamic #61,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/String;
     270: swap
     271: pop
     272: invokespecial #85                 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V
     275: goto          359
     278: swap
     279: dup_x1
     280: dup
     281: iconst_0
     282: aaload
     283: invokedynamic #70,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/ThreadGroup;
     288: swap
     289: dup
     290: iconst_1
     291: aaload
     292: invokedynamic #55,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Runnable;
     297: swap
     298: pop
     299: invokespecial #88                 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;)V
     302: goto          359
     305: swap
     306: dup_x1
     307: dup
     308: iconst_0
     309: aaload
     310: invokedynamic #70,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/ThreadGroup;
     315: swap
     316: dup
     317: iconst_1
     318: aaload
     319: invokedynamic #55,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Runnable;
     324: swap
     325: dup
     326: iconst_2
     327: aaload
     328: invokedynamic #61,  0             // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/String;
     333: swap
     334: dup
     335: iconst_3
     336: aaload
     337: invokestatic  #94                 // Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.longUnbox:(Ljava/lang/Object;)J
     340: dup2_x1
     341: pop2
     342: pop
     343: invokespecial #97                 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V
     346: goto          359
     349: new           #99                 // class java/lang/IllegalArgumentException
     352: dup
     353: ldc           #101                // String This class has been compiled with a super class which is binary incompatible with the current super class found on classpath. You should recompile this class with the new version.
     355: invokespecial #102                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
     358: athrow
     359: pop
     360: aload_0
     361: invokevirtual #106                // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
     364: astore_3
     365: aload_3
     366: aload_0
     367: swap
     368: putfield      #108                // Field metaClass:Lgroovy/lang/MetaClass;
     371: aload_1
     372: astore        4
     374: aload         4
     376: invokedynamic #111,  0            // InvokeDynamic #1:cast:(Ljava/lang/Object;)LMessageThread;
     381: aload_0
     382: swap
     383: putfield      #113                // Field nextThread:LMessageThread;
     386: return

  public void run();
    Code:
       0: aload_0
       1: getfield      #113                // Field nextThread:LMessageThread;
       4: aload_0
       5: invokedynamic #123,  0            // InvokeDynamic #2:invoke:(LMessageThread;)Ljava/lang/Object;
      10: invokedynamic #128,  0            // InvokeDynamic #3:invoke:(LMessageThread;Ljava/lang/Object;)Ljava/lang/Object;
      15: pop
      16: goto          0
      19: athrow

  public void enqueue(java.lang.Integer);
    Code:
       0: aload_1
       1: iconst_0
       2: invokestatic  #137                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       5: invokestatic  #141                // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
       8: ifeq          33
      11: aload_0
      12: aload_0
      13: invokedynamic #144,  0            // InvokeDynamic #4:invoke:(LMessageThread;)Ljava/lang/Object;
      18: invokedynamic #147,  0            // InvokeDynamic #5:invoke:(LMessageThread;Ljava/lang/Object;)Ljava/lang/Object;
      23: pop
      24: ldc           #149                // class java/lang/System
      26: iconst_0
      27: invokedynamic #154,  0            // InvokeDynamic #6:invoke:(Ljava/lang/Class;I)Ljava/lang/Object;
      32: pop
      33: aload_1
      34: iconst_1
      35: invokedynamic #159,  0            // InvokeDynamic #7:invoke:(Ljava/lang/Integer;I)Ljava/lang/Object;
      40: astore_2
      41: aload_2
      42: invokedynamic #162,  0            // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Integer;
      47: aload_0
      48: swap
      49: putfield      #164                // Field message:Ljava/lang/Integer;
      52: ldc           #166                // class java/util/concurrent/locks/LockSupport
      54: aload_0
      55: invokedynamic #171,  0            // InvokeDynamic #8:invoke:(Ljava/lang/Class;LMessageThread;)Ljava/lang/Object;
      60: pop
      61: return

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

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

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

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #205                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #208,  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 #205                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #213,  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 #205                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #218,  4          // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return

  public MessageThread getNextThread();
    Code:
       0: aload_0
       1: getfield      #113                // Field nextThread:LMessageThread;
       4: areturn

  public void setNextThread(MessageThread);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #113                // Field nextThread:LMessageThread;
       5: return

  public java.lang.Integer getMessage();
    Code:
       0: aload_0
       1: getfield      #164                // Field message:Ljava/lang/Integer;
       4: areturn

  public void setMessage(java.lang.Integer);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #164                // Field message:Ljava/lang/Integer;
       5: return

  public void super$2$run();
    Code:
       0: aload_0
       1: invokespecial #227                // Method java/lang/Thread.run:()V
       4: return
}

        

Static Compilation

          Compiled from "threadring.groovy"
public class MessageThread extends java.lang.Thread implements groovy.lang.GroovyObject {
  public static transient boolean __$stMC;

  public MessageThread(MessageThread, int);
    Code:
       0: aload_0
       1: iload_2
       2: invokestatic  #25                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       5: ldc           #27                 // class java/lang/String
       7: invokestatic  #33                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.asType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      10: checkcast     #27                 // class java/lang/String
      13: invokespecial #36                 // Method java/lang/Thread."<init>":(Ljava/lang/String;)V
      16: aload_0
      17: invokevirtual #40                 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
      20: astore_3
      21: aload_3
      22: aload_0
      23: swap
      24: putfield      #42                 // Field metaClass:Lgroovy/lang/MetaClass;
      27: aload_1
      28: astore        4
      30: aload         4
      32: aload_0
      33: swap
      34: putfield      #44                 // Field nextThread:LMessageThread;
      37: return

  public void run();
    Code:
       0: aload_0
       1: getfield      #44                 // Field nextThread:LMessageThread;
       4: aload_0
       5: invokespecial #53                 // Method dequeue:()Ljava/lang/Integer;
       8: invokevirtual #57                 // Method enqueue:(Ljava/lang/Integer;)V
      11: goto          0
      14: return

  public void enqueue(java.lang.Integer);
    Code:
       0: aload_1
       1: iconst_0
       2: invokestatic  #25                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       5: invokestatic  #61                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
       8: ifeq          26
      11: aload_0
      12: aload_0
      13: checkcast     #2                  // class MessageThread
      16: invokevirtual #65                 // Method getName:()Ljava/lang/String;
      19: invokestatic  #71                 // Method org/codehaus/groovy/runtime/DefaultGroovyMethods.println:(Ljava/lang/Object;Ljava/lang/Object;)V
      22: iconst_0
      23: invokestatic  #77                 // Method java/lang/System.exit:(I)V
      26: aload_1
      27: iconst_1
      28: invokestatic  #25                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      31: invokestatic  #83                 // Method org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.minus:(Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
      34: astore_2
      35: aload_2
      36: ldc           #21                 // class java/lang/Integer
      38: invokestatic  #86                 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      41: checkcast     #21                 // class java/lang/Integer
      44: aload_0
      45: swap
      46: putfield      #88                 // Field message:Ljava/lang/Integer;
      49: aload_0
      50: invokestatic  #94                 // Method java/util/concurrent/locks/LockSupport.unpark:(Ljava/lang/Thread;)V
      53: return

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

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

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

  public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
    Code:
       0: aload_0
       1: invokevirtual #125                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #130,  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 #125                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: invokeinterface #135,  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 #125                // Method getMetaClass:()Lgroovy/lang/MetaClass;
       4: aload_0
       5: aload_1
       6: aload_2
       7: invokeinterface #140,  4          // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
      12: return

  public MessageThread getNextThread();
    Code:
       0: aload_0
       1: getfield      #44                 // Field nextThread:LMessageThread;
       4: areturn

  public void setNextThread(MessageThread);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #44                 // Field nextThread:LMessageThread;
       5: return

  public java.lang.Integer getMessage();
    Code:
       0: aload_0
       1: getfield      #88                 // Field message:Ljava/lang/Integer;
       4: areturn

  public void setMessage(java.lang.Integer);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #88                 // Field message:Ljava/lang/Integer;
       5: return
}