Example usage for com.google.common.collect ImmutableSortedSet iterator

List of usage examples for com.google.common.collect ImmutableSortedSet iterator

Introduction

In this page you can find the example usage for com.google.common.collect ImmutableSortedSet iterator.

Prototype

@Override 
    public UnmodifiableIterator<E> iterator() 

Source Link

Usage

From source file:org.thiesen.ant.git.GitInfoExtractor.java

private static CustomTag getLastRevTag(final Repository r) throws IOException {

    // Iterate all tags, beginning with the joungest.
    // The first match that is reachable from HEAD is the one we are looking for
    final ImmutableSortedSet<CustomTag> sortedTags = getTagsSortedByCommitTime(r);
    final RevWalk walk = new RevWalk(r);
    walk.setRetainBody(false);/*from ww w  .  j  a  v  a2 s. co m*/

    final RevCommit head = getHead(r);

    CustomTag tag = null;
    boolean isReachable = false;
    UnmodifiableIterator<CustomTag> iterator = sortedTags.iterator();
    while (!isReachable && iterator.hasNext()) {
        tag = iterator.next();
        RevCommit tagCommit = walk.parseCommit(tag.getObjectId());
        isReachable = walk.isMergedInto(tagCommit, head) || head.compareTo(tagCommit) == 0;
        walk.reset();
    }
    walk.dispose();
    return isReachable ? tag : null;
}

From source file:rapternet.irc.bots.wheatley.listeners.GameListener.java

@Override
public void onUserList(UserListEvent event) {

    if (!GameUtils.areGamesBlocked(event.getChannel().getName())) {

        ImmutableSortedSet users = event.getUsers();

        Iterator<User> iterator = users.iterator();
        boolean modified = false;
        while (iterator.hasNext()) {
            User element = iterator.next();
            if (!scores.containsUser(element.getNick())) {
                scores.addUser(element.getNick());
                System.out.println(element.getNick());
                modified = true;/* www.  j  av a  2 s. c o m*/
            }
        }
        if (modified)
            scores.saveToJSON();
    }
}

From source file:rapternet.irc.bots.common.commands.ListChannels.java

@Override
public void processCommand(Event event) {

    CommandMetaData data = new CommandMetaData(event, true);
    String caller = data.getCaller();
    String channel = data.getEventChannel();
    String respondTo;//w  w  w .  j  a v  a2 s  . com

    if (channel == null)
        respondTo = caller;
    else
        respondTo = channel;

    boolean isVerified = data.isVerifiedBotOwner();

    if (!isVerified) {
        event.getBot().sendIRC().notice(caller,
                Colors.BOLD + "Channels: " + Colors.NORMAL + "You don't have access to this command");
    } else {

        ArrayList<String> channelList = new ArrayList<>();
        ImmutableSortedSet users = event.getBot().getUserBot().getChannels();
        Iterator<Channel> iterator = users.iterator();
        String response = new String();

        while (iterator.hasNext()) {
            Channel element = iterator.next();
            channelList.add(element.getName());
        }

        for (int i = 0; i < channelList.size() - 1; i++) {
            response += channelList.get(i) + ", ";
        }
        if (!channelList.isEmpty()) {
            response += channelList.get(channelList.size() - 1);
            event.getBot().sendIRC().message(respondTo, Colors.BOLD + "Channels: " + Colors.NORMAL + response);
        } else {
            event.getBot().sendIRC().message(respondTo,
                    Colors.BOLD + "Channels: " + Colors.NORMAL + "NO CURRENTLY CONNECTED CHANNELS");
        }
    }
}

From source file:testbot.GameControl.java

@Override
public void onUserList(UserListEvent event) {

    if (!blockedChan.equalsIgnoreCase(event.getChannel().getName())) {

        ImmutableSortedSet users = event.getUsers();

        Iterator<User> iterator = users.iterator();
        boolean modified = false;
        while (iterator.hasNext()) {
            User element = iterator.next();
            if (!scores.containsUser(element.getNick())) {
                //temp = (User)users.floor(temp);
                scores.addUser(element.getNick());
                System.out.println(element.getNick());
                modified = true;//from   ww  w .jav a  2  s  .  com
            }
        }
        if (modified)
            scores.saveToJSON();
    }
}

