コード例 #1
0
def createConsumerInvokeSetOne():
    cw = ClassWriter(0)

    cw.visit(
        52, Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_SUPER,
        "my/InvokeSetOne",
        "<T::Lnet/imglib2/type/operators/SetOne>Ljava/lang/ObjectLjava/util/function/Consumer<TT>;",
        "java/lang/Object", ["java/util/function/Consumer"])

    mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", None, None)
    mv.visitCode()
    mv.visitVarInsn(Opcodes.ALOAD, 0)
    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>",
                       "()V", False)
    mv.visitInsn(Opcodes.RETURN)
    mv.visitMaxs(1, 1)
    mv.visitEnd()

    mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "accept",
                        "(Lnet/imglib2/type/operators/SetOne;)V", "(TT)V",
                        None)
    mv.visitCode()
    mv.visitVarInsn(Opcodes.ALOAD, 1)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE,
                       "net/imglib2/type/operators/SetOne", "setOne", "()V",
                       True)
    mv.visitInsn(Opcodes.RETURN)
    mv.visitMaxs(1, 2)
    mv.visitEnd()

    mv = cw.visitMethod(
        Opcodes.ACC_PUBLIC + Opcodes.ACC_BRIDGE + Opcodes.ACC_SYNTHETIC,
        "accept", "(Ljava/lang/Object;)V", None, None)
    mv.visitCode()
    mv.visitVarInsn(Opcodes.ALOAD, 0)
    mv.visitVarInsn(Opcodes.ALOAD, 1)
    mv.visitTypeInsn(Opcodes.CHECKCAST, "net/imglib2/type/operators/SetOne")
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "my/InvokeSetOne", "accept",
                       "(Lnet/imglib2/type/operators/SetOne;)V", False)
    mv.visitInsn(Opcodes.RETURN)
    mv.visitMaxs(2, 2)
    mv.visitEnd()

    cw.visitEnd()

    # Load class
    return CustomClassLoader().defineClass("my.InvokeSetOne", cw.toByteArray())
