@Override
 public void classInitialized(ClassInitializedEvent e) {
   final ShadowThread currentThread = e.getThread();
   final CV cv = this.ts_get_cv(currentThread);
   Util.log("Class Init for " + e + " -- " + cv);
   classInitTime.get(e.getRRClass()).max(cv);
   this.incEpochAndCV(currentThread, e);
   super.classInitialized(e);
 }
  private void error(
      final AccessEvent ae,
      final int errorCase,
      final String prevOp,
      final int prevTid,
      final String curOp,
      final int curTid) {

    try {
      if (ae instanceof FieldAccessEvent) {
        FieldAccessEvent fae = (FieldAccessEvent) ae;
        final FieldInfo fd = fae.getInfo().getField();
        final ShadowThread currentThread = fae.getThread();
        final Object target = fae.getTarget();

        fieldErrors.error(
            currentThread,
            fd,
            "Guard State",
            fae.getOriginalShadow(),
            "Current Thread",
            toString(currentThread),
            "Class",
            target == null ? fd.getOwner() : target.getClass(),
            "Field",
            Util.objectToIdentityString(target) + "." + fd,
            "Prev Op",
            prevOp + prevTid,
            "Cur Op",
            curOp + curTid,
            "Case",
            "#" + errorCase,
            "Stack",
            ShadowThread.stackDumpForErrorMessage(currentThread));
        if (!fieldErrors.stillLooking(fd)) {
          advance(ae);
          return;
        }
      } else {
        ArrayAccessEvent aae = (ArrayAccessEvent) ae;
        final ShadowThread currentThread = aae.getThread();
        final Object target = aae.getTarget();

        arrayErrors.error(
            currentThread,
            aae.getInfo(),
            "Alloc Site",
            ArrayAllocSiteTracker.allocSites.get(aae.getTarget()),
            "Guard State",
            aae.getOriginalShadow(),
            "Current Thread",
            toString(currentThread),
            "Array",
            Util.objectToIdentityString(target) + "[" + aae.getIndex() + "]",
            "Prev Op",
            prevOp + prevTid + ("name = " + ShadowThread.get(prevTid).getThread().getName()),
            "Cur Op",
            curOp + curTid + ("name = " + ShadowThread.get(curTid).getThread().getName()),
            "Case",
            "#" + errorCase,
            "Stack",
            ShadowThread.stackDumpForErrorMessage(currentThread));

        aae.getArrayState().specialize();

        if (!arrayErrors.stillLooking(aae.getInfo())) {
          advance(aae);
          return;
        }
      }
    } catch (Throwable e) {
      Assert.panic(e);
    }
  }