/**
   * @param parameters the parameters of a direct superclass or interface
   * @param childType a extending class as Type
   * @return the actual parameters of the direct superclass or interface, return null if it's
   *     impossible to resolve
   */
  public static Type[] resolveSuperArguments(Type[] parameters, Type childType) {
    Type[] resolvedPrameters = null;

    if (parameters != null && childType instanceof ParameterizedType) {
      ParameterizedType parameterizedChildType = (ParameterizedType) childType;

      return resolveSuperArguments(
          parameters,
          parameterizedChildType.getClass(),
          parameterizedChildType.getActualTypeArguments());
    }

    return resolvedPrameters;
  }