コード例 #2
0
def createNativePointMatchesClass(classloader=None):
	# Class my/PointMatchesFast
  cw = ClassWriter(0)
  
  cw.visit(52, Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_SUPER, "my/PointMatchesFast", None, "java/lang/Object", None)
  
  
  fv = cw.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "pointmatches", "Ljava/util/List;", "Ljava/util/List<Lmpicbg/models/PointMatch;>;", None)
  fv.visitEnd()
  
  
  mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "(Ljava/util/List;)V", "(Ljava/util/List<Lmpicbg/models/PointMatch;>;)V", None)
  mv.visitCode()
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V")
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitFieldInsn(Opcodes.PUTFIELD, "my/PointMatchesFast", "pointmatches", "Ljava/util/List;")
  mv.visitInsn(Opcodes.RETURN)
  mv.visitMaxs(2, 2)
  mv.visitEnd()
  
  for PM_method, C_method in (("fromFeatures", "matches"),
                              ("fromFeaturesScaleInvariant", "matchesScaleInvariant")):
    mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, PM_method, "(Ljava/util/List;Ljava/util/List;DD)Lmy/PointMatchesFast;", "(Ljava/util/List<Lmy/ConstellationFast;>;Ljava/util/List<Lmy/ConstellationFast;>;DD)Lmy/PointMatchesFast;", None)
    mv.visitCode()
    mv.visitTypeInsn(Opcodes.NEW, "java/util/ArrayList")
    mv.visitInsn(Opcodes.DUP)
    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V")
    mv.visitVarInsn(Opcodes.ASTORE, 6)
    mv.visitVarInsn(Opcodes.ALOAD, 0)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "iterator", "()Ljava/util/Iterator;")
    mv.visitVarInsn(Opcodes.ASTORE, 7)
    l0 = Label()
    mv.visitLabel(l0)
    mv.visitFrame(Opcodes.F_APPEND,2, ["java/util/List", "java/util/Iterator"], 0, None)
    mv.visitVarInsn(Opcodes.ALOAD, 7)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z")
    l1 = Label()
    mv.visitJumpInsn(Opcodes.IFEQ, l1)
    mv.visitVarInsn(Opcodes.ALOAD, 7)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;")
    mv.visitTypeInsn(Opcodes.CHECKCAST, "my/ConstellationFast")
    mv.visitVarInsn(Opcodes.ASTORE, 8)
    mv.visitVarInsn(Opcodes.ALOAD, 1)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "iterator", "()Ljava/util/Iterator;")
    mv.visitVarInsn(Opcodes.ASTORE, 9)
    l2 = Label()
    mv.visitLabel(l2)
    mv.visitFrame(Opcodes.F_APPEND,2, ["my/ConstellationFast", "java/util/Iterator"], 0, None)
    mv.visitVarInsn(Opcodes.ALOAD, 9)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z")
    l3 = Label()
    mv.visitJumpInsn(Opcodes.IFEQ, l3)
    mv.visitVarInsn(Opcodes.ALOAD, 9)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;")
    mv.visitTypeInsn(Opcodes.CHECKCAST, "my/ConstellationFast")
    mv.visitVarInsn(Opcodes.ASTORE, 10)
    mv.visitVarInsn(Opcodes.ALOAD, 8)
    mv.visitVarInsn(Opcodes.ALOAD, 10)
    mv.visitVarInsn(Opcodes.DLOAD, 2)
    mv.visitVarInsn(Opcodes.DLOAD, 4)
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "my/ConstellationFast", C_method, "(Lmy/ConstellationFast;DD)Z")
    l4 = Label()
    mv.visitJumpInsn(Opcodes.IFEQ, l4)
    mv.visitVarInsn(Opcodes.ALOAD, 6)
    mv.visitTypeInsn(Opcodes.NEW, "mpicbg/models/PointMatch")
    mv.visitInsn(Opcodes.DUP)
    mv.visitVarInsn(Opcodes.ALOAD, 8)
    mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;")
    mv.visitVarInsn(Opcodes.ALOAD, 10)
    mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;")
    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "mpicbg/models/PointMatch", "<init>", "(Lmpicbg/models/Point;Lmpicbg/models/Point;)V")
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z")
    mv.visitInsn(Opcodes.POP)
    mv.visitLabel(l4)
    mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None)
    mv.visitJumpInsn(Opcodes.GOTO, l2)
    mv.visitLabel(l3)
    mv.visitFrame(Opcodes.F_CHOP,2, None, 0, None)
    mv.visitJumpInsn(Opcodes.GOTO, l0)
    mv.visitLabel(l1)
    mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None)
    mv.visitTypeInsn(Opcodes.NEW, "my/PointMatchesFast")
    mv.visitInsn(Opcodes.DUP)
    mv.visitVarInsn(Opcodes.ALOAD, 6)
    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "my/PointMatchesFast", "<init>", "(Ljava/util/List;)V")
    mv.visitInsn(Opcodes.ARETURN)
    mv.visitMaxs(6, 11)
    mv.visitEnd()
  
  
  mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "fromNearbyFeatures", "(DLjava/util/List;Ljava/util/List;DD)Lmy/PointMatchesFast;", "(DLjava/util/List<Lmy/ConstellationFast;>;Ljava/util/List<Lmy/ConstellationFast;>;DD)Lmy/PointMatchesFast;", None)
  mv.visitCode()
  mv.visitTypeInsn(Opcodes.NEW, "java/util/ArrayList")
  mv.visitInsn(Opcodes.DUP)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V")
  mv.visitVarInsn(Opcodes.ASTORE, 8)
  mv.visitVarInsn(Opcodes.ALOAD, 3)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "iterator", "()Ljava/util/Iterator;")
  mv.visitVarInsn(Opcodes.ASTORE, 9)
  l0 = Label()
  mv.visitLabel(l0)
  mv.visitFrame(Opcodes.F_APPEND,2, ["java/util/List", "java/util/Iterator"], 0, None)
  mv.visitVarInsn(Opcodes.ALOAD, 9)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z")
  l1 = Label()
  mv.visitJumpInsn(Opcodes.IFEQ, l1)
  mv.visitVarInsn(Opcodes.ALOAD, 9)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;")
  mv.visitTypeInsn(Opcodes.CHECKCAST, "my/ConstellationFast")
  mv.visitVarInsn(Opcodes.ASTORE, 10)
  mv.visitVarInsn(Opcodes.ALOAD, 8)
  mv.visitVarInsn(Opcodes.ALOAD, 10)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;")
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D")
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "net/imglib2/RealPoint", "wrap", "([D)Lnet/imglib2/RealPoint;")
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z")
  mv.visitInsn(Opcodes.POP)
  mv.visitJumpInsn(Opcodes.GOTO, l0)
  mv.visitLabel(l1)
  mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None)
  mv.visitTypeInsn(Opcodes.NEW, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree")
  mv.visitInsn(Opcodes.DUP)
  mv.visitTypeInsn(Opcodes.NEW, "net/imglib2/KDTree")
  mv.visitInsn(Opcodes.DUP)
  mv.visitVarInsn(Opcodes.ALOAD, 3)
  mv.visitVarInsn(Opcodes.ALOAD, 8)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "net/imglib2/KDTree", "<init>", "(Ljava/util/List;Ljava/util/List;)V")
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "<init>", "(Lnet/imglib2/KDTree;)V")
  mv.visitVarInsn(Opcodes.ASTORE, 9)
  mv.visitTypeInsn(Opcodes.NEW, "java/util/ArrayList")
  mv.visitInsn(Opcodes.DUP)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V")
  mv.visitVarInsn(Opcodes.ASTORE, 10)
  mv.visitVarInsn(Opcodes.ALOAD, 2)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "iterator", "()Ljava/util/Iterator;")
  mv.visitVarInsn(Opcodes.ASTORE, 11)
  l2 = Label()
  mv.visitLabel(l2)
  mv.visitFrame(Opcodes.F_APPEND,3, ["net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "java/util/List", "java/util/Iterator"], 0, None)
  mv.visitVarInsn(Opcodes.ALOAD, 11)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z")
  l3 = Label()
  mv.visitJumpInsn(Opcodes.IFEQ, l3)
  mv.visitVarInsn(Opcodes.ALOAD, 11)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;")
  mv.visitTypeInsn(Opcodes.CHECKCAST, "my/ConstellationFast")
  mv.visitVarInsn(Opcodes.ASTORE, 12)
  mv.visitVarInsn(Opcodes.ALOAD, 9)
  mv.visitVarInsn(Opcodes.ALOAD, 12)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;")
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D")
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "net/imglib2/RealPoint", "wrap", "([D)Lnet/imglib2/RealPoint;")
  mv.visitVarInsn(Opcodes.DLOAD, 0)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "search", "(Lnet/imglib2/RealLocalizable;DZ)V")
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitVarInsn(Opcodes.ISTORE, 13)
  mv.visitVarInsn(Opcodes.ALOAD, 9)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "numNeighbors", "()I")
  mv.visitVarInsn(Opcodes.ISTORE, 14)
  l4 = Label()
  mv.visitLabel(l4)
  mv.visitFrame(Opcodes.F_APPEND,3, ["my/ConstellationFast", Opcodes.INTEGER, Opcodes.INTEGER], 0, None)
  mv.visitVarInsn(Opcodes.ILOAD, 13)
  mv.visitVarInsn(Opcodes.ILOAD, 14)
  l5 = Label()
  mv.visitJumpInsn(Opcodes.IF_ICMPGE, l5)
  mv.visitVarInsn(Opcodes.ALOAD, 9)
  mv.visitVarInsn(Opcodes.ILOAD, 13)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "getSampler", "(I)Lnet/imglib2/Sampler;")
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/Sampler", "get", "()Ljava/lang/Object;")
  mv.visitTypeInsn(Opcodes.CHECKCAST, "my/ConstellationFast")
  mv.visitVarInsn(Opcodes.ASTORE, 15)
  mv.visitVarInsn(Opcodes.ALOAD, 12)
  mv.visitVarInsn(Opcodes.ALOAD, 15)
  mv.visitVarInsn(Opcodes.DLOAD, 4)
  mv.visitVarInsn(Opcodes.DLOAD, 6)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "my/ConstellationFast", "matches", "(Lmy/ConstellationFast;DD)Z")
  l6 = Label()
  mv.visitJumpInsn(Opcodes.IFEQ, l6)
  mv.visitVarInsn(Opcodes.ALOAD, 10)
  mv.visitTypeInsn(Opcodes.NEW, "mpicbg/models/PointMatch")
  mv.visitInsn(Opcodes.DUP)
  mv.visitVarInsn(Opcodes.ALOAD, 12)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;")
  mv.visitVarInsn(Opcodes.ALOAD, 15)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;")
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "mpicbg/models/PointMatch", "<init>", "(Lmpicbg/models/Point;Lmpicbg/models/Point;)V")
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z")
  mv.visitInsn(Opcodes.POP)
  mv.visitLabel(l6)
  mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None)
  mv.visitIincInsn(13, 1)
  mv.visitJumpInsn(Opcodes.GOTO, l4)
  mv.visitLabel(l5)
  mv.visitFrame(Opcodes.F_CHOP,3, None, 0, None)
  mv.visitJumpInsn(Opcodes.GOTO, l2)
  mv.visitLabel(l3)
  mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None)
  mv.visitTypeInsn(Opcodes.NEW, "my/PointMatchesFast")
  mv.visitInsn(Opcodes.DUP)
  mv.visitVarInsn(Opcodes.ALOAD, 10)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "my/PointMatchesFast", "<init>", "(Ljava/util/List;)V")
  mv.visitInsn(Opcodes.ARETURN)
  mv.visitMaxs(6, 16)
  mv.visitEnd()
  
  
  mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "toRows", "()[[D", None, None)
  mv.visitCode()
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/PointMatchesFast", "pointmatches", "Ljava/util/List;")
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", True)
  mv.visitTypeInsn(Opcodes.CHECKCAST, "mpicbg/models/PointMatch")
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/PointMatch", "getP1", "()Lmpicbg/models/Point;", False)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D", False)
  mv.visitInsn(Opcodes.ARRAYLENGTH)
  mv.visitVarInsn(Opcodes.ISTORE, 1)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/PointMatchesFast", "pointmatches", "Ljava/util/List;")
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "size", "()I", True)
  mv.visitVarInsn(Opcodes.ILOAD, 1)
  mv.visitVarInsn(Opcodes.ILOAD, 1)
  mv.visitInsn(Opcodes.IADD)
  mv.visitMultiANewArrayInsn("[[D", 2)
  mv.visitVarInsn(Opcodes.ASTORE, 2)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitVarInsn(Opcodes.ISTORE, 3)
  l0 = Label()
  mv.visitLabel(l0)
  mv.visitFrame(Opcodes.F_APPEND,3, [Opcodes.INTEGER, "[[D", Opcodes.INTEGER], 0, None)
  mv.visitVarInsn(Opcodes.ILOAD, 3)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/PointMatchesFast", "pointmatches", "Ljava/util/List;")
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "size", "()I", True)
  l1 = Label()
  mv.visitJumpInsn(Opcodes.IF_ICMPGE, l1)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/PointMatchesFast", "pointmatches", "Ljava/util/List;")
  mv.visitVarInsn(Opcodes.ILOAD, 3)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", True)
  mv.visitTypeInsn(Opcodes.CHECKCAST, "mpicbg/models/PointMatch")
  mv.visitVarInsn(Opcodes.ASTORE, 4)
  mv.visitVarInsn(Opcodes.ALOAD, 4)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/PointMatch", "getP1", "()Lmpicbg/models/Point;", False)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D", False)
  mv.visitVarInsn(Opcodes.ASTORE, 5)
  mv.visitVarInsn(Opcodes.ALOAD, 4)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/PointMatch", "getP2", "()Lmpicbg/models/Point;", False)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D", False)
  mv.visitVarInsn(Opcodes.ASTORE, 6)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitVarInsn(Opcodes.ISTORE, 7)
  l2 = Label()
  mv.visitLabel(l2)
  mv.visitFrame(Opcodes.F_FULL, 8, ["my/PointMatchesFast", Opcodes.INTEGER, "[[D", Opcodes.INTEGER, "mpicbg/models/PointMatch", "[D", "[D", Opcodes.INTEGER], 0, [])
  mv.visitVarInsn(Opcodes.ILOAD, 7)
  mv.visitVarInsn(Opcodes.ILOAD, 1)
  l3 = Label()
  mv.visitJumpInsn(Opcodes.IF_ICMPGE, l3)
  mv.visitVarInsn(Opcodes.ALOAD, 2)
  mv.visitVarInsn(Opcodes.ILOAD, 3)
  mv.visitInsn(Opcodes.AALOAD)
  mv.visitVarInsn(Opcodes.ILOAD, 7)
  mv.visitVarInsn(Opcodes.ALOAD, 5)
  mv.visitVarInsn(Opcodes.ILOAD, 7)
  mv.visitInsn(Opcodes.DALOAD)
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitIincInsn(7, 1)
  mv.visitJumpInsn(Opcodes.GOTO, l2)
  mv.visitLabel(l3)
  mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitVarInsn(Opcodes.ISTORE, 7)
  l4 = Label()
  mv.visitLabel(l4)
  mv.visitFrame(Opcodes.F_APPEND,1, [Opcodes.INTEGER], 0, None)
  mv.visitVarInsn(Opcodes.ILOAD, 7)
  mv.visitVarInsn(Opcodes.ILOAD, 1)
  l5 = Label()
  mv.visitJumpInsn(Opcodes.IF_ICMPGE, l5)
  mv.visitVarInsn(Opcodes.ALOAD, 2)
  mv.visitVarInsn(Opcodes.ILOAD, 3)
  mv.visitInsn(Opcodes.AALOAD)
  mv.visitVarInsn(Opcodes.ILOAD, 1)
  mv.visitVarInsn(Opcodes.ILOAD, 7)
  mv.visitInsn(Opcodes.IADD)
  mv.visitVarInsn(Opcodes.ALOAD, 6)
  mv.visitVarInsn(Opcodes.ILOAD, 7)
  mv.visitInsn(Opcodes.DALOAD)
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitIincInsn(7, 1)
  mv.visitJumpInsn(Opcodes.GOTO, l4)
  mv.visitLabel(l5)
  mv.visitFrame(Opcodes.F_FULL, 4, ["my/PointMatchesFast", Opcodes.INTEGER, "[[D", Opcodes.INTEGER], 0, [])
  mv.visitIincInsn(3, 1)
  mv.visitJumpInsn(Opcodes.GOTO, l0)
  mv.visitLabel(l1)
  mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None)
  mv.visitVarInsn(Opcodes.ALOAD, 2)
  mv.visitInsn(Opcodes.ARETURN)
  mv.visitMaxs(4, 8)
  mv.visitEnd()


  mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "fromRows", "(Ljava/util/Iterator;)Lmy/PointMatchesFast;", "(Ljava/util/Iterator<Ljava/util/List<Ljava/lang/String;>;>;)Lmy/PointMatchesFast;", None)
  mv.visitCode()
  mv.visitTypeInsn(Opcodes.NEW, "java/util/ArrayList")
  mv.visitInsn(Opcodes.DUP)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V", False)
  mv.visitVarInsn(Opcodes.ASTORE, 1)
  l0 = Label()
  mv.visitLabel(l0)
  mv.visitFrame(Opcodes.F_APPEND,1, ["java/util/List"], 0, None)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z", True)
  l1 = Label()
  mv.visitJumpInsn(Opcodes.IFEQ, l1)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;", True)
  mv.visitTypeInsn(Opcodes.CHECKCAST, "java/util/List")
  mv.visitVarInsn(Opcodes.ASTORE, 2)
  mv.visitVarInsn(Opcodes.ALOAD, 2)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "size", "()I", True)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitInsn(Opcodes.IDIV)
  mv.visitVarInsn(Opcodes.ISTORE, 3)
  mv.visitVarInsn(Opcodes.ILOAD, 3)
  mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_DOUBLE)
  mv.visitVarInsn(Opcodes.ASTORE, 4)
  mv.visitVarInsn(Opcodes.ILOAD, 3)
  mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_DOUBLE)
  mv.visitVarInsn(Opcodes.ASTORE, 5)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitVarInsn(Opcodes.ISTORE, 6)
  l2 = Label()
  mv.visitLabel(l2)
  mv.visitFrame(Opcodes.F_FULL, 7, ["java/util/Iterator", "java/util/List", "java/util/List", Opcodes.INTEGER, "[D", "[D", Opcodes.INTEGER], 0, [])
  mv.visitVarInsn(Opcodes.ILOAD, 6)
  mv.visitVarInsn(Opcodes.ILOAD, 3)
  l3 = Label()
  mv.visitJumpInsn(Opcodes.IF_ICMPGE, l3)
  mv.visitVarInsn(Opcodes.ALOAD, 4)
  mv.visitVarInsn(Opcodes.ILOAD, 6)
  mv.visitVarInsn(Opcodes.ALOAD, 2)
  mv.visitVarInsn(Opcodes.ILOAD, 6)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", True)
  mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/String")
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Double", "parseDouble", "(Ljava/lang/String;)D", False)
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitIincInsn(6, 1)
  mv.visitJumpInsn(Opcodes.GOTO, l2)
  mv.visitLabel(l3)
  mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitVarInsn(Opcodes.ISTORE, 6)
  l4 = Label()
  mv.visitLabel(l4)
  mv.visitFrame(Opcodes.F_APPEND,1, [Opcodes.INTEGER], 0, None)
  mv.visitVarInsn(Opcodes.ILOAD, 6)
  mv.visitVarInsn(Opcodes.ILOAD, 3)
  l5 = Label()
  mv.visitJumpInsn(Opcodes.IF_ICMPGE, l5)
  mv.visitVarInsn(Opcodes.ALOAD, 5)
  mv.visitVarInsn(Opcodes.ILOAD, 6)
  mv.visitVarInsn(Opcodes.ALOAD, 2)
  mv.visitVarInsn(Opcodes.ILOAD, 3)
  mv.visitVarInsn(Opcodes.ILOAD, 6)
  mv.visitInsn(Opcodes.IADD)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", True)
  mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/String")
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Double", "parseDouble", "(Ljava/lang/String;)D", False)
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitIincInsn(6, 1)
  mv.visitJumpInsn(Opcodes.GOTO, l4)
  mv.visitLabel(l5)
  mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitTypeInsn(Opcodes.NEW, "mpicbg/models/PointMatch")
  mv.visitInsn(Opcodes.DUP)
  mv.visitTypeInsn(Opcodes.NEW, "mpicbg/models/Point")
  mv.visitInsn(Opcodes.DUP)
  mv.visitVarInsn(Opcodes.ALOAD, 4)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "mpicbg/models/Point", "<init>", "([D)V", False)
  mv.visitTypeInsn(Opcodes.NEW, "mpicbg/models/Point")
  mv.visitInsn(Opcodes.DUP)
  mv.visitVarInsn(Opcodes.ALOAD, 5)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "mpicbg/models/Point", "<init>", "([D)V", False)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "mpicbg/models/PointMatch", "<init>", "(Lmpicbg/models/Point;Lmpicbg/models/Point;)V", False)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z", True)
  mv.visitInsn(Opcodes.POP)
  mv.visitJumpInsn(Opcodes.GOTO, l0)
  mv.visitLabel(l1)
  mv.visitFrame(Opcodes.F_FULL, 2, ["java/util/Iterator", "java/util/List"], 0, [])
  mv.visitTypeInsn(Opcodes.NEW, "my/PointMatchesFast")
  mv.visitInsn(Opcodes.DUP)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "my/PointMatchesFast", "<init>", "(Ljava/util/List;)V", False)
  mv.visitInsn(Opcodes.ARETURN)
  mv.visitMaxs(7, 7)
  mv.visitEnd()

  
  mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "csvHeader", "(Lmpicbg/models/PointMatch;)[Ljava/lang/String;", None, None)
  mv.visitCode()
  mv.visitInsn(Opcodes.ICONST_3)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/PointMatch", "getP1", "()Lmpicbg/models/Point;", False)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D", False)
  mv.visitInsn(Opcodes.ARRAYLENGTH)
  l0 = Label()
  mv.visitJumpInsn(Opcodes.IF_ICMPNE, l0)
  mv.visitIntInsn(Opcodes.BIPUSH, 6)
  mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/String")
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitLdcInsn("x1")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitLdcInsn("y1")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitLdcInsn("z1")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_3)
  mv.visitLdcInsn("x2")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_4)
  mv.visitLdcInsn("y2")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_5)
  mv.visitLdcInsn("z2")
  mv.visitInsn(Opcodes.AASTORE)
  l1 = Label()
  mv.visitJumpInsn(Opcodes.GOTO, l1)
  mv.visitLabel(l0)
  mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None)
  mv.visitInsn(Opcodes.ICONST_4)
  mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/String")
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitLdcInsn("x1")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitLdcInsn("y1")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitLdcInsn("x2")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_3)
  mv.visitLdcInsn("y2")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitLabel(l1)
  mv.visitFrame(Opcodes.F_SAME1, 0, None, 1, ["[Ljava/lang/String;"])
  mv.visitInsn(Opcodes.ARETURN)
  mv.visitMaxs(4, 1)
  mv.visitEnd()
  
  
  mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "asRow", "(Lmpicbg/models/PointMatch;)[D", None, None)
  mv.visitCode()
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/PointMatch", "getP1", "()Lmpicbg/models/Point;", False)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D", False)
  mv.visitVarInsn(Opcodes.ASTORE, 1)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/PointMatch", "getP2", "()Lmpicbg/models/Point;", False)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D", False)
  mv.visitVarInsn(Opcodes.ASTORE, 2)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitInsn(Opcodes.ARRAYLENGTH)
  mv.visitVarInsn(Opcodes.ALOAD, 2)
  mv.visitInsn(Opcodes.ARRAYLENGTH)
  mv.visitInsn(Opcodes.IADD)
  mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_DOUBLE)
  mv.visitVarInsn(Opcodes.ASTORE, 3)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitVarInsn(Opcodes.ISTORE, 4)
  l0 = Label()
  mv.visitLabel(l0)
  mv.visitFrame(Opcodes.F_FULL, 5, ["mpicbg/models/PointMatch", "[D", "[D", "[D", Opcodes.INTEGER], 0, [])
  mv.visitVarInsn(Opcodes.ILOAD, 4)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitInsn(Opcodes.ARRAYLENGTH)
  l1 = Label()
  mv.visitJumpInsn(Opcodes.IF_ICMPGE, l1)
  mv.visitVarInsn(Opcodes.ALOAD, 3)
  mv.visitVarInsn(Opcodes.ILOAD, 4)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitVarInsn(Opcodes.ILOAD, 4)
  mv.visitInsn(Opcodes.DALOAD)
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitIincInsn(4, 1)
  mv.visitJumpInsn(Opcodes.GOTO, l0)
  mv.visitLabel(l1)
  mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitVarInsn(Opcodes.ISTORE, 4)
  l2 = Label()
  mv.visitLabel(l2)
  mv.visitFrame(Opcodes.F_APPEND,1, [Opcodes.INTEGER], 0, None)
  mv.visitVarInsn(Opcodes.ILOAD, 4)
  mv.visitVarInsn(Opcodes.ALOAD, 2)
  mv.visitInsn(Opcodes.ARRAYLENGTH)
  l3 = Label()
  mv.visitJumpInsn(Opcodes.IF_ICMPGE, l3)
  mv.visitVarInsn(Opcodes.ALOAD, 3)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitInsn(Opcodes.ARRAYLENGTH)
  mv.visitVarInsn(Opcodes.ILOAD, 4)
  mv.visitInsn(Opcodes.IADD)
  mv.visitVarInsn(Opcodes.ALOAD, 2)
  mv.visitVarInsn(Opcodes.ILOAD, 4)
  mv.visitInsn(Opcodes.DALOAD)
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitIincInsn(4, 1)
  mv.visitJumpInsn(Opcodes.GOTO, l2)
  mv.visitLabel(l3)
  mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None)
  mv.visitVarInsn(Opcodes.ALOAD, 3)
  mv.visitInsn(Opcodes.ARETURN)
  mv.visitMaxs(4, 5)
  mv.visitEnd()

  
  cw.visitEnd()

  if not classloader:
    classloader = CustomClassLoader()
  return classloader.defineClass("my/PointMatchesFast", cw.toByteArray())
