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;
    }
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 ; }
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>