public Signature exclude(String... excludeArgs) {
        Pattern[] patterns = new Pattern[excludeArgs.length];
        for (int i = 0; i < excludeArgs.length; i++) patterns[i] = Pattern.compile(excludeArgs[i]);

        List<Class<?>> types = new ArrayList<>(argNames.length);
        List<String> names = new ArrayList<>(argNames.length);

        OUTER:
        for (int argOffset = 0; argOffset < argNames.length; argOffset++) {
            String arg = argNames[argOffset];
            for (Pattern pattern : patterns) {
                Matcher matcher = pattern.matcher(arg);
                if (matcher.find()) continue OUTER;
            }

            // no matches, include
            types.add(methodType.parameterType(argOffset));
            names.add(arg);
        }
        return new Signature(MethodType.methodType(methodType.returnType(), types.toArray(new Class<?>[0])), names.toArray(new String[0]));
    }
public Signature exclude ( String ... excludeArgs ) { Pattern [ ] patterns = new Pattern [ excludeArgs . length ] ; for ( int i = 0 ; i < excludeArgs . length ; i ++ ) patterns [ i ] = Pattern . compile ( excludeArgs [ i ] ) ; List < Class < ? > > types = new ArrayList < > ( argNames . length ) ; List < String > names = new ArrayList < > ( argNames . length ) ; OUTER : for ( int argOffset = 0 ; argOffset < argNames . length ; argOffset ++ ) { String arg = argNames [ argOffset ] ; for ( Pattern pattern : patterns ) { Matcher matcher = pattern . matcher ( arg ) ; if ( matcher . find ( ) ) continue OUTER ; } types . add ( methodType . parameterType ( argOffset ) ) ; names . add ( arg ) ; } return new Signature ( MethodType . methodType ( methodType . returnType ( ) , types . toArray ( new Class < ? > [ 0 ] ) ) , names . toArray ( new String [ 0 ] ) ) ; }
Create a new signature containing the same return value as this one, but
omitting the specified arguments. Blacklisting to #permute's whitelisting.

@param excludeArgs the names of the arguments to exclude
@return the new signature