From source file:org.obiba.opal.web.magma.ValueSetsResourceImpl.java

private void addValueSetDtosFromVectorSource(UriInfo uriInfo, Iterable<VariableEntity> variableEntities,
        Variable variable, boolean filterBinary, VectorSource vector, ValueSetsDto.Builder builder) {
    ImmutableSortedSet<VariableEntity> sortedEntities = ImmutableSortedSet.<VariableEntity>naturalOrder()
            .addAll(variableEntities).build();
    Iterable<Value> values = vector.getValues(sortedEntities);

    Map<VariableEntity, Value> results = new LinkedHashMap<>();
    Iterator<VariableEntity> entitiesIterator = sortedEntities.iterator();
    for (Value value : values) {
        VariableEntity entity = entitiesIterator.next();
        results.put(entity, value);//from  w w  w. jav a 2  s . c  om
    }

    for (VariableEntity entity : variableEntities) {
        builder.addValueSets(getValueSetDto(uriInfo, entity, variable, filterBinary, results.get(entity)));
    }
}

From source file:TriviaBot.TriviaMain.java

@Override // Grabs the user list and adds them to the score list
public void onUserList(UserListEvent event) {
    ImmutableSortedSet users = event.getUsers();

    Iterator<User> iterator = users.iterator();
    boolean modified = false;
    while (iterator.hasNext()) {
        User element = iterator.next();/*www.ja  v a 2s  . com*/
        if (!scores.containsUser(element.getNick())) {
            //temp = (User)users.floor(temp);
            scores.addUser(element.getNick());
            System.out.println(element.getNick());
            modified = true;
        }
    }
    if (modified)
        scores.saveToJSON();
}

From source file:rapternet.irc.bots.wheatley.listeners.Blarghlebot.java

