code: @Deprecated
      public void addSourceTargetSet(UnicodeSet inputFilter, UnicodeSet sourceSet, UnicodeSet targetSet) {
          UnicodeSet myFilter = getFilterAsUnicodeSet(inputFilter);
          UnicodeSet temp = new UnicodeSet(handleGetSourceSet()).retainAll(myFilter);
          // use old method, if we don't have anything better
          sourceSet.addAll(temp);
          // clumsy guess with target
          for (String s : temp) {
              String t = transliterate(s);
              if (!s.equals(t)) {
                  targetSet.addAll(t);
              }
          }
      }
docs: Returns the set of all characters that may be generated as
  replacement text by this transliterator, filtered by BOTH the input filter, and the current getFilter().
  <p>SHOULD BE OVERRIDEN BY SUBCLASSES.
  It is probably an error for any transliterator to NOT override this, but we can't force them to
  for backwards compatibility.
  <p>Other methods vector through this.
  <p>When gathering the information on source and target, the compound transliterator makes things complicated.
  For example, suppose we have:
  <pre>
  Global FILTER = [ax]
  a &gt; b;
  :: NULL;
  b &gt; c;
  x &gt; d;
  </pre>
  While the filter just allows a and x, b is an intermediate result, which could produce c. So the source and target sets
  cannot be gathered independently. What we have to do is filter the sources for the first transliterator according to
  the global filter, intersect that transliterator's filter. Based on that we get the target.
  The next transliterator gets as a global filter (global + last target). And so on.
  <p>There is another complication:
  <pre>
  Global FILTER = [ax]
  a &gt;|b;
  b &gt;c;
  </pre>
  Even though b would be filtered from the input, whenever we have a backup, it could be part of the input. So ideally we will
  change the global filter as we go.
  @param targetSet TODO
  @see #getTargetSet
  @deprecated  This API is ICU internal only.
  @hide draft / provisional / internal are hidden on Android