private void overwriteTrackMethod()

in agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/legacysdk/TelemetryClientClassFileTransformer.java [176:425]


    private void overwriteTrackMethod(MethodVisitor mv) {
      mv.visitCode();
      Label label0 = new Label();
      Label label1 = new Label();
      Label label2 = new Label();
      mv.visitTryCatchBlock(label0, label1, label2, "java/lang/Throwable");
      Label label3 = new Label();
      mv.visitLabel(label3);
      mv.visitVarInsn(ALOAD, 0);
      mv.visitMethodInsn(
          INVOKEVIRTUAL, unshadedPrefix + "/TelemetryClient", "isDisabled", "()Z", false);
      Label label4 = new Label();
      mv.visitJumpInsn(IFEQ, label4);
      Label label5 = new Label();
      mv.visitLabel(label5);
      mv.visitInsn(RETURN);
      mv.visitLabel(label4);
      mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitMethodInsn(
          INVOKEINTERFACE,
          unshadedPrefix + "/telemetry/Telemetry",
          "getTimestamp",
          "()Ljava/util/Date;",
          true);
      Label label6 = new Label();
      mv.visitJumpInsn(IFNONNULL, label6);
      Label label7 = new Label();
      mv.visitLabel(label7);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(NEW, "java/util/Date");
      mv.visitInsn(DUP);
      mv.visitMethodInsn(INVOKESPECIAL, "java/util/Date", "<init>", "()V", false);
      mv.visitMethodInsn(
          INVOKEINTERFACE,
          unshadedPrefix + "/telemetry/Telemetry",
          "setTimestamp",
          "(Ljava/util/Date;)V",
          true);
      mv.visitLabel(label6);
      mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
      mv.visitVarInsn(ALOAD, 0);
      mv.visitMethodInsn(
          INVOKEVIRTUAL,
          unshadedPrefix + "/TelemetryClient",
          "getContext",
          "()L" + unshadedPrefix + "/telemetry/TelemetryContext;",
          false);
      mv.visitMethodInsn(
          INVOKEVIRTUAL,
          unshadedPrefix + "/telemetry/TelemetryContext",
          "getTags",
          "()Ljava/util/concurrent/ConcurrentMap;",
          false);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitMethodInsn(
          INVOKEINTERFACE,
          unshadedPrefix + "/telemetry/Telemetry",
          "getContext",
          "()L" + unshadedPrefix + "/telemetry/TelemetryContext;",
          true);
      mv.visitMethodInsn(
          INVOKEVIRTUAL,
          unshadedPrefix + "/telemetry/TelemetryContext",
          "getTags",
          "()Ljava/util/concurrent/ConcurrentMap;",
          false);
      mv.visitLdcInsn("ai.cloud.");
      mv.visitMethodInsn(
          INVOKESTATIC,
          BYTECODE_UTIL_INTERNAL_NAME,
          "copy",
          "(Ljava/util/Map;Ljava/util/Map;Ljava/lang/String;)V",
          false);
      Label label8 = new Label();
      mv.visitLabel(label8);
      mv.visitVarInsn(ALOAD, 0);
      mv.visitMethodInsn(
          INVOKEVIRTUAL,
          unshadedPrefix + "/TelemetryClient",
          "getContext",
          "()L" + unshadedPrefix + "/telemetry/TelemetryContext;",
          false);
      mv.visitMethodInsn(
          INVOKEVIRTUAL,
          unshadedPrefix + "/telemetry/TelemetryContext",
          "getProperties",
          "()Ljava/util/concurrent/ConcurrentMap;",
          false);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitMethodInsn(
          INVOKEINTERFACE,
          unshadedPrefix + "/telemetry/Telemetry",
          "getContext",
          "()L" + unshadedPrefix + "/telemetry/TelemetryContext;",
          true);
      mv.visitMethodInsn(
          INVOKEVIRTUAL,
          unshadedPrefix + "/telemetry/TelemetryContext",
          "getProperties",
          "()Ljava/util/concurrent/ConcurrentMap;",
          false);
      mv.visitInsn(ACONST_NULL);
      mv.visitMethodInsn(
          INVOKESTATIC,
          BYTECODE_UTIL_INTERNAL_NAME,
          "copy",
          "(Ljava/util/Map;Ljava/util/Map;Ljava/lang/String;)V",
          false);
      mv.visitLabel(label0);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(INSTANCEOF, unshadedPrefix + "/telemetry/EventTelemetry");
      Label label9 = new Label();
      mv.visitJumpInsn(IFEQ, label9);
      Label label10 = new Label();
      mv.visitLabel(label10);
      mv.visitVarInsn(ALOAD, 0);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(CHECKCAST, unshadedPrefix + "/telemetry/EventTelemetry");
      mv.visitMethodInsn(
          INVOKESPECIAL,
          unshadedPrefix + "/TelemetryClient",
          "agent$trackEventTelemetry",
          "(L" + unshadedPrefix + "/telemetry/EventTelemetry;)V",
          false);
      mv.visitLabel(label9);
      mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(INSTANCEOF, unshadedPrefix + "/telemetry/MetricTelemetry");
      Label label11 = new Label();
      mv.visitJumpInsn(IFEQ, label11);
      Label label12 = new Label();
      mv.visitLabel(label12);
      mv.visitVarInsn(ALOAD, 0);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(CHECKCAST, unshadedPrefix + "/telemetry/MetricTelemetry");
      mv.visitMethodInsn(
          INVOKESPECIAL,
          unshadedPrefix + "/TelemetryClient",
          "agent$trackMetricTelemetry",
          "(L" + unshadedPrefix + "/telemetry/MetricTelemetry;)V",
          false);
      mv.visitLabel(label11);
      mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(INSTANCEOF, unshadedPrefix + "/telemetry/RemoteDependencyTelemetry");
      Label label13 = new Label();
      mv.visitJumpInsn(IFEQ, label13);
      Label label14 = new Label();
      mv.visitLabel(label14);
      mv.visitVarInsn(ALOAD, 0);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(CHECKCAST, unshadedPrefix + "/telemetry/RemoteDependencyTelemetry");
      mv.visitMethodInsn(
          INVOKESPECIAL,
          unshadedPrefix + "/TelemetryClient",
          "agent$trackRemoteDependencyTelemetry",
          "(L" + unshadedPrefix + "/telemetry/RemoteDependencyTelemetry;)V",
          false);
      mv.visitLabel(label13);
      mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(INSTANCEOF, unshadedPrefix + "/telemetry/PageViewTelemetry");
      Label label15 = new Label();
      mv.visitJumpInsn(IFEQ, label15);
      Label label16 = new Label();
      mv.visitLabel(label16);
      mv.visitVarInsn(ALOAD, 0);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(CHECKCAST, unshadedPrefix + "/telemetry/PageViewTelemetry");
      mv.visitMethodInsn(
          INVOKESPECIAL,
          unshadedPrefix + "/TelemetryClient",
          "agent$trackPageViewTelemetry",
          "(L" + unshadedPrefix + "/telemetry/PageViewTelemetry;)V",
          false);
      mv.visitLabel(label15);
      mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(INSTANCEOF, unshadedPrefix + "/telemetry/TraceTelemetry");
      Label label17 = new Label();
      mv.visitJumpInsn(IFEQ, label17);
      Label label18 = new Label();
      mv.visitLabel(label18);
      mv.visitVarInsn(ALOAD, 0);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(CHECKCAST, unshadedPrefix + "/telemetry/TraceTelemetry");
      mv.visitMethodInsn(
          INVOKESPECIAL,
          unshadedPrefix + "/TelemetryClient",
          "agent$trackTraceTelemetry",
          "(L" + unshadedPrefix + "/telemetry/TraceTelemetry;)V",
          false);
      mv.visitLabel(label17);
      mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(INSTANCEOF, unshadedPrefix + "/telemetry/RequestTelemetry");
      Label label19 = new Label();
      mv.visitJumpInsn(IFEQ, label19);
      Label label20 = new Label();
      mv.visitLabel(label20);
      mv.visitVarInsn(ALOAD, 0);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(CHECKCAST, unshadedPrefix + "/telemetry/RequestTelemetry");
      mv.visitMethodInsn(
          INVOKESPECIAL,
          unshadedPrefix + "/TelemetryClient",
          "agent$trackRequestTelemetry",
          "(L" + unshadedPrefix + "/telemetry/RequestTelemetry;)V",
          false);
      mv.visitLabel(label19);
      mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(INSTANCEOF, unshadedPrefix + "/telemetry/ExceptionTelemetry");
      mv.visitJumpInsn(IFEQ, label1);
      Label label21 = new Label();
      mv.visitLabel(label21);
      mv.visitVarInsn(ALOAD, 0);
      mv.visitVarInsn(ALOAD, 1);
      mv.visitTypeInsn(CHECKCAST, unshadedPrefix + "/telemetry/ExceptionTelemetry");
      mv.visitMethodInsn(
          INVOKESPECIAL,
          unshadedPrefix + "/TelemetryClient",
          "agent$trackExceptionTelemetry",
          "(L" + unshadedPrefix + "/telemetry/ExceptionTelemetry;)V",
          false);
      mv.visitLabel(label1);
      mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
      Label label22 = new Label();
      mv.visitJumpInsn(GOTO, label22);
      mv.visitLabel(label2);
      mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {"java/lang/Throwable"});
      mv.visitVarInsn(ASTORE, 2);
      Label label23 = new Label();
      mv.visitLabel(label23);
      mv.visitVarInsn(ALOAD, 2);
      mv.visitMethodInsn(
          INVOKESTATIC,
          BYTECODE_UTIL_INTERNAL_NAME,
          "logErrorOnce",
          "(Ljava/lang/Throwable;)V",
          false);
      mv.visitLabel(label22);
      mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
      mv.visitInsn(RETURN);
      Label label24 = new Label();
      mv.visitLabel(label24);
      mv.visitMaxs(3, 3);
      mv.visitEnd();
    }