/** Returns the least upper bound of two types. */
    protected TypeMirror lubTypeFrame(TypeMirror a, TypeMirror b) {
      if (types.isSubtype(a, b)) {
        return b;
      } else if (types.isSubtype(b, a)) {
        return a;
      }

      return InternalUtils.leastUpperBound(processingEnv, a, b);
    }