code: public static final @CheckForNull
      List<ReferenceType> getTypeParameters(String signature) {
          GenericSignatureParser parser = new GenericSignatureParser("(" + signature + ")V");
          List<ReferenceType> types = new ArrayList<>();
  
          Iterator<String> iter = parser.parameterSignatureIterator();
          while (iter.hasNext()) {
              String parameterString = iter.next();
              ReferenceType t = (ReferenceType) getType(parameterString);
              if (t == null) {
                  return null;
              }
              types.add(t);
          }
          return types;
      }
docs: Parse a bytecode signature that has 1 or more (possibly generic) types
  and return a list of the Types.
  
  @param signature
  bytecode signature e.g. e.g.
  <code>Ljava/util/ArrayList&lt;Ljava/lang/String;&gt;;Ljava/util/ArrayList&lt;TT;&gt;;Ljava/util/ArrayList&lt;*&gt;;</code>