public void addCatchClause(TypeId<? extends Throwable> toCatch, Label catchClause) {
    if (catchTypes.contains(toCatch)) {
      throw new IllegalArgumentException("Already caught: " + toCatch);
    }
    adopt(catchClause);
    catchTypes.add(toCatch);
    catches = toTypeList(catchTypes);
    catchLabels.add(catchClause);
  }
Registers {@code catchClause} as a branch target for all instructions in this frame that throw
a class assignable to {@code toCatch}. This includes methods invoked from this frame.
Deregister the clause using {@link #removeCatchClause removeCatchClause()}. It is an error to
register a catch clause without also {@link #mark marking it} in the same {@code Code}
instance.
android/android_framework/dex-maker/src/main/java/com/android/dx/Code.java