Fix bugs in resolving @link/@see tags

Bug: 177266501
Test: verified in aosp/1573066(Put IKE in BCP) by running
      make doc-comment-check-docs
Change-Id: Ifd43aa9f84f7bda0fe0368475f570cf02fcdc8bd
diff --git a/src/java/android/net/ipsec/ike/ChildSaProposal.java b/src/java/android/net/ipsec/ike/ChildSaProposal.java
index 5645c2b..a9877d0 100644
--- a/src/java/android/net/ipsec/ike/ChildSaProposal.java
+++ b/src/java/android/net/ipsec/ike/ChildSaProposal.java
@@ -295,7 +295,7 @@
          *
          * @param algorithm encryption algorithm to add to ChildSaProposal.
          * @param keyLength key length of algorithm. For algorithms that have fixed key length (e.g.
-         *     3DES) only {@link SaProposal.KEY_LEN_UNUSED} is allowed.
+         *     3DES) only {@link SaProposal#KEY_LEN_UNUSED} is allowed.
          * @return Builder of ChildSaProposal.
          */
         // The matching getter is defined in the super class. Please see {@link
diff --git a/src/java/android/net/ipsec/ike/ChildSessionCallback.java b/src/java/android/net/ipsec/ike/ChildSessionCallback.java
index 1dd4530..0e6ba02 100644
--- a/src/java/android/net/ipsec/ike/ChildSessionCallback.java
+++ b/src/java/android/net/ipsec/ike/ChildSessionCallback.java
@@ -83,7 +83,7 @@
      * the new set of transforms.
      *
      * <p>To avoid the initial startup race condition where the transforms have not yet been
-     * applied, the {@link onOpened(ChildSessionConfiguration)} callback should be used as the
+     * applied, the {@link #onOpened(ChildSessionConfiguration)} callback should be used as the
      * authoritative signal that the socket or tunnel is ready, as it is fired after both transforms
      * have had a chance to be applied.
      *
@@ -100,15 +100,15 @@
      * Session.
      *
      * <p>When this method is invoked, the caller MUST re-apply the transforms to their {@link
-     * IpSecTunnelInterface} via {@link
-     * IpSecManager#applyTunnelModeTransform(android.net.IpSecManager.IpSecTunnelInterface, int,
-     * IpSecTransform)}.
+     * IpSecTunnelInterface} via IpSecManager#applyTunnelModeTransform(IpSecTunnelInterface, int,
+     * IpSecTransform)
      *
