docs: @SuppressWarnings("unchecked")
      private void processClassTraceOptionsAnnotation(ClassTraceInfo info) {
          // Get class annotation
          AnnotationNode traceOptionsAnnotation = getAnnotation(TRACE_OPTIONS_TYPE.getDescriptor(), info.classNode.visibleAnnotations);
          if (traceOptionsAnnotation != null) {
              TraceOptionsAnnotationVisitor optionsVisitor = new TraceOptionsAnnotationVisitor();
              traceOptionsAnnotation.accept(optionsVisitor);
              TraceOptionsData traceOptions = optionsVisitor.getTraceOptionsData();
  
              // Merge with package annotation's defaults
              TraceOptionsData packageData = info.packageInfo != null ? info.packageInfo.getTraceOptionsData() : null;
              if (packageData != null) {
                  // Remove the current annotation if present
                  if (traceOptionsAnnotation != null) {
                      info.classNode.visibleAnnotations.remove(traceOptionsAnnotation);
                  }
  
                  // If the class trace options differ from the package trace
                  // options, merge them and add a class annotation.
                  if (!traceOptions.equals(packageData)) {
                      if (traceOptions.getMessageBundle() == null && packageData.getMessageBundle() != null) {
                          traceOptions.setMessageBundle(packageData.getMessageBundle());
                      }
                      if (traceOptions.getTraceGroups().isEmpty() && !packageData.getTraceGroups().isEmpty()) {
                          for (String group : packageData.getTraceGroups()) {
                              traceOptions.addTraceGroup(group);
                          }
                      }
  
                      traceOptionsAnnotation = (AnnotationNode) info.classNode.visitAnnotation(TRACE_OPTIONS_TYPE.getDescriptor(), true);
                      AnnotationVisitor groupsVisitor = traceOptionsAnnotation.visitArray("traceGroups");
                      for (String group : traceOptions.getTraceGroups()) {
                          groupsVisitor.visit(null, group);
                      }
                      groupsVisitor.visitEnd();
  
                      traceOptionsAnnotation.visit("traceGroup", "");
                      traceOptionsAnnotation.visit("messageBundle", traceOptions.getMessageBundle() == null ? "" : traceOptions.getMessageBundle());
                      traceOptionsAnnotation.visit("traceExceptionThrow", Boolean.valueOf(traceOptions.isTraceExceptionThrow()));
                      traceOptionsAnnotation.visit("traceExceptionHandling", Boolean.valueOf(traceOptions.isTraceExceptionHandling()));
                      traceOptionsAnnotation.visitEnd();
                  }
              }
          }
      }