@Override
 /* @Nullable */
 public LightweightTypeReference getSuperType(Class<?> rawType) {
   if (isUnbounded()) {
     if (Object.class.equals(rawType)) {
       return internalFindTopLevelType(rawType);
     }
     return null;
   }
   List<LightweightTypeReference> nonNullUpperBounds = expose(getUpperBounds());
   for (LightweightTypeReference upperBound : nonNullUpperBounds) {
     LightweightTypeReference result = upperBound.getSuperType(rawType);
     if (result != null) return result;
   }
   return null;
 }
 @Override
 /* @Nullable */
 public LightweightTypeReference getSuperType(JvmType rawType) {
   if (isUnbounded()) {
     if (Object.class.getName().equals(rawType.getIdentifier())) {
       return getOwner().newParameterizedTypeReference(rawType);
     }
     return null;
   }
   List<LightweightTypeReference> nonNullUpperBounds = expose(getUpperBounds());
   for (LightweightTypeReference upperBound : nonNullUpperBounds) {
     LightweightTypeReference result = upperBound.getSuperType(rawType);
     if (result != null) return result;
   }
   return null;
 }