コード例 #3
0
ファイル: loop.py プロジェクト: acardona/scripts
def defineBiConsumerTypeSet(imglib2Type, classname=None):
    """ 
      A class to use in e.g. an ImgLib2 LoopBuilder.setImages(img1, img2).forEachPixel(<instance of this BiConsumer class>)
      where both image are of the same Type, and the value of one has to be set as the value of the other, like this:
        type1.set(type2)
        
      In java, this would be written as: LoopBuilder.setImages(img1, img2).forEachPixel( (type1, type2) -> type1.set(type2) );
  """
    typeClassname = imglib2Type.getName().replace(".", "/")

    if classname is None:
        classname = "asm/loop/BiConsumer_%s_set" % imglib2Type.getSimpleName()

    classWriter = ClassWriter(0)
    classWriter.visit(
        Opcodes.V1_8, Opcodes.ACC_PUBLIC | Opcodes.ACC_SUPER, classname,
        "<T::L%s<TT;>;>Ljava/lang/Object;Ljava/util/function/BiConsumer<TT;TT;>;"
        % typeClassname, "java/lang/Object", ["java/util/function/BiConsumer"])

    # Constructor
    methodVisitor = classWriter.visitMethod(Opcodes.ACC_PUBLIC, "<init>",
                                            "()V", None, None)
    methodVisitor.visitCode()
    methodVisitor.visitVarInsn(Opcodes.ALOAD, 0)
    methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object",
                                  "<init>", "()V", False)
    methodVisitor.visitInsn(Opcodes.RETURN)
    methodVisitor.visitMaxs(1, 1)
    methodVisitor.visitEnd()

    # BiConsumer.accept method implementation with body Type.set(Type)
    methodVisitor = classWriter.visitMethod(
        Opcodes.ACC_PUBLIC, "accept",
        "(L%s;L%s;)V" % (typeClassname, typeClassname), "(TT;TT;)V", None)
    methodVisitor.visitCode()
    methodVisitor.visitVarInsn(Opcodes.ALOAD, 2)
    methodVisitor.visitVarInsn(Opcodes.ALOAD, 1)
    methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, typeClassname, "set",
                                  "(L%s;)V" % typeClassname, False)
    methodVisitor.visitInsn(Opcodes.RETURN)
    methodVisitor.visitMaxs(2, 3)
    methodVisitor.visitEnd()

    # BiConsumer.accept method with Object,Object arguments: to provide a bridge between the BiConsumer.accept method and the class accept method
    methodVisitor = classWriter.visitMethod(
        Opcodes.ACC_PUBLIC | Opcodes.ACC_BRIDGE | Opcodes.ACC_SYNTHETIC,
        "accept", "(Ljava/lang/Object;Ljava/lang/Object;)V", None, None)
    methodVisitor.visitCode()
    methodVisitor.visitVarInsn(Opcodes.ALOAD, 0)
    methodVisitor.visitVarInsn(Opcodes.ALOAD, 1)
    methodVisitor.visitTypeInsn(Opcodes.CHECKCAST, typeClassname)
    methodVisitor.visitVarInsn(Opcodes.ALOAD, 2)
    methodVisitor.visitTypeInsn(Opcodes.CHECKCAST, typeClassname)
    methodVisitor.visitMethodInsn(
        Opcodes.INVOKEVIRTUAL, classname, "accept",
        "(L%s;L%s;)V" % (typeClassname, typeClassname), False)
    methodVisitor.visitInsn(Opcodes.RETURN)
    methodVisitor.visitMaxs(3, 3)
    methodVisitor.visitEnd()

    classWriter.visitEnd()

    loader = CustomClassLoader()
    biconsumerClass = loader.defineClass(classname, classWriter.toByteArray())
    return biconsumerClass
