@Override
    protected boolean canRun(ClassNode node) {
        if (!node.superName.equals(classNodes.get("Node").name) || classNodes.containsKey("CacheableNode"))
            return false;
        int countSelf = 0;
        ListIterator<FieldNode> li = node.fields.listIterator();
        while (li.hasNext()) {
            FieldNode fn = li.next();
            if (fn.desc.equals(String.format("L%s;", node.name)) ) {
                countSelf++;
            }
            if (countSelf > 2)
                return false;
        }
        return countSelf == 2;
    }