code: @Override protected String getCommonSuperClass(
        final String type1, final String type2) {
      if (!alwaysStatic) {
        try {
          return super.getCommonSuperClass(type1, type2);
        } catch (Throwable e) {
          // Try something else...
        }
      }
      // Exactly the same as in ClassWriter, but gets the superclass
      // directly from the class file.
      ClassInfo ci1, ci2;
      try {
        ci1 = new ClassInfo(type1, classLoader, alwaysStatic);
        ci2 = new ClassInfo(type2, classLoader, alwaysStatic);
      } catch (Throwable e) {
        throw new RuntimeException(e);
      }
      if (ci1.isAssignableFrom(ci2)) {
        return type1;
      }
      if (ci2.isAssignableFrom(ci1)) {
        return type2;
      }
      if (ci1.isInterface() || ci2.isInterface()) {
        return "java/lang/Object";
      }
  
      do {
        // Should never be null, because if ci1 were the Object class
        // or an interface, it would have been caught above.
        ci1 = ci1.getSuperclass();
      } while (!ci1.isAssignableFrom(ci2));
      return ci1.getType().getInternalName();
    }
docs: {@inheritDoc}