@Override
public void onMessage(MessageEvent event) throws Exception {
    String message = Colors.removeFormattingAndColors(event.getMessage());
    String channel = event.getChannel().getName();

    if ((message.toLowerCase().startsWith(Global.mainNick.toLowerCase() + ", ")
            && !message.toLowerCase().startsWith(Global.mainNick.toLowerCase() + ", why")
            && !message.toLowerCase().startsWith(Global.mainNick.toLowerCase() + ", what do you think of")
            && !message.toLowerCase().startsWith(Global.mainNick.toLowerCase() + ", what do you think about")
            && message.endsWith("?"))) {
        //Messages from : http://en.wikipedia.org/wiki/Magic_8-Ball
        List<String> magic = new ArrayList<>();
        magic.add("It is certain");
        magic.add("It is decidedly so");
        magic.add("Without a doubt");
        magic.add("Yes definitely");
        magic.add("You may rely on it");
        magic.add("As I see it, yes");
        magic.add("Most likely");
        magic.add("Outlook good");
        magic.add("Yes");
        magic.add("Signs point to yes");
        magic.add("Reply hazy try again");
        magic.add("Ask again later");
        magic.add("Better not tell you now");
        magic.add("Cannot predict now");
        magic.add("Concentrate and ask again");
        magic.add("Don't count on it");
        magic.add("My reply is no");
        magic.add("My sources say no");
        magic.add("Outlook not so good");
        magic.add("Very doubtful");
        event.respond(magic.get((int) (Math.random() * magic.size() - 1)));
    }/*w w  w . ja  v  a2 s  .  co m*/

    if ((event.getBot().getUserChannelDao().containsUser("BlarghleBot") && !event.getBot().getUserChannelDao()
            .getChannels(event.getBot().getUserChannelDao().getUser("BlarghleBot"))
            .contains(event.getChannel())) || !event.getBot().getUserChannelDao().containsUser("BlarghleBot")) {

        if (message.equalsIgnoreCase("!users") || message.equalsIgnoreCase("!dtellausers")) {
            int totalUsers = 0;
            int dtellaChanUsers = 0;
            int dtellaUsers = 0;
            ImmutableSortedSet users = event.getBot().getUserChannelDao().getAllUsers();

            Iterator<User> iterator = users.iterator();
            while (iterator.hasNext()) {
                User user = iterator.next();
                if (user.getNick().startsWith("|") && !user.getNick().equalsIgnoreCase("|DtellaBridge")) {
                    dtellaUsers++;
                }
                Iterator<Channel> chanIterator = user.getChannels().iterator();
                while (chanIterator.hasNext()) {
                    Channel chanElement = chanIterator.next();
                    if (chanElement.getName().equalsIgnoreCase("#dtella")) {
                        dtellaChanUsers++;
                        break;
                    }
                }
                if (user.getChannels().size() > 0)
                    totalUsers++;
            }
            event.getBot().sendIRC().message(event.getChannel().getName(),
                    Colors.BOLD + "Dtella Shares: " + Colors.NORMAL + (dtellaUsers) + Colors.BOLD
                            + " #Dtella Users: " + Colors.NORMAL + dtellaChanUsers + Colors.BOLD
                            + " Total Visible Users " + Colors.NORMAL + totalUsers);
        }

        //KICKS ON KICKS ON KICKS
        if ((message.equalsIgnoreCase("Blarghlebot, transform and rollout"))
                || (message.equalsIgnoreCase(Global.mainNick + ", transform and rollout"))) {
            switch ((int) (Math.random() * 3 + 1)) {
            case 1:
                event.getBot().sendIRC().action(event.getChannel().getName(), "transforms into CherryBot");
                event.getBot().sendIRC().action(event.getChannel().getName(), "charges his cherry bomb...");
                event.getChannel().send().kick(event.getUser(), "CHERRY ASPLOSION");
                break;
            case 2:
                event.getBot().sendIRC().action(event.getChannel().getName(), "transforms into PeachBot");
                event.getBot().sendIRC().action(event.getChannel().getName(), "charges his peachfuzz...");
                event.getChannel().send().kick(event.getUser(), "EAT FUZZ");
                break;
            case 3:
                event.getBot().sendIRC().action(event.getChannel().getName(), "transforms into AppleBot");
                event.getBot().sendIRC().action(event.getChannel().getName(), "charges his apple cannon...");
                event.getChannel().send().kick(event.getUser(), "EAT PIE");
                break;
            }
        }
        //OTHER Functions

        if (message.equalsIgnoreCase("i put on my robe and wizard hat"))
            event.getChannel().send().kick(event.getUser(), "LIGHTNING BOLT");
        else if (message.equalsIgnoreCase("ba dum") || message.equalsIgnoreCase("badum"))
            event.getBot().sendIRC().message(event.getChannel().getName(), "psh");

        if (message.startsWith(Global.commandPrefix)
                && !message.matches("([ ]{0,}" + Global.commandPrefix + "{1,}[ ]{0,}){1,}")) {

            String command = message.split(Global.commandPrefix)[1];
            String[] cmdSplit = command.split(" ");

            if (command.equalsIgnoreCase("banme")) {
                event.getBot().sendRaw().rawLineNow(
                        "tban " + event.getChannel().getName() + " 1m " + event.getUser().getNick() + "!*@*");
                event.getChannel().send().kick(event.getUser(), "You're Welcome");
            }

            else if (command.equalsIgnoreCase("suicide"))
                event.getChannel().send().kick(event.getUser(), "SOMETHING WITTY ABOUT DYING");

            else if (command.equalsIgnoreCase("kickme"))
                event.getChannel().send().kick(event.getUser(), "you += dead");
            if (cmdSplit[0].toLowerCase().startsWith("troll")) {
                if ((event.getUser().getNick().equalsIgnoreCase(Global.botOwner)
                        || event.getChannel().isOwner(event.getUser())) && event.getUser().isVerified()) {
                    event.getChannel().send().kick(event.getBot().getUserChannelDao().getUser(cmdSplit[1]),
                            "YOO GAWT TROLLED " + cmdSplit[1]);
                } else {
                    event.getChannel().send().kick(event.getUser(),
                            "YOO GAWT TROLLED " + event.getUser().getNick());
                }
            }

            //Mildly Useful functions
            else if (cmdSplit[0].equalsIgnoreCase("g")) {
                String searchquery;
                searchquery = message.substring(message.indexOf(" ") + 1);
                String url = "http://lmgtfy.com/?q=" + URLEncoder.encode(searchquery, "UTF-8");
                event.respond(url);
            }

            else if (command.equalsIgnoreCase("russianroulette")) {
                if (shoot == 0) {
                    shoot = (int) (Math.random() * 6 + 1);
                    if (shoot == 1) {
                        event.getChannel().send().kick(event.getUser(), "BANG");
                        event.getBot().sendIRC().message(event.getChannel().getName(), "-Reloaded-");
                        shoot = 0;
                    } else {
                        event.getBot().sendIRC().message(event.getChannel().getName(), "-click-");
                    }
                } else {
                    shoot = shoot - 1;
                    if (shoot == 1) {
                        event.getChannel().send().kick(event.getUser(), "BANG");
                        event.getBot().sendIRC().message(event.getChannel().getName(), "-Reloaded-");
                        shoot = 0;
                    } else {
                        event.getBot().sendIRC().message(event.getChannel().getName(), "-click-");
                    }
                }
            }

            else if (command.equalsIgnoreCase("headon")) {
                event.getBot().sendIRC().message(event.getChannel().getName(), "APPLY DIRECTLY TO FOREHEAD");
                event.getBot().sendIRC().message(event.getChannel().getName(), "APPLY DIRECTLY TO FOREHEAD");
                event.getBot().sendIRC().message(event.getChannel().getName(), "APPLY DIRECTLY TO FOREHEAD");
            }

            //Functions Using REGEX
            else if (Pattern.matches("!hm[m]+", message.toLowerCase()))
                event.getBot().sendIRC().message(event.getChannel().getName(), event.getUser().getNick()
                        + ", good sir old bean good chap verily mm why certainly the old what for");//indeed good chap the old what for ah yes hm yes good sir old bean

            else if (Pattern.matches("!trol[ol]+", message.toLowerCase())
                    || Pattern.matches("!trolo[lo]+", message.toLowerCase()))
                event.getBot().sendIRC().message(event.getChannel().getName(), "http://youtu.be/v1PBptSDIh8");
            // REGEX for creating IRC quote links
            else if (Pattern.matches("![0-9]+", message))
                event.getBot().sendIRC().message(event.getChannel().getName(),
                        "http://quotes.dtella.net/?quote=" + message.split("!")[1]);

            else if (command.equalsIgnoreCase("passthepoop")) {
                if ("null".equals(poop)) {
                    poop = event.getUser().getNick();
                } else if (event.getUser().getNick().equals(poop)) {
                    event.getBot().sendIRC().message(event.getChannel().getName(),
                            "You can't pass the poop with yourself!");
                    poop = "null";
                } else {
                    event.getBot().sendIRC().message(event.getChannel().getName(), "Pass the poop!  " + poop
                            + " will poop into " + event.getUser().getNick() + "'s butthole, and then "
                            + event.getUser().getNick() + " will poop it back... into " + poop
                            + "'s butthole.  And then they'll just keep doing it back and forth... forever.");
                    poop = "null";
                }
            } else if (cmdSplit[0].equalsIgnoreCase("roll")
                    && Pattern.matches("[0-9]{1,2}?d[0-9]{1,3}?", cmdSplit[1])) {
                String[] rolls = message.split(" ")[1].split("d");
                String dice = "You rolled: ";
                int total = 0;
                int temp = (int) (Math.random() * Integer.parseInt(rolls[1]) + 1);
                total = temp + total;
                dice = dice + Integer.toString(temp);
                for (int i = 1; i <= Integer.parseInt(rolls[0]) - 1; i++) {
                    temp = (int) (Math.random() * Integer.parseInt(rolls[1]) + 1);
                    total = temp + total;
                    dice = dice + ", " + Integer.toString(temp);
                }
                event.getBot().sendIRC().message(event.getChannel().getName(),
                        dice + " for a total of " + Integer.toString(total));
            } else if (cmdSplit[0].equalsIgnoreCase("roll") && Pattern.matches("[0-9]+d[0-9]+", cmdSplit[1])) {
                event.getBot().sendIRC().message(event.getChannel().getName(), "NO");
            }

            else if (cmdSplit[0].equalsIgnoreCase("xzibit") && (cmdSplit.length == 3)) {
                event.getBot().sendIRC().message(event.getChannel().getName(),
                        "Yo dawg I heard you like " + cmdSplit[1] + " so I put an " + cmdSplit[1] + " in your "
                                + cmdSplit[2] + " so you can " + cmdSplit[1] + " while you " + cmdSplit[2]
                                + ".");
            } else if (command.equalsIgnoreCase("burn"))
                event.getBot().sendIRC().message(event.getChannel().getName(),
                        "http://quotes.dtella.net/?quote=1076");

            else if (command.equalsIgnoreCase("udon"))
                event.getBot().sendIRC().message(event.getChannel().getName(),
                        "http://quotes.dtella.net/?quote=1019");

            else if (command.equalsIgnoreCase("rimshot"))
                event.getBot().sendIRC().message(event.getChannel().getName(),
                        "http://www.instantrimshot.com/");

            else if (command.equalsIgnoreCase("clitoris"))
                event.getBot().sendIRC().message(event.getChannel().getName(),
                        "http://quotes.dtella.net/?quote=1050");

            else if (command.equalsIgnoreCase("vuvuzela"))
                event.getBot().sendIRC().message(event.getChannel().getName(),
                        "BZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");

            else if (cmdSplit[0].equalsIgnoreCase("bash") && cmdSplit.length == 2
                    && Pattern.matches("[0-9]+", cmdSplit[1]))
                event.getBot().sendIRC().message(event.getChannel().getName(),
                        "http://bash.org/?" + message.split(" ")[1]);

            else if (cmdSplit[0].equalsIgnoreCase("xkcdb") && cmdSplit.length == 2
                    && Pattern.matches("[0-9]+", cmdSplit[1]))
                event.getBot().sendIRC().message(event.getChannel().getName(),
                        "http://www.xkcdb.com/" + message.split(" ")[1]);

            else if (command.equalsIgnoreCase("dropthebass"))
                event.getBot().sendIRC().message(event.getChannel().getName(), "WUB WUB WUBWUBWUBWUB WUB WUB");
        }
    }
}