コード例 #4
0
def createNativeConstellationClass(classloader=None):
  """ A Constellation class implemented natively in java using the ASM library. """
  cw = ClassWriter(0)

  cw.visit(52, Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_SUPER, "my/ConstellationFast", None, "java/lang/Object", None)


  fv = cw.visitField(Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL, "angle", "D", None, None)
  fv.visitEnd()


  fv = cw.visitField(Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL, "len1", "D", None, None)
  fv.visitEnd()


  fv = cw.visitField(Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL, "len2", "D", None, None)
  fv.visitEnd()


  fv = cw.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "position", "Lmpicbg/models/Point;", None, None)
  fv.visitEnd()

  fv = cw.visitField(Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL, "len_ratio", "D", None, None)
  fv.visitEnd()

  mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "(DDD[D)V", None, None)
  mv.visitCode()
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V")
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitVarInsn(Opcodes.DLOAD, 1)
  mv.visitFieldInsn(Opcodes.PUTFIELD, "my/ConstellationFast", "angle", "D")
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitVarInsn(Opcodes.DLOAD, 3)
  mv.visitFieldInsn(Opcodes.PUTFIELD, "my/ConstellationFast", "len1", "D")
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitVarInsn(Opcodes.DLOAD, 5)
  mv.visitFieldInsn(Opcodes.PUTFIELD, "my/ConstellationFast", "len2", "D")
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitVarInsn(Opcodes.DLOAD, 3)
  mv.visitVarInsn(Opcodes.DLOAD, 3)
  mv.visitVarInsn(Opcodes.DLOAD, 5)
  mv.visitInsn(Opcodes.DADD)
  mv.visitInsn(Opcodes.DDIV)
  mv.visitFieldInsn(Opcodes.PUTFIELD, "my/ConstellationFast", "len_ratio", "D")
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitTypeInsn(Opcodes.NEW, "mpicbg/models/Point")
  mv.visitInsn(Opcodes.DUP)
  mv.visitVarInsn(Opcodes.ALOAD, 7)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "mpicbg/models/Point", "<init>", "([D)V")
  mv.visitFieldInsn(Opcodes.PUTFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;")
  mv.visitInsn(Opcodes.RETURN)
  mv.visitMaxs(7, 8)
  mv.visitEnd()


  mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "matches", "(Lmy/ConstellationFast;DD)Z", None, None)
  mv.visitCode()
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "angle", "D")
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "angle", "D")
  mv.visitInsn(Opcodes.DSUB)
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "abs", "(D)D")
  mv.visitVarInsn(Opcodes.DLOAD, 2)
  mv.visitInsn(Opcodes.DCMPG)
  l0 = Label()
  mv.visitJumpInsn(Opcodes.IFGE, l0)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len1", "D")
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len1", "D")
  mv.visitInsn(Opcodes.DSUB)
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "abs", "(D)D")
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len2", "D")
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len2", "D")
  mv.visitInsn(Opcodes.DSUB)
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "abs", "(D)D")
  mv.visitInsn(Opcodes.DADD)
  mv.visitVarInsn(Opcodes.DLOAD, 4)
  mv.visitInsn(Opcodes.DCMPG)
  mv.visitJumpInsn(Opcodes.IFGE, l0)
  mv.visitInsn(Opcodes.ICONST_1)
  l1 = Label()
  mv.visitJumpInsn(Opcodes.GOTO, l1)
  mv.visitLabel(l0)
  mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitLabel(l1)
  mv.visitFrame(Opcodes.F_SAME1, 0, None, 1, [Opcodes.INTEGER])
  mv.visitInsn(Opcodes.IRETURN)
  mv.visitMaxs(6, 6)
  mv.visitEnd()

  mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "matchesScaleInvariant", "(Lmy/ConstellationFast;DD)Z", None, None)
  mv.visitCode()
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "angle", "D")
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "angle", "D")
  mv.visitInsn(Opcodes.DSUB)
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "abs", "(D)D")
  mv.visitVarInsn(Opcodes.DLOAD, 2)
  mv.visitInsn(Opcodes.DCMPG)
  l0 = Label()
  mv.visitJumpInsn(Opcodes.IFGE, l0)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len_ratio", "D")
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len_ratio", "D")
  mv.visitInsn(Opcodes.DSUB)
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "abs", "(D)D")
  mv.visitVarInsn(Opcodes.DLOAD, 4)
  mv.visitInsn(Opcodes.DCMPG)
  mv.visitJumpInsn(Opcodes.IFGE, l0)
  mv.visitInsn(Opcodes.ICONST_1)
  l1 = Label()
  mv.visitJumpInsn(Opcodes.GOTO, l1)
  mv.visitLabel(l0)
  mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitLabel(l1)
  mv.visitFrame(Opcodes.F_SAME1, 0, None, 1, [Opcodes.INTEGER])
  mv.visitInsn(Opcodes.IRETURN)
  mv.visitMaxs(4, 6)
  mv.visitEnd()


  mv = cw.visitMethod(Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "computeAngle", "(DDDDDDDD)D", None, None)
  mv.visitCode()
  mv.visitVarInsn(Opcodes.DLOAD, 6)
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "sqrt", "(D)D")
  mv.visitVarInsn(Opcodes.DSTORE, 16)
  mv.visitVarInsn(Opcodes.DLOAD, 14)
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "sqrt", "(D)D")
  mv.visitVarInsn(Opcodes.DSTORE, 18)
  mv.visitVarInsn(Opcodes.DLOAD, 0)
  mv.visitVarInsn(Opcodes.DLOAD, 8)
  mv.visitInsn(Opcodes.DMUL)
  mv.visitVarInsn(Opcodes.DLOAD, 2)
  mv.visitVarInsn(Opcodes.DLOAD, 10)
  mv.visitInsn(Opcodes.DMUL)
  mv.visitInsn(Opcodes.DADD)
  mv.visitVarInsn(Opcodes.DLOAD, 4)
  mv.visitVarInsn(Opcodes.DLOAD, 12)
  mv.visitInsn(Opcodes.DMUL)
  mv.visitInsn(Opcodes.DADD)
  mv.visitVarInsn(Opcodes.DSTORE, 20)
  mv.visitVarInsn(Opcodes.DLOAD, 20)
  mv.visitVarInsn(Opcodes.DLOAD, 16)
  mv.visitVarInsn(Opcodes.DLOAD, 18)
  mv.visitInsn(Opcodes.DMUL)
  mv.visitInsn(Opcodes.DDIV)
  mv.visitVarInsn(Opcodes.DSTORE, 22)
  mv.visitVarInsn(Opcodes.DLOAD, 22)
  mv.visitInsn(Opcodes.DCONST_1)
  mv.visitInsn(Opcodes.DCMPL)
  l0 = Label()
  mv.visitJumpInsn(Opcodes.IFLE, l0)
  mv.visitInsn(Opcodes.DCONST_1)
  l1 = Label()
  mv.visitJumpInsn(Opcodes.GOTO, l1)
  mv.visitLabel(l0)
  mv.visitFrame(Opcodes.F_FULL, 12, [Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE], 0, [])
  mv.visitVarInsn(Opcodes.DLOAD, 22)
  mv.visitLdcInsn(Double("-1.0"))
  mv.visitInsn(Opcodes.DCMPG)
  l2 = Label()
  mv.visitJumpInsn(Opcodes.IFGE, l2)
  mv.visitLdcInsn(Double("-1.0"))
  mv.visitJumpInsn(Opcodes.GOTO, l1)
  mv.visitLabel(l2)
  mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None)
  mv.visitVarInsn(Opcodes.DLOAD, 22)
  mv.visitLabel(l1)
  mv.visitFrame(Opcodes.F_SAME1, 0, None, 1, [Opcodes.DOUBLE])
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "acos", "(D)D")
  mv.visitInsn(Opcodes.DRETURN)
  mv.visitMaxs(6, 24)
  mv.visitEnd()


  mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "fromSearch", "(Lnet/imglib2/RealLocalizable;Lnet/imglib2/RealLocalizable;DLnet/imglib2/RealLocalizable;D)Lmy/ConstellationFast;", None, None)
  mv.visitCode()
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F")
  mv.visitInsn(Opcodes.F2D)
  mv.visitVarInsn(Opcodes.DSTORE, 7)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F")
  mv.visitInsn(Opcodes.F2D)
  mv.visitVarInsn(Opcodes.DSTORE, 9)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F")
  mv.visitInsn(Opcodes.F2D)
  mv.visitVarInsn(Opcodes.DSTORE, 11)
  mv.visitTypeInsn(Opcodes.NEW, "my/ConstellationFast")
  mv.visitInsn(Opcodes.DUP)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F")
  mv.visitInsn(Opcodes.F2D)
  mv.visitVarInsn(Opcodes.DLOAD, 7)
  mv.visitInsn(Opcodes.DSUB)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F")
  mv.visitInsn(Opcodes.F2D)
  mv.visitVarInsn(Opcodes.DLOAD, 9)
  mv.visitInsn(Opcodes.DSUB)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F")
  mv.visitInsn(Opcodes.F2D)
  mv.visitVarInsn(Opcodes.DLOAD, 11)
  mv.visitInsn(Opcodes.DSUB)
  mv.visitVarInsn(Opcodes.DLOAD, 2)
  mv.visitVarInsn(Opcodes.ALOAD, 4)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F")
  mv.visitInsn(Opcodes.F2D)
  mv.visitVarInsn(Opcodes.DLOAD, 7)
  mv.visitInsn(Opcodes.DSUB)
  mv.visitVarInsn(Opcodes.ALOAD, 4)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F")
  mv.visitInsn(Opcodes.F2D)
  mv.visitVarInsn(Opcodes.DLOAD, 9)
  mv.visitInsn(Opcodes.DSUB)
  mv.visitVarInsn(Opcodes.ALOAD, 4)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F")
  mv.visitInsn(Opcodes.F2D)
  mv.visitVarInsn(Opcodes.DLOAD, 11)
  mv.visitInsn(Opcodes.DSUB)
  mv.visitVarInsn(Opcodes.DLOAD, 5)
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "my/ConstellationFast", "computeAngle", "(DDDDDDDD)D")
  mv.visitVarInsn(Opcodes.DLOAD, 2)
  mv.visitVarInsn(Opcodes.DLOAD, 5)
  mv.visitInsn(Opcodes.ICONST_3)
  mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_DOUBLE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitVarInsn(Opcodes.DLOAD, 7)
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitVarInsn(Opcodes.DLOAD, 9)
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitVarInsn(Opcodes.DLOAD, 11)
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "my/ConstellationFast", "<init>", "(DDD[D)V")
  mv.visitInsn(Opcodes.ARETURN)
  mv.visitMaxs(18, 13)
  mv.visitEnd()


  mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "fromRow", "(Ljava/util/List;)Lmy/ConstellationFast;", "(Ljava/util/List<Ljava/lang/Double;>;)Lmy/ConstellationFast;", None)
  mv.visitCode()
  mv.visitTypeInsn(Opcodes.NEW, "my/ConstellationFast")
  mv.visitInsn(Opcodes.DUP)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;")
  mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Double")
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D")
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;")
  mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Double")
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D")
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;")
  mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Double")
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D")
  mv.visitInsn(Opcodes.ICONST_3)
  mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_DOUBLE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitInsn(Opcodes.ICONST_3)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;")
  mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Double")
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D")
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitInsn(Opcodes.ICONST_4)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;")
  mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Double")
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D")
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitInsn(Opcodes.ICONST_5)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;")
  mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Double")
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D")
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "my/ConstellationFast", "<init>", "(DDD[D)V")
  mv.visitInsn(Opcodes.ARETURN)
  mv.visitMaxs(13, 1)
  mv.visitEnd()


  mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "asRow", "()[D", None, None)
  mv.visitCode()
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;")
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D")
  mv.visitVarInsn(Opcodes.ASTORE, 1)
  mv.visitIntInsn(Opcodes.BIPUSH, 6)
  mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_DOUBLE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "angle", "D")
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len1", "D")
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len2", "D")
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_3)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitInsn(Opcodes.DALOAD)
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_4)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitInsn(Opcodes.DALOAD)
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_5)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitInsn(Opcodes.DALOAD)
  mv.visitInsn(Opcodes.DASTORE)
  mv.visitInsn(Opcodes.ARETURN)
  mv.visitMaxs(5, 2)
  mv.visitEnd()


  mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "csvHeader", "()[Ljava/lang/String;", None, None)
  mv.visitCode()
  mv.visitIntInsn(Opcodes.BIPUSH, 6)
  mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/String")
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitLdcInsn("angle")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitLdcInsn("len1")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitLdcInsn("len2")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_3)
  mv.visitLdcInsn("x")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_4)
  mv.visitLdcInsn("y")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.DUP)
  mv.visitInsn(Opcodes.ICONST_5)
  mv.visitLdcInsn("z")
  mv.visitInsn(Opcodes.AASTORE)
  mv.visitInsn(Opcodes.ARETURN)
  mv.visitMaxs(4, 0)
  mv.visitEnd()


  mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "extractFeatures", "(Ljava/util/List;Lnet/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree;DDD)Ljava/util/List;", "(Ljava/util/List<Lnet/imglib2/RealLocalizable;>;Lnet/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree<Lnet/imglib2/RealLocalizable;>;DDD)Ljava/util/List<Lmy/ConstellationFast;>;", None)
  mv.visitCode()
  mv.visitTypeInsn(Opcodes.NEW, "java/util/ArrayList")
  mv.visitInsn(Opcodes.DUP)
  mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V")
  mv.visitVarInsn(Opcodes.ASTORE, 8)
  mv.visitVarInsn(Opcodes.ALOAD, 0)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "iterator", "()Ljava/util/Iterator;")
  mv.visitVarInsn(Opcodes.ASTORE, 9)
  l0 = Label()
  mv.visitLabel(l0)
  mv.visitFrame(Opcodes.F_APPEND,2, ["java/util/List", "java/util/Iterator"], 0, None)
  mv.visitVarInsn(Opcodes.ALOAD, 9)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z")
  l1 = Label()
  mv.visitJumpInsn(Opcodes.IFEQ, l1)
  mv.visitVarInsn(Opcodes.ALOAD, 9)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;")
  mv.visitTypeInsn(Opcodes.CHECKCAST, "net/imglib2/RealLocalizable")
  mv.visitVarInsn(Opcodes.ASTORE, 10)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitVarInsn(Opcodes.ALOAD, 10)
  mv.visitVarInsn(Opcodes.DLOAD, 2)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "search", "(Lnet/imglib2/RealLocalizable;DZ)V")
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "numNeighbors", "()I")
  mv.visitVarInsn(Opcodes.ISTORE, 11)
  mv.visitVarInsn(Opcodes.ILOAD, 11)
  mv.visitInsn(Opcodes.ICONST_2)
  l2 = Label()
  mv.visitJumpInsn(Opcodes.IF_ICMPLE, l2)
  mv.visitInsn(Opcodes.ICONST_0)
  mv.visitVarInsn(Opcodes.ISTORE, 12)
  mv.visitVarInsn(Opcodes.ILOAD, 11)
  mv.visitInsn(Opcodes.ICONST_2)
  mv.visitInsn(Opcodes.ISUB)
  mv.visitVarInsn(Opcodes.ISTORE, 13)
  mv.visitVarInsn(Opcodes.ILOAD, 11)
  mv.visitInsn(Opcodes.ICONST_1)
  mv.visitInsn(Opcodes.ISUB)
  mv.visitVarInsn(Opcodes.ISTORE, 14)
  l3 = Label()
  mv.visitLabel(l3)
  mv.visitFrame(Opcodes.F_FULL, 12, ["java/util/List", "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, "java/util/List", "java/util/Iterator", "net/imglib2/RealLocalizable", Opcodes.INTEGER, Opcodes.INTEGER, Opcodes.INTEGER, Opcodes.INTEGER], 0, [])
  mv.visitVarInsn(Opcodes.ILOAD, 13)
  mv.visitJumpInsn(Opcodes.IFLE, l2)
  mv.visitVarInsn(Opcodes.DLOAD, 6)
  mv.visitVarInsn(Opcodes.ILOAD, 12)
  mv.visitInsn(Opcodes.I2D)
  mv.visitInsn(Opcodes.DCMPL)
  l4 = Label()
  mv.visitJumpInsn(Opcodes.IFNE, l4)
  mv.visitJumpInsn(Opcodes.GOTO, l2)
  mv.visitLabel(l4)
  mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None)
  mv.visitVarInsn(Opcodes.ALOAD, 10)
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitVarInsn(Opcodes.ILOAD, 13)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "getPosition", "(I)Lnet/imglib2/RealLocalizable;")
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitVarInsn(Opcodes.ILOAD, 13)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "getSquareDistance", "(I)D")
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitVarInsn(Opcodes.ILOAD, 14)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "getPosition", "(I)Lnet/imglib2/RealLocalizable;")
  mv.visitVarInsn(Opcodes.ALOAD, 1)
  mv.visitVarInsn(Opcodes.ILOAD, 14)
  mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "getSquareDistance", "(I)D")
  mv.visitMethodInsn(Opcodes.INVOKESTATIC, "my/ConstellationFast", "fromSearch", "(Lnet/imglib2/RealLocalizable;Lnet/imglib2/RealLocalizable;DLnet/imglib2/RealLocalizable;D)Lmy/ConstellationFast;")
  mv.visitVarInsn(Opcodes.ASTORE, 15)
  mv.visitVarInsn(Opcodes.ALOAD, 15)
  mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "angle", "D")
  mv.visitVarInsn(Opcodes.DLOAD, 4)
  mv.visitInsn(Opcodes.DCMPL)
  l5 = Label()
  mv.visitJumpInsn(Opcodes.IFLT, l5)
  mv.visitIincInsn(12, 1)
  mv.visitVarInsn(Opcodes.ALOAD, 8)
  mv.visitVarInsn(Opcodes.ALOAD, 15)
  mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z")
  mv.visitInsn(Opcodes.POP)
  mv.visitLabel(l5)
  mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None)
  mv.visitIincInsn(13, -1)
  mv.visitIincInsn(14, -1)
  mv.visitJumpInsn(Opcodes.GOTO, l3)
  mv.visitLabel(l2)
  mv.visitFrame(Opcodes.F_FULL, 7, ["java/util/List", "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, "java/util/List", "java/util/Iterator"], 0, [])
  mv.visitJumpInsn(Opcodes.GOTO, l0)
  mv.visitLabel(l1)
  mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None)
  mv.visitVarInsn(Opcodes.ALOAD, 8)
  mv.visitInsn(Opcodes.ARETURN)
  mv.visitMaxs(7, 16)
  mv.visitEnd()

  cw.visitEnd()

  if not classloader:
    classloader = CustomClassLoader()
  return classloader.defineClass("my/ConstellationFast", cw.toByteArray())
コード例 #5
0
ファイル: asm.py プロジェクト: mwinding/scripts
def initClass(
    name,
    signature=None,
    class_parameters=[],  # list of tuples like [("I", UnsignedByteType), ("O", FloatType)]
    java_version=Opcodes.V1_8,
    access=Opcodes.ACC_PUBLIC,
    superclass=Object,
    superclass_parameters=[],  # list of strings like ["I", "O"]
    superclass_prefixes=[],  # list of strings like ['+', ''] where '+' means e.g. <? extends FloatType>
    interfaces=[],
    interfaces_parameters={},  # dict of class vs class or parameters like {Converter: ["I", "O"]}
    with_default_constructor=True):
    """ Returns a ClassWriter with the class already initialized.

      An example of a class signature. This class declaration:

      public class UnsignedByteToFloatConverter<I extends UnsignedByte, O extends FloatType>
        implements Converter<I, O>

      ... has this signature:

      <I:Lnet/imglib2/type/numeric/integer/UnsignedByteType;O:Lnet/imglib2/type/numeric/real/FloatType;>Ljava/lang/Object;Lnet/imglib2/converter/Converter<TI;TO;>;
      
      First the two class parameter types I and O, which extend UnsignedByteType and FloatType, respectively:
        <I:Lnet/imglib2/type/numeric/integer/UnsignedByteType;OLnet/imglib2/type/numeric/real/FloatType;>

      Then the superclass, which could also be parametrized (with parameter types between <>,
      but not in this case where it is Object (the default):
        Ljava/lang/Object;

      Then the interface, if any; in this case Converter, parametrized with I and O:
        Lnet/imglib2/converter/Converter<TI;TO;>;

      Notice each class name starts with 'L' and ends with ';', whereas
      parameters types start with 'T' followed by string of alphabetic characters
      (often just one like "TI" or "TO").

      A way to compute the fully qualified class names for the signature by
      using the Type.getInternalName from the org.objectweb.asm package:
      
      class_signature = "<I:L%s;O:L%s;>L%s;L%s<TI;TO;>;" % \
         tuple(imap(Type.getInternalName, (UnsignedByteType, FloatType, Object, Converter)))
  """

    if not signature:
        # Construct the signature
        # 1. Class parameter types, if any
        if len(class_parameters) > 0:
            p = "<" + "".join("%s:L%s;" % (t, Type.getInternalName(classname))
                              for t, classname in class_parameters) + ">"
        else:
            p = ""

        # 2. Superclass and its parameter types, if any
        sp = "L%s;" % Type.getInternalName(superclass)
        if len(superclass_parameters) > 0:
            sp += "<" + "".join("T%s;" % t
                                for t in superclass_parameters) + ">"

        # 3. Interfaces and their parameter types, if any
        ips = []
        for interface in interfaces:
            ip = "L%s" % Type.getInternalName(interface)
            types = interfaces_parameters.get(interface, None)
            if types:
                ip += "<" + "".join("%s" % makeType(t) for t in types) + ">"
            ip += ";"
            ips.append(ip)

        signature = p + sp + "".join(ips)

    print "class '%s' signature:\n%s" % (name, signature)

    cw = ClassWriter(ClassWriter.COMPUTE_FRAMES)
    cw.visit(
        java_version,  # java version
        access,  # default to public
        name,  # package and class name
        signature,  # signature
        Type.getInternalName(superclass),  # superclass
        map(Type.getInternalName, interfaces))  # array or list of interfaces

    if with_default_constructor:
        initConstructor(cw, superclass=superclass, default=True)

    return cw
コード例 #6
0
class_object = Type.getInternalName(Object)

# Type I for UnsignedByteType
# Type O for FloatType
# Object for superclass
# Converter<I, O> for interface
class_signature = "<I:L%s;O:L%s;>L%s;L%s<TI;TO;>;" % \
  tuple(imap(Type.getInternalName, (UnsignedByteType, FloatType, Object, Converter)))

print class_signature

# Two arguments, one parameter for each: one for I, and another for O
# void return type: V
method_signature = "(TI;TO;)V;"

cw = ClassWriter(ClassWriter.COMPUTE_FRAMES)
cw.visit(Opcodes.V1_8,                      # java version
         Opcodes.ACC_PUBLIC,                # public class
         class_name,                        # package and class name
         class_signature,                   # signature (None means not generic)
         class_object,                      # superclass
         [Type.getInternalName(Converter)]) # array of interfaces

# Default constructor
constructor = cw.visitMethod(Opcodes.ACC_PUBLIC,  # public
                             "<init>",            # method name
                             "()V",               # descriptor
                             None,                # signature
                             None)                # Exceptions (array of String)

# ... has to invoke the super() for Object
コード例 #7
0
ファイル: converter.py プロジェクト: acardona/scripts
def makeCompositeToRealConverter(reducer_class=Math,
                                 reducer_method="max",
                                 reducer_method_signature="(DD)D",
                                 classloader=None):
    """
  Takes a RealComposite as input and converts it into a RealType,
  by reducing the list of RealType in RealComposite using a specified function.
  reducer_class: e.g. Math
  reducer_method: e.g. "max", a method that takes two doubles and returns one.
  reducer_method_signature: e.g. "(DD)D", two double arguments, returning a double.
  """
    class_name = "my/CompositeToRealConverterVia_" + reducer_class.getName(
    ).replace('.', '_') + '_' + reducer_method
    # Turn e.g. class Math into "java/lang/Math":
    reducer_class_string = reducer_class.getName().replace('.', '/')

    cw = ClassWriter(0)

    cw.visit(
        52, Opcodes.ACC_PUBLIC + Opcodes.ACC_SUPER, class_name,
        "<S::Lnet/imglib2/type/numeric/RealType<TS;>;T::Lnet/imglib2/type/numeric/RealType<TT;>;>Ljava/lang/Object;Lnet/imglib2/converter/Converter<Lnet/imglib2/view/composite/RealComposite<TS;>;TT;>;",
        "java/lang/Object", ["net/imglib2/converter/Converter"])

    mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", None, None)
    mv.visitCode()
    mv.visitVarInsn(Opcodes.ALOAD, 0)
    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>",
                       "()V", False)
    mv.visitInsn(Opcodes.RETURN)
    mv.visitMaxs(1, 1)
    mv.visitEnd()

    mv = cw.visitMethod(
        Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "convert",
        "(Lnet/imglib2/view/composite/RealComposite;Lnet/imglib2/type/numeric/RealType;)V",
        "(Lnet/imglib2/view/composite/RealComposite<TS;>;TT;)V", None)
    mv.visitCode()
    mv.visitVarInsn(Opcodes.ALOAD, 2)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE,
                       "net/imglib2/type/numeric/RealType", "setZero", "()V",
                       True)
    mv.visitVarInsn(Opcodes.ALOAD, 1)
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
                       "net/imglib2/view/composite/RealComposite", "iterator",
                       "()Ljava/util/Iterator;", False)
    mv.visitVarInsn(Opcodes.ASTORE, 4)
    l0 = Label()
    mv.visitJumpInsn(Opcodes.GOTO, l0)
    l1 = Label()
    mv.visitLabel(l1)
    mv.visitFrame(Opcodes.F_FULL, 5, [
        class_name, "net/imglib2/view/composite/RealComposite",
        "net/imglib2/type/numeric/RealType", Opcodes.TOP, "java/util/Iterator"
    ], 0, [])
    mv.visitVarInsn(Opcodes.ALOAD, 4)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next",
                       "()Ljava/lang/Object;", True)
    mv.visitTypeInsn(Opcodes.CHECKCAST, "net/imglib2/type/numeric/RealType")
    mv.visitVarInsn(Opcodes.ASTORE, 3)
    mv.visitVarInsn(Opcodes.ALOAD, 2)
    mv.visitVarInsn(Opcodes.ALOAD, 3)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE,
                       "net/imglib2/type/numeric/RealType", "getRealDouble",
                       "()D", True)
    mv.visitVarInsn(Opcodes.ALOAD, 2)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE,
                       "net/imglib2/type/numeric/RealType", "getRealDouble",
                       "()D", True)
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, reducer_class_string,
                       reducer_method, reducer_method_signature, False)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE,
                       "net/imglib2/type/numeric/RealType", "setReal", "(D)V",
                       True)
    mv.visitLabel(l0)
    mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None)
    mv.visitVarInsn(Opcodes.ALOAD, 4)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator",
                       "hasNext", "()Z", True)
    mv.visitJumpInsn(Opcodes.IFNE, l1)
    mv.visitInsn(Opcodes.RETURN)
    mv.visitMaxs(5, 5)
    mv.visitEnd()

    mv = cw.visitMethod(
        Opcodes.ACC_PUBLIC + Opcodes.ACC_BRIDGE + Opcodes.ACC_SYNTHETIC,
        "convert", "(Ljava/lang/Object;Ljava/lang/Object;)V", None, None)
    mv.visitCode()
    mv.visitVarInsn(Opcodes.ALOAD, 0)
    mv.visitVarInsn(Opcodes.ALOAD, 1)
    mv.visitTypeInsn(Opcodes.CHECKCAST,
                     "net/imglib2/view/composite/RealComposite")
    mv.visitVarInsn(Opcodes.ALOAD, 2)
    mv.visitTypeInsn(Opcodes.CHECKCAST, "net/imglib2/type/numeric/RealType")
    mv.visitMethodInsn(
        Opcodes.INVOKEVIRTUAL, class_name, "convert",
        "(Lnet/imglib2/view/composite/RealComposite;Lnet/imglib2/type/numeric/RealType;)V",
        False)
    mv.visitInsn(Opcodes.RETURN)
    mv.visitMaxs(3, 3)
    mv.visitEnd()

    cw.visitEnd()

    if not classloader:
        classloader = CustomClassLoader()
    return classloader.defineClass(class_name, cw.toByteArray())