-     * @param inIpSecTransform IpSecTransform to be used for traffic with {@link PolicyDirection}
-     *     {@link IpSecManager#DIRECTION_IN}
-     * @param outIpSecTransform IpSecTransform to be used for traffic with {@link PolicyDirection}
-     *     {@link IpSecManager#DIRECTION_OUT}
+     * @param inIpSecTransform IpSecTransform to be used for traffic with {@link
+     *     IpSecManager#DIRECTION_IN}
+     * @param outIpSecTransform IpSecTransform to be used for traffic with {@link
+     *     IpSecManager#DIRECTION_OUT}
      */
+    // TODO(b/174606949): Use @link tag to reference #applyTunnelModeTransform when it is public.
     default void onIpSecTransformsMigrated(
             @NonNull IpSecTransform inIpSecTransform, @NonNull IpSecTransform outIpSecTransform) {}
 
diff --git a/src/java/android/net/ipsec/ike/ChildSessionParams.java b/src/java/android/net/ipsec/ike/ChildSessionParams.java
index e403e30..bf83c7a 100644
--- a/src/java/android/net/ipsec/ike/ChildSessionParams.java
+++ b/src/java/android/net/ipsec/ike/ChildSessionParams.java
@@ -49,7 +49,7 @@
  * to have the same DH group as that of the IKE Session, then they need to explicitly set the same
  * DH Group in ChildSessionParams.
  *
- * @see {@link TunnelModeChildSessionParams} and {@link TransportModeChildSessionParams}
+ * <p>@see {@link TunnelModeChildSessionParams} and {@link TransportModeChildSessionParams}
  */
 public abstract class ChildSessionParams {
     /** @hide */
diff --git a/src/java/android/net/ipsec/ike/IkeSaProposal.java b/src/java/android/net/ipsec/ike/IkeSaProposal.java
index ad2bbe1..cc343d8 100644
--- a/src/java/android/net/ipsec/ike/IkeSaProposal.java
+++ b/src/java/android/net/ipsec/ike/IkeSaProposal.java
@@ -219,7 +219,7 @@
          *
          * @param algorithm encryption algorithm to add to IkeSaProposal.
          * @param keyLength key length of algorithm. For algorithms that have fixed key length (e.g.
-         *     3DES) only {@link SaProposal.KEY_LEN_UNUSED} is allowed.
+         *     3DES) only {@link SaProposal#KEY_LEN_UNUSED} is allowed.
          * @return Builder of IkeSaProposal.
          */
         // The matching getter is defined in the super class. Please see {@link
diff --git a/src/java/android/net/ipsec/ike/IkeSession.java b/src/java/android/net/ipsec/ike/IkeSession.java
index 5dab372..c7c3089 100644
--- a/src/java/android/net/ipsec/ike/IkeSession.java
+++ b/src/java/android/net/ipsec/ike/IkeSession.java
@@ -32,7 +32,7 @@
 
 /**
  * This class represents an IKE Session management object that allows for keying and management of
- * {@link IpSecTransform}s.
+ * {@link android.net.IpSecTransform}s.
  *
  * <p>An IKE/Child Session represents an IKE/Child SA as well as its rekeyed successors. A Child
  * Session is bounded by the lifecycle of the IKE Session under which it is set up. Closing an IKE
@@ -71,7 +71,7 @@
      * @param userCbExecutor the {@link Executor} upon which all callbacks will be posted. For
      *     security and consistency, the callbacks posted to this executor MUST be executed serially
      *     and in the order they were posted, as guaranteed by executors such as {@link
-     *     ExecutorService.newSingleThreadExecutor()}
+     *     java.util.concurrent.Executors#newSingleThreadExecutor()}
      * @param ikeSessionCallback the {@link IkeSessionCallback} interface to notify callers of state
      *     changes within the {@link IkeSession}.
      * @param firstChildSessionCallback the {@link ChildSessionCallback} interface to notify callers
@@ -229,12 +229,12 @@
      * <p>Implements {@link AutoCloseable#close()}
      *
      * <p>Upon closure, {@link IkeSessionCallback#onClosed()} or {@link
-     * IkeSessionCallback#onClosedExceptionally()} will be fired.
+     * IkeSessionCallback#onClosedExceptionally(IkeException)} will be fired.
      *
      * <p>Closing an IKE Session implicitly closes any remaining Child Sessions negotiated under it.
-     * Users SHOULD stop all outbound traffic that uses these Child Sessions({@link IpSecTransform}
-     * pairs) before calling this method. Otherwise IPsec packets will be dropped due to the lack of
-     * a valid {@link IpSecTransform}.
+     * Users SHOULD stop all outbound traffic that uses these Child Sessions ({@link
+     * android.net.IpSecTransform} pairs) before calling this method. Otherwise IPsec packets will
+     * be dropped due to the lack of a valid {@link android.net.IpSecTransform}.
      *
      * <p>Closure of an IKE session will take priority over, and cancel other procedures waiting in
      * the queue (but will wait for ongoing locally initiated procedures to complete). After sending
@@ -253,9 +253,9 @@
      * <p>Upon closing, {@link IkeSessionCallback#onClosed()} will be fired.
      *
      * <p>Closing an IKE Session implicitly closes any remaining Child Sessions negotiated under it.
-     * Users SHOULD stop all outbound traffic that uses these Child Sessions({@link IpSecTransform}
-     * pairs) before calling this method. Otherwise IPsec packets will be dropped due to the lack of
-     * a valid {@link IpSecTransform}.
+     * Users SHOULD stop all outbound traffic that uses these Child Sessions ({@link
+     * android.net.IpSecTransform} pairs) before calling this method. Otherwise IPsec packets will
+     * be dropped due to the lack of a valid {@link android.net.IpSecTransform}.
      *
      * <p>Forcible closure of an IKE session will take priority over, and cancel other procedures
      * waiting in the queue. It will also interrupt any ongoing locally initiated procedure.
diff --git a/src/java/android/net/ipsec/ike/IkeSessionParams.java b/src/java/android/net/ipsec/ike/IkeSessionParams.java
index 84b630e..8880b56 100644
--- a/src/java/android/net/ipsec/ike/IkeSessionParams.java
+++ b/src/java/android/net/ipsec/ike/IkeSessionParams.java
@@ -124,9 +124,9 @@
      *       this MUST migrate all IpSecTunnelInterface instances associated with this IkeSession.
      *   <li>{@link ChildSessionCallback#onIpSecTransformsMigrated(android.net.IpSecTransform,
      *       android.net.IpSecTransform)}: this MUST re-apply the migrated transforms to the
-     *       IpSecTunnelInterface associated with this ChildSessionCallback, via {@link
+     *       IpSecTunnelInterface associated with this ChildSessionCallback, via
      *       android.net.IpSecManager#applyTunnelModeTransform(
-     *       android.net.IpSecManager.IpSecTunnelInterface, int, android.net.IpSecTransform)}.
+     *       android.net.IpSecManager.IpSecTunnelInterface, int, android.net.IpSecTransform).
      * </ul>
      *
      * <p>MOBIKE support is compatible with two Network modes:
@@ -160,7 +160,8 @@
      * <p>Checking for MOBIKE use in an IKE Session is done via {@link
      * IkeSessionConfiguration#isIkeExtensionEnabled(int)}.
      */
-    // TODO(b/175416035): update docs to @link to API for migrating IpSecTunnelInterfaces
+    // TODO(b/175416035): Update docs to @link to API for migrating IpSecTunnelInterfaces
+    // TODO(b/174606949): Use @link tag to reference #applyTunnelModeTransform when it is public
     public static final int IKE_OPTION_MOBIKE = 2;
 
     private static final int MIN_IKE_OPTION = IKE_OPTION_ACCEPT_ANY_REMOTE_ID;
@@ -1172,7 +1173,7 @@
          *
          * <p>This constructor is deprecated since Android S. Apps that use this constructor can
          * still expect {@link #build()} to throw if no configured or default network was found. But
-         * apps that use {@link #Builder()} MUST NOT expect that behavior anymore.
+         * apps that use #Builder() MUST NOT expect that behavior anymore.
          *
          * <p>This method is deprecated because it is unnecessary to try resolving a default network
          * or to validate network state before IkeSession starts the packet exchanges. It will also
@@ -1181,7 +1182,8 @@
          *
          * @param context a valid {@link Context} instance.
          */
-        // TODO: b/163604823 Deprecate this method
+        // TODO: b/163604823 Deprecate this method and use @link tag to reference #Builder when
+        // #Builder() is exposed.
         public Builder(@NonNull Context context) {
             this((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
         }
@@ -1352,13 +1354,13 @@
          * EAP-Only authentication is enabled.
          *
          * <p>Callers may enable EAP-Only authentication by setting {@link
-         * IKE_OPTION_EAP_ONLY_AUTH}, which will make IKE library request the remote to use EAP-Only
-         * authentication. The remote may opt to reject the request, at which point the received
-         * certificates and authentication payload WILL be validated with the provided root CA or
-         * system's truststore as usual. Only safe EAP methods as listed in RFC 5998 will be
+         * #IKE_OPTION_EAP_ONLY_AUTH}, which will make IKE library request the remote to use
+         * EAP-Only authentication. The remote may opt to reject the request, at which point the
+         * received certificates and authentication payload WILL be validated with the provided root
+         * CA or system's truststore as usual. Only safe EAP methods as listed in RFC 5998 will be
          * accepted for EAP-Only authentication.
          *
-         * <p>If {@link IKE_OPTION_EAP_ONLY_AUTH} is set, callers MUST configure EAP as the
+         * <p>If {@link #IKE_OPTION_EAP_ONLY_AUTH} is set, callers MUST configure EAP as the
          * authentication method and all EAP methods set in EAP Session configuration MUST be safe
          * methods that are accepted for EAP-Only authentication. Otherwise callers will get an
          * exception when building the {@link IkeSessionParams}
@@ -1369,7 +1371,7 @@
          * @see <a href="https://tools.ietf.org/html/rfc5280">RFC 5280, Internet X.509 Public Key
          *     Infrastructure Certificate and Certificate Revocation List (CRL) Profile</a>
          * @see <a href="https://tools.ietf.org/html/rfc5998">RFC 5998, An Extension for EAP-Only
-         *     Authentication in IKEv2
+         *     Authentication in IKEv2</a>
          * @param serverCaCert the CA certificate for validating the received server certificate(s).
          *     If a certificate is provided, it MUST be the root CA used by the server, or
          *     authentication will fail. If no certificate is provided, any root CA in the system's
@@ -1377,7 +1379,7 @@
          * @return Builder this, to facilitate chaining.
          */
         // TODO(b/151667921): Consider also supporting configuring EAP method that is not accepted
-        // by EAP-Only when {@link IKE_OPTION_EAP_ONLY_AUTH} is set
+        // by EAP-Only when {@link #IKE_OPTION_EAP_ONLY_AUTH} is set
         // MissingGetterMatchingBuilder: #getLocalAuthConfig and #getRemoveAuthConfig are defined to
         // retrieve authentication configurations
         @SuppressLint("MissingGetterMatchingBuilder")
@@ -1515,8 +1517,8 @@
         /**
          * Adds a internal P_CSCF server request to the {@link IkeSessionParams} being built.
          *
-         * @param addressFamily the address family. Only {@link OsConstants.AF_INET} and {@link
-         *     OsConstants.AF_INET6} are allowed.
+         * @param addressFamily the address family. Only {@code AF_INET} and {@code AF_INET6} are
+         *     allowed.
          * @return Builder this, to facilitate chaining.
          */
         // #getConfigurationRequests is defined to retrieve PCSCF server requests
diff --git a/src/java/android/net/ipsec/ike/SaProposal.java b/src/java/android/net/ipsec/ike/SaProposal.java
index fd60a3d..d9afb35 100644
--- a/src/java/android/net/ipsec/ike/SaProposal.java
+++ b/src/java/android/net/ipsec/ike/SaProposal.java
@@ -112,7 +112,7 @@
      * Key length unused.
      *
      * <p>This value should only be used with the Encryption/Ciphering Algorithm that accepts a
-     * fixed key size such as {@link ENCRYPTION_ALGORITHM_3DES}.
+     * fixed key size such as {@link #ENCRYPTION_ALGORITHM_3DES}.
      */
     public static final int KEY_LEN_UNUSED = 0;
     /** AES Encryption/Ciphering Algorithm key length 128 bits. */
diff --git a/src/java/android/net/ipsec/ike/TunnelModeChildSessionParams.java b/src/java/android/net/ipsec/ike/TunnelModeChildSessionParams.java
index 8e9f298..a9009eb 100644
--- a/src/java/android/net/ipsec/ike/TunnelModeChildSessionParams.java
+++ b/src/java/android/net/ipsec/ike/TunnelModeChildSessionParams.java
@@ -324,8 +324,8 @@
          * Adds an internal IP address request to the {@link TunnelModeChildSessionParams} being
          * built.
          *
-         * @param addressFamily the address family. Only {@link OsConstants.AF_INET} and {@link
-         *     OsConstants.AF_INET6} are allowed.
+         * @param addressFamily the address family. Only {@code AF_INET} and {@code AF_INET6} are
+         *     allowed
          * @return Builder this, to facilitate chaining.
          */
         // #getConfigurationRequests has been defined for callers to retrieve internal address
@@ -392,8 +392,8 @@
          * Adds an internal DNS server request to the {@link TunnelModeChildSessionParams} being
          * built.
          *
-         * @param addressFamily the address family. Only {@link OsConstants.AF_INET} and {@link
-         *     OsConstants.AF_INET6} are allowed.
+         * @param addressFamily the address family. Only {@code AF_INET} and {@code AF_INET6} are
+         *     allowed
          * @return Builder this, to facilitate chaining.
          */
         // #getConfigurationRequests has been defined for callers to retrieve internal DNS server
@@ -443,7 +443,7 @@
          *
          * <p>Only DHCPv4 server requests are supported.
          *
-         * @param addressFamily the address family. Only {@link OsConstants.AF_INET} is allowed.
+         * @param addressFamily the address family. Only {@code AF_INET} is allowed
          * @return Builder this, to facilitate chaining.
          */
         // #getConfigurationRequests has been defined for callers to retrieve internal DHCP server
diff --git a/src/java/android/net/ipsec/ike/exceptions/AuthenticationFailedException.java b/src/java/android/net/ipsec/ike/exceptions/AuthenticationFailedException.java
index 1e93ee6..d5fa885 100644
--- a/src/java/android/net/ipsec/ike/exceptions/AuthenticationFailedException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/AuthenticationFailedException.java
@@ -16,6 +16,8 @@
 package android.net.ipsec.ike.exceptions;
 
 import android.annotation.NonNull;
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
 
 /**
  * This exception is thrown when IKE authentication failed.
diff --git a/src/java/android/net/ipsec/ike/exceptions/ChildSaNotFoundException.java b/src/java/android/net/ipsec/ike/exceptions/ChildSaNotFoundException.java
index 6a549ac..35372b3 100644
--- a/src/java/android/net/ipsec/ike/exceptions/ChildSaNotFoundException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/ChildSaNotFoundException.java
@@ -15,6 +15,9 @@
  */
 package android.net.ipsec.ike.exceptions;
 
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
+
 /**
  * This exception is thrown if the remote server received a request for a nonexistent Child SA.
  *
diff --git a/src/java/android/net/ipsec/ike/exceptions/FailedCpRequiredException.java b/src/java/android/net/ipsec/ike/exceptions/FailedCpRequiredException.java
index dae882c..3c2e101 100644
--- a/src/java/android/net/ipsec/ike/exceptions/FailedCpRequiredException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/FailedCpRequiredException.java
@@ -15,6 +15,9 @@
  */
 package android.net.ipsec.ike.exceptions;
 
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
+
 /**
  * This exception is thrown if the remote server did not receive a Configuration Payload.
  *
diff --git a/src/java/android/net/ipsec/ike/exceptions/IkeInternalException.java b/src/java/android/net/ipsec/ike/exceptions/IkeInternalException.java
index 37f7293..929f544 100644
--- a/src/java/android/net/ipsec/ike/exceptions/IkeInternalException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/IkeInternalException.java
@@ -16,12 +16,14 @@
 package android.net.ipsec.ike.exceptions;
 
 import android.annotation.NonNull;
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
 
 /**
  * IkeInternalException encapsulates all local implementation or resource related exceptions.
  *
- * <p>Causes may include exceptions such as {@link IpSecManager.SpiUnavailableException} when the
- * requested SPI resources failed to be allocated.
+ * <p>Causes may include exceptions such as {@link android.net.IpSecManager.SpiUnavailableException}
+ * when the requested SPI resources failed to be allocated.
  */
 public final class IkeInternalException extends IkeNonProtocolException {
     /**
diff --git a/src/java/android/net/ipsec/ike/exceptions/IkeNetworkLostException.java b/src/java/android/net/ipsec/ike/exceptions/IkeNetworkLostException.java
index d638502..4138768 100644
--- a/src/java/android/net/ipsec/ike/exceptions/IkeNetworkLostException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/IkeNetworkLostException.java
@@ -24,8 +24,8 @@
 
 /**
  * IkeNetworkLostException is returned to the caller via {@link
- * IkeSessionCallback#onError(IkeException)} if the underlying Network for the {@link IkeSession}
- * was lost with no alternatives.
+ * IkeSessionCallback#onError(IkeException)} if the underlying Network for the {@link
+ * android.net.ipsec.ike.IkeSession} was lost with no alternatives.
  *
  * <p>This Exception corresponds to {@link
  * android.net.ConnectivityManager.NetworkCallback#onLost(android.net.Network)} being invoked for
diff --git a/src/java/android/net/ipsec/ike/exceptions/InternalAddressFailureException.java b/src/java/android/net/ipsec/ike/exceptions/InternalAddressFailureException.java
index bd95ce1..dca4a91 100644
--- a/src/java/android/net/ipsec/ike/exceptions/InternalAddressFailureException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/InternalAddressFailureException.java
@@ -15,6 +15,9 @@
  */
 package android.net.ipsec.ike.exceptions;
 
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
+
 /**
  * This exception is thrown if the remote server hits an error in assigning an internal IP address.
  *
diff --git a/src/java/android/net/ipsec/ike/exceptions/InvalidIkeSpiException.java b/src/java/android/net/ipsec/ike/exceptions/InvalidIkeSpiException.java
index 0a2dd0c..a9b3a27 100644
--- a/src/java/android/net/ipsec/ike/exceptions/InvalidIkeSpiException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/InvalidIkeSpiException.java
@@ -15,6 +15,9 @@
  */
 package android.net.ipsec.ike.exceptions;
 
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
+
 /**
  * This exception is thrown if an IKE message was received with an unrecognized destination SPI.
  *
diff --git a/src/java/android/net/ipsec/ike/exceptions/InvalidKeException.java b/src/java/android/net/ipsec/ike/exceptions/InvalidKeException.java
index d58abca..2882138 100644
--- a/src/java/android/net/ipsec/ike/exceptions/InvalidKeException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/InvalidKeException.java
@@ -15,6 +15,9 @@
  */
 package android.net.ipsec.ike.exceptions;
 
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
+
 /**
  * This exception is thrown when the remote server expected a different Diffie-Hellman group.
  *
diff --git a/src/java/android/net/ipsec/ike/exceptions/InvalidMajorVersionException.java b/src/java/android/net/ipsec/ike/exceptions/InvalidMajorVersionException.java
index 25eb20d..cdb9e55 100644
--- a/src/java/android/net/ipsec/ike/exceptions/InvalidMajorVersionException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/InvalidMajorVersionException.java
@@ -16,6 +16,8 @@
 package android.net.ipsec.ike.exceptions;
 
 import android.annotation.SuppressLint;
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
 
 /**
  * This exception is thrown when major version of an inbound message is higher than 2.
diff --git a/src/java/android/net/ipsec/ike/exceptions/InvalidMessageIdException.java b/src/java/android/net/ipsec/ike/exceptions/InvalidMessageIdException.java
index 5d95336..043d482 100644
--- a/src/java/android/net/ipsec/ike/exceptions/InvalidMessageIdException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/InvalidMessageIdException.java
@@ -15,6 +15,9 @@
  */
 package android.net.ipsec.ike.exceptions;
 
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
+
 /**
  * This exception is thrown when the remote server received a message with out-of-window-size ID.
  *
diff --git a/src/java/android/net/ipsec/ike/exceptions/InvalidSelectorsException.java b/src/java/android/net/ipsec/ike/exceptions/InvalidSelectorsException.java
index ad83d3d..985a4ec 100644
--- a/src/java/android/net/ipsec/ike/exceptions/InvalidSelectorsException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/InvalidSelectorsException.java
@@ -16,6 +16,8 @@
 package android.net.ipsec.ike.exceptions;
 
 import android.annotation.NonNull;
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
 
 import java.util.Objects;
 
diff --git a/src/java/android/net/ipsec/ike/exceptions/InvalidSyntaxException.java b/src/java/android/net/ipsec/ike/exceptions/InvalidSyntaxException.java
index 864a9d6..fcf0021 100644
--- a/src/java/android/net/ipsec/ike/exceptions/InvalidSyntaxException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/InvalidSyntaxException.java
@@ -16,6 +16,8 @@
 package android.net.ipsec.ike.exceptions;
 
 import android.annotation.NonNull;
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
 
 /**
  * This exception is thrown if any IKE message has a syntax error.
diff --git a/src/java/android/net/ipsec/ike/exceptions/NoAdditionalSasException.java b/src/java/android/net/ipsec/ike/exceptions/NoAdditionalSasException.java
index 8a4383f..52d485a 100644
--- a/src/java/android/net/ipsec/ike/exceptions/NoAdditionalSasException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/NoAdditionalSasException.java
@@ -15,6 +15,9 @@
  */
 package android.net.ipsec.ike.exceptions;
 
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
+
 /**
  * This exception is thrown if the remote server is unwilling to accept any more Child SAs.
  *
diff --git a/src/java/android/net/ipsec/ike/exceptions/NoValidProposalChosenException.java b/src/java/android/net/ipsec/ike/exceptions/NoValidProposalChosenException.java
index 313e6ce..1345c33 100644
--- a/src/java/android/net/ipsec/ike/exceptions/NoValidProposalChosenException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/NoValidProposalChosenException.java
@@ -16,6 +16,8 @@
 package android.net.ipsec.ike.exceptions;
 
 import android.annotation.NonNull;
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
 
 /**
  * This exception is thrown if a SA proposal negotiation failed.
diff --git a/src/java/android/net/ipsec/ike/exceptions/SinglePairRequiredException.java b/src/java/android/net/ipsec/ike/exceptions/SinglePairRequiredException.java
index 6d9792f..7c7590d 100644
--- a/src/java/android/net/ipsec/ike/exceptions/SinglePairRequiredException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/SinglePairRequiredException.java
@@ -15,6 +15,9 @@
  */
 package android.net.ipsec.ike.exceptions;
 
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
+
 /**
  * This exception is thrown if the remote server requires a single pair of addresses as selectors.
  *
diff --git a/src/java/android/net/ipsec/ike/exceptions/TemporaryFailureException.java b/src/java/android/net/ipsec/ike/exceptions/TemporaryFailureException.java
index ee1c93c..d47446f 100644
--- a/src/java/android/net/ipsec/ike/exceptions/TemporaryFailureException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/TemporaryFailureException.java
@@ -16,6 +16,8 @@
 package android.net.ipsec.ike.exceptions;
 
 import android.annotation.NonNull;
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
 
 /**
  * This exception is thrown if the remote server declined a request because of a temporary issue.
diff --git a/src/java/android/net/ipsec/ike/exceptions/TsUnacceptableException.java b/src/java/android/net/ipsec/ike/exceptions/TsUnacceptableException.java
index 0486d3d..3feb975 100644
--- a/src/java/android/net/ipsec/ike/exceptions/TsUnacceptableException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/TsUnacceptableException.java
@@ -15,6 +15,9 @@
  */
 package android.net.ipsec.ike.exceptions;
 
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
+
 /**
  * This exception is thrown if Traffic Selectors negotiation failed.
  *
diff --git a/src/java/android/net/ipsec/ike/exceptions/UnrecognizedIkeProtocolException.java b/src/java/android/net/ipsec/ike/exceptions/UnrecognizedIkeProtocolException.java
index aadbb6f..d27930a 100644
--- a/src/java/android/net/ipsec/ike/exceptions/UnrecognizedIkeProtocolException.java
+++ b/src/java/android/net/ipsec/ike/exceptions/UnrecognizedIkeProtocolException.java
@@ -16,6 +16,8 @@
 package android.net.ipsec.ike.exceptions;
 
 import android.annotation.NonNull;
+import android.net.ipsec.ike.ChildSessionCallback;
+import android.net.ipsec.ike.IkeSessionCallback;
 
 import java.util.Objects;