private void _finishJIT() {
    if (deferFinish) {
      return;
    }

    if (returnType != null && returnType.isPrimitive()) {
      //noinspection unchecked
      wrapPrimitive(returnType);
    }

    if (returnType == void.class) {
      assert debug("ACONST_NULL");
      mv.visitInsn(ACONST_NULL);
    }

    assert debug("ARETURN");
    mv.visitInsn(ARETURN);

    assert debug("\n{METHOD STATS (maxstack=" + stacksize + ")}\n");


    dumpAdvancedDebugging(); // dump advanced debugging if necessary


    mv.visitMaxs(stacksize, maxlocals);
    mv.visitEnd();

    mv = cw.visitMethod(ACC_PUBLIC, "getKnownEgressType", "()Ljava/lang/Class;", null, null);
    mv.visitCode();
    visitConstantClass(returnType);
    mv.visitInsn(ARETURN);

    mv.visitMaxs(1, 1);
    mv.visitEnd();

    if (propNull) {
      cw.visitField(ACC_PUBLIC, "nullPropertyHandler", "L" + NAMESPACE + "integration/PropertyHandler;", null, null).visitEnd();
    }

    if (methNull) {
      cw.visitField(ACC_PUBLIC, "nullMethodHandler", "L" + NAMESPACE + "integration/PropertyHandler;", null, null).visitEnd();
    }

    buildInputs();

    if (buildLog != null && buildLog.length() != 0 && expr != null) {
      mv = cw.visitMethod(ACC_PUBLIC, "toString", "()Ljava/lang/String;", null, null);
      mv.visitCode();
      Label l0 = new Label();
      mv.visitLabel(l0);
      mv.visitLdcInsn(buildLog.toString() + "\n\n## { " + new String(expr) + " }");
      mv.visitInsn(ARETURN);
      Label l1 = new Label();
      mv.visitLabel(l1);
      mv.visitMaxs(1, 1);
      mv.visitEnd();
    }

    cw.visitEnd();
  }