コード例 #8
0
ファイル: converter.py プロジェクト: acardona/scripts
def defineConverter(
        fromType,
        toType,
        classname="",
        fromMethod="getRealFloat",
        fromMethodReturnType="F",  # e.g. "F" for native float
        toMethod="setReal",
        toMethodArgType="F"):
    """ Create a new Converter fromType toType.
  
      fromType: the net.imglib2.Type to see as transformed into toType.
      toType: the net.imglib2.Type to see.
      classname: optional, will be made up if not defined.
      fromMethod: the method for reading the value from the fromType.
                  Defaults to getRealFloat form the RealType interface.
      fromMethodReturnType: the return type of the method, e.g., "F" for native float or e.g., UnsignedByteType for class.
      toMethod: the method for setting the value to the toType.
                Defaults to setReal from the RealType interface.
      toMethodReturnType: like fromMethodReturnType.
  """

    if "" == classname:
        classname = "asm/converters/%sTo%sConverter" % (
            fromType.getSimpleName(), toType.getSimpleName())

    class_object = Type.getInternalName(Object)

    # Type I for fromType
    # Type O for toType
    # Object for superclass
    # Converter<I, O> for interface
    class_signature = "<I:L%s;O:L%s;>L%s;L%s<TI;TO;>;" % \
      tuple(imap(Type.getInternalName, (fromType, toType, Object, Converter)))

    # Two arguments, one parameter for each: one for I, and another for O
    # void return type: V
    method_signature = "(TI;TO;)V;"

    cw = ClassWriter(ClassWriter.COMPUTE_FRAMES)
    cw.visit(
        Opcodes.V1_8,  # java version
        Opcodes.ACC_PUBLIC,  # public class
        classname,  # package and class name
        class_signature,  # signature (None means not generic)
        class_object,  # superclass
        [Type.getInternalName(Converter)])  # array of interfaces

    # Default constructor
    constructor = cw.visitMethod(
        Opcodes.ACC_PUBLIC,  # public
        "<init>",  # method name
        "()V",  # descriptor
        None,  # signature
        None)  # Exceptions (array of String)

    # ... has to invoke the super() for Object
    constructor.visitCode()
    constructor.visitVarInsn(
        Opcodes.ALOAD,
        0)  # load "this" onto the stack: the first local variable is "this"
    constructor.visitMethodInsn(
        Opcodes.INVOKESPECIAL,  # invoke an instance method (non-virtual)
        class_object,  # class on which the method is defined
        "<init>",  # name of the method (the default constructor of Object)
        "()V",  # descriptor of the default constructor of Object
        False)  # not an interface
    constructor.visitInsn(Opcodes.RETURN)  # End the constructor method
    constructor.visitMaxs(
        1,
        1)  # The maximum number of stack slots (1) and local vars (1: "this")

    # The convert(I, O) method from the Converter interface
    method = cw.visitMethod(
        Opcodes.ACC_PUBLIC,  # public method
        "convert",  # name of the interface method we are implementing
        "(L%s;L%s;)V" % tuple(imap(Type.getInternalName,
                                   (fromType, toType))),  # descriptor
        "(TI;TO;)",  # signature
        None)  # Exceptions (array of String)

    method.visitCode()
    method.visitVarInsn(Opcodes.ALOAD,
                        2)  # Load second argument onto stack: the FloatType
    method.visitVarInsn(
        Opcodes.ALOAD,
        1)  # Load first argument onto stack: the UnsignedByteType
    method.visitMethodInsn(
        Opcodes.INVOKEVIRTUAL,
        Type.getInternalName(fromType),
        fromMethod,  # e.g. "getRealFloat"
        "()%s" %
        fromMethodReturnType,  # descriptor: no arguments # e.g. "F" for native float
        False)
    method.visitMethodInsn(
        Opcodes.INVOKEVIRTUAL,
        Type.getInternalName(toType),
        toMethod,  # e.g. "setReal"
        "(%s)V" % toMethodArgType,  # e.g. "F" for native float
        False)
    method.visitInsn(Opcodes.RETURN)
    method.visitMaxs(
        2, 3
    )  # 2 stack slots: the two ALOAD calls. And 3 local variables: this, and two method arguments.
    method.visitEnd()

    # Now the public volatile bridge, because the above method uses generics.
    # Does not seem to be necessary to run the convert method.
    # This method takes an (Object, Object) as arguments and casts them to the expected types,
    # and then invokes the above typed version of the "convert" method.
    # The only reason I am adding it here is because I saw it when I printed the class byte code,
    # after writing the converter in java and using this command to see the asm code:
    # $ java -classpath /home/albert/Programming/fiji-new/Fiji.app/jars/imglib2-5.1.0.jar:/home/albert/Programming/fiji-new/Fiji.app/jars/asm-5.0.4.jar://home/albert/Programming/fiji-new/Fiji.app/jars/asm-util-4.0.jar org.objectweb.asm.util.Textifier my/UnsignedByteToFloatConverter.class

    bridge = cw.visitMethod(
        Opcodes.ACC_PUBLIC | Opcodes.ACC_SYNTHETIC | Opcodes.ACC_BRIDGE,
        "convert", "(L%s;L%s;)V" % tuple(repeat(class_object, 2)),
        "(L%s;L%s;)V" % tuple(repeat(class_object, 2)), None)
    bridge.visitCode()
    bridge.visitVarInsn(Opcodes.ALOAD, 0)
    bridge.visitVarInsn(Opcodes.ALOAD, 1)
    bridge.visitTypeInsn(Opcodes.CHECKCAST, Type.getInternalName(fromType))
    bridge.visitVarInsn(Opcodes.ALOAD, 2)
    bridge.visitTypeInsn(Opcodes.CHECKCAST, Type.getInternalName(toType))
    bridge.visitMethodInsn(
        Opcodes.INVOKEVIRTUAL,
        classname,
        "convert",
        "(L%s;L%s;)V" % tuple(imap(Type.getInternalName,
                                   (fromType, toType))),  # descriptor
        False)
    bridge.visitInsn(Opcodes.RETURN)
    bridge.visitMaxs(3, 3)
    bridge.visitEnd()

    loader = CustomClassLoader()
    converterClass = loader.defineClass(classname, cw.toByteArray())

    return converterClass