key.append(sel.getSelectorID()).append(":");
        Mapper mapChild(Object e) {            //Mapper childMapper = new Mapper();            java.util.List childAxes = new ArrayList();            java.util.HashMap pseudoSelectors = new java.util.HashMap();            java.util.List mappedSelectors = new java.util.LinkedList();            StringBuffer key = new StringBuffer();            for (int i = 0; i < axes.size(); i++) {                Selector sel = (Selector) axes.get(i);                if (sel.getAxis() == Selector.DESCENDANT_AXIS) {                    //carry it forward to other descendants                    childAxes.add(sel);                } else if (sel.getAxis() == Selector.IMMEDIATE_SIBLING_AXIS) {                    throw new RuntimeException();                }                if (!sel.matches(e, _attRes, _treeRes)) {                    continue;                }                //Assumption: if it is a pseudo-element, it does not also have dynamic pseudo-class                String pseudoElement = sel.getPseudoElement();                if (pseudoElement != null) {                    java.util.List l = (java.util.List) pseudoSelectors.get(pseudoElement);                    if (l == null) {                        l = new java.util.LinkedList();                        pseudoSelectors.put(pseudoElement, l);                    }                    l.add(sel);                    continue;                }                if (sel.isPseudoClass(Selector.VISITED_PSEUDOCLASS)) {                    _visitElements.add(e);                }                if (sel.isPseudoClass(Selector.ACTIVE_PSEUDOCLASS)) {                    _activeElements.add(e);                }                if (sel.isPseudoClass(Selector.HOVER_PSEUDOCLASS)) {                    _hoverElements.add(e);                }                if (sel.isPseudoClass(Selector.FOCUS_PSEUDOCLASS)) {                    _focusElements.add(e);                }                if (!sel.matchesDynamic(e, _attRes, _treeRes)) {                    continue;                }                key.append(sel.getSelectorID()).append(":");                Selector chain = sel.getChainedSelector();                if (chain == null) {                    mappedSelectors.add(sel);                } else if (chain.getAxis() == Selector.IMMEDIATE_SIBLING_AXIS) {                    throw new RuntimeException();                } else {                    childAxes.add(chain);                }            }            if (children == null) children = new HashMap();            Mapper childMapper = (Mapper) children.get(key.toString());            if (childMapper == null) {                childMapper = new Mapper();                childMapper.axes = childAxes;                childMapper.pseudoSelectors = pseudoSelectors;                childMapper.mappedSelectors = mappedSelectors;                children.put(key.toString(), childMapper);            }            link(e, childMapper);            return childMapper;        }