code: public Future<AuthenticationResult> acquireTokenByAuthorizationCode(
              final String authorizationCode, final URI redirectUri,
              final ClientAssertion clientAssertion, final String resource,
              final AuthenticationCallback callback) {
  
          this.validateAuthCodeRequestInput(authorizationCode, redirectUri,
                  clientAssertion, resource);
          final ClientAuthentication clientAuth = createClientAuthFromClientAssertion(clientAssertion);
          final AdalOAuthAuthorizationGrant authGrant = new AdalOAuthAuthorizationGrant(
                  new AuthorizationCodeGrant(new AuthorizationCode(
                          authorizationCode), redirectUri), resource);
          return this.acquireToken(authGrant, clientAuth, callback);
      }
docs: Acquires security token from the authority using an authorization code
  previously received.
  
  @param authorizationCode
  The authorization code received from service authorization
  endpoint.
  @param redirectUri
  The redirect address used for obtaining authorization code.
  @param clientAssertion
  The client assertion to use for client authentication.
  @param resource
  Identifier of the target resource that is the recipient of the
  requested token. It can be null if provided earlier to acquire
  authorizationCode.
  @param callback
  optional callback object for non-blocking execution.
  @return A {@link Future} object representing the
  {@link AuthenticationResult} of the call. It contains Access
  Token, Refresh Token and the Access Token's expiration time.