// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package com.android.tools.r8.androidapi;

import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.SetUtils;
import java.util.Set;

/**
 * Provides a mapping of API levels to exceptions introduced at that API level.
 *
 * <p>The mapping is only provided up to excluding the API level 21 (Android L) at which point the
 * verification issue for unresolved exception types was fixed.
 *
 * <p>See b/153514654 and b/131349148.
 *
 * <p>See GenerateAvailableApiExceptions.main in tests module for generating the buildMap function.
 */
public class AvailableApiExceptions {

  private final Set<DexType> exceptions;

  public AvailableApiExceptions(InternalOptions options) {
    assert options.getMinApiLevel().isLessThan(AndroidApiLevel.L);
    exceptions = build(options.itemFactory, options.getMinApiLevel());
  }

  public boolean canCauseVerificationError(DexType type) {
    return !exceptions.contains(type);
  }

  /** The content of this method can be regenerated with GenerateAvailableExceptions.main. */
  public static Set<DexType> build(DexItemFactory factory, AndroidApiLevel minApiLevel) {
    Set<DexType> types = SetUtils.newIdentityHashSet(333);
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.B)) {
      types.add(factory.createType("Landroid/app/PendingIntent$CanceledException;"));
      types.add(factory.createType("Landroid/content/ActivityNotFoundException;"));
      types.add(factory.createType("Landroid/content/IntentFilter$MalformedMimeTypeException;"));
      types.add(factory.createType("Landroid/content/ReceiverCallNotAllowedException;"));
      types.add(factory.createType("Landroid/content/pm/PackageManager$NameNotFoundException;"));
      types.add(factory.createType("Landroid/content/res/Resources$NotFoundException;"));
      types.add(factory.createType("Landroid/database/CursorIndexOutOfBoundsException;"));
      types.add(factory.createType("Landroid/database/SQLException;"));
      types.add(factory.createType("Landroid/database/StaleDataException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteAbortException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteConstraintException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteDatabaseCorruptException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteDiskIOException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteDoneException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteFullException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteMisuseException;"));
      types.add(factory.createType("Landroid/net/ParseException;"));
      types.add(factory.createType("Landroid/opengl/GLException;"));
      types.add(factory.createType("Landroid/os/BadParcelableException;"));
      types.add(factory.createType("Landroid/os/DeadObjectException;"));
      types.add(factory.createType("Landroid/os/ParcelFormatException;"));
      types.add(factory.createType("Landroid/os/RemoteException;"));
      types.add(factory.createType("Landroid/provider/Settings$SettingNotFoundException;"));
      types.add(factory.createType("Landroid/test/AssertionFailedError;"));
      types.add(factory.createType("Landroid/test/ComparisonFailure;"));
      types.add(factory.createType("Landroid/util/AndroidException;"));
      types.add(factory.createType("Landroid/util/AndroidRuntimeException;"));
      types.add(factory.createType("Landroid/util/TimeFormatException;"));
      types.add(factory.createType("Landroid/view/InflateException;"));
      types.add(factory.createType("Landroid/view/Surface$OutOfResourcesException;"));
      types.add(factory.createType("Landroid/view/SurfaceHolder$BadSurfaceTypeException;"));
      types.add(factory.createType("Landroid/view/WindowManager$BadTokenException;"));
      types.add(factory.createType("Landroid/widget/RemoteViews$ActionException;"));
      types.add(factory.createType("Ljava/io/CharConversionException;"));
      types.add(factory.createType("Ljava/io/EOFException;"));
      types.add(factory.createType("Ljava/io/FileNotFoundException;"));
      types.add(factory.createType("Ljava/io/IOException;"));
      types.add(factory.createType("Ljava/io/InterruptedIOException;"));
      types.add(factory.createType("Ljava/io/InvalidClassException;"));
      types.add(factory.createType("Ljava/io/InvalidObjectException;"));
      types.add(factory.createType("Ljava/io/NotActiveException;"));
      types.add(factory.createType("Ljava/io/NotSerializableException;"));
      types.add(factory.createType("Ljava/io/ObjectStreamException;"));
      types.add(factory.createType("Ljava/io/OptionalDataException;"));
      types.add(factory.createType("Ljava/io/StreamCorruptedException;"));
      types.add(factory.createType("Ljava/io/SyncFailedException;"));
      types.add(factory.createType("Ljava/io/UTFDataFormatException;"));
      types.add(factory.createType("Ljava/io/UnsupportedEncodingException;"));
      types.add(factory.createType("Ljava/io/WriteAbortedException;"));
      types.add(factory.createType("Ljava/lang/AbstractMethodError;"));
      types.add(factory.createType("Ljava/lang/ArithmeticException;"));
      types.add(factory.createType("Ljava/lang/ArrayIndexOutOfBoundsException;"));
      types.add(factory.createType("Ljava/lang/ArrayStoreException;"));
      types.add(factory.createType("Ljava/lang/AssertionError;"));
      types.add(factory.createType("Ljava/lang/ClassCastException;"));
      types.add(factory.createType("Ljava/lang/ClassCircularityError;"));
      types.add(factory.createType("Ljava/lang/ClassFormatError;"));
      types.add(factory.createType("Ljava/lang/ClassNotFoundException;"));
      types.add(factory.createType("Ljava/lang/CloneNotSupportedException;"));
      types.add(factory.createType("Ljava/lang/EnumConstantNotPresentException;"));
      types.add(factory.createType("Ljava/lang/Error;"));
      types.add(factory.createType("Ljava/lang/Exception;"));
      types.add(factory.createType("Ljava/lang/ExceptionInInitializerError;"));
      types.add(factory.createType("Ljava/lang/IllegalAccessError;"));
      types.add(factory.createType("Ljava/lang/IllegalAccessException;"));
      types.add(factory.createType("Ljava/lang/IllegalArgumentException;"));
      types.add(factory.createType("Ljava/lang/IllegalMonitorStateException;"));
      types.add(factory.createType("Ljava/lang/IllegalStateException;"));
      types.add(factory.createType("Ljava/lang/IllegalThreadStateException;"));
      types.add(factory.createType("Ljava/lang/IncompatibleClassChangeError;"));
      types.add(factory.createType("Ljava/lang/IndexOutOfBoundsException;"));
      types.add(factory.createType("Ljava/lang/InstantiationError;"));
      types.add(factory.createType("Ljava/lang/InstantiationException;"));
      types.add(factory.createType("Ljava/lang/InternalError;"));
      types.add(factory.createType("Ljava/lang/InterruptedException;"));
      types.add(factory.createType("Ljava/lang/LinkageError;"));
      types.add(factory.createType("Ljava/lang/NegativeArraySizeException;"));
      types.add(factory.createType("Ljava/lang/NoClassDefFoundError;"));
      types.add(factory.createType("Ljava/lang/NoSuchFieldError;"));
      types.add(factory.createType("Ljava/lang/NoSuchFieldException;"));
      types.add(factory.createType("Ljava/lang/NoSuchMethodError;"));
      types.add(factory.createType("Ljava/lang/NoSuchMethodException;"));
      types.add(factory.createType("Ljava/lang/NullPointerException;"));
      types.add(factory.createType("Ljava/lang/NumberFormatException;"));
      types.add(factory.createType("Ljava/lang/OutOfMemoryError;"));
      types.add(factory.createType("Ljava/lang/RuntimeException;"));
      types.add(factory.createType("Ljava/lang/SecurityException;"));
      types.add(factory.createType("Ljava/lang/StackOverflowError;"));
      types.add(factory.createType("Ljava/lang/StringIndexOutOfBoundsException;"));
      types.add(factory.createType("Ljava/lang/ThreadDeath;"));
      types.add(factory.createType("Ljava/lang/Throwable;"));
      types.add(factory.createType("Ljava/lang/TypeNotPresentException;"));
      types.add(factory.createType("Ljava/lang/UnknownError;"));
      types.add(factory.createType("Ljava/lang/UnsatisfiedLinkError;"));
      types.add(factory.createType("Ljava/lang/UnsupportedClassVersionError;"));
      types.add(factory.createType("Ljava/lang/UnsupportedOperationException;"));
      types.add(factory.createType("Ljava/lang/VerifyError;"));
      types.add(factory.createType("Ljava/lang/VirtualMachineError;"));
      types.add(factory.createType("Ljava/lang/annotation/AnnotationFormatError;"));
      types.add(factory.createType("Ljava/lang/annotation/AnnotationTypeMismatchException;"));
      types.add(factory.createType("Ljava/lang/annotation/IncompleteAnnotationException;"));
      types.add(factory.createType("Ljava/lang/reflect/GenericSignatureFormatError;"));
      types.add(factory.createType("Ljava/lang/reflect/InvocationTargetException;"));
      types.add(factory.createType("Ljava/lang/reflect/MalformedParameterizedTypeException;"));
      types.add(factory.createType("Ljava/lang/reflect/UndeclaredThrowableException;"));
      types.add(factory.createType("Ljava/net/BindException;"));
      types.add(factory.createType("Ljava/net/ConnectException;"));
      types.add(factory.createType("Ljava/net/HttpRetryException;"));
      types.add(factory.createType("Ljava/net/MalformedURLException;"));
      types.add(factory.createType("Ljava/net/NoRouteToHostException;"));
      types.add(factory.createType("Ljava/net/PortUnreachableException;"));
      types.add(factory.createType("Ljava/net/ProtocolException;"));
      types.add(factory.createType("Ljava/net/SocketException;"));
      types.add(factory.createType("Ljava/net/SocketTimeoutException;"));
      types.add(factory.createType("Ljava/net/URISyntaxException;"));
      types.add(factory.createType("Ljava/net/UnknownHostException;"));
      types.add(factory.createType("Ljava/net/UnknownServiceException;"));
      types.add(factory.createType("Ljava/nio/BufferOverflowException;"));
      types.add(factory.createType("Ljava/nio/BufferUnderflowException;"));
      types.add(factory.createType("Ljava/nio/InvalidMarkException;"));
      types.add(factory.createType("Ljava/nio/ReadOnlyBufferException;"));
      types.add(factory.createType("Ljava/nio/channels/AlreadyConnectedException;"));
      types.add(factory.createType("Ljava/nio/channels/AsynchronousCloseException;"));
      types.add(factory.createType("Ljava/nio/channels/CancelledKeyException;"));
      types.add(factory.createType("Ljava/nio/channels/ClosedByInterruptException;"));
      types.add(factory.createType("Ljava/nio/channels/ClosedChannelException;"));
      types.add(factory.createType("Ljava/nio/channels/ClosedSelectorException;"));
      types.add(factory.createType("Ljava/nio/channels/ConnectionPendingException;"));
      types.add(factory.createType("Ljava/nio/channels/FileLockInterruptionException;"));
      types.add(factory.createType("Ljava/nio/channels/IllegalBlockingModeException;"));
      types.add(factory.createType("Ljava/nio/channels/IllegalSelectorException;"));
      types.add(factory.createType("Ljava/nio/channels/NoConnectionPendingException;"));
      types.add(factory.createType("Ljava/nio/channels/NonReadableChannelException;"));
      types.add(factory.createType("Ljava/nio/channels/NonWritableChannelException;"));
      types.add(factory.createType("Ljava/nio/channels/NotYetBoundException;"));
      types.add(factory.createType("Ljava/nio/channels/NotYetConnectedException;"));
      types.add(factory.createType("Ljava/nio/channels/OverlappingFileLockException;"));
      types.add(factory.createType("Ljava/nio/channels/UnresolvedAddressException;"));
      types.add(factory.createType("Ljava/nio/channels/UnsupportedAddressTypeException;"));
      types.add(factory.createType("Ljava/nio/charset/CharacterCodingException;"));
      types.add(factory.createType("Ljava/nio/charset/CoderMalfunctionError;"));
      types.add(factory.createType("Ljava/nio/charset/IllegalCharsetNameException;"));
      types.add(factory.createType("Ljava/nio/charset/MalformedInputException;"));
      types.add(factory.createType("Ljava/nio/charset/UnmappableCharacterException;"));
      types.add(factory.createType("Ljava/nio/charset/UnsupportedCharsetException;"));
      types.add(factory.createType("Ljava/security/AccessControlException;"));
      types.add(factory.createType("Ljava/security/DigestException;"));
      types.add(factory.createType("Ljava/security/GeneralSecurityException;"));
      types.add(factory.createType("Ljava/security/InvalidAlgorithmParameterException;"));
      types.add(factory.createType("Ljava/security/InvalidKeyException;"));
      types.add(factory.createType("Ljava/security/InvalidParameterException;"));
      types.add(factory.createType("Ljava/security/KeyException;"));
      types.add(factory.createType("Ljava/security/KeyManagementException;"));
      types.add(factory.createType("Ljava/security/KeyStoreException;"));
      types.add(factory.createType("Ljava/security/NoSuchAlgorithmException;"));
      types.add(factory.createType("Ljava/security/NoSuchProviderException;"));
      types.add(factory.createType("Ljava/security/PrivilegedActionException;"));
      types.add(factory.createType("Ljava/security/ProviderException;"));
      types.add(factory.createType("Ljava/security/SignatureException;"));
      types.add(factory.createType("Ljava/security/UnrecoverableEntryException;"));
      types.add(factory.createType("Ljava/security/UnrecoverableKeyException;"));
      types.add(factory.createType("Ljava/security/acl/AclNotFoundException;"));
      types.add(factory.createType("Ljava/security/acl/LastOwnerException;"));
      types.add(factory.createType("Ljava/security/acl/NotOwnerException;"));
      types.add(factory.createType("Ljava/security/cert/CRLException;"));
      types.add(factory.createType("Ljava/security/cert/CertPathBuilderException;"));
      types.add(factory.createType("Ljava/security/cert/CertPathValidatorException;"));
      types.add(factory.createType("Ljava/security/cert/CertStoreException;"));
      types.add(factory.createType("Ljava/security/cert/CertificateEncodingException;"));
      types.add(factory.createType("Ljava/security/cert/CertificateException;"));
      types.add(factory.createType("Ljava/security/cert/CertificateExpiredException;"));
      types.add(factory.createType("Ljava/security/cert/CertificateNotYetValidException;"));
      types.add(factory.createType("Ljava/security/cert/CertificateParsingException;"));
      types.add(factory.createType("Ljava/security/spec/InvalidKeySpecException;"));
      types.add(factory.createType("Ljava/security/spec/InvalidParameterSpecException;"));
      types.add(factory.createType("Ljava/sql/BatchUpdateException;"));
      types.add(factory.createType("Ljava/sql/DataTruncation;"));
      types.add(factory.createType("Ljava/sql/SQLException;"));
      types.add(factory.createType("Ljava/sql/SQLWarning;"));
      types.add(factory.createType("Ljava/text/ParseException;"));
      types.add(factory.createType("Ljava/util/ConcurrentModificationException;"));
      types.add(factory.createType("Ljava/util/DuplicateFormatFlagsException;"));
      types.add(factory.createType("Ljava/util/EmptyStackException;"));
      types.add(factory.createType("Ljava/util/FormatFlagsConversionMismatchException;"));
      types.add(factory.createType("Ljava/util/FormatterClosedException;"));
      types.add(factory.createType("Ljava/util/IllegalFormatCodePointException;"));
      types.add(factory.createType("Ljava/util/IllegalFormatConversionException;"));
      types.add(factory.createType("Ljava/util/IllegalFormatException;"));
      types.add(factory.createType("Ljava/util/IllegalFormatFlagsException;"));
      types.add(factory.createType("Ljava/util/IllegalFormatPrecisionException;"));
      types.add(factory.createType("Ljava/util/IllegalFormatWidthException;"));
      types.add(factory.createType("Ljava/util/InputMismatchException;"));
      types.add(factory.createType("Ljava/util/InvalidPropertiesFormatException;"));
      types.add(factory.createType("Ljava/util/MissingFormatArgumentException;"));
      types.add(factory.createType("Ljava/util/MissingFormatWidthException;"));
      types.add(factory.createType("Ljava/util/MissingResourceException;"));
      types.add(factory.createType("Ljava/util/NoSuchElementException;"));
      types.add(factory.createType("Ljava/util/TooManyListenersException;"));
      types.add(factory.createType("Ljava/util/UnknownFormatConversionException;"));
      types.add(factory.createType("Ljava/util/UnknownFormatFlagsException;"));
      types.add(factory.createType("Ljava/util/concurrent/BrokenBarrierException;"));
      types.add(factory.createType("Ljava/util/concurrent/CancellationException;"));
      types.add(factory.createType("Ljava/util/concurrent/ExecutionException;"));
      types.add(factory.createType("Ljava/util/concurrent/RejectedExecutionException;"));
      types.add(factory.createType("Ljava/util/concurrent/TimeoutException;"));
      types.add(factory.createType("Ljava/util/jar/JarException;"));
      types.add(factory.createType("Ljava/util/prefs/BackingStoreException;"));
      types.add(factory.createType("Ljava/util/prefs/InvalidPreferencesFormatException;"));
      types.add(factory.createType("Ljava/util/regex/PatternSyntaxException;"));
      types.add(factory.createType("Ljava/util/zip/DataFormatException;"));
      types.add(factory.createType("Ljava/util/zip/ZipException;"));
      types.add(factory.createType("Ljavax/crypto/BadPaddingException;"));
      types.add(factory.createType("Ljavax/crypto/ExemptionMechanismException;"));
      types.add(factory.createType("Ljavax/crypto/IllegalBlockSizeException;"));
      types.add(factory.createType("Ljavax/crypto/NoSuchPaddingException;"));
      types.add(factory.createType("Ljavax/crypto/ShortBufferException;"));
      types.add(factory.createType("Ljavax/net/ssl/SSLException;"));
      types.add(factory.createType("Ljavax/net/ssl/SSLHandshakeException;"));
      types.add(factory.createType("Ljavax/net/ssl/SSLKeyException;"));
      types.add(factory.createType("Ljavax/net/ssl/SSLPeerUnverifiedException;"));
      types.add(factory.createType("Ljavax/net/ssl/SSLProtocolException;"));
      types.add(factory.createType("Ljavax/security/auth/DestroyFailedException;"));
      types.add(factory.createType("Ljavax/security/auth/callback/UnsupportedCallbackException;"));
      types.add(factory.createType("Ljavax/security/auth/login/LoginException;"));
      types.add(factory.createType("Ljavax/security/cert/CertificateEncodingException;"));
      types.add(factory.createType("Ljavax/security/cert/CertificateException;"));
      types.add(factory.createType("Ljavax/security/cert/CertificateExpiredException;"));
      types.add(factory.createType("Ljavax/security/cert/CertificateNotYetValidException;"));
      types.add(factory.createType("Ljavax/security/cert/CertificateParsingException;"));
      types.add(factory.createType("Ljavax/xml/parsers/FactoryConfigurationError;"));
      types.add(factory.createType("Ljavax/xml/parsers/ParserConfigurationException;"));
      types.add(factory.createType("Ljunit/framework/AssertionFailedError;"));
      types.add(factory.createType("Ljunit/framework/ComparisonFailure;"));
      types.add(factory.createType("Lorg/apache/http/ConnectionClosedException;"));
      types.add(factory.createType("Lorg/apache/http/HttpException;"));
      types.add(factory.createType("Lorg/apache/http/MalformedChunkCodingException;"));
      types.add(factory.createType("Lorg/apache/http/MethodNotSupportedException;"));
      types.add(factory.createType("Lorg/apache/http/NoHttpResponseException;"));
      types.add(factory.createType("Lorg/apache/http/ParseException;"));
      types.add(factory.createType("Lorg/apache/http/ProtocolException;"));
      types.add(factory.createType("Lorg/apache/http/UnsupportedHttpVersionException;"));
      types.add(factory.createType("Lorg/apache/http/auth/AuthenticationException;"));
      types.add(factory.createType("Lorg/apache/http/auth/InvalidCredentialsException;"));
      types.add(factory.createType("Lorg/apache/http/auth/MalformedChallengeException;"));
      types.add(factory.createType("Lorg/apache/http/client/CircularRedirectException;"));
      types.add(factory.createType("Lorg/apache/http/client/ClientProtocolException;"));
      types.add(factory.createType("Lorg/apache/http/client/HttpResponseException;"));
      types.add(factory.createType("Lorg/apache/http/client/NonRepeatableRequestException;"));
      types.add(factory.createType("Lorg/apache/http/client/RedirectException;"));
      types.add(factory.createType("Lorg/apache/http/conn/ConnectTimeoutException;"));
      types.add(factory.createType("Lorg/apache/http/conn/ConnectionPoolTimeoutException;"));
      types.add(factory.createType("Lorg/apache/http/conn/HttpHostConnectException;"));
      types.add(factory.createType("Lorg/apache/http/cookie/MalformedCookieException;"));
      types.add(factory.createType("Lorg/apache/http/impl/auth/NTLMEngineException;"));
      types.add(
          factory.createType("Lorg/apache/http/impl/auth/UnsupportedDigestAlgorithmException;"));
      types.add(factory.createType("Lorg/apache/http/impl/client/TunnelRefusedException;"));
      types.add(factory.createType("Lorg/apache/http/impl/cookie/DateParseException;"));
      types.add(factory.createType("Lorg/json/JSONException;"));
      types.add(factory.createType("Lorg/w3c/dom/DOMException;"));
      types.add(factory.createType("Lorg/xml/sax/SAXException;"));
      types.add(factory.createType("Lorg/xml/sax/SAXNotRecognizedException;"));
      types.add(factory.createType("Lorg/xml/sax/SAXNotSupportedException;"));
      types.add(factory.createType("Lorg/xml/sax/SAXParseException;"));
      types.add(factory.createType("Lorg/xmlpull/v1/XmlPullParserException;"));
    }
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.D)) {
      types.add(factory.createType("Landroid/content/IntentSender$SendIntentException;"));
    }
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.E)) {
      types.add(factory.createType("Landroid/accounts/AccountsException;"));
      types.add(factory.createType("Landroid/accounts/AuthenticatorException;"));
      types.add(factory.createType("Landroid/accounts/NetworkErrorException;"));
      types.add(factory.createType("Landroid/accounts/OperationCanceledException;"));
      types.add(factory.createType("Landroid/content/OperationApplicationException;"));
    }
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.F)) {
      types.add(factory.createType("Ljavax/xml/datatype/DatatypeConfigurationException;"));
      types.add(factory.createType("Ljavax/xml/transform/TransformerConfigurationException;"));
      types.add(factory.createType("Ljavax/xml/transform/TransformerException;"));
      types.add(factory.createType("Ljavax/xml/transform/TransformerFactoryConfigurationError;"));
      types.add(factory.createType("Ljavax/xml/xpath/XPathException;"));
      types.add(factory.createType("Ljavax/xml/xpath/XPathExpressionException;"));
      types.add(factory.createType("Ljavax/xml/xpath/XPathFactoryConfigurationException;"));
      types.add(factory.createType("Ljavax/xml/xpath/XPathFunctionException;"));
      types.add(factory.createType("Lorg/w3c/dom/ls/LSException;"));
    }
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.G)) {
      types.add(factory.createType("Landroid/net/sip/SipException;"));
      types.add(factory.createType("Landroid/nfc/FormatException;"));
      types.add(factory.createType("Ljava/io/IOError;"));
      types.add(factory.createType("Ljava/sql/SQLClientInfoException;"));
      types.add(factory.createType("Ljava/sql/SQLDataException;"));
      types.add(factory.createType("Ljava/sql/SQLFeatureNotSupportedException;"));
      types.add(factory.createType("Ljava/sql/SQLIntegrityConstraintViolationException;"));
      types.add(factory.createType("Ljava/sql/SQLInvalidAuthorizationSpecException;"));
      types.add(factory.createType("Ljava/sql/SQLNonTransientConnectionException;"));
      types.add(factory.createType("Ljava/sql/SQLNonTransientException;"));
      types.add(factory.createType("Ljava/sql/SQLRecoverableException;"));
      types.add(factory.createType("Ljava/sql/SQLSyntaxErrorException;"));
      types.add(factory.createType("Ljava/sql/SQLTimeoutException;"));
      types.add(factory.createType("Ljava/sql/SQLTransactionRollbackException;"));
      types.add(factory.createType("Ljava/sql/SQLTransientConnectionException;"));
      types.add(factory.createType("Ljava/sql/SQLTransientException;"));
      types.add(factory.createType("Ljava/util/ServiceConfigurationError;"));
      types.add(factory.createType("Ljava/util/zip/ZipError;"));
    }
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.G_MR1)) {
      types.add(factory.createType("Landroid/nfc/TagLostException;"));
    }
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.H)) {
      types.add(factory.createType("Landroid/app/Fragment$InstantiationException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteAccessPermException;"));
      types.add(
          factory.createType(
              "Landroid/database/sqlite/SQLiteBindOrColumnIndexOutOfRangeException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteBlobTooBigException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteCantOpenDatabaseException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteDatabaseLockedException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteDatatypeMismatchException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteOutOfMemoryException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteReadOnlyDatabaseException;"));
      types.add(factory.createType("Landroid/database/sqlite/SQLiteTableLockedException;"));
      types.add(factory.createType("Landroid/graphics/SurfaceTexture$OutOfResourcesException;"));
      types.add(factory.createType("Landroid/os/NetworkOnMainThreadException;"));
      types.add(factory.createType("Landroid/renderscript/RSDriverException;"));
      types.add(factory.createType("Landroid/renderscript/RSIllegalArgumentException;"));
      types.add(factory.createType("Landroid/renderscript/RSInvalidStateException;"));
      types.add(factory.createType("Landroid/renderscript/RSRuntimeException;"));
      types.add(factory.createType("Landroid/util/Base64DataException;"));
      types.add(factory.createType("Landroid/util/MalformedJsonException;"));
      types.add(factory.createType("Landroid/view/KeyCharacterMap$UnavailableException;"));
    }
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.I)) {
      types.add(factory.createType("Landroid/security/KeyChainException;"));
      types.add(factory.createType("Landroid/util/NoSuchPropertyException;"));
    }
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.I_MR1)) {
      types.add(factory.createType("Landroid/os/TransactionTooLargeException;"));
    }
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.J)) {
      types.add(factory.createType("Landroid/media/MediaCodec$CryptoException;"));
      types.add(factory.createType("Landroid/media/MediaCryptoException;"));
      types.add(factory.createType("Landroid/os/OperationCanceledException;"));
    }
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.J_MR1)) {
      types.add(factory.createType("Landroid/view/WindowManager$InvalidDisplayException;"));
    }
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.J_MR2)) {
      types.add(factory.createType("Landroid/media/DeniedByServerException;"));
      types.add(factory.createType("Landroid/media/MediaDrmException;"));
      types.add(factory.createType("Landroid/media/NotProvisionedException;"));
      types.add(factory.createType("Landroid/media/UnsupportedSchemeException;"));
    }
    if (minApiLevel.isGreaterThanOrEqualTo(AndroidApiLevel.K)) {
      types.add(factory.createType("Landroid/media/ResourceBusyException;"));
      types.add(
          factory.createType("Landroid/os/ParcelFileDescriptor$FileDescriptorDetachedException;"));
      types.add(factory.createType("Ljava/lang/ReflectiveOperationException;"));
      types.add(factory.createType("Ljavax/crypto/AEADBadTagException;"));
    }
    return types;
  }
}
