Map test = bucket(members, new Transformer() {
Map test = CollectionUtils.bucket(members, new Transformer() {
    private void member_helper_type(List members,                                    final ObjectSwitchCallback callback,                                    final ParameterTyper typer,                                    final Label def,                                    final Label end,                                    final BitSet checked) throws Exception {        if (members.size() == 1) {            // need to check classes that have not already been checked via switches            Member member = (Member)members.get(0);            Class[] types = typer.getParameterTypes(member);            for (int i = 0; i < types.length; i++) {                if (checked == null || !checked.get(i)) {                    dup();                    aaload(i);                    invoke(MethodConstants.CLASS_GET_NAME);                    push(types[i].getName());                    invoke(MethodConstants.EQUALS);                    ifeq(def);                    // pop deferred                }            }            pop();            callback.processCase(member, end);        } else {            // choose the index that has the best chance of uniquely identifying member            Class[] example = typer.getParameterTypes(members.get(0));            Map buckets = null;            int index = -1;            for (int i = 0; i < example.length; i++) {                final int j = i;                Map test = bucket(members, new Transformer() {                    public Object transform(Object value) {                        return typer.getParameterTypes(value)[j].getName();                    }                });                if (buckets == null || test.size() > buckets.size()) {                    buckets = test;                    index = i;                }            }            if (buckets == null) {                // must have two methods with same name, types, and different return types                throw new RuntimeException("assertion failed index=" + index + " m1=" + members.get(0));            }            checked.set(index);            dup();            aaload(index);            invoke(MethodConstants.CLASS_GET_NAME);            final Map fbuckets = buckets;            String[] names = (String[])buckets.keySet().toArray(new String[buckets.size()]);            string_switch_hash(names, new ObjectSwitchCallback() {                public void processCase(Object key, Label dontUseEnd) throws Exception {                    // recurse                    member_helper_type((List)fbuckets.get(key), callback, typer, def, end, checked);                }                public void processDefault() throws Exception {                    // pop deferred                    goTo(def);                }            });        }    }