From source file:rapternet.irc.bots.wheatley.gamecommands.PurchaseTimeBomb.java

@Override
public void processCommand(MessageEvent event) {
    boolean isRandom = false;
    String victim = new String();

    ArrayList<String> bomb = getTimeBomb();

    CommandMetaData data = new CommandMetaData(event, false);

    String channel = data.getCommandChannel();
    String[] cmdSplit = data.getCommandSplit();
    String caller = data.getCaller();
    String respondTo = data.respondToCallerOrMessageChan();

    if (cmdSplit[0].equalsIgnoreCase("randombomb")) {
        isRandom = true;/*w ww  .j  a va2 s  .co  m*/
    }

    if (cmdSplit.length == 2 || isRandom) {
        if (!isRandom && event.getBot().getUserChannelDao().containsUser(cmdSplit[1])
                && event.getBot().getUserChannelDao()
                        .getChannels(event.getBot().getUserChannelDao().getUser(cmdSplit[1]))
                        .contains(event.getChannel())) {
            victim = cmdSplit[1];
        } else if (!isRandom) {
            event.getBot().sendIRC().notice(caller, "Timebomb: User does not exist in command channel");
            return;
        } else if (isRandom) {
            ImmutableSortedSet users = event.getBot().getUserChannelDao().getChannel(channel).getUsersNicks();

            Random random = new Random();
            int chosen = random.nextInt(users.size());
            int c = 0;
            System.out.println(chosen);
            Iterator<String> userIterator = users.iterator();

            while (userIterator.hasNext()) {
                String user = userIterator.next();
                if (c == chosen) {
                    victim = user;
                    System.out.println("VICTIM CHOSEN");
                }
                c++;
                System.out.println(user);
            }
        }
        event.getBot().sendIRC().action(respondTo, "stuffs a bomb down " + victim
                + "'s pants.  The timer is set for %s seconds!  " + "There are %s wires.  They are:");
        //event.getBot().getUserChannelDao().getUser(kill[1]).getNick()
    } else {
        event.getBot().sendIRC().notice(caller,
                "Timebomb: This command exactly one input of the form of a user nick, \"!timebomb [user]\" \"!randombomb [user]\"");
    }

    for (int i = 0; i < bomb.size(); i++) {
        event.getBot().sendIRC().message(channel, bomb.get(i));
    }
}

