@SuppressWarnings("unchecked")
    <T extends JCExpression, Z extends ArgumentType<T>> void processArg(T that, Supplier<Z> argumentTypeFactory) {
        UniquePos pos = new UniquePos(that);
        Z cached = (Z)argumentTypeCache.get(pos);
        if (cached != null) {
            //dup existing speculative type
            setResult(that, cached.dup(that, env));
        } else {
            Z res = argumentTypeFactory.get();
            argumentTypeCache.put(pos, res);
            setResult(that, res);
        }
    }
@ SuppressWarnings ( "unchecked" ) < T extends JCExpression , Z extends ArgumentType < T > > void processArg ( T that , Supplier < Z > argumentTypeFactory ) { UniquePos pos = new UniquePos ( that ) ; Z cached = ( Z ) argumentTypeCache . get ( pos ) ; if ( cached != null ) { setResult ( that , cached . dup ( that , env ) ) ; } else { Z res = argumentTypeFactory . get ( ) ; argumentTypeCache . put ( pos , res ) ; setResult ( that , res ) ; } }
Process a method argument; this method allows the caller to specify a custom speculative attribution
logic (this is used e.g. for lambdas).