private Pair tryExtractContentAndHeaderDecodeType()

in sdk/core/azure-core-rest/src/main/java/com/azure/android/core/rest/HttpResponseMapper.java [343:396]


    private Pair<Type, Type> tryExtractContentAndHeaderDecodeType(Type callbackTypeArg,
                                                                  Type responseBaseType,
                                                                  String swaggerMethodName) {
        if (!responseBaseType.equals(ResponseBase.class) && !responseBaseType.equals(PagedResponseBase.class)) {
            throw logger.logExceptionAsError(
                new IllegalArgumentException("responseBaseType must be 'ResponseBase' or 'PagedResponseBase'"));
        }

        if (!TypeUtil.isTypeOrSubTypeOf(callbackTypeArg, responseBaseType)) {
            return null;
        }

        Type responseTypeItr = callbackTypeArg;
        List<Type> responseTypeHierarchy = new ArrayList<>();

        responseTypeHierarchy.add(responseTypeItr);

        while (!TypeUtil.getRawClass(responseTypeItr).equals(responseBaseType)) {
            responseTypeItr = TypeUtil.getSuperType(responseTypeItr);
            responseTypeHierarchy.add(responseTypeItr);
        }

        // responseTypeItr == Ref to 'ResponseBase' or 'PagedResponseBase' in the response type hierarchy.
        //
        if (!(responseTypeItr instanceof ParameterizedType)) {
            throw logger.logExceptionAsError(new IllegalStateException(String.format(
                NON_PARAMETERIZED_RESPONSE,
                responseBaseType.toString(), Callback.class.getName(),
                swaggerMethodName, responseBaseType.toString() + "<FooHeader, Foo>>")));
        }

        Type headerDecodeType = null;
        Type contentDecodeType = null;
        for (Type responseType : responseTypeHierarchy) {
            final Type[] responseArgTypes = TypeUtil.getTypeArguments(responseType);
            if (responseArgTypes != null && responseArgTypes.length > 0) {
                if (responseArgTypes.length >= 2) {
                    if (contentDecodeType == null) {
                        contentDecodeType = responseArgTypes[responseArgTypes.length - 1];
                    }
                    if (headerDecodeType == null) {
                        headerDecodeType = responseArgTypes[responseArgTypes.length - 2];
                    }
                } else {
                    if (headerDecodeType == null) {
                        headerDecodeType = responseArgTypes[responseArgTypes.length - 1];
                    }
                }

            }
        }

        return Pair.create(headerDecodeType, contentDecodeType);
    }