code: static ParameterizedType newParameterizedTypeWithOwner(
              Type ownerType, Class<?> rawType, Type... arguments) {
          if (ownerType == null) {
              return newParameterizedType(rawType, arguments);
          }
          // ParameterizedTypeImpl constructor already checks, but we want to throw NPE before IAE
          checkNotNull(arguments);
          checkArgument(rawType.getEnclosingClass() != null, "Owner type for unenclosed %s", rawType);
          return new ParameterizedTypeImpl(ownerType, rawType, arguments);
      }
docs: Returns a type where {@code rawType} is parameterized by {@code arguments} and is owned by
  {@code ownerType}.