From source file:com.google.googlejavaformat.java.ImportOrderer.java

private String reorderedImportsString(ImmutableSortedSet<Import> imports) {
    Preconditions.checkArgument(!imports.isEmpty(), "imports");

    // Pretend that the first import was preceded by another import of the same kind, so we don't
    // insert a newline there.
    Import prevImport = imports.iterator().next();

    StringBuilder sb = new StringBuilder();
    for (Import currImport : imports) {
        if (shouldInsertBlankLineFn.apply(prevImport, currImport)) {
            // Blank line between static and non-static imports.
            sb.append(lineSeparator);/* w ww  .ja  v a  2  s  .  c om*/
        }
        sb.append(currImport);
        prevImport = currImport;
    }
    return sb.toString();
}

From source file:com.facebook.buck.apple.AppleBuildRules.java

public static ImmutableSet<TargetNode<?, ?>> getRecursiveTargetNodeDependenciesOfTypes(
        final TargetGraph targetGraph, final Optional<AppleDependenciesCache> cache,
        final RecursiveDependenciesMode mode, final TargetNode<?, ?> targetNode,
        final Optional<ImmutableSet<Class<? extends Description<?>>>> descriptionClasses) {
    LOG.verbose("Getting recursive dependencies of node %s, mode %s, including only types %s\n", targetNode,
            mode, descriptionClasses);/*w  ww. j a  v a 2  s. co m*/

    GraphTraversable<TargetNode<?, ?>> graphTraversable = node -> {
        if (!isXcodeTargetDescription(node.getDescription())
                || SwiftLibraryDescription.isSwiftTarget(node.getBuildTarget())) {
            return Collections.emptyIterator();
        }

        LOG.verbose("Finding children of node: %s", node);

        ImmutableSortedSet<TargetNode<?, ?>> defaultDeps;
        ImmutableSortedSet<TargetNode<?, ?>> exportedDeps;
        if (!cache.isPresent()) {
            ImmutableSortedSet.Builder<TargetNode<?, ?>> defaultDepsBuilder = ImmutableSortedSet.naturalOrder();
            ImmutableSortedSet.Builder<TargetNode<?, ?>> exportedDepsBuilder = ImmutableSortedSet
                    .naturalOrder();
            addDirectAndExportedDeps(targetGraph, node, defaultDepsBuilder, exportedDepsBuilder);
            defaultDeps = defaultDepsBuilder.build();
            exportedDeps = exportedDepsBuilder.build();
        } else {
            defaultDeps = cache.get().getDefaultDeps(node);
            exportedDeps = cache.get().getExportedDeps(node);
        }

        if (node.getDescription() instanceof AppleBundleDescription) {
            AppleBundleDescription.Arg arg = (AppleBundleDescription.Arg) node.getConstructorArg();

            ImmutableSortedSet.Builder<TargetNode<?, ?>> editedDeps = ImmutableSortedSet.naturalOrder();
            ImmutableSortedSet.Builder<TargetNode<?, ?>> editedExportedDeps = ImmutableSortedSet.naturalOrder();
            for (TargetNode<?, ?> rule : defaultDeps) {
                if (!rule.getBuildTarget().equals(arg.binary)) {
                    editedDeps.add(rule);
                } else {
                    addDirectAndExportedDeps(targetGraph, targetGraph.get(arg.binary), editedDeps,
                            editedExportedDeps);
                }
            }

            ImmutableSortedSet<TargetNode<?, ?>> newDefaultDeps = editedDeps.build();
            ImmutableSortedSet<TargetNode<?, ?>> newExportedDeps = editedExportedDeps.build();
            LOG.verbose("Transformed deps for bundle %s: %s -> %s, exported deps %s -> %s", node, defaultDeps,
                    newDefaultDeps, exportedDeps, newExportedDeps);
            defaultDeps = newDefaultDeps;
            exportedDeps = newExportedDeps;
        }

        LOG.verbose("Default deps for node %s mode %s: %s", node, mode, defaultDeps);
        if (!exportedDeps.isEmpty()) {
            LOG.verbose("Exported deps for node %s mode %s: %s", node, mode, exportedDeps);
        }

        ImmutableSortedSet<TargetNode<?, ?>> deps = ImmutableSortedSet.of();

        if (node != targetNode) {
            switch (mode) {
            case LINKING:
                boolean nodeIsAppleLibrary = node.getDescription() instanceof AppleLibraryDescription;
                boolean nodeIsCxxLibrary = node.getDescription() instanceof CxxLibraryDescription;
                if (nodeIsAppleLibrary || nodeIsCxxLibrary) {
                    if (AppleLibraryDescription.isSharedLibraryTarget(node.getBuildTarget())) {
                        deps = exportedDeps;
                    } else {
                        deps = defaultDeps;
                    }
                } else if (RECURSIVE_DEPENDENCIES_STOP_AT_DESCRIPTION_CLASSES
                        .contains(node.getDescription().getClass())) {
                    deps = exportedDeps;
                } else {
                    deps = defaultDeps;
                }
                break;
            case COPYING:
                if (RECURSIVE_DEPENDENCIES_STOP_AT_DESCRIPTION_CLASSES
                        .contains(node.getDescription().getClass())) {
                    deps = exportedDeps;
                } else {
                    deps = defaultDeps;
                }
                break;
            case BUILDING:
                deps = defaultDeps;
                break;
            }
        } else {
            deps = defaultDeps;
        }

        LOG.verbose("Walking children of node %s: %s", node, deps);
        return deps.iterator();
    };

    final ImmutableSet.Builder<TargetNode<?, ?>> filteredRules = ImmutableSet.builder();
    AcyclicDepthFirstPostOrderTraversal<TargetNode<?, ?>> traversal = new AcyclicDepthFirstPostOrderTraversal<>(
            graphTraversable);
    try {
        for (TargetNode<?, ?> node : traversal.traverse(ImmutableList.of(targetNode))) {
            if (node != targetNode && (!descriptionClasses.isPresent()
                    || descriptionClasses.get().contains(node.getDescription().getClass()))) {
                filteredRules.add(node);
            }
        }
    } catch (AcyclicDepthFirstPostOrderTraversal.CycleException e) {
        // actual load failures and cycle exceptions should have been caught at an earlier stage
        throw new RuntimeException(e);
    }
    ImmutableSet<TargetNode<?, ?>> result = filteredRules.build();
    LOG.verbose("Got recursive dependencies of node %s mode %s types %s: %s\n", targetNode, mode,
            descriptionClasses, result);